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:
Remigiusz Fiedler 2009-06-08 01:29:58 +00:00
parent 0940a28b07
commit 983ffa63d7

@ -7,7 +7,7 @@
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)"
__license__ = "GPL"
__url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf"
@ -17,7 +17,7 @@ Version %s
Copyright %s
License %s
extern dependances: dxfLibrary.py, (optionaly: DConvertCon.exe)
extern dependances: dxfLibrary.py, dxfColorMap.py (optionaly: DConvertCon.exe)
CONTRIBUTORS:
Remigiusz Fiedler (AKA migius)
@ -28,21 +28,27 @@ See the homepage for documentation.
url: %s
IDEAs:
- HPGL output, especially usefull for correct scaled printing of 2d drawings
- HPGL output, usefull for correct scaled printing of 2d drawings
TODO:
- export dupligroups and dupliverts as blocks (option for the user to decide)
- optimize POLYFACE routine: remove double-vertices
- optimize POLYFACE routine: remove loose vertices
- stable support X,Y-rotated curves(to POLYLINEs): fix blender negative-matrix.invert()
- more stable support for X,Y-rotated curves(to POLYLINEs): fix blender negative-matrix.invert()
- 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
- wip: corrected text-objects in persp-projection
- wip: fix filter out objects from inactive(off) layers
- ProgressBar
- 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
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
- fix nasty bug in getExtrusion()
- 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
- UI stuff: camera selector/manager
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
- default settings for 2D and 3D export
v1.31 - 2009.05.18 by migius
@ -150,18 +156,20 @@ d2r = math.pi / 180.0
print '\n\n\n'
print 'DXF-Exporter v%s *** start ***' %(__version__) #---------------------
#DEBUG = True #activets debug mode
#DEBUG = True #activates debug mode
#----globals------------------------------------------
ONLYSELECTED = 1 # 0/1 = False/True
ONLYVISIBLE = 1 # ignore objects on invisible layers
POLYLINES = 1 # prefer POLYLINEs not LINEs
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
SHADOWS = 0 # sun/shadows simulation
CAMERA = 1 # view from active camera or from 3d-view
PERSPECTIVE = 0 #perspective camera
CAMERA = 1 # selected camera index
PERSPECTIVE = 0 # projection (camera) type: perspective, opposite to orthographic
CAMERAVIEW = 0 # use camera for projection, opposite is 3d-view
APPLY_MODIFIERS = 1
INCLUDE_DUPLIS = 0
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
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
BYLAYER = None #256 #DXF-attribute: assign property to LAYER defaults
PREFIX = 'BF_' #used as prefix for DXF names
@ -266,7 +267,7 @@ def updateCAMERA():
if currcam: currcam = currcam.getName()
if currcam in CAMERAS:
CAMERA = CAMERAS.index(currcam)+1
GUI_A['camera_on'].val = CAMERA
GUI_A['camera_selected'].val = CAMERA
#----------------------------------------------
def gotoCAMERA():
@ -502,27 +503,23 @@ def exportMesh(ob, mx, mx_n, me=None, **common):
else:
me.getFromObject(ob)
# me.transform(mx); get verts data; me.transform(mx_inv)= back to the origin state
# above is eventualy faster, but bad, cause
# invasive: directly transforms origin geometry and write back rounding errors
#we dont want to manipulate origin data
# above .transform method is faster, but bad, cause invasive:
# it manipulates original geometry and by retransformation lefts back rounding-errors
# we dont want to manipulate original data!
#temp_verts = me.verts[:] #doesn't work on ubuntu(Yorik), bug?
if me.verts:
#print 'deb:exportMesh() started' #---------
allpoints = [v.co for v in me.verts]
allpoints = projected_co(allpoints, mx)
if GUI_A['g_origin_on'].val:
for p in allpoints:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
allpoints = toNewOrigin(allpoints)
faces=[]
edges=[]
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 = [[v.index for v in me.faces[f_nr].verts] for f_nr in faces]
else:
if DEBUG: print 'deb:exportMesh STANDARD mode' #---------
#if DEBUG: print 'deb:exportMesh STANDARD mode' #---------
for e in me.edges: edges.append(e.key)
#faces = [f.index 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:
#TODO: purge allpoints: left only vertices used by faces
if DEBUG: mesh_drawBlender(allpoints, None, faces) #deb: draw to scene
# faces = [[v+1 for v in f] for f in faces]
verts_state= [0]*len(allpoints)
for f in faces:
for v in f:
verts_state[v]=1
if 0: # in verts_state: # if dirty state
i,new_position,newverts=0,[],[]
for used_i,used in enumerate(verts_state):
if used:
newverts.append(allpoints[used_i])
new_position.append(i)
i+=1
allpoints = newverts
faces = [[new_position[v]+1 for v in f] for f in faces]
else:
if not (PROJECTION and HIDDEN_LINES):
faces = [[v+1 for v in f] for f in faces]
else:
# for back-Faces-mode remove face-free verts
map=verts_state= [0]*len(allpoints)
for f in faces:
for v in f:
verts_state[v]=1
if 0 in verts_state: # if dirty state
i,newverts=0,[]
for used_i,used in enumerate(verts_state):
if used:
newverts.append(allpoints[used_i])
map[used_i]=i
i+=1
allpoints = newverts
faces = [[map[v]+1 for v in f] for f in faces]
dxfPOLYFACE = DXF.PolyLine([allpoints, faces], flag=64, **common)
#print '\n deb: dxfPOLYFACE=',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
#-----------------------------------------------------
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):
"""converts Empty-Object to desired projection and representation(DXF-Entity type)
"""
p = Mathutils.Vector(ob.loc)
#print 'deb: is it a vector?:', p #---------------
[p] = projected_co([p], mx)
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
[p] = toNewOrigin([p])
entities = []
c = empty_as_list[GUI_A['empty_as'].val]
@ -661,6 +667,36 @@ def exportEmpty(ob, mx, mw, **common):
entities.append(dxfPOINT)
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):
"""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: point=', point #--------------
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation
point[0] += G_ORIGIN[0]
point[1] += G_ORIGIN[1]
point[2] += G_ORIGIN[2]
[point] = toNewOrigin([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['elevation']= Elevation
common['thickness']= Thickness
@ -870,11 +903,8 @@ def exportCurve(ob, mx, mw, **common):
if cur.isCyclic(): closed = 1
else: closed = 0
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation
for p in points:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
points = toNewOrigin(points)
if DEBUG: curve_drawBlender(points,OCS_origin,closed) #deb: draw to scene
common['extrusion']= Extrusion
##common['rotation']= ZRotation
@ -905,11 +935,8 @@ def exportCurve(ob, mx, mw, **common):
points = projected_co(points, mx)
if cur.isCyclic(): points.append(points[0])
#print 'deb: points', points #--------------
if GUI_A['g_origin_on'].val: #TODO: scale and object orientation
for p in points:
p[0] += G_ORIGIN[0]
p[1] += G_ORIGIN[1]
p[2] += G_ORIGIN[2]
points = toNewOrigin(points)
if DEBUG: curve_drawBlender(points,WCS_loc,closed) #deb: draw to scene
common['extrusion']= Extrusion
common['elevation']= Elevation
@ -977,7 +1004,7 @@ def getClipBox(camera):
scaleZ = 1.0/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, 0.0, scaleZ, z3],
[0.0, 0.0, 0.0, 1.0])
@ -1014,7 +1041,7 @@ def getClipBox(camera):
#[0.0, scaleY, y2, 0.0],
#[0.0, 0.0, scaleZ, wZ],
#[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, 0.0, -float(far + near)/float(far - near), -(2.0 * far * near)/float(far - near)],
[0.0, 0.0, -1.0, 0.0])
@ -1028,7 +1055,7 @@ def getClipBox(camera):
clip1_Z, clip2_Z]
#print 'deb: clip_box=\n', 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):
global PERSPECTIVE
global PERSPECTIVE, CAMERAVIEW
Window.WaitCursor(1)
t = Blender.sys.time()
#init Drawing ---------------------
# init Drawing ---------------------
d=DXF.Drawing()
#add Tables -----------------
# add Tables -----------------
#d.blocks.append(b) #table blocks
#goes automatic: d.styles.append(DXF.Style()) #table styles
#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
selected_len = len(export_list)
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, 0.0, 1.0])
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])
context = sce.getRenderingContext()
#context = sce.getRenderingContext()
#print 'deb: context=\n', context #------------------
#print 'deb: context=\n', dir(context) #------------------
#act_camera = sce.objects.camera
#print 'deb: act_camera=', act_camera #------------------
if act_camera:
CAMERAVIEW = 1
mc0 = act_camera.matrix.copy()
#print 'deb: camera.Matrix=\n', mc0 #------------------
camera = Camera.Get(act_camera.getData(name_only=True))
#print 'deb: camera=', dir(camera) #------------------
if camera.type=='persp': PERSPECTIVE = 1
elif camera.type=='ortho': PERSPECTIVE = 0
# mcp is matrix.camera.perspective
clip_box, mcp = getClipBox(camera)
#mcp = getPerspMatrix(camera)
if PERSPECTIVE:
# 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()
else: # get 3D-View instead of camera
else: # get 3D-View instead of camera-view
#ViewVector = Mathutils.Vector(Window.GetViewVector())
#print 'deb: ViewVector=\n', ViewVector #------------------
#TODO: for what is Window.GetViewOffset() ??
#TODO: what is Window.GetViewOffset() for?
#print 'deb: Window.GetViewOffset():', Window.GetViewOffset() #---------
#Window.SetViewOffset([0,0,0])
#print 'deb: Window.GetViewOffset():', Window.GetViewOffset() #---------
mw0 = Window.GetViewMatrix()
#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 #---------
#mw0 = mwp
#clip_box = getClipBox(camera, context)
mw = mw0.copy()
#print 'deb: ViewMatrix=\n', mw #------------------
@ -1204,12 +1240,15 @@ def do_export(export_list, filepath):
if APPLY_MODIFIERS: tmp_me = Mesh.New('tmp')
else: tmp_me = None
if GUI_A['paper_space_on'].val==1: espace=1
else: espace=None
layernames = []
for ob,mx in export_list:
entities = []
#mx = ob.matrix.copy()
#print 'deb: ob =', ob #---------
#print 'deb: ob.type =', ob.type #---------
print 'deb: ob.type =', ob.type #---------
#print 'deb: mx =\n', mx #---------
#print 'deb: mw0 =\n', mw0 #---------
#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_inv=\n', mx_inv #---------
if ob.type in ('Mesh', 'Curve', 'Empty', 'Text'):
if GUI_A['paper_space_on'].val==1: espace=1
else: espace=None
if ob.type in ('Mesh','Curve','Empty','Text','Camera','Lamp'):
elayer,ecolor,eltype = getCommons(ob)
#print 'deb: elayer,ecolor,eltype =', elayer,ecolor,eltype #--------------
#TODO: use ob.boundBox for drawing extends
if elayer!=None:
if elayer not in layernames:
layernames.append(elayer)
@ -1246,6 +1285,12 @@ def do_export(export_list, filepath):
elif (ob.type == 'Text') and GUI_B['text'].val:
entities = exportText(ob, mx, mw, \
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:
something_ready += 1
@ -1253,8 +1298,19 @@ def do_export(export_list, filepath):
d.append(e)
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:
print 'exporting to %s' % filepath
print 'writing to %s' % filepath
try:
d.saveas(filepath)
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_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)
lamp_as_list = ["..BLOCK","..A_LAMP","..POINT"]
lamp_as_list = ["..BLOCK","..A_LAMP","POINT"]
lamp_as_menu = prepareMenu("export to: %t", lamp_as_list)
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_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)
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_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)
#dxf-LINE,ARC,CIRCLE,ELLIPSE
@ -1591,6 +1647,7 @@ keywords_org = {
'groupFilter_on': 0,
'only_selected_on': ONLYSELECTED,
'only_visible_on': ONLYVISIBLE,
'projection_on' : PROJECTION,
'hidden_lines_on': HIDDEN_LINES,
'shadows_on' : SHADOWS,
@ -1600,7 +1657,7 @@ keywords_org = {
'to_polyface_on': POLYFACES,
'apply_modifiers_on': APPLY_MODIFIERS,
'include_duplis_on': INCLUDE_DUPLIS,
'camera_on': CAMERA,
'camera_selected': CAMERA,
'g_originX' : G_ORIGIN[0],
'g_originY' : G_ORIGIN[1],
@ -1634,8 +1691,8 @@ keywords_org = {
'group_as' : 0,
'parent_as' : 0,
'proxy_as' : 0,
'camera_as': 1,
'lamp_as' : 1,
'camera_as': 4,
'lamp_as' : 2,
}
drawTypes_org = {
@ -1875,8 +1932,8 @@ def resetDefaultConfig_3D(): #-----------------------------------------------
'group' : 1,
'parent' : 1,
#'proxy' : 0,
'camera': 1,
'lamp' : 1,
#'camera': 1,
#'lamp' : 1,
}
presetConfig_polyline(1)
updateConfig(keywords3d, drawTypes3d)
@ -1921,7 +1978,7 @@ def inputOriginVector():
def update_globals(): #-----------------------------------------------------------------
""" update globals if GUI_A changed
"""
global ONLYSELECTED, DEBUG,\
global ONLYSELECTED,ONLYVISIBLE, DEBUG,\
PROJECTION, HIDDEN_LINES, CAMERA, \
G_SCALE, G_ORIGIN,\
PREFIX, LAYERNAME_DEF, LAYERCOLOR_DEF, LAYERLTYPE_DEF,\
@ -1930,6 +1987,7 @@ def update_globals(): #--------------------------------------------------------
#global POLYLINES
ONLYSELECTED = GUI_A['only_selected_on'].val
ONLYVISIBLE = GUI_A['only_visible_on'].val
"""
POLYLINES = GUI_A['to_polyline_on'].val
if GUI_A['curve_as'].val==1: POLYLINES=1
@ -1940,9 +1998,9 @@ def update_globals(): #--------------------------------------------------------
else: DEBUG = 0
PROJECTION = GUI_A['projection_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
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[1] = GUI_A['g_originY'].val
G_ORIGIN[2] = GUI_A['g_originZ'].val
@ -2117,14 +2175,14 @@ def draw_UI(): #---------------------------------------------------------------
y -= 20
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:
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()
y -= 20
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:
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()
@ -2140,13 +2198,13 @@ def draw_UI(): #---------------------------------------------------------------
but_ = menu_w / 6
b0 = but0c + (menu_w - but_*6)/2
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['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['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['dummy_on'] = Draw.Toggle('-', EVENT_NONE, but3c, y, but_3c, 20, GUI_A['dummy_on'].val, "dummy on/off")
Draw.EndAlign()
# -----end filters--------------------------------------
@ -2281,34 +2339,39 @@ def draw_UI(): #---------------------------------------------------------------
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")
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()
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:
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')
Draw.PushButton('>', EVENT_setCAMERA, b0+b0_-20, y, 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['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['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['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, 20, 'switch to selected Camera - make it active')
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-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-60, but_3c, 20, GUI_A['light_on'].val, '(*todo) Choose the light source(sun) to be rendered')
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
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")
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['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('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")
@ -2541,11 +2604,11 @@ def bevent(evt):
resetDefaultConfig_3D()
Draw.Redraw()
elif evt in (EVENT_CAMERA,EVENT_LIGHT):
CAMERA = GUI_A['camera_on'].val
CAMERA = GUI_A['camera_selected'].val
if CAMERA==len(CAMERAS)+1:
doAllCameras = True
else:
print 'deb: CAMERAS=',CAMERAS #----------------
pass #print 'deb: CAMERAS=',CAMERAS #----------------
Draw.Redraw()
elif (evt==EVENT_setCAMERA):
if CAMERA<len(CAMERAS)+1:
@ -2616,12 +2679,22 @@ http://wiki.blender.org/index.php?title=Scripts/Manual/Export/autodesk_dxf')
else:
Draw.Redraw()
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
sce = Scene.GetCurrent()
if ONLYSELECTED: sel_group = sce.objects.selected
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)
if export_list: do_export(export_list, filepath)