1 # SPDX-FileCopyrightText: 2012-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
11 from .model
import DxfDrawing
14 from . import dxfLibrary
as DXF
17 #from dxfLibrary import *
19 raise Exception("No dxfLibrary.py module in Blender script folder found!")
21 #------------------------------------------------------
23 # return [int(floor(255*color[0])),
24 # int(floor(255*color[1])),
25 # int(floor(255*color[2]))]
30 ##------------------------------------------------------
31 #def col2DXF(rgbcolor):
33 # if dxfColors is None:
34 # from dxfColorMap import color_map
35 # dxfColors = [(tuple(color),idx) for idx, color in color_map.items()]
37 # entry = (tuple(rgbcolor), -1)
38 # dxfColors.append(entry)
40 # i = dxfColors.index(entry)
42 # return dxfColors[i-1][1]
45 v = [0,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,\
46 28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,58,59,60,61,62,63,64,91,92,93,94,96,\
47 123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,\
48 151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,\
49 171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,\
50 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,\
51 211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,\
52 231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254]
53 invalid = ''.join([chr(i) for i in v])
56 #TODO: validDXFr14 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.'
57 validDXFr12
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
58 NAMELENGTH_MAX
= 80 #max_obnamelength in DXF, (limited to 256? )
59 #------------------------------------------------------
60 def cleanName(name
, valid
):
63 if ch
not in valid
: ch
= '_'
67 #------------------------------------------------------
68 def validDXFr12name(str_name
):
69 dxfname
= str(str_name
)
70 dxfname
= dxfname
[:NAMELENGTH_MAX
].upper()
71 dxfname
= cleanName(dxfname
, validDXFr12
)
74 class MigiusDXFLibDrawing(DxfDrawing
):
75 """ Drawing that can convert itself into MIGIUS DXFLib stuff objects """
77 def convert(self
, file, **kwargs
):
78 drawing
= self
._write
()
79 for type, ents
in self
._entities
.items():
80 self
._processEntityArray
(drawing
, type, ents
)
82 drawing
.views
.append(DXF
.View(**v
))
83 for v
in self
._vports
:
84 drawing
.vports
.append(DXF
.VPort(**v
))
85 # for l in self._layers:
89 # init Drawing ---------------------
91 # add Tables -----------------
92 # initialized automatic: d.blocks.append(b) #section BLOCKS
93 # initialized automatic: d.styles.append(DXF.Style()) #table STYLE
95 #table LTYPE ---------------
96 #d.linetypes.append(DXF.LineType(name='CONTINUOUS',description='--------',elements=[0.0]))
97 d
.linetypes
.append(DXF
.LineType(name
='DOT',description
='. . . . . . .',elements
=[0.25, 0.0, -0.25]))
98 d
.linetypes
.append(DXF
.LineType(name
='DASHED',description
='__ __ __ __ __',elements
=[0.8, 0.5, -0.3]))
99 d
.linetypes
.append(DXF
.LineType(name
='DASHDOT',description
='__ . __ . __ .',elements
=[1.0, 0.5, -0.25, 0.0, -0.25]))
100 d
.linetypes
.append(DXF
.LineType(name
='DIVIDE',description
='____ . . ____ . . ',elements
=[1.25, 0.5, -0.25, 0.0, -0.25, 0.0, -0.25]))
101 d
.linetypes
.append(DXF
.LineType(name
='BORDER',description
='__ __ . __ __ . ',elements
=[1.75, 0.5, -0.25, 0.5, -0.25, 0.0, -0.25]))
102 d
.linetypes
.append(DXF
.LineType(name
='HIDDEN',description
='__ __ __ __ __',elements
=[0.4, 0.25, -0.25]))
103 d
.linetypes
.append(DXF
.LineType(name
='CENTER',description
='____ _ ____ _ __',elements
=[2.0, 1.25, -0.25, 0.25, -0.25]))
105 #d.vports.append(DXF.VPort('*ACTIVE'))
106 d
.vports
.append(DXF
.VPort('*ACTIVE',center
=(-5.0,1.0),height
=10.0))
107 #d.vports.append(DXF.VPort('*ACTIVE',leftBottom=(-100.0,-60.0),rightTop=(100.0,60.0)))
108 #d.views.append(DXF.View('Normal')) #table view
109 d
.views
.append(DXF
.ViewByWindow('BF_TOPVIEW',leftBottom
=(-100,-60),rightTop
=(100,60))) #idem
113 def _processEntityArray(self
, drawing
, type, ents
):
116 drawing
.append(DXF
.Point(**e
))
119 drawing
.append(DXF
.Line(**e
))
120 elif type=='PolyLine':
122 drawing
.append(DXF
.PolyLine(**e
))
125 drawing
.append(DXF
.Face(**e
))