diff options
Diffstat (limited to 'release/scripts/import_dxf.py')
-rw-r--r-- | release/scripts/import_dxf.py | 107 |
1 files changed, 64 insertions, 43 deletions
diff --git a/release/scripts/import_dxf.py b/release/scripts/import_dxf.py index bb0119a9a81..6a1981bb262 100644 --- a/release/scripts/import_dxf.py +++ b/release/scripts/import_dxf.py @@ -7,7 +7,7 @@ Group: 'Import' Tooltip: 'Import for DXF geometry data (Drawing eXchange Format).' """ __author__ = 'Kitsu(Ed Blake) & migius(Remigiusz Fiedler)' -__version__ = '1.12 - 2008.08.03 by migius' +__version__ = '1.12 - 2008.11.16 by migius' __url__ = ["http://blenderartists.org/forum/showthread.php?t=84319", "http://wiki.blender.org/index.php/Scripts/Manual/Import/DXF-3D"] __email__ = ["migius(at)4d-vectors.de","Kitsune_e(at)yahoo.com"] @@ -111,6 +111,9 @@ History: -- support ortho mode for VIEWs and VPORTs as cameras + v1.12 - 2008.11.16 by migius + d1 remove try_finally: cause not supported in python <2.5 + d1 add Bezier curves bevel radius support (default 1.0) v1.12 - 2008.08.03 by migius c2 warningfix: relocating of globals: layersmap, oblist c2 modif UI: buttons newScene+targetLayer moved to start panel @@ -299,7 +302,7 @@ History: import Blender from Blender import * #from Blender.Mathutils import Vector, Matrix -import bpy +#import bpy #not used yet #import BPyMessages from dxfReader import readDXF @@ -311,7 +314,7 @@ from math import * try: import os - if os.name:# != 'mac': + if os.name != 'mac': import psyco psyco.log(Blender.Get('tempdir')+"/blender.log-psyco") #psyco.log() @@ -320,7 +323,7 @@ try: psyco.profile(0.2) #print 'psyco imported' except ImportError: - #print 'psyco not imported' + print 'psyco not imported' pass #try: Curve.orderU @@ -346,7 +349,7 @@ THIN_RESOLUTION = 8 #(4-64) thin_cylinder arc_resolution - number of segments MIN_THICK = MIN_DIST * 10.0 #minimal thickness by forced thickness MIN_WIDTH = MIN_DIST * 10.0 #minimal width by forced width TRIM_LIMIT = 3.0 #limit for triming of polylines-wide-segments (values:0.0 - 5.0) -ELEVATION = 0.0 #standard elevation = coordinate Z +ELEVATION = 0.0 #standard elevation = coordinate Z value BYBLOCK = 0 BYLAYER = 256 @@ -817,6 +820,7 @@ class Line: #----------------------------------------------------------------- curve.append(BezTriple.New(points[1])) for point in curve: point.handleTypes = [VECT, VECT] + point.radius = 1.0 curve.flagU = 0 # 0 sets the curve not cyclic=open c.setResolu(settings.var['curve_res']) c.update() #important for handles calculation @@ -1341,9 +1345,11 @@ class Polyline: #-------------------------------------------------------------- nurbs_points.append(pkt) firstpoint = nurbs_points[0] curve = pline.appendNurb(firstpoint) - curve.setType(4) # set curvetype NURBS + curve.setType(4) # set curve_type NURBS + print 'deb: dir(curve):', dir(curve[-1]) #---------------- for point in nurbs_points[1:]: curve.append(point) + #TODO: what is the trick for bevel radius? curve[-1].radius = 1.0 if self.closed: curve.flagU = 1+0 # Set curve cyclic=close and uni else: @@ -1359,6 +1365,7 @@ class Polyline: #-------------------------------------------------------------- curve.append(BezTriple.New(p)) for point in curve: point.handleTypes = [AUTO, AUTO] + point.radius = 1.0 if self.closed: curve.flagU = 1 # Set curve cyclic=close else: @@ -1380,6 +1387,7 @@ class Polyline: #-------------------------------------------------------------- curve.append(BezTriple.New(p)) for point in curve: point.handleTypes = [AUTO, AUTO] + point.radius = 1.0 #curve.setType(1) #Bezier curve if self.closed: curve.flagU = 5 #1 # Set curve cyclic=close @@ -1392,6 +1400,7 @@ class Polyline: #-------------------------------------------------------------- p0h1 = [p0h1[i]+begtangent[i] for i in range(3)] curve.__setitem__(0,BezTriple.New(p0h1+p0+p0h2)) curve[0].handleTypes = [FREE, ALIGN] #remi--todo----- + curve[0].radius = 1.0 if endtangent: #print 'deb:polyline2dCurve.draw curve[-1].vec:', curve[-1].vec #----- #print 'deb:polyline2dCurve.draw endtangent:', endtangent #----- @@ -1401,6 +1410,7 @@ class Polyline: #-------------------------------------------------------------- curve.__setitem__(-1,BezTriple.New(p0h1+p0+p0h2)) #print 'deb:polyline2dCurve.draw curve[-1].vec:', curve[-1].vec #----- curve[-1].handleTypes = [ALIGN, FREE] #remi--todo----- + curve[-1].radius = 1.0 @@ -1420,13 +1430,16 @@ class Polyline: #-------------------------------------------------------------- if i == 0: curve = pline.appendNurb(BezTriple.New(verts[0])) else: curve.append(BezTriple.New(verts[0])) curve[-1].handleTypes = [VECT, VECT] #--todo--calculation of bezier-tangents + curve[-1].radius = 1.0 for p in verts[1:]: curve.append(BezTriple.New(p)) curve[-1].handleTypes = [AUTO, AUTO] + curve[-1].radius = 1.0 else: if i == 0: curve = pline.appendNurb(BezTriple.New(point1.loc)) else: curve.append(BezTriple.New(point1.loc)) curve[-1].handleTypes = [VECT, VECT] #--todo--calculation of bezier-tangents + curve[-1].radius = 1.0 elif True: #----- optimised Bezier-Handles calculation -------------------------------- #print 'deb:drawPlineCurve: i:', i #--------- @@ -1446,10 +1459,12 @@ class Polyline: #-------------------------------------------------------------- if i == 0: curve = pline.appendNurb(BezTriple.New(VectorTriples[0])) else: curve.append(BezTriple.New(VectorTriples[0])) curve[-1].handleTypes = [prevHandleType, FREE] + curve[-1].radius = 1.0 for p in VectorTriples[1:-1]: curve.append(BezTriple.New(p)) curve[-1].handleTypes = [FREE, FREE] + curve[-1].radius = 1.0 prevHandleVect = VectorTriples[-1][:3] prevHandleType = FREE @@ -1462,11 +1477,13 @@ class Polyline: #-------------------------------------------------------------- curve.append(BezTriple.New(VectorTriples)) curve[-1].handleTypes = [FREE, VECT] prevHandleType = VECT + curve[-1].radius = 1.0 else: if i == 0: curve = pline.appendNurb(BezTriple.New(point1.loc)) else: curve.append(BezTriple.New(point1.loc)) curve[-1].handleTypes = [VECT, VECT] - + curve[-1].radius = 1.0 + #print 'deb:drawPlineCurve: curve[-1].vec[0]', curve[-1].vec[0] #---------- @@ -1486,10 +1503,12 @@ class Polyline: #-------------------------------------------------------------- curve.__setitem__(0,BezTriple.New(p0h1+p0+p0h2)) curve[0].handleTypes = [FREE,prevHandleType2] + curve[0].radius = 1.0 #print 'deb:drawPlineCurve:closed curve[0].vec:', curve[0].vec #---------- #print 'deb:drawPlineCurve:closed curve[0].handleTypes:', curve[0].handleTypes #---------- else: curve[0].handleTypes[0] = VECT + curve[0].radius = 1.0 else: curve.flagU = 0 # Set curve not cyclic=open @@ -2177,9 +2196,10 @@ DXF: X value; APP: 3D point, Y and Z values of control points (in WCS) (one entr self.ctrlpk_len = getit(obj, 73, 0) # Number of control points self.fit_pk_len = getit(obj, 74, 0) # Number of fit points (if any) + #TODO: import SPLINE as Bezier curve directly, possible? #print 'deb:Spline self.fit_pk_len=', self.fit_pk_len #------------------------ #self.fit_pk_len = 0 # temp for debug - if self.fit_pk_len and 'spline_as'==5: + if self.fit_pk_len and settings.var['splines_as']==5: self.spline = False self.curved = True else: @@ -2675,6 +2695,7 @@ class Circle: #---------------------------------------------------------------- curve.append(BezTriple.New(p)) for point in curve: point.handleTypes = [FREE, FREE] + point.radius = 1.0 else: # standard version c = Curve.New(obname) # create new curve data p1 = (0, -radius, 0) @@ -2693,6 +2714,7 @@ class Circle: #---------------------------------------------------------------- curve.append(p4) for point in curve: point.handleTypes = [AUTO, AUTO] + point.radius = 1.0 curve.flagU = 1 # 1 sets the curve cyclic=closed if settings.var['fill_on']: @@ -2893,6 +2915,7 @@ class Arc: #----------------------------------------------------------------- curve.append(BezTriple.New(p)) for point in curve: point.handleTypes = [FREE, FREE] + point.radius = 1.0 curve.flagU = 0 # 0 sets the curve not cyclic=open arc.setResolu(settings.var['curve_res']) @@ -3449,6 +3472,7 @@ class Ellipse: #--------------------------------------------------------------- curve.append(BezTriple.New(p)) for point in curve: point.handleTypes = [FREE, FREE] + point.radius = 1.0 curve.flagU = 1 # 0 sets the curve not cyclic=open if settings.var['fill_on']: arc.setFlag(6) # 2+4 set top and button caps @@ -3459,6 +3483,7 @@ class Ellipse: #--------------------------------------------------------------- curve.append(BezTriple.New(p)) for point in curve: point.handleTypes = [FREE, FREE] + point.radius = 1.0 curve.flagU = 0 # 0 sets the curve not cyclic=open arc.setResolu(settings.var['curve_res']) @@ -4397,8 +4422,7 @@ def analyzeDXF(dxfFile): #--------------------------------------- Draw.PupMenu('DXF importer: report saved in INF-file:%t|' + '\'%s\'' %infFile) except: Draw.PupMenu('DXF importer: ERROR by writing report in INF-file:%t|' + '\'%s\'' %infFile) - finally: - f.close() + #finally: f.close() @@ -4417,7 +4441,8 @@ def main(dxfFile): #---------------#############################----------- global cur_COUNTER #counter for progress_bar cur_COUNTER = 0 - try: + #try: + if 1: #print "Getting settings..." global GUI_A, GUI_B, g_scale_as if not GUI_A['g_scale_on'].val: @@ -4500,7 +4525,7 @@ def main(dxfFile): #---------------#############################----------- #settings.write(message) if UI_MODE: Draw.PupMenu('DXF importer: Done!|finished in %.4f sec.' % time_text) - finally: + #finally: # restore state even if things didn't work #print 'deb:drawEntities finally!' #----------------------- Window.WaitCursor(False) @@ -5190,6 +5215,7 @@ def drawCurveCircle(circle): #--- no more used -------------------------------- curve.append(p4) for point in curve: point.handleTypes = [AUTO, AUTO] + point.radius = 1.0 curve.flagU = 1 # Set curve cyclic c.update() @@ -5231,6 +5257,7 @@ def drawCurveArc(self): #---- only for ELLIPSE -------------------------------- curve.append(p4) for point in curve: point.handleTypes = [AUTO, AUTO] + point.radius = 1.0 curve.flagU = 1 # Set curve cyclic a.update() @@ -5270,12 +5297,12 @@ GUI_B = {} # GUI-buttons dictionary for drawingTypes # settings default, initialize ------------------------ points_as_menu = "convert to: %t|empty %x1|mesh.vertex %x2|thin sphere %x3|thin box %x4|*curve.vertex %x5" -lines_as_menu = "convert to: %t|*edge %x1|mesh %x2|*thin cylinder %x3|thin box %x4|Bezier-curve %x5|NURBS-curve %x6" +lines_as_menu = "convert to: %t|*edge %x1|mesh %x2|*thin cylinder %x3|thin box %x4|Bezier-curve %x5|*NURBS-curve %x6" mlines_as_menu = "convert to: %t|*edge %x1|*mesh %x2|*thin cylinder %x3|*thin box %x|*curve %x5" plines_as_menu = "convert to: %t|*edge %x1|mesh %x2|*thin cylinder %x3|*thin box %x4|Bezier-curve %x5|NURBS-curve %x6" -splines_as_menu = "convert to: %t|mesh %x2|*thin cylinder %x3|*thin box %x4|Bezier-curve %x5|NURBS-curve %x6" +splines_as_menu = "convert to: %t|mesh %x2|*thin cylinder %x3|*thin box %x4|*Bezier-curve %x5|NURBS-curve %x6" plines3_as_menu = "convert to: %t|*edge %x1|mesh %x2|*thin cylinder %x3|*thin box %x4|Bezier-curve %x5|NURBS-curve %x6" -plmesh_as_menu = "convert to: %t|*edge %x1|mesh %x2|NURBS-surface %x6" +plmesh_as_menu = "convert to: %t|*edge %x1|mesh %x2|*NURBS-surface %x6" solids_as_menu = "convert to: %t|*edge %x1|mesh %x2" blocks_as_menu = "convert to: %t|dupliGroup %x1|*real.Group %x2|*exploded %x3" texts_as_menu = "convert to: %t|text %x1|*mesh %x2|*curve %x5" @@ -5456,11 +5483,9 @@ def saveConfig(): #--todo----------------------------------------------- else: #if BPyMessages.Warning_SaveOver(iniFile): #<- remi find it too abstarct if sys.exists(iniFile): - try: - f = file(iniFile, 'r') - try: header_str = f.readline() - finally: f.close() - except: pass + f = file(iniFile, 'r') + header_str = f.readline() + f.close() if header_str.startswith(INIFILE_HEADER[0:13]): if Draw.PupMenu(' OK ? %t|SAVE OVER: ' + '\'%s\'' %iniFile) == 1: save_ok = True @@ -5480,10 +5505,9 @@ def saveConfig(): #--todo----------------------------------------------- output_str = '{\n'.join(output_str.split('{')) try: f = file(iniFile, 'w') - try: - f.write(INIFILE_HEADER + '\n# this is a comment line\n') - f.write(output_str) - finally: f.close() + f.write(INIFILE_HEADER + '\n# this is a comment line\n') + f.write(output_str) + f.close() #Draw.PupMenu('DXF importer: INI-file: Done!%t|config-data saved in ' + '\'%s\'' %iniFile) except: Draw.PupMenu('DXF importer: INI-file: Error!%t|failure by writing to ' + '\'%s\'|no config-data saved!' %iniFile) @@ -5508,25 +5532,22 @@ def loadConfig(): #remi--todo----------------------------------------------- update_RegistryKey('iniFileName', iniFile) #print 'deb:loadConfig iniFile: ', iniFile #---------------------- if iniFile.lower().endswith(INIFILE_EXTENSION) and sys.exists(iniFile): - try: - f = file(iniFile, 'r') - try: - header_str = f.readline() - if header_str.startswith(INIFILE_HEADER): - data_str = f.read() - f.close() - #print 'deb:loadConfig data_str from %s: \n' %iniFile , data_str #----------------- - data = eval(data_str) - for k, v in data[0].iteritems(): - try: GUI_A[k].val = v - except: GUI_A[k] = Draw.Create(v) - for k, v in data[1].iteritems(): - try: GUI_B[k].val = v - except: GUI_B[k] = Draw.Create(v) - else: - Draw.PupMenu('DXF importer: INI-file: Alert!%t|no valid header in INI-file: ' + '\'%s\'' %iniFile) - finally: f.close() - except: pass + f = file(iniFile, 'r') + header_str = f.readline() + if header_str.startswith(INIFILE_HEADER): + data_str = f.read() + f.close() + #print 'deb:loadConfig data_str from %s: \n' %iniFile , data_str #----------------- + data = eval(data_str) + for k, v in data[0].iteritems(): + try: GUI_A[k].val = v + except: GUI_A[k] = Draw.Create(v) + for k, v in data[1].iteritems(): + try: GUI_B[k].val = v + except: GUI_B[k] = Draw.Create(v) + else: + f.close() + Draw.PupMenu('DXF importer: INI-file: Alert!%t|no valid header in INI-file: ' + '\'%s\'' %iniFile) else: Draw.PupMenu('DXF importer: INI-file: Alert!%t|no valid INI-file selected!') print "DXF importer: Alert!: no valid INI-file selected." |