DXF-Exporter script update

v1.34 - 2009.06.08
- export Lamps and Cameras as POINTs
- export passepartout for perspective projection
- added option for export objects only from visible layers
This commit is contained in:
2009-06-08 01:29:58 +00:00
parent 0940a28b07
commit 983ffa63d7

View File

@@ -7,7 +7,7 @@
Tooltip: 'Export geometry to DXF/DWG-r12 (Drawing eXchange Format).' Tooltip: 'Export geometry to DXF/DWG-r12 (Drawing eXchange Format).'
""" """
__version__ = "1.34 - 2009.06.07" __version__ = "1.34 - 2009.06.08"
__author__ = "Remigiusz Fiedler (AKA migius)" __author__ = "Remigiusz Fiedler (AKA migius)"
__license__ = "GPL" __license__ = "GPL"
__url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf" __url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf"
@@ -17,7 +17,7 @@ Version %s
Copyright %s Copyright %s
License %s License %s
extern dependances: dxfLibrary.py, (optionaly: DConvertCon.exe) extern dependances: dxfLibrary.py, dxfColorMap.py (optionaly: DConvertCon.exe)
CONTRIBUTORS: CONTRIBUTORS:
Remigiusz Fiedler (AKA migius) Remigiusz Fiedler (AKA migius)
@@ -28,21 +28,27 @@ See the homepage for documentation.
url: %s url: %s
IDEAs: IDEAs:
- HPGL output, especially usefull for correct scaled printing of 2d drawings - HPGL output, usefull for correct scaled printing of 2d drawings
TODO: TODO:
- export dupligroups and dupliverts as blocks (option for the user to decide) - export dupligroups and dupliverts as blocks (option for the user to decide)
- optimize POLYFACE routine: remove double-vertices - optimize POLYFACE routine: remove double-vertices
- optimize POLYFACE routine: remove loose vertices - more stable support for X,Y-rotated curves(to POLYLINEs): fix blender negative-matrix.invert()
- stable support X,Y-rotated curves(to POLYLINEs): fix blender negative-matrix.invert()
- support hierarchies: groups, instances, parented structures - support hierarchies: groups, instances, parented structures
- write drawing extends for automatic view positioning in CAD - support n/f-gons as POLYFACEs with invisible edges
- mapping materials to DXF-styles - mapping materials to DXF-styles
- wip: corrected text-objects in persp-projection - ProgressBar
- wip: fix filter out objects from inactive(off) layers - wip: write drawing extends for automatic view positioning in CAD
- wip: correct text-objects in persp-projection
- wip: translate Camera to VPORT/VIEW
- wip: translate current 3D-View to *ACTIVE-VPORT
History History
v1.34 - 2009.06.07 by migius v1.34 - 2009.06.08 by migius
- export Lamps and Cameras as POINTs
- export passepartout for perspective projection
- added option for export objects only from visible layers
- optimized POLYFACE output: remove loose vertices in back-faces-mode
- cleaning code - cleaning code
- fix nasty bug in getExtrusion() - fix nasty bug in getExtrusion()
- support text-objects, also in ortho/persp-projection - support text-objects, also in ortho/persp-projection
@@ -58,7 +64,7 @@ v1.33 - 2009.05.25 by migius
- support curve objects in projection-2d mode - support curve objects in projection-2d mode
- UI stuff: camera selector/manager - UI stuff: camera selector/manager
v1.32 - 2009.05.22 by migius v1.32 - 2009.05.22 by migius
- debug mode for curve-objects: output pass to Blender - debug mode for curve-objects: output redirect to Blender
- wip support 210-code(extrusion) calculation - wip support 210-code(extrusion) calculation
- default settings for 2D and 3D export - default settings for 2D and 3D export
v1.31 - 2009.05.18 by migius v1.31 - 2009.05.18 by migius
@@ -150,18 +156,20 @@ d2r = math.pi / 180.0
print '\n\n\n' print '\n\n\n'
print 'DXF-Exporter v%s *** start ***' %(__version__) #--------------------- print 'DXF-Exporter v%s *** start ***' %(__version__) #---------------------
#DEBUG = True #activets debug mode #DEBUG = True #activates debug mode
#----globals------------------------------------------ #----globals------------------------------------------
ONLYSELECTED = 1 # 0/1 = False/True ONLYSELECTED = 1 # 0/1 = False/True
ONLYVISIBLE = 1 # ignore objects on invisible layers
POLYLINES = 1 # prefer POLYLINEs not LINEs POLYLINES = 1 # prefer POLYLINEs not LINEs
POLYFACES = 1 # prefer POLYFACEs not 3DFACEs POLYFACES = 1 # prefer POLYFACEs not 3DFACEs
PROJECTION = 0 # flatten output geometry to Z = 0.0 PROJECTION = 0 # output geometry will be projected to XYplane with Z=0.0
HIDDEN_LINES = 0 #filter out hidden geometry HIDDEN_LINES = 0 #filter out hidden geometry
SHADOWS = 0 # sun/shadows simulation SHADOWS = 0 # sun/shadows simulation
CAMERA = 1 # view from active camera or from 3d-view CAMERA = 1 # selected camera index
PERSPECTIVE = 0 #perspective camera PERSPECTIVE = 0 # projection (camera) type: perspective, opposite to orthographic
CAMERAVIEW = 0 # use camera for projection, opposite is 3d-view
APPLY_MODIFIERS = 1 APPLY_MODIFIERS = 1
INCLUDE_DUPLIS = 0 INCLUDE_DUPLIS = 0
OUTPUT_DWG = 0 #optional save to DWG with extern converter OUTPUT_DWG = 0 #optional save to DWG with extern converter
@@ -170,13 +178,6 @@ G_SCALE = 1.0 #(0.0001-1000) global scaling factor for output dxf data
G_ORIGIN = [0.0,0.0,0.0] #global translation-vector (x,y,z) in Blender units G_ORIGIN = [0.0,0.0,0.0] #global translation-vector (x,y,z) in Blender units
ELEVATION = 0.0 #standard elevation = coordinate Z value in Blender units ELEVATION = 0.0 #standard elevation = coordinate Z value in Blender units
MIN_DIST = 0.001 #cut-off value for sort out short-distance polyline-"duoble_vertex"
CURV_RESOLUTION = 12 #(1-128) Bezier curves U-resolution
CURVARC_RESOLUTION = 4 #(3-32) resolution of circle represented as Bezier curve
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
BYBLOCK = 0 #DXF-attribute: assign property to BLOCK defaults BYBLOCK = 0 #DXF-attribute: assign property to BLOCK defaults
BYLAYER = None #256 #DXF-attribute: assign property to LAYER defaults BYLAYER = None #256 #DXF-attribute: assign property to LAYER defaults
PREFIX = 'BF_' #used as prefix for DXF names PREFIX = 'BF_' #used as prefix for DXF names
@@ -266,7 +267,7 @@ def updateCAMERA():
if currcam: currcam = currcam.getName() if currcam: currcam = currcam.getName()
if currcam in CAMERAS: if currcam in CAMERAS:
CAMERA = CAMERAS.index(currcam)+1 CAMERA = CAMERAS.index(currcam)+1
GUI_A['camera_on'].val = CAMERA GUI_A['camera_selected'].val = CAMERA
#---------------------------------------------- #----------------------------------------------
def gotoCAMERA(): def gotoCAMERA():
@@ -502,27 +503,23 @@ def exportMesh(ob, mx, mx_n, me=None, **common):
else: else:
me.getFromObject(ob) me.getFromObject(ob)
# me.transform(mx); get verts data; me.transform(mx_inv)= back to the origin state # me.transform(mx); get verts data; me.transform(mx_inv)= back to the origin state
# above is eventualy faster, but bad, cause # above .transform method is faster, but bad, cause invasive:
# invasive: directly transforms origin geometry and write back rounding errors # it manipulates original geometry and by retransformation lefts back rounding-errors
#we dont want to manipulate origin data # we dont want to manipulate original data!
#temp_verts = me.verts[:] #doesn't work on ubuntu(Yorik), bug? #temp_verts = me.verts[:] #doesn't work on ubuntu(Yorik), bug?
if me.verts: if me.verts:
#print 'deb:exportMesh() started' #--------- #print 'deb:exportMesh() started' #---------
allpoints = [v.co for v in me.verts] allpoints = [v.co for v in me.verts]
allpoints = projected_co(allpoints, mx) allpoints = projected_co(allpoints, mx)
if GUI_A['g_origin_on'].val: allpoints = toNewOrigin(allpoints)
for p in allpoints:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
faces=[] faces=[]
edges=[] edges=[]
if me.faces and PROJECTION and HIDDEN_LINES: if me.faces and PROJECTION and HIDDEN_LINES:
if DEBUG: print 'deb:exportMesh HIDDEN_LINES mode' #--------- #if DEBUG: print 'deb:exportMesh HIDDEN_LINES mode' #---------
faces, edges = hidden_status(me.faces, mx, mx_n) faces, edges = hidden_status(me.faces, mx, mx_n)
faces = [[v.index for v in me.faces[f_nr].verts] for f_nr in faces] faces = [[v.index for v in me.faces[f_nr].verts] for f_nr in faces]
else: else:
if DEBUG: print 'deb:exportMesh STANDARD mode' #--------- #if DEBUG: print 'deb:exportMesh STANDARD mode' #---------
for e in me.edges: edges.append(e.key) for e in me.edges: edges.append(e.key)
#faces = [f.index for f in me.faces] #faces = [f.index for f in me.faces]
faces = [[v.index for v in f.verts] for f in me.faces] faces = [[v.index for v in f.verts] for f in me.faces]
@@ -553,23 +550,23 @@ def exportMesh(ob, mx, mx_n, me=None, **common):
if allpoints: if allpoints:
#TODO: purge allpoints: left only vertices used by faces #TODO: purge allpoints: left only vertices used by faces
if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene
# faces = [[v+1 for v in f] for f in faces] if not (PROJECTION and HIDDEN_LINES):
faces = [[v+1 for v in f] for f in faces]
verts_state= [0]*len(allpoints) else:
# for back-Faces-mode remove face-free verts
map=verts_state= [0]*len(allpoints)
for f in faces: for f in faces:
for v in f: for v in f:
verts_state[v]=1 verts_state[v]=1
if 0: # in verts_state: # if dirty state if 0 in verts_state: # if dirty state
i,new_position,newverts=0,[],[] i,newverts=0,[]
for used_i,used in enumerate(verts_state): for used_i,used in enumerate(verts_state):
if used: if used:
newverts.append(allpoints[used_i]) newverts.append(allpoints[used_i])
new_position.append(i) map[used_i]=i
i+=1 i+=1
allpoints = newverts allpoints = newverts
faces = [[new_position[v]+1 for v in f] for f in faces] faces = [[map[v]+1 for v in f] for f in faces]
else:
faces = [[v+1 for v in f] for f in faces]
dxfPOLYFACE = DXF.PolyLine([allpoints, faces], flag=64, **common) dxfPOLYFACE = DXF.PolyLine([allpoints, faces], flag=64, **common)
#print '\n deb: dxfPOLYFACE=',dxfPOLYFACE #------------- #print '\n deb: dxfPOLYFACE=',dxfPOLYFACE #-------------
entities.append(dxfPOLYFACE) entities.append(dxfPOLYFACE)
@@ -642,17 +639,26 @@ def curve_drawBlender(vertList, org_point=[0.0,0.0,0.0], closed=0, name="dxfCurv
#return ob #return ob
#-----------------------------------------------------
def toNewOrigin(points):
"""relocates points to the new location
needs a list of points [x,y,z]
"""
if GUI_A['g_origin_on'].val:
for p in points:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
return points
#----------------------------------------------------- #-----------------------------------------------------
def exportEmpty(ob, mx, mw, **common): def exportEmpty(ob, mx, mw, **common):
"""converts Empty-Object to desired projection and representation(DXF-Entity type) """converts Empty-Object to desired projection and representation(DXF-Entity type)
""" """
p = Mathutils.Vector(ob.loc) p = Mathutils.Vector(ob.loc)
#print 'deb: is it a vector?:', p #---------------
[p] = projected_co([p], mx) [p] = projected_co([p], mx)
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation [p] = toNewOrigin([p])
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
entities = [] entities = []
c = empty_as_list[GUI_A['empty_as'].val] c = empty_as_list[GUI_A['empty_as'].val]
@@ -661,6 +667,36 @@ def exportEmpty(ob, mx, mw, **common):
entities.append(dxfPOINT) entities.append(dxfPOINT)
return entities return entities
#-----------------------------------------------------
def exportCamera(ob, mx, mw, **common):
"""converts Camera-Object to desired projection and representation(DXF-Entity type)
"""
p = Mathutils.Vector(ob.loc)
[p] = projected_co([p], mx)
[p] = toNewOrigin([p])
entities = []
c = camera_as_list[GUI_A['camera_as'].val]
if c=="POINT": # export as POINT
dxfPOINT = DXF.Point(points=[p],**common)
entities.append(dxfPOINT)
return entities
#-----------------------------------------------------
def exportLamp(ob, mx, mw, **common):
"""converts Lamp-Object to desired projection and representation(DXF-Entity type)
"""
p = Mathutils.Vector(ob.loc)
[p] = projected_co([p], mx)
[p] = toNewOrigin([p])
entities = []
c = lamp_as_list[GUI_A['lamp_as'].val]
if c=="POINT": # export as POINT
dxfPOINT = DXF.Point(points=[p],**common)
entities.append(dxfPOINT)
return entities
#----------------------------------------------------- #-----------------------------------------------------
def exportText(ob, mx, mw, **common): def exportText(ob, mx, mw, **common):
"""converts Text-Object to desired projection and representation(DXF-Entity type) """converts Text-Object to desired projection and representation(DXF-Entity type)
@@ -719,13 +755,10 @@ def exportText(ob, mx, mw, **common):
#print 'deb: coef=', coef #-------------- #print 'deb: coef=', coef #--------------
#print 'deb: point=', point #-------------- #print 'deb: point=', point #--------------
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation [point] = toNewOrigin([point])
point[0] += G_ORIGIN[0]
point[1] += G_ORIGIN[1]
point[2] += G_ORIGIN[2]
point2 = point point2 = point
if 0: pass #DEBUG: text_drawBlender(textstr,points,OCS_origin) #deb: draw to scene #if DEBUG: text_drawBlender(textstr,points,OCS_origin) #deb: draw to scene
common['extrusion']= Extrusion common['extrusion']= Extrusion
#common['elevation']= Elevation #common['elevation']= Elevation
common['thickness']= Thickness common['thickness']= Thickness
@@ -870,11 +903,8 @@ def exportCurve(ob, mx, mw, **common):
if cur.isCyclic(): closed = 1 if cur.isCyclic(): closed = 1
else: closed = 0 else: closed = 0
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation points = toNewOrigin(points)
for p in points:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
if DEBUG: curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene if DEBUG: curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene
common['extrusion']= Extrusion common['extrusion']= Extrusion
##common['rotation']= ZRotation ##common['rotation']= ZRotation
@@ -905,11 +935,8 @@ def exportCurve(ob, mx, mw, **common):
points = projected_co(points, mx) points = projected_co(points, mx)
if cur.isCyclic(): points.append(points[0]) if cur.isCyclic(): points.append(points[0])
#print 'deb: points', points #-------------- #print 'deb: points', points #--------------
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation points = toNewOrigin(points)
for p in points:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
if DEBUG: curve_drawBlender(points,WCS_loc,closed) #deb: draw to scene if DEBUG: curve_drawBlender(points,WCS_loc,closed) #deb: draw to scene
common['extrusion']= Extrusion common['extrusion']= Extrusion
common['elevation']= Elevation common['elevation']= Elevation
@@ -977,7 +1004,7 @@ def getClipBox(camera):
scaleZ = 1.0/float(far - near) scaleZ = 1.0/float(far - near)
z3 = -float(near)/float(far - near) z3 = -float(near)/float(far - near)
matr = Mathutils.Matrix( [scaleX, 0.0, 0.0, x3], matrix = Mathutils.Matrix( [scaleX, 0.0, 0.0, x3],
[0.0, scaleY, 0.0, y3], [0.0, scaleY, 0.0, y3],
[0.0, 0.0, scaleZ, z3], [0.0, 0.0, scaleZ, z3],
[0.0, 0.0, 0.0, 1.0]) [0.0, 0.0, 0.0, 1.0])
@@ -1014,7 +1041,7 @@ def getClipBox(camera):
#[0.0, scaleY, y2, 0.0], #[0.0, scaleY, y2, 0.0],
#[0.0, 0.0, scaleZ, wZ], #[0.0, 0.0, scaleZ, wZ],
#[0.0, 0.0, -1.0, 0.0]) #[0.0, 0.0, -1.0, 0.0])
matr = Mathutils.Matrix( [(2.0 * near)/float(right - left), 0.0, float(right + left)/float(right - left), 0.0], matrix = Mathutils.Matrix( [(2.0 * near)/float(right - left), 0.0, float(right + left)/float(right - left), 0.0],
[0.0, (2.0 * near)/float(top - bottom), float(top + bottom)/float(top - bottom), 0.0], [0.0, (2.0 * near)/float(top - bottom), float(top + bottom)/float(top - bottom), 0.0],
[0.0, 0.0, -float(far + near)/float(far - near), -(2.0 * far * near)/float(far - near)], [0.0, 0.0, -float(far + near)/float(far - near), -(2.0 * far * near)/float(far - near)],
[0.0, 0.0, -1.0, 0.0]) [0.0, 0.0, -1.0, 0.0])
@@ -1028,7 +1055,7 @@ def getClipBox(camera):
clip1_Z, clip2_Z] clip1_Z, clip2_Z]
#print 'deb: clip_box=\n', clip_box #------------------ #print 'deb: clip_box=\n', clip_box #------------------
#drawClipBox(clip_box) #drawClipBox(clip_box)
return clip_box, matr return clip_box, matrix
#----------------------------------------------------- #-----------------------------------------------------
@@ -1143,19 +1170,19 @@ def getCommons(ob):
#----------------------------------------------------- #-----------------------------------------------------
def do_export(export_list, filepath): def do_export(export_list, filepath):
global PERSPECTIVE global PERSPECTIVE, CAMERAVIEW
Window.WaitCursor(1) Window.WaitCursor(1)
t = Blender.sys.time() t = Blender.sys.time()
#init Drawing --------------------- # init Drawing ---------------------
d=DXF.Drawing() d=DXF.Drawing()
#add Tables ----------------- # add Tables -----------------
#d.blocks.append(b) #table blocks #d.blocks.append(b) #table blocks
#goes automatic: d.styles.append(DXF.Style()) #table styles #goes automatic: d.styles.append(DXF.Style()) #table styles
#d.views.append(DXF.View('Normal')) #table view #d.views.append(DXF.View('Normal')) #table view
d.views.append(DXF.ViewByWindow('BF_TOPVIEW',leftBottom=(-10,-6),rightTop=(10,6))) #idem d.views.append(DXF.ViewByWindow('BF_TOPVIEW',leftBottom=(-100,-60),rightTop=(100,60))) #idem
#add Entities -------------------- # add Entities --------------------
something_ready = 0 something_ready = 0
selected_len = len(export_list) selected_len = len(export_list)
sce = Scene.GetCurrent() sce = Scene.GetCurrent()
@@ -1165,38 +1192,47 @@ def do_export(export_list, filepath):
[0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]) [0.0, 0.0, 0.0, 1.0])
if PROJECTION: if PROJECTION:
if CAMERA<len(CAMERAS)+1: #the biggest number is the current view if CAMERA<len(CAMERAS)+1: # the biggest number is the current 3d-view
act_camera = Object.Get(CAMERAS[CAMERA-1]) act_camera = Object.Get(CAMERAS[CAMERA-1])
context = sce.getRenderingContext() #context = sce.getRenderingContext()
#print 'deb: context=\n', context #------------------ #print 'deb: context=\n', context #------------------
#print 'deb: context=\n', dir(context) #------------------ #print 'deb: context=\n', dir(context) #------------------
#act_camera = sce.objects.camera #act_camera = sce.objects.camera
#print 'deb: act_camera=', act_camera #------------------ #print 'deb: act_camera=', act_camera #------------------
if act_camera: if act_camera:
CAMERAVIEW = 1
mc0 = act_camera.matrix.copy() mc0 = act_camera.matrix.copy()
#print 'deb: camera.Matrix=\n', mc0 #------------------ #print 'deb: camera.Matrix=\n', mc0 #------------------
camera = Camera.Get(act_camera.getData(name_only=True)) camera = Camera.Get(act_camera.getData(name_only=True))
#print 'deb: camera=', dir(camera) #------------------ #print 'deb: camera=', dir(camera) #------------------
if camera.type=='persp': PERSPECTIVE = 1 if camera.type=='persp': PERSPECTIVE = 1
elif camera.type=='ortho': PERSPECTIVE = 0 elif camera.type=='ortho': PERSPECTIVE = 0
# mcp is matrix.camera.perspective
clip_box, mcp = getClipBox(camera) clip_box, mcp = getClipBox(camera)
if PERSPECTIVE:
#mcp = getPerspMatrix(camera) # get border
# lens = camera.lens
min_X1, max_X1, min_Y1, max_Y1,\
min_X2, max_X2, min_Y2, max_Y2,\
min_Z, max_Z = clip_box
verts = []
verts.append([min_X1, min_Y1, min_Z])
verts.append([max_X1, min_Y1, min_Z])
verts.append([max_X1, max_Y1, min_Z])
verts.append([min_X1, max_Y1, min_Z])
border=verts
mw = mc0.copy().invert() mw = mc0.copy().invert()
else: # get 3D-View instead of camera else: # get 3D-View instead of camera-view
#ViewVector = Mathutils.Vector(Window.GetViewVector()) #ViewVector = Mathutils.Vector(Window.GetViewVector())
#print 'deb: ViewVector=\n', ViewVector #------------------ #print 'deb: ViewVector=\n', ViewVector #------------------
#TODO: for what is Window.GetViewOffset() ?? #TODO: what is Window.GetViewOffset() for?
#print 'deb: Window.GetViewOffset():', Window.GetViewOffset() #--------- #print 'deb: Window.GetViewOffset():', Window.GetViewOffset() #---------
#Window.SetViewOffset([0,0,0]) #Window.SetViewOffset([0,0,0])
#print 'deb: Window.GetViewOffset():', Window.GetViewOffset() #---------
mw0 = Window.GetViewMatrix() mw0 = Window.GetViewMatrix()
#print 'deb: mwOrtho =\n', mw0 #--------- #print 'deb: mwOrtho =\n', mw0 #---------
mwp = Window.GetPerspMatrix() #TODO: how get it working? mwp = Window.GetPerspMatrix() #TODO: how to get it working?
#print 'deb: mwPersp =\n', mwp #--------- #print 'deb: mwPersp =\n', mwp #---------
#mw0 = mwp
#clip_box = getClipBox(camera, context)
mw = mw0.copy() mw = mw0.copy()
#print 'deb: ViewMatrix=\n', mw #------------------ #print 'deb: ViewMatrix=\n', mw #------------------
@@ -1204,12 +1240,15 @@ def do_export(export_list, filepath):
if APPLY_MODIFIERS: tmp_me = Mesh.New('tmp') if APPLY_MODIFIERS: tmp_me = Mesh.New('tmp')
else: tmp_me = None else: tmp_me = None
if GUI_A['paper_space_on'].val==1: espace=1
else: espace=None
layernames = [] layernames = []
for ob,mx in export_list: for ob,mx in export_list:
entities = [] entities = []
#mx = ob.matrix.copy() #mx = ob.matrix.copy()
#print 'deb: ob =', ob #--------- #print 'deb: ob =', ob #---------
#print 'deb: ob.type =', ob.type #--------- print 'deb: ob.type =', ob.type #---------
#print 'deb: mx =\n', mx #--------- #print 'deb: mx =\n', mx #---------
#print 'deb: mw0 =\n', mw0 #--------- #print 'deb: mw0 =\n', mw0 #---------
#mx_n is trans-matrix for normal_vectors for front-side faces #mx_n is trans-matrix for normal_vectors for front-side faces
@@ -1221,12 +1260,12 @@ def do_export(export_list, filepath):
#print 'deb: mx =\n', mx #--------- #print 'deb: mx =\n', mx #---------
#print 'deb: mx_inv=\n', mx_inv #--------- #print 'deb: mx_inv=\n', mx_inv #---------
if ob.type in ('Mesh', 'Curve', 'Empty', 'Text'): if ob.type in ('Mesh','Curve','Empty','Text','Camera','Lamp'):
if GUI_A['paper_space_on'].val==1: espace=1
else: espace=None
elayer,ecolor,eltype = getCommons(ob) elayer,ecolor,eltype = getCommons(ob)
#print 'deb: elayer,ecolor,eltype =', elayer,ecolor,eltype #-------------- #print 'deb: elayer,ecolor,eltype =', elayer,ecolor,eltype #--------------
#TODO: use ob.boundBox for drawing extends
if elayer!=None: if elayer!=None:
if elayer not in layernames: if elayer not in layernames:
layernames.append(elayer) layernames.append(elayer)
@@ -1246,6 +1285,12 @@ def do_export(export_list, filepath):
elif (ob.type == 'Text') and GUI_B['text'].val: elif (ob.type == 'Text') and GUI_B['text'].val:
entities = exportText(ob, mx, mw, \ entities = exportText(ob, mx, mw, \
paperspace=espace, color=ecolor, layer=elayer, lineType=eltype) paperspace=espace, color=ecolor, layer=elayer, lineType=eltype)
elif (ob.type == 'Camera') and GUI_B['camera'].val:
entities = exportCamera(ob, mx, mw, \
paperspace=espace, color=ecolor, layer=elayer, lineType=eltype)
elif (ob.type == 'Lamp') and GUI_B['lamp'].val:
entities = exportLamp(ob, mx, mw, \
paperspace=espace, color=ecolor, layer=elayer, lineType=eltype)
if entities: if entities:
something_ready += 1 something_ready += 1
@@ -1253,8 +1298,19 @@ def do_export(export_list, filepath):
d.append(e) d.append(e)
if something_ready: if something_ready:
if PERSPECTIVE: # draw view border
mw2 = Mathutils.Matrix().identity()
points = projected_co(border, mw2)
closed = 1
points = toNewOrigin(points)
dxfPLINE = DXF.PolyLine(points,points[0],closed,\
paperspace=espace, color=LAYERCOLOR_DEF)
d.append(dxfPLINE)
if not GUI_A['outputDWG_on'].val: if not GUI_A['outputDWG_on'].val:
print 'exporting to %s' % filepath print 'writing to %s' % filepath
try: try:
d.saveas(filepath) d.saveas(filepath)
Window.WaitCursor(0) Window.WaitCursor(0)
@@ -1517,10 +1573,10 @@ parent_as_menu = prepareMenu("export to: %t", parent_as_list)
proxy_as_list = ["..BLOCK","..XREF","..ungroup","..POINT"] proxy_as_list = ["..BLOCK","..XREF","..ungroup","..POINT"]
proxy_as_menu = prepareMenu("export to: %t", proxy_as_list) proxy_as_menu = prepareMenu("export to: %t", proxy_as_list)
camera_as_list = ["..BLOCK","..A_CAMERA","..VPORT","..VIEW","..POINT"] camera_as_list = ["..BLOCK","..A_CAMERA","..VPORT","..VIEW","POINT"]
camera_as_menu = prepareMenu("export to: %t", camera_as_list) camera_as_menu = prepareMenu("export to: %t", camera_as_list)
lamp_as_list = ["..BLOCK","..A_LAMP","..POINT"] lamp_as_list = ["..BLOCK","..A_LAMP","POINT"]
lamp_as_menu = prepareMenu("export to: %t", lamp_as_list) lamp_as_menu = prepareMenu("export to: %t", lamp_as_list)
material_to_list= ["COLOR","LAYER","..LINESTYLE","..BLOCK","..XDATA","..INI-File"] material_to_list= ["COLOR","LAYER","..LINESTYLE","..BLOCK","..XDATA","..INI-File"]
@@ -1534,7 +1590,7 @@ ltype_map_menu = prepareMenu("export to: %t", ltype_map_list)
layername_from_list = [LAYERNAME_DEF,"drawing_name","scene_name"] layername_from_list = [LAYERNAME_DEF,"drawing_name","scene_name"]
layername_from_menu = prepareMenu("defaultLAYER: %t", layername_from_list) layername_from_menu = prepareMenu("defaultLAYER: %t", layername_from_list)
layerltype_def_list = ["CONTINUOUS","..DOT","..DASHED","..DASHDOT","..BORDER","..HIDDEN"] layerltype_def_list = ["CONTINUOUS","DOT","DASHED","DASHDOT","BORDER","HIDDEN"]
layerltype_def_menu = prepareMenu("LINETYPE set to: %t",layerltype_def_list) layerltype_def_menu = prepareMenu("LINETYPE set to: %t",layerltype_def_list)
entitylayer_from_list = ["default_LAYER","obj.name","obj.layer","obj.material","obj.data.name","obj.data.material","..vertexgroup","..group","..map_table"] entitylayer_from_list = ["default_LAYER","obj.name","obj.layer","obj.material","obj.data.name","obj.data.material","..vertexgroup","..group","..map_table"]
@@ -1544,7 +1600,7 @@ entitylayer_from_menu = prepareMenu("entityLAYER from: %t", entitylayer_from_lis
entitycolor_from_list = ["default_COLOR","BYLAYER","BYBLOCK","obj.layer","obj.color","obj.material","obj.data.material","..map_table"] entitycolor_from_list = ["default_COLOR","BYLAYER","BYBLOCK","obj.layer","obj.color","obj.material","obj.data.material","..map_table"]
entitycolor_from_menu = prepareMenu("entityCOLOR set to: %t",entitycolor_from_list) entitycolor_from_menu = prepareMenu("entityCOLOR set to: %t",entitycolor_from_list)
entityltype_from_list = ["default_LTYPE","BYLAYER","BYBLOCK","CONTINUOUS","..DOT","..DASHED","..DASHDOT","..BORDER","..HIDDEN"] entityltype_from_list = ["default_LTYPE","BYLAYER","BYBLOCK","CONTINUOUS","DOT","DASHED","DASHDOT","BORDER","HIDDEN"]
entityltype_from_menu = prepareMenu("entityCOLOR set to: %t",entityltype_from_list) entityltype_from_menu = prepareMenu("entityCOLOR set to: %t",entityltype_from_list)
#dxf-LINE,ARC,CIRCLE,ELLIPSE #dxf-LINE,ARC,CIRCLE,ELLIPSE
@@ -1591,6 +1647,7 @@ keywords_org = {
'groupFilter_on': 0, 'groupFilter_on': 0,
'only_selected_on': ONLYSELECTED, 'only_selected_on': ONLYSELECTED,
'only_visible_on': ONLYVISIBLE,
'projection_on' : PROJECTION, 'projection_on' : PROJECTION,
'hidden_lines_on': HIDDEN_LINES, 'hidden_lines_on': HIDDEN_LINES,
'shadows_on' : SHADOWS, 'shadows_on' : SHADOWS,
@@ -1600,7 +1657,7 @@ keywords_org = {
'to_polyface_on': POLYFACES, 'to_polyface_on': POLYFACES,
'apply_modifiers_on': APPLY_MODIFIERS, 'apply_modifiers_on': APPLY_MODIFIERS,
'include_duplis_on': INCLUDE_DUPLIS, 'include_duplis_on': INCLUDE_DUPLIS,
'camera_on': CAMERA, 'camera_selected': CAMERA,
'g_originX' : G_ORIGIN[0], 'g_originX' : G_ORIGIN[0],
'g_originY' : G_ORIGIN[1], 'g_originY' : G_ORIGIN[1],
@@ -1634,8 +1691,8 @@ keywords_org = {
'group_as' : 0, 'group_as' : 0,
'parent_as' : 0, 'parent_as' : 0,
'proxy_as' : 0, 'proxy_as' : 0,
'camera_as': 1, 'camera_as': 4,
'lamp_as' : 1, 'lamp_as' : 2,
} }
drawTypes_org = { drawTypes_org = {
@@ -1875,8 +1932,8 @@ def resetDefaultConfig_3D(): #-----------------------------------------------
'group' : 1, 'group' : 1,
'parent' : 1, 'parent' : 1,
#'proxy' : 0, #'proxy' : 0,
'camera': 1, #'camera': 1,
'lamp' : 1, #'lamp' : 1,
} }
presetConfig_polyline(1) presetConfig_polyline(1)
updateConfig(keywords3d, drawTypes3d) updateConfig(keywords3d, drawTypes3d)
@@ -1921,7 +1978,7 @@ def inputOriginVector():
def update_globals(): #----------------------------------------------------------------- def update_globals(): #-----------------------------------------------------------------
""" update globals if GUI_A changed """ update globals if GUI_A changed
""" """
global ONLYSELECTED, DEBUG,\ global ONLYSELECTED,ONLYVISIBLE, DEBUG,\
PROJECTION, HIDDEN_LINES, CAMERA, \ PROJECTION, HIDDEN_LINES, CAMERA, \
G_SCALE, G_ORIGIN,\ G_SCALE, G_ORIGIN,\
PREFIX, LAYERNAME_DEF, LAYERCOLOR_DEF, LAYERLTYPE_DEF,\ PREFIX, LAYERNAME_DEF, LAYERCOLOR_DEF, LAYERLTYPE_DEF,\
@@ -1930,6 +1987,7 @@ def update_globals(): #--------------------------------------------------------
#global POLYLINES #global POLYLINES
ONLYSELECTED = GUI_A['only_selected_on'].val ONLYSELECTED = GUI_A['only_selected_on'].val
ONLYVISIBLE = GUI_A['only_visible_on'].val
""" """
POLYLINES = GUI_A['to_polyline_on'].val POLYLINES = GUI_A['to_polyline_on'].val
if GUI_A['curve_as'].val==1: POLYLINES=1 if GUI_A['curve_as'].val==1: POLYLINES=1
@@ -1940,9 +1998,9 @@ def update_globals(): #--------------------------------------------------------
else: DEBUG = 0 else: DEBUG = 0
PROJECTION = GUI_A['projection_on'].val PROJECTION = GUI_A['projection_on'].val
HIDDEN_LINES = GUI_A['hidden_lines_on'].val HIDDEN_LINES = GUI_A['hidden_lines_on'].val
CAMERA = GUI_A['camera_on'].val CAMERA = GUI_A['camera_selected'].val
G_SCALE = GUI_A['g_scale'].val G_SCALE = GUI_A['g_scale'].val
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation if GUI_A['g_origin_on'].val:
G_ORIGIN[0] = GUI_A['g_originX'].val G_ORIGIN[0] = GUI_A['g_originX'].val
G_ORIGIN[1] = GUI_A['g_originY'].val G_ORIGIN[1] = GUI_A['g_originY'].val
G_ORIGIN[2] = GUI_A['g_originZ'].val G_ORIGIN[2] = GUI_A['g_originZ'].val
@@ -2117,14 +2175,14 @@ def draw_UI(): #---------------------------------------------------------------
y -= 20 y -= 20
Draw.BeginAlign() Draw.BeginAlign()
GUI_B['camera'] = Draw.Toggle('..Camera', EVENT_REDRAW, b0, y, b0_, 20, GUI_B['camera'].val, "(*todo) Export Camera-Objects on/off") GUI_B['camera'] = Draw.Toggle('Camera', EVENT_REDRAW, b0, y, b0_, 20, GUI_B['camera'].val, "(*wip) Export Camera-Objects on/off")
if GUI_B['camera'].val: if GUI_B['camera'].val:
GUI_A['camera_as'] = Draw.Menu(camera_as_menu, EVENT_NONE, b1, y, b1_, 20, GUI_A['camera_as'].val, "Select target DXF-object") GUI_A['camera_as'] = Draw.Menu(camera_as_menu, EVENT_NONE, b1, y, b1_, 20, GUI_A['camera_as'].val, "Select target DXF-object")
Draw.EndAlign() Draw.EndAlign()
y -= 20 y -= 20
Draw.BeginAlign() Draw.BeginAlign()
GUI_B['lamp'] = Draw.Toggle('..Lamp', EVENT_REDRAW, b0, y, b0_, 20, GUI_B['lamp'].val, "(*todo) Export Lamp-Objects on/off") GUI_B['lamp'] = Draw.Toggle('Lamp', EVENT_REDRAW, b0, y, b0_, 20, GUI_B['lamp'].val, "(*wip) Export Lamp-Objects on/off")
if GUI_B['lamp'].val: if GUI_B['lamp'].val:
GUI_A['lamp_as'] = Draw.Menu(lamp_as_menu, EVENT_NONE, b1, y, b1_, 20, GUI_A['lamp_as'].val, "Select target DXF-object") GUI_A['lamp_as'] = Draw.Menu(lamp_as_menu, EVENT_NONE, b1, y, b1_, 20, GUI_A['lamp_as'].val, "Select target DXF-object")
Draw.EndAlign() Draw.EndAlign()
@@ -2140,13 +2198,13 @@ def draw_UI(): #---------------------------------------------------------------
but_ = menu_w / 6 but_ = menu_w / 6
b0 = but0c + (menu_w - but_*6)/2 b0 = but0c + (menu_w - but_*6)/2
Draw.BeginAlign() Draw.BeginAlign()
GUI_A['paper_space_on'] = Draw.Toggle('paper', EVENT_NONE, b0+but_*0, y, but_, 20, GUI_A['paper_space_on'].val, "Export to Paper-Space, otherwise to Model-Space on/off") #GUI_A['dummy_on'] = Draw.Toggle('-', EVENT_NONE, b0+but_*0, y, but_, 20, GUI_A['dummy_on'].val, "placeholder only on/off")
GUI_A['paper_space_on'] = Draw.Toggle('Paper', EVENT_NONE, b0+but_*0, y, but_, 20, GUI_A['paper_space_on'].val, "Export to Paper-Space, otherwise to Model-Space on/off")
GUI_A['layFrozen_on'] = Draw.Toggle ('..frozen', EVENT_NONE, b0+but_*1, y, but_, 20, GUI_A['layFrozen_on'].val, "(*todo) Support LAYER.frozen status on/off") GUI_A['layFrozen_on'] = Draw.Toggle ('..frozen', EVENT_NONE, b0+but_*1, y, but_, 20, GUI_A['layFrozen_on'].val, "(*todo) Support LAYER.frozen status on/off")
GUI_A['materialFilter_on'] = Draw.Toggle('..material', EVENT_NONE, b0+but_*2, y, but_, 20, GUI_A['materialFilter_on'].val, "(*todo) Material filtering on/off") GUI_A['materialFilter_on'] = Draw.Toggle('..material', EVENT_NONE, b0+but_*2, y, but_, 20, GUI_A['materialFilter_on'].val, "(*todo) Material 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['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['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['objectFilter_on'] = Draw.Toggle('..object', EVENT_NONE, b0+but_*5, y, but_, 20, GUI_A['objectFilter_on'].val, "(*todo) Object filtering on/off") GUI_A['objectFilter_on'] = Draw.Toggle('..object', EVENT_NONE, b0+but_*5, y, but_, 20, GUI_A['objectFilter_on'].val, "(*todo) Object 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() Draw.EndAlign()
# -----end filters-------------------------------------- # -----end filters--------------------------------------
@@ -2281,34 +2339,39 @@ def draw_UI(): #---------------------------------------------------------------
b0, b0_ = but0c, but_0c + butt_margin +but_1c b0, b0_ = but0c, but_0c + butt_margin +but_1c
GUI_A['only_selected_on'] = Draw.Toggle('Export Selection', EVENT_NONE, b0, y, b0_, 20, GUI_A['only_selected_on'].val, "Export only selected geometry on/off") GUI_A['only_selected_on'] = Draw.Toggle('Export Selection', EVENT_NONE, b0, y, b0_, 20, GUI_A['only_selected_on'].val, "Export only selected geometry on/off")
b0, b0_ = but2c, but_2c + butt_margin + but_3c b0, b0_ = but2c, but_2c + butt_margin + but_3c
y -= 20
b0, b0_ = but0c, but_0c + butt_margin +but_1c
GUI_A['to_polyline_on'] = Draw.Toggle('POLYLINE', EVENT_PRESETPLINE, b0, y, b0_, 20, GUI_A['to_polyline_on'].val, "Export to POLYLINEs, otherwise to LINEs/3DFACEs on/off")
b0, b0_ = but2c, but_2c + butt_margin + but_3c
Draw.BeginAlign() Draw.BeginAlign()
GUI_A['projection_on'] = Draw.Toggle('2d Projection', EVENT_REDRAW, b0, y+20, b0_, 20, GUI_A['projection_on'].val, "Export a 2d Projection according 3d-View or Camera-View on/off") GUI_A['projection_on'] = Draw.Toggle('2d Projection', EVENT_REDRAW, b0, y, b0_, 20, GUI_A['projection_on'].val, "Export a 2d Projection according 3d-View or Camera-View on/off")
if GUI_A['projection_on'].val: if GUI_A['projection_on'].val:
GUI_A['camera_on'] = Draw.Menu(MenuCAMERA, EVENT_CAMERA, b0, y, b0_-20, 20, GUI_A['camera_on'].val, 'Choose the camera to be rendered') GUI_A['camera_selected'] = Draw.Menu(MenuCAMERA, EVENT_CAMERA, b0, y-20, b0_-20, 20, GUI_A['camera_selected'].val, 'Choose the camera to be rendered')
Draw.PushButton('>', EVENT_setCAMERA, b0+b0_-20, y, 20, 20, 'switch to selected Camera - make it active') Draw.PushButton('>', EVENT_setCAMERA, b0+b0_-20, y-20, 20, 20, 'switch to selected Camera - make it active')
GUI_A['hidden_lines_on'] = Draw.Toggle('Hide back-Faces', EVENT_NONE, b0, y-20, b0_, 20, GUI_A['hidden_lines_on'].val, "Filter out back-Faces on/off") GUI_A['hidden_lines_on'] = Draw.Toggle('Remove backFaces', EVENT_NONE, b0, y-40, b0_, 20, GUI_A['hidden_lines_on'].val, "Filter out backFaces on/off")
#GUI_A['shadows_on'] = Draw.Toggle('..Shadows', EVENT_REDRAW, b0, y-40, but_2c, 20, GUI_A['shadows_on'].val, "(*todo) Shadow tracing on/off") #GUI_A['shadows_on'] = Draw.Toggle('..Shadows', EVENT_REDRAW, b0, y-60, but_2c, 20, GUI_A['shadows_on'].val, "(*todo) Shadow tracing on/off")
#GUI_A['light_on'] = Draw.Menu(MenuLIGHT, EVENT_LIGHT, but3c, y-40, but_3c, 20, GUI_A['light_on'].val, '(*todo) Choose the light source(sun) to be rendered') #GUI_A['light_on'] = Draw.Menu(MenuLIGHT, EVENT_LIGHT, but3c, y-60, but_3c, 20, GUI_A['light_on'].val, '(*todo) Choose the light source(sun) to be rendered')
Draw.EndAlign() Draw.EndAlign()
y -= 20
b0, b0_ = but0c, but_0c + butt_margin +but_1c
GUI_A['only_visible_on'] = Draw.Toggle('Visible only', EVENT_PRESETPLINE, b0, y, b0_, 20, GUI_A['only_visible_on'].val, "Export only from visible layers on/off")
#b0, b0_ = but2c, but_2c + butt_margin + but_3c
y -= 20
b0, b0_ = but0c, but_0c + butt_margin +but_1c
GUI_A['to_polyline_on'] = Draw.Toggle('POLYLINE-Mode', EVENT_PRESETPLINE, b0, y, b0_, 20, GUI_A['to_polyline_on'].val, "Export to POLYLINE/POLYFACEs, otherwise to LINEs/3DFACEs on/off")
#b0, b0_ = but2c, but_2c + butt_margin + but_3c
y -= 20 y -= 20
b0, b0_ = but0c, but_0c + butt_margin +but_1c b0, b0_ = but0c, but_0c + butt_margin +but_1c
GUI_A['apply_modifiers_on'] = Draw.Toggle('Apply Modifiers', EVENT_NONE, b0, y, b0_, 20, GUI_A['apply_modifiers_on'].val, "Apply modifier stack to mesh objects before export on/off") GUI_A['apply_modifiers_on'] = Draw.Toggle('Apply Modifiers', EVENT_NONE, b0, y, b0_, 20, GUI_A['apply_modifiers_on'].val, "Apply modifier stack to mesh objects before export on/off")
b0, b0_ = but2c, but_2c + butt_margin + but_3c #b0, b0_ = but2c, but_2c + butt_margin + but_3c
y -= 20 y -= 20
b0, b0_ = but0c, but_0c + butt_margin +but_1c b0, b0_ = but0c, but_0c + butt_margin +but_1c
GUI_A['include_duplis_on'] = Draw.Toggle('Include Duplis', EVENT_NONE, b0, y, b0_, 20, GUI_A['include_duplis_on'].val, "Export Duplicates (dupliverts, dupliframes, dupligroups) on/off") GUI_A['include_duplis_on'] = Draw.Toggle('Include Duplis', EVENT_NONE, b0, y, b0_, 20, GUI_A['include_duplis_on'].val, "Export Duplicates (dupliverts, dupliframes, dupligroups) on/off")
b0, b0_ = but2c, but_2c + butt_margin + but_3c #b0, b0_ = but2c, but_2c + butt_margin + but_3c
y -= 50
y -= 30
Draw.PushButton('EXIT', EVENT_EXIT, but0c, y, but_0c+bm, 20, '' ) Draw.PushButton('EXIT', EVENT_EXIT, but0c, y, but_0c+bm, 20, '' )
Draw.PushButton('HELP', EVENT_HELP, but1c, y, but_1c+bm, 20, 'goes to online-Manual on wiki.blender.org') Draw.PushButton('HELP', EVENT_HELP, but1c, y, but_1c+bm, 20, 'goes to online-Manual on wiki.blender.org')
GUI_A['optimization'] = Draw.Number('', EVENT_NONE, but2c, y, 40, 20, GUI_A['optimization'].val, 0, 3, "Optimization Level: 0=Debug/Draw-in, 1=Verbose, 2=ProgressBar, 3=SilentMode") GUI_A['optimization'] = Draw.Number('', EVENT_NONE, but2c, y, 40, 20, GUI_A['optimization'].val, 0, 3, "Optimization Level: 0=Debug/Draw-in, 1=Verbose, 2=ProgressBar, 3=SilentMode")
@@ -2541,11 +2604,11 @@ def bevent(evt):
resetDefaultConfig_3D() resetDefaultConfig_3D()
Draw.Redraw() Draw.Redraw()
elif evt in (EVENT_CAMERA,EVENT_LIGHT): elif evt in (EVENT_CAMERA,EVENT_LIGHT):
CAMERA = GUI_A['camera_on'].val CAMERA = GUI_A['camera_selected'].val
if CAMERA==len(CAMERAS)+1: if CAMERA==len(CAMERAS)+1:
doAllCameras = True doAllCameras = True
else: else:
print 'deb: CAMERAS=',CAMERAS #---------------- pass #print 'deb: CAMERAS=',CAMERAS #----------------
Draw.Redraw() Draw.Redraw()
elif (evt==EVENT_setCAMERA): elif (evt==EVENT_setCAMERA):
if CAMERA<len(CAMERAS)+1: if CAMERA<len(CAMERAS)+1:
@@ -2616,12 +2679,22 @@ http://wiki.blender.org/index.php?title=Scripts/Manual/Export/autodesk_dxf')
else: else:
Draw.Redraw() Draw.Redraw()
elif dxfFile.lower()[-4:] in ('.dxf','.dwg'): # and Blender.sys.exists(dxfFile): elif dxfFile.lower()[-4:] in ('.dxf','.dwg'): # and Blender.sys.exists(dxfFile):
print '\nStandard Mode: active' print 'preparing for export ---' #Standard Mode: activated
filepath = dxfFile filepath = dxfFile
sce = Scene.GetCurrent() sce = Scene.GetCurrent()
if ONLYSELECTED: sel_group = sce.objects.selected if ONLYSELECTED: sel_group = sce.objects.selected
else: sel_group = sce.objects else: sel_group = sce.objects
if ONLYVISIBLE:
sel_group_temp = []
layerlist = sce.getLayers()
for ob in sel_group:
for lay in ob.layers:
if lay in layerlist:
sel_group_temp.append(ob)
break
sel_group = sel_group_temp
export_list = getObjectsAndDuplis(sel_group,MATRICES=True) export_list = getObjectsAndDuplis(sel_group,MATRICES=True)
if export_list: do_export(export_list, filepath) if export_list: do_export(export_list, filepath)