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
|