Welcome to mirror list, hosted at ThFree Co, Russian Federation.

text_exporter.py « primitive_exporters « io_export_dxf - git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 52d19725558bf5ae6d44407ff5634a010539a638 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from .base_exporter import BasePrimitiveDXFExporter


class TextDXFExporter(BasePrimitiveDXFExporter):
    pass

#-----------------------------------------------------
def exportText(ob, mx, mw, **common):
    """converts Text-Object to desired projection and representation(DXF-Entity type)
    """
    text3d = ob.getData()
    textstr = text3d.getText()
    WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem
    sizeX = ob.SizeX
    sizeY = ob.SizeY
    sizeZ = ob.SizeZ
    rotX  = ob.RotX
    rotY  = ob.RotY
    rotZ  = ob.RotZ
    #print 'deb: sizeX=%s, sizeY=%s' %(sizeX, sizeY) #---------

    Thickness,Extrusion,ZRotation,Elevation = None,None,None,None

    AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector
    if not PROJECTION:
        #Extrusion, ZRotation, Elevation = getExtrusion(mx)
        Extrusion, AXaxis = getExtrusion(mx)

        # no thickness/width for TEXTs converted into ScreenCS
        if text3d.getExtrudeDepth():
            Thickness = text3d.getExtrudeDepth() * sizeZ

    #Horizontal text justification type, code 72, (optional, default = 0)
    # integer codes (not bit-coded)
    #0=left, 1=center, 2=right
    #3=aligned, 4=middle, 5=fit
    Alignment = None
    alignment = text3d.getAlignment().value
    if alignment in {1, 2}: Alignment = alignment

    textHeight = text3d.getSize() / 1.7
    textFlag = 0
    if sizeX < 0.0: textFlag |= 2 # set flag for horizontal mirrored
    if sizeZ < 0.0: textFlag |= 4 # vertical mirrored

    entities = []
    c = text_as_list[GUI_A['text_as'].val]

    if c=="TEXT": # export text as TEXT
        if not PROJECTION:
            ZRotation,Zrotmatrix,OCS_origin,ECS_origin = getTargetOrientation(mx,Extrusion,\
                AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ)
            ZRotation *= r2d
            point = ECS_origin
        else:    #TODO: fails correct location
            point1 = mathutils.Vector(ob.loc)
            [point] = projected_co([point1], mx)
            if PERSPECTIVE:
                clipStart = 10.0
                coef = -clipStart / (point1*mx)[2]
                textHeight *= coef
                #print 'deb: coef=', coef #--------------

        #print 'deb: point=', point #--------------
        [point] = toGlobalOrigin([point])
        point2 = point

        #if DEBUG: text_drawBlender(textstr,points,OCS_origin) #deb: draw to scene
        common['extrusion']= Extrusion
        #common['elevation']= Elevation
        common['thickness']= Thickness
        #print 'deb: common=', common #------------------
        if 0: #DEBUG
            #linepoints = [[0,0,0], [AXaxis[0],AXaxis[1],AXaxis[2]]]
            linepoints = [[0,0,0], point]
            dxfLINE = DXF.Line(linepoints,**common)
            entities.append(dxfLINE)

        dxfTEXT = DXF.Text(text=textstr,point=point,alignment=point2,rotation=ZRotation,\
            flag=textFlag,height=textHeight,justifyhor=Alignment,**common)
        entities.append(dxfTEXT)
        if Thickness:
            common['thickness']= -Thickness
            dxfTEXT = DXF.Text(text=textstr,point=point,alignment=point2,rotation=ZRotation,\
                flag=textFlag,height=textHeight,justifyhor=Alignment,**common)
            entities.append(dxfTEXT)
    return entities