Revision: 20973
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20973
Author:   migius
Date:     2009-06-18 12:34:16 +0200 (Thu, 18 Jun 2009)

Log Message:
-----------
DXF-Exporter v1.35 - 2009.06.18 by migius
- missing support for multiple-instances of Curve-Objects as BLOCK/INSERTs

Modified Paths:
--------------
    trunk/blender/release/scripts/export_dxf.py

Modified: trunk/blender/release/scripts/export_dxf.py
===================================================================
--- trunk/blender/release/scripts/export_dxf.py 2009-06-18 10:34:16 UTC (rev 
20972)
+++ trunk/blender/release/scripts/export_dxf.py 2009-06-18 10:34:16 UTC (rev 
20973)
@@ -7,7 +7,7 @@
  Tooltip: 'Export geometry to DXF/DWG-r12 (Drawing eXchange Format).'
 """
 
-__version__ = "1.35 - 2009.06.17"
+__version__ = "1.35 - 2009.06.18"
 __author__  = "Remigiusz Fiedler (AKA migius)"
 __license__ = "GPL"
 __url__  = 
"http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf";
@@ -43,11 +43,11 @@
 - wip: write drawing extends for automatic view positioning in CAD
 - wip: fix text-objects in persp-projection
 - wip: translate current 3D-View to *ACTIVE-VPORT
-- wip: export multiple-instances of Curve-Objects as BLOCK/INSERTs
 - wip: fix support Include-Duplis, cause not conform with INSERT-method
 
 History
-v1.35 - 2009.06.17 by migius
+v1.35 - 2009.06.18 by migius
+- export multiple-instances of Curve-Objects as BLOCK/INSERTs
 - added export Cameras (ortho and persp) to VPORTs, incl. clipping
 - added export Cameras (ortho and persp) to VIEWs, incl. clipping
 - export multiple-instances of Mesh-Objects as BLOCK/INSERTs
@@ -183,6 +183,7 @@
 CAMERA = 1 # selected camera index
 PERSPECTIVE = 0 # projection (camera) type: perspective, opposite to 
orthographic
 CAMERAVIEW = 0 # use camera for projection, opposite is 3d-view
+INSTANCES = 1 # Export instances of Mesh/Curve as BLOCK/INSERTs   on/off
 APPLY_MODIFIERS = 1
 INCLUDE_DUPLIS = 0
 OUTPUT_DWG = 0 #optional save to DWG with extern converter
@@ -531,7 +532,7 @@
                #print 'deb:exportMesh() me.name=', me.name #---------
                #print 'deb:exportMesh() me.users=', me.users #---------
                # check if there are more instances of this mesh (if used by 
other objects), then write to BLOCK/INSERT
-               if me.users>1 and not PROJECTION:
+               if GUI_A['instances_on'].val and me.users>1 and not PROJECTION:
                        if me.name in BLOCKREGISTRY.keys():
                                insert_name = BLOCKREGISTRY[me.name]
                                # write INSERT to entities
@@ -999,131 +1000,195 @@
        entities = []
        block = None
        curve = ob.getData()
-       WCS_loc = ob.loc # WCS_loc is object location in WorldCoordSystem
-       #WCS_loc = [0.0,0.0,0.0]
-       #print 'deb: WCS_loc=', WCS_loc #---------
-       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) #---------
+       #print 'deb: curve=', dir(curve) #---------
+       # TODO: should be: if curve.users>1 and not (PERSPECTIVE or (PROJECTION 
and HIDDEN_MODE):
+       if GUI_A['instances_on'].val and curve.users>1 and not PROJECTION:
+               if curve.name in BLOCKREGISTRY.keys():
+                       insert_name = BLOCKREGISTRY[curve.name]
+                       # write INSERT to entities
+                       entities = exportInsert(ob, mx,insert_name, **common)
+               else:
+                       # generate geom_output in ObjectCS
+                       imx = Mathutils.Matrix().identity()
+                       WCS_loc = [0,0,0] # WCS_loc is object location in 
WorldCoordSystem
+                       #print 'deb: WCS_loc=', WCS_loc #---------
+                       sizeX = sizeY = sizeZ = 1.0
+                       rotX  = rotY  = rotZ = 0.0
+                       Thickness,Extrusion,ZRotation,Elevation = 
None,None,None,None
+                       ZRotation,Zrotmatrix,OCS_origin,ECS_origin = 
None,None,None,None
+                       AXaxis = imx[0].copy().resize3D() # = ArbitraryXvector
+                       OCS_origin = [0,0,0]
+                       if not PROJECTION:
+                               #Extrusion, ZRotation, Elevation = 
getExtrusion(mx)
+                               Extrusion, AXaxis = getExtrusion(imx)
+               
+                               # no thickness/width for POLYLINEs converted 
into Screen-C-S
+                               #print 'deb: curve.ext1=', curve.ext1 #---------
+                               if curve.ext1: Thickness = curve.ext1 * sizeZ
+                               if curve.ext2 and sizeX==sizeY:
+                                       Width = curve.ext2 * sizeX
+                               if 
"POLYLINE"==curve_as_list[GUI_A['curve_as'].val]: # export as POLYLINE
+                                       
ZRotation,Zrotmatrix,OCS_origin,ECS_origin = 
getTargetOrientation(imx,Extrusion,\
+                                               
AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ)
 
-       Thickness,Extrusion,ZRotation,Elevation = None,None,None,None
-       AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector
-       OCS_origin = [0,0,0]
-       if not PROJECTION:
-               #Extrusion, ZRotation, Elevation = getExtrusion(mx)
-               Extrusion, AXaxis = getExtrusion(mx)
+                       entities = writeCurveEntities(curve, imx,
+                               
Thickness,Extrusion,ZRotation,Elevation,AXaxis,Zrotmatrix,
+                               WCS_loc,OCS_origin,ECS_origin,sizeX,sizeY,sizeZ,
+                               **common)
 
-               # no thickness/width for POLYLINEs converted into ScreenCS
-               #print 'deb: curve.ext1=', curve.ext1 #---------
-               if curve.ext1: Thickness = curve.ext1 * sizeZ
-               if curve.ext2 and sizeX==sizeY:
-                       Width = curve.ext2 * sizeX
-               if "POLYLINE"==curve_as_list[GUI_A['curve_as'].val]: # export 
as POLYLINE
-                       ZRotation,Zrotmatrix,OCS_origin,ECS_origin = 
getTargetOrientation(mx,Extrusion,\
-                               AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ)
+                       if entities: # if not empty block
+                               # write BLOCK definition and INSERT entity
+                               # BLOCKREGISTRY = dictionary 
'blender_name':'dxf_name'.append(me.name)
+                               
BLOCKREGISTRY[curve.name]=validDXFr12name(('CU_'+ curve.name))
+                               insert_name = BLOCKREGISTRY[curve.name]
+                               block = 
DXF.Block(insert_name,flag=0,base=(0,0,0),entities=entities)
+                               # write INSERT as entity
+                               entities = exportInsert(ob, mx, insert_name, 
**common)
+
+       else: # no other instances, so go the standard way
+               WCS_loc = ob.loc # WCS_loc is object location in 
WorldCoordSystem
+               #print 'deb: WCS_loc=', WCS_loc #---------
+               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) #---------
        
-       for cur in curve:
-               #print 'deb: START cur=', cur #--------------
-               points = []
-               if cur.isNurb():
-                       for point in cur:
-                               #print 'deb:isNurb point=', point #---------
-                               vec = point[0:3]
-                               #print 'deb: vec=', vec #---------
-                               pkt = Mathutils.Vector(vec)
-                               #print 'deb: pkt=', pkt #---------
-                               points.append(pkt)
-               else:
-                       for point in cur:
-                               #print 'deb:isBezier point=', point.getTriple() 
#---------
-                               vec = point.getTriple()[1]
-                               #print 'deb: vec=', vec #---------
-                               pkt = Mathutils.Vector(vec)
-                               #print 'deb: pkt=', pkt #---------
-                               points.append(pkt)
+               Thickness,Extrusion,ZRotation,Elevation = None,None,None,None
+               ZRotation,Zrotmatrix,OCS_origin,ECS_origin = None,None,None,None
+               AXaxis = mx[0].copy().resize3D() # = ArbitraryXvector
+               OCS_origin = [0,0,0]
+               if not PROJECTION:
+                       #Extrusion, ZRotation, Elevation = getExtrusion(mx)
+                       Extrusion, AXaxis = getExtrusion(mx)
+       
+                       # no thickness/width for POLYLINEs converted into 
Screen-C-S
+                       #print 'deb: curve.ext1=', curve.ext1 #---------
+                       if curve.ext1: Thickness = curve.ext1 * sizeZ
+                       if curve.ext2 and sizeX==sizeY:
+                               Width = curve.ext2 * sizeX
+                       if "POLYLINE"==curve_as_list[GUI_A['curve_as'].val]: # 
export as POLYLINE
+                               ZRotation,Zrotmatrix,OCS_origin,ECS_origin = 
getTargetOrientation(mx,Extrusion,\
+                                       
AXaxis,WCS_loc,sizeX,sizeY,sizeZ,rotX,rotY,rotZ)
+               entities = writeCurveEntities(curve, mx,
+                               
Thickness,Extrusion,ZRotation,Elevation,AXaxis,Zrotmatrix,
+                               WCS_loc,OCS_origin,ECS_origin,sizeX,sizeY,sizeZ,
+                               **common)
 
-               #print 'deb: points', points #--------------
-               if len(points)>1:
-                       c = curve_as_list[GUI_A['curve_as'].val]
+       return entities, block
 
-                       if c=="POLYLINE": # export Curve as POLYLINE
-                               if not PROJECTION:
-                                       # recalculate points(2d=X,Y) into 
Entity-Coords-System
-                                       for p in points: # list of vectors
-                                               p[0] *= sizeX
-                                               p[1] *= sizeY
-                                               p2 = p * Zrotmatrix
-                                               p2[0] += ECS_origin[0]
-                                               p2[1] += ECS_origin[1]
-                                               p[0],p[1] = p2[0],p2[1]
-                               else:
-                                       points = projected_co(points, mx)
-                               #print 'deb: points', points #--------------
 
-                               if cur.isCyclic(): closed = 1
-                               else: closed = 0
-                               points = toGlobalOrigin(points)
+#-------------------------------------------------
+def writeCurveEntities(curve, mx,
+               Thickness,Extrusion,ZRotation,Elevation,AXaxis,Zrotmatrix,
+               WCS_loc,OCS_origin,ECS_origin,sizeX,sizeY,sizeZ,
+               **common):
+       """help routine for exportCurve()
+       """
+       entities = []
+       
+       if 1:
+               for cur in curve:
+                       #print 'deb: START cur=', cur #--------------
+                       points = []
+                       if cur.isNurb():
+                               for point in cur:
+                                       #print 'deb:isNurb point=', point 
#---------
+                                       vec = point[0:3]
+                                       #print 'deb: vec=', vec #---------
+                                       pkt = Mathutils.Vector(vec)
+                                       #print 'deb: pkt=', pkt #---------
+                                       points.append(pkt)
+                       else:
+                               for point in cur:
+                                       #print 'deb:isBezier point=', 
point.getTriple() #---------
+                                       vec = point.getTriple()[1]
+                                       #print 'deb: vec=', vec #---------
+                                       pkt = Mathutils.Vector(vec)
+                                       #print 'deb: pkt=', pkt #---------
+                                       points.append(pkt)
+       
+                       #print 'deb: points', points #--------------
+                       if len(points)>1:
+                               c = curve_as_list[GUI_A['curve_as'].val]
 
-                               if DEBUG: 
curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene
-                               common['extrusion']= Extrusion
-                               ##common['rotation']= ZRotation
-                               ##common['elevation']= Elevation
-                               common['thickness']= Thickness
-                               #print 'deb: common=', common 
#------------------
+                               if c=="POLYLINE": # export Curve as POLYLINE
+                                       if not PROJECTION:
+                                               # recalculate points(2d=X,Y) 
into Entity-Coords-System
+                                               for p in points: # list of 
vectors
+                                                       p[0] *= sizeX
+                                                       p[1] *= sizeY
+                                                       p2 = p * Zrotmatrix
+                                                       p2[0] += ECS_origin[0]
+                                                       p2[1] += ECS_origin[1]
+                                                       p[0],p[1] = p2[0],p2[1]
+                                       else:
+                                               points = projected_co(points, 
mx)
+                                       #print 'deb: points', points 
#--------------
+       
+                                       if cur.isCyclic(): closed = 1
+                                       else: closed = 0
+                                       points = toGlobalOrigin(points)
+       
+                                       if DEBUG: 
curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene
 
-                               if 0: #DEBUG
-                                       p=AXaxis[:3]
-                                       entities.append(DXF.Line([[0,0,0], 
p],**common))
-                                       p=ECS_origin[:3]
-                                       entities.append(DXF.Line([[0,0,0], 
p],**common))
-                                       common['color']= 5
-                                       p=OCS_origin[:3]
-                                       entities.append(DXF.Line([[0,0,0], 
p],**common))
-                                       #OCS_origin=[0,0,0] #only 
debug----------------
+                                       common['extrusion']= Extrusion
+                                       ##common['rotation']= ZRotation
+                                       ##common['elevation']= Elevation
+                                       common['thickness']= Thickness
+                                       #print 'deb: common=', common 
#------------------
+       
+                                       if 0: #DEBUG
+                                               p=AXaxis[:3]
+                                               
entities.append(DXF.Line([[0,0,0], p],**common))
+                                               p=ECS_origin[:3]

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to