bugfix and updates for DXF-Importer/Exporter scripts
[blender.git] / release / scripts / import_dxf.py
index 6cc80a0dfed3725979d4ed5203dda3e0f6999019..36a1a048075f53394fe95eb7b11a7fc18ff24c4d 100644 (file)
@@ -44,8 +44,8 @@ Supported DXF>r12 objects:
 ELLIPSE,
 LWPOLYLINE (LightWeight Polyline),
 SPLINE,
-(wip v1.13) MLINE,
-(wip v1.13) MTEXT
+(todo v1.13) MLINE,
+(todo v1.13) MTEXT
 
 Unsupported objects:
 DXF r12: DIMENSION.
@@ -74,7 +74,7 @@ thickness,
 width,
 color,
 layer,
-(wip v1.13: XDATA, grouped status)
+(todo v1.13: XDATA, grouped status)
 It is recommended to use DXF-object properties for assign Blender materials.
 
 Notes:
@@ -113,7 +113,6 @@ History:
 
  v1.12 - 2009.05.27 by migius
  d6 todo: bugfix negative scaled INSERTs - isLeftHand(Matrix) check
-
  v1.12 - 2009.05.26 by migius
  d5 changed to the new 2.49 method Vector.cross()
  d5 bugfix WORLDY(1,1,0) to (0,1,0)
@@ -378,7 +377,7 @@ GROUP_BYLAYER = 0   #(0/1) all entities from same layer import into one blender-
 LAYER_DEF_NAME = 'AAAA' #default layer name
 LAYER_DEF_COLOR = 4 #default layer color
 E_M = 0
-LAB = "*) parts under construction"
+LAB = ". wip   .. todo" #"*) parts under construction"
 M_OBJ = 0
 
 FILENAME_MAX = 180     #max length of path+file_name string  (FILE_MAXDIR + FILE_MAXFILE)
@@ -395,14 +394,19 @@ ALIGN = BezTriple.HandleTypes.ALIGN
 
 UI_MODE = True #activates UI-popup-print, if not multiple files imported
 
-#TODO:---patch for pre2.49-------------
-if 0:
-       print Blender.Get('version')
-       #def Mathutil_CrossVecs(v1,v2):
-       az = Mathutils.Vector((0,0.5,0.4))
-       print dir(az)
-       ax = WORLDZ.cross(az)
-       print ax
+#---- migration to 2.49-------------------------------------------------
+if 'cross' in dir(Mathutils.Vector()):
+       #Draw.PupMenu('DXF exporter: Abort%t|This script version works for Blender up 2.49 only!')
+       def     M_CrossVecs(v1,v2):
+               return v1.cross(v2) #for up2.49
+       def M_DotVecs(v1,v2):
+               return v1.dot(v2) #for up2.49
+else:
+       def     M_CrossVecs(v1,v2):
+               return Mathutils.CrossVecs(v1,v2) #for pre2.49
+       def M_DotVecs(v1,v2):
+               return Mathutils.DotVecs(v1,v2) #for pre2.49
+       
        
 #-------- DWG support ------------------------------------------
 extCONV_OK = True
@@ -2248,7 +2252,6 @@ class LWpolyline(Polyline):  #--------------------------------------------------
                self.spline = False
                self.curved = False
 
-
                #print 'deb:LWpolyline.obj.data:\n', obj.data #------------------------
                #print 'deb:LWpolyline.ENDinit:----------------' #------------------------
 
@@ -4430,14 +4433,11 @@ def getOCS(az):  #--------------------------------------------------------------
 
        cap = 0.015625 # square polar cap value (1/64.0)
        if abs(az.x) < cap and abs(az.y) < cap:
-               #ax = Mathutils.CrossVecs(WORLDY, az) #for<2.49
-               ax = WORLDY.cross(az)
+               ax = M_CrossVecs(WORLDY,az)
        else:
-               #ax = Mathutils.CrossVecs(WORLDZ, az) #for<2.49
-               ax = WORLDZ.cross(az)
+               ax = M_CrossVecs(WORLDZ,az)
        ax = ax.normalize()
-       #ay = Mathutils.CrossVecs(az, ax) #for<2.49
-       ay = az.cross(ax)
+       ay = M_CrossVecs(az, ax)
        ay = ay.normalize()
        return ax, ay, az
 
@@ -5180,17 +5180,17 @@ 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"
-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"
-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"
-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"
-material_from_menu= "material from: %t|*LINESTYLE %x7|COLOR %x1|LAYER %x2|*LAYER+COLOR %x3|*BLOCK %x4|*XDATA %x5|*INI-File %x6"
+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"
+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"
+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"
+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"
+material_from_menu= "material from: %t|..LINESTYLE %x7|COLOR %x1|LAYER %x2|..LAYER+COLOR %x3|..BLOCK %x4|..XDATA %x5|..INI-File %x6"
 g_scale_list   = ''.join((
        'scale factor: %t',
        '|user def. %x12',
@@ -5676,7 +5676,7 @@ def draw_UI():  #---------------------------------------------------------------
 
                y -= 20
                Draw.BeginAlign()
-               GUI_B['mline'] = Draw.Toggle('*MLINE', EVENT_REDRAW, b0, y, b0_, 20, GUI_B['mline'].val, "(*wip)support dxf-MLINE on/off")
+               GUI_B['mline'] = Draw.Toggle('..MLINE', EVENT_REDRAW, b0, y, b0_, 20, GUI_B['mline'].val, "(*todo)support dxf-MLINE on/off")
                if GUI_B['mline'].val:
                        GUI_A['mlines_as'] = Draw.Menu(mlines_as_menu, EVENT_NONE, but1c, y, but_1c, 20, GUI_A['mlines_as'].val, "select target Blender-object")
                Draw.EndAlign()
@@ -5727,7 +5727,7 @@ def draw_UI():  #---------------------------------------------------------------
 
                y -= 20
                GUI_B['text'] = Draw.Toggle('TEXT', EVENT_NONE, b0, y, b0_, 20, GUI_B['text'].val, "support dxf-TEXT on/off")
-               GUI_B['mtext'] = Draw.Toggle('*MTEXT', EVENT_NONE, b1, y, b1_, 20, GUI_B['mtext'].val, "(*wip)support dxf-MTEXT on/off")
+               GUI_B['mtext'] = Draw.Toggle('..MTEXT', EVENT_NONE, b1, y, b1_, 20, GUI_B['mtext'].val, "(*todo)support dxf-MTEXT on/off")
 #              GUI_A['texts_as'] = Draw.Menu(texts_as_menu, EVENT_NONE, but3c, y, but_3c, 20, GUI_A['texts_as'].val, "select target Blender-object")
 
                y -= 20
@@ -5746,8 +5746,8 @@ def draw_UI():  #---------------------------------------------------------------
                
                Draw.BeginAlign()
                GUI_A['views_on'] = Draw.Toggle('views', EVENT_NONE, b0, y, b0_-25, 20, GUI_A['views_on'].val, "imports VIEWs and VIEWPORTs as cameras on/off")
-               GUI_A['cams_on'] = Draw.Toggle('*cams', EVENT_NONE, b1-25, y, b1_-25, 20, GUI_A['cams_on'].val, "(*wip) support ASHADE cameras on/off")
-               GUI_A['lights_on'] = Draw.Toggle('*lights', EVENT_NONE, b1+25, y, b1_-25, 20, GUI_A['lights_on'].val, "(*wip) support AVE_RENDER lights on/off")
+               GUI_A['cams_on'] = Draw.Toggle('..cams', EVENT_NONE, b1-25, y, b1_-25, 20, GUI_A['cams_on'].val, "(*todo) support ASHADE cameras on/off")
+               GUI_A['lights_on'] = Draw.Toggle('..lights', EVENT_NONE, b1+25, y, b1_-25, 20, GUI_A['lights_on'].val, "(*todo) support AVE_RENDER lights on/off")
                Draw.EndAlign()
 
 
@@ -5763,10 +5763,10 @@ def draw_UI():  #---------------------------------------------------------------
                Draw.BeginAlign()
                GUI_A['paper_space_on'] = Draw.Toggle('paper', EVENT_NONE, b0+but_*0, y, but_, 20, GUI_A['paper_space_on'].val, "import only from Paper-Space on/off")
                GUI_A['layFrozen_on'] = Draw.Toggle ('frozen', EVENT_NONE, b0+but_*1, y, but_, 20, GUI_A['layFrozen_on'].val, "import also from frozen LAYERs on/off")
-               GUI_A['layerFilter_on'] = Draw.Toggle('layer', EVENT_NONE, b0+but_*2, y, but_, 20, GUI_A['layerFilter_on'].val, "(*wip) LAYER filtering on/off")
-               GUI_A['colorFilter_on'] = Draw.Toggle('color', EVENT_NONE, b0+but_*3, y, but_, 20, GUI_A['colorFilter_on'].val, "(*wip) COLOR filtering on/off")
-               GUI_A['groupFilter_on'] = Draw.Toggle('group', EVENT_NONE, b0+but_*4, y, but_, 20, GUI_A['groupFilter_on'].val, "(*wip) GROUP filtering on/off")
-               GUI_A['blockFilter_on'] = Draw.Toggle('block', EVENT_NONE, b0+but_*5, y, but_, 20, GUI_A['blockFilter_on'].val, "(*wip) BLOCK filtering on/off")
+               GUI_A['layerFilter_on'] = Draw.Toggle('..layer', EVENT_NONE, b0+but_*2, y, but_, 20, GUI_A['layerFilter_on'].val, "(*todo) LAYER filtering on/off")
+               GUI_A['colorFilter_on'] = Draw.Toggle('..color', EVENT_NONE, b0+but_*3, y, but_, 20, GUI_A['colorFilter_on'].val, "(*todo) COLOR filtering on/off")
+               GUI_A['groupFilter_on'] = Draw.Toggle('..group', EVENT_NONE, b0+but_*4, y, but_, 20, GUI_A['groupFilter_on'].val, "(*todo) GROUP filtering on/off")
+               GUI_A['blockFilter_on'] = Draw.Toggle('..block', EVENT_NONE, b0+but_*5, y, but_, 20, GUI_A['blockFilter_on'].val, "(*todo) BLOCK filtering on/off")
                #GUI_A['dummy_on'] = Draw.Toggle('-', EVENT_NONE, but3c, y, but_3c, 20, GUI_A['dummy_on'].val, "dummy on/off")
                Draw.EndAlign()
 
@@ -5867,7 +5867,7 @@ def draw_UI():  #---------------------------------------------------------------
                y -= 10
                y -= 20
                Draw.BeginAlign()
-               GUI_A['Z_force_on'] = Draw.Toggle('*elevation', EVENT_REDRAW, b0, y, b0_, 20, GUI_A['Z_force_on'].val, "*set objects Z-coordinates to elevation on/off")
+               GUI_A['Z_force_on'] = Draw.Toggle('.elevation', EVENT_REDRAW, b0, y, b0_, 20, GUI_A['Z_force_on'].val, ".set objects Z-coordinates to elevation on/off")
                if GUI_A['Z_force_on'].val:
                        GUI_A['Z_elev'] = Draw.Number('', EVENT_NONE, b1, y, b1_, 20, GUI_A['Z_elev'].val, -1000, 1000, "set default elevation(Z-coordinate)")
                Draw.EndAlign()
@@ -6169,22 +6169,20 @@ def multi_import(DIR):
 
 
 if __name__ == "__main__":
-       if 'cross' not in dir(Mathutils.Vector()):
-               Draw.PupMenu('DXF importer: Abort%t|This script version works for Blender up 2.49 only!')
+       #Draw.PupMenu('DXF importer: Abort%t|This script version works for Blender up 2.49 only!')
+       UI_MODE = True
+       # recall last used DXF-file and INI-file names
+       dxffilename = check_RegistryKey('dxfFileName')
+       #print 'deb:start dxffilename:', dxffilename #----------------
+       if dxffilename: dxfFileName.val = dxffilename
        else:
-               UI_MODE = True
-               # recall last used DXF-file and INI-file names
-               dxffilename = check_RegistryKey('dxfFileName')
-               #print 'deb:start dxffilename:', dxffilename #----------------
-               if dxffilename: dxfFileName.val = dxffilename
-               else:
-                       dirname = sys.dirname(Blender.Get('filename'))
-                       #print 'deb:start dirname:', dirname #----------------
-                       dxfFileName.val = sys.join(dirname, '')
-               inifilename = check_RegistryKey('iniFileName')
-               if inifilename: iniFileName.val = inifilename
+               dirname = sys.dirname(Blender.Get('filename'))
+               #print 'deb:start dirname:', dirname #----------------
+               dxfFileName.val = sys.join(dirname, '')
+       inifilename = check_RegistryKey('iniFileName')
+       if inifilename: iniFileName.val = inifilename
 
-               Draw.Register(draw_UI, event, bevent)
+       Draw.Register(draw_UI, event, bevent)
 
 
 """