AnimAll: update translation
[blender-addons.git] / io_export_dxf / model / migiusModel.py
blobbb2ffc68700850e19c376c27524c89ee21ae8d3c
1 # SPDX-FileCopyrightText: 2012-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 """
6 Created on Sep 2, 2011
8 @author: vencax
9 """
11 from .model import DxfDrawing
13 try:
14 from . import dxfLibrary as DXF
15 #reload(DXF)
16 #reload(dxfLibrary)
17 #from dxfLibrary import *
18 except Exception:
19 raise Exception("No dxfLibrary.py module in Blender script folder found!")
21 #------------------------------------------------------
22 #def col2RGB(color):
23 # return [int(floor(255*color[0])),
24 # int(floor(255*color[1])),
25 # int(floor(255*color[2]))]
27 #global dxfColors
28 #dxfColors=None
30 ##------------------------------------------------------
31 #def col2DXF(rgbcolor):
32 # global dxfColors
33 # if dxfColors is None:
34 # from dxfColorMap import color_map
35 # dxfColors = [(tuple(color),idx) for idx, color in color_map.items()]
36 # dxfColors.sort()
37 # entry = (tuple(rgbcolor), -1)
38 # dxfColors.append(entry)
39 # dxfColors.sort()
40 # i = dxfColors.index(entry)
41 # dxfColors.pop(i)
42 # return dxfColors[i-1][1]
44 """
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])
54 del v, i
55 """
56 #TODO: validDXFr14 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.'
57 validDXFr12 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
58 NAMELENGTH_MAX = 80 #max_obnamelength in DXF, (limited to 256? )
59 #------------------------------------------------------
60 def cleanName(name, valid):
61 validname = ''
62 for ch in name:
63 if ch not in valid: ch = '_'
64 validname += ch
65 return validname
67 #------------------------------------------------------
68 def validDXFr12name(str_name):
69 dxfname = str(str_name)
70 dxfname = dxfname[:NAMELENGTH_MAX].upper()
71 dxfname = cleanName(dxfname, validDXFr12)
72 return dxfname
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)
81 for v in self._views:
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:
86 drawing.saveas(file)
88 def _write(self):
89 # init Drawing ---------------------
90 d=DXF.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
111 return d
113 def _processEntityArray(self, drawing, type, ents):
114 if type=='Point':
115 for e in ents:
116 drawing.append(DXF.Point(**e))
117 elif type=='Line':
118 for e in ents:
119 drawing.append(DXF.Line(**e))
120 elif type=='PolyLine':
121 for e in ents:
122 drawing.append(DXF.PolyLine(**e))
123 elif type=='Face':
124 for e in ents:
125 drawing.append(DXF.Face(**e))