[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29582] branches/blender2.4/release/ scripts: DXF-exporter script update: v1.36 - 2010.06.20 by migius

Remigiusz Fiedler migius at gmx.net
Sun Jun 20 21:21:41 CEST 2010


Revision: 29582
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29582
Author:   migius
Date:     2010-06-20 21:21:41 +0200 (Sun, 20 Jun 2010)

Log Message:
-----------
DXF-exporter script update: v1.36 - 2010.06.20 by migius
- added export Nurbs-Curve (3,4,5th-degree) into POLYLINE-NURBS(quad,cubic)
  but no support for Bezier-Curves, because DXF doesnt support them

DXF-export library update: v1.34 - 2010.06.20 by migius
 - bugfix POLYFACE
 - added DXF-flags for POLYLINE and VERTEX class (NURBS-export)

Modified Paths:
--------------
    branches/blender2.4/release/scripts/bpymodules/dxfLibrary.py
    branches/blender2.4/release/scripts/export_dxf.py

Modified: branches/blender2.4/release/scripts/bpymodules/dxfLibrary.py
===================================================================
--- branches/blender2.4/release/scripts/bpymodules/dxfLibrary.py	2010-06-20 19:02:26 UTC (rev 29581)
+++ branches/blender2.4/release/scripts/bpymodules/dxfLibrary.py	2010-06-20 19:21:41 UTC (rev 29582)
@@ -1,6 +1,6 @@
 #dxfLibrary.py : provides functions for generating DXF files
 # --------------------------------------------------------------------------
-__version__ = "v1.33 - 2009.06.16"
+__version__ = "v1.34 - 2010.06.20"
 __author__ = "Stani Michiels(Stani), Remigiusz Fiedler(migius)"
 __license__ = "GPL"
 __url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf"
@@ -20,10 +20,15 @@
 TODO:
 - add support for DXFr14 (needs extended file header)
 - add support for SPLINEs (possible first in DXFr14 version)
+- add support for MTEXT
 - add user preset for floating point precision (3-16?)
 
 History
-v1.33 - 2009.06.16 by migius
+v1.34 - 2010.06.20 by migius
+ - bugfix POLYFACE
+ - added DXF-flags for POLYLINE and VERTEX class (NURBS-export)
+v1.33 - 2009.07.03 by migius
+ - fix MTEXT newline bug (not supported by DXF-Exporter yet)
  - modif _point(): converts all coords to floats
  - modif LineType class: implement elements
  - added VPORT class, incl. defaults
@@ -93,7 +98,6 @@
 #---helper functions-----------------------------------
 def _point(x,index=0):
 	"""Convert tuple to a dxf point"""
-	#print 'deb: _point=', x #-------------
 	return '\n'.join([' %s\n%s'%((i+1)*10+index,float(x[i])) for i in range(len(x))])
 
 def _points(plist):
@@ -205,7 +209,7 @@
 AT_LEAST = 1 #taller characters will override
 EXACT = 2 #taller characters will not override
 
-#---polyline flags
+#---polyline flag 70
 CLOSED =1	  # This is a closed polyline (or a polygon mesh closed in the M direction)
 CURVE_FIT =2	  # Curve-fit vertices have been added
 SPLINE_FIT =4	  # Spline-fit vertices have been added
@@ -215,6 +219,12 @@
 POLYFACE_MESH =64	 # The polyline is a polyface mesh
 CONTINOUS_LINETYPE_PATTERN =128	# The linetype pattern is generated continuously around the vertices of this polyline
 
+#---polyline flag 75, = curve type
+QUADRIC_NURBS = 5
+CUBIC_NURBS = 6
+BEZIER_CURVE = 8
+
+
 #---text flags
 #horizontal
 LEFT = 0
@@ -269,7 +279,6 @@
 		
 	def __str__(self):
 		out = '  0\n3DFACE\n%s%s\n' %(self._common(),_points(self.points))
-		#print 'deb:out=', out #-------------------
 		return out
 
 #-----------------------------------------------
@@ -318,34 +327,34 @@
 
 #-----------------------------------------------
 class PolyLine(_Entity):
-	def __init__(self,points,org_point=[0,0,0],flag=0,width=None,**common):
+	def __init__(self,points,org_point=[0,0,0],flag70=0,flag75=0,width=None,**common):
 		#width = number, or width = list [width_start=None, width_end=None]
-		#for 2d-polyline: points = [ [x, y, z, width_start=None, width_end=None, bulge=0 or None], ...]
-		#for 3d-polyline: points = [ [x, y, z], ...]
+		#for 2d-polyline: points = [ [[x, y, z], vflag=None, [width_start=None, width_end=None], bulge=0 or None] ...]
+		#for 3d-polyline: points = [ [[x, y, z], vflag=None], ...]
 		#for polyface: points = [points_list, faces_list]
 		_Entity.__init__(self,**common)
 		self.points=points
 		self.org_point=org_point
-		self.flag=flag
+		self.pflag70 = flag70
+		self.pflag75 = flag75
 		self.polyface = False
 		self.polyline2d = False
 		self.faces = [] # dummy value
 		self.width= None # dummy value
-		if self.flag & POLYFACE_MESH:
+		if self.pflag70 & POLYFACE_MESH:
 			self.polyface=True
 			self.points=points[0]
 			self.faces=points[1]
 			self.p_count=len(self.points)
 			self.f_count=len(self.faces)
-		elif not self.flag & POLYLINE_3D:
+		elif not (self.pflag70 & POLYLINE_3D):
 			self.polyline2d = True
 			if width:
-				if type(width)!='list':
-					width=[width,width]
+				if type(width)!='list':  width=[width,width]
 				self.width=width
 
 	def __str__(self):
-		result= '  0\nPOLYLINE\n%s 70\n%s\n' %(self._common(),self.flag)
+		result= '  0\nPOLYLINE\n%s 70\n%s\n' %(self._common(),self.pflag70)
 		result+=' 66\n1\n'
 		result+='%s\n' %_point(self.org_point)
 		if self.polyface:
@@ -353,23 +362,32 @@
 			result+=' 72\n%s\n' %self.f_count
 		elif self.polyline2d:
 			if self.width!=None: result+=' 40\n%s\n 41\n%s\n' %(self.width[0],self.width[1])
+		if self.pflag75:
+			result+=' 75\n%s\n' %self.pflag75
 		for point in self.points:
 			result+='  0\nVERTEX\n'
 			result+='  8\n%s\n' %self.layer
 			if self.polyface:
-				result+='%s\n' %_point(point[0:3])
+				result+='%s\n' %_point(point)
 				result+=' 70\n192\n'
 			elif self.polyline2d:
-				result+='%s\n' %_point(point[0:2])
-				if len(point)>4:
-					width1, width2 = point[3], point[4]
+				result+='%s\n' %_point(point[0])
+				flag = point[1]
+				if len(point)>2:
+					[width1, width2] = point[2]
 					if width1!=None: result+=' 40\n%s\n' %width1
 					if width2!=None: result+=' 41\n%s\n' %width2
-				if len(point)==6:
-					bulge = point[5]
+				if len(point)==4:
+					bulge = point[3]
 					if bulge: result+=' 42\n%s\n' %bulge
+				if flag:
+						result+=' 70\n%s\n' %flag
 			else:
-				result+='%s\n' %_point(point[0:3])
+				result+='%s\n' %_point(point[0])
+				flag = point[1]
+				if flag:
+						result+=' 70\n%s\n' %flag
+
 		for face in self.faces:
 			result+='  0\nVERTEX\n'
 			result+='  8\n%s\n' %self.layer
@@ -456,7 +474,7 @@
 		else:spacingWidth=self.height*self.spacingFactor
 		for text in texts:
 			while text:
-				result+='%s\n'%Text(text[:self.width],
+				result+='%s' %Text(text[:self.width],
 					point=(self.point[0]+x*spacingWidth,
 						   self.point[1]+y*spacingWidth,
 						   self.point[2]),
@@ -472,44 +490,47 @@
 
 #-----------------------------------------------
 ##class _Mtext(_Entity):
-##	"""Mtext not functioning for minimal dxf."""
-##	def __init__(self,text='',point=(0,0,0),attachment=1,
-##				 charWidth=None,charHeight=1,direction=1,height=100,rotation=0,
-##				 spacingStyle=None,spacingFactor=None,style=None,width=100,
-##				 xdirection=None,**common):
-##		_Entity.__init__(self,**common)
-##		self.text=text
-##		self.point=point
-##		self.attachment=attachment
-##		self.charWidth=charWidth
-##		self.charHeight=charHeight
-##		self.direction=direction
-##		self.height=height
-##		self.rotation=rotation
-##		self.spacingStyle=spacingStyle
-##		self.spacingFactor=spacingFactor
-##		self.style=style
-##		self.width=width
-##		self.xdirection=xdirection
-##	def __str__(self):
-##		input=self.text
-##		text=''
-##		while len(input)>250:
-##			text+='3\n%s\n'%input[:250]
-##			input=input[250:]
-##		text+='1\n%s\n'%input
-##		result= '0\nMTEXT\n%s\n%s\n40\n%s\n41\n%s\n71\n%s\n72\n%s%s\n43\n%s\n50\n%s\n'%\
-##				(self._common(),_point(self.point),self.charHeight,self.width,
-##				 self.attachment,self.direction,text,
-##				 self.height,
-##				 self.rotation)
-##		if self.style:result+='7\n%s\n'%self.style
-##		if self.xdirection:result+='%s\n'%_point(self.xdirection,1)
-##		if self.charWidth:result+='42\n%s\n'%self.charWidth
-##		if self.spacingStyle:result+='73\n%s\n'%self.spacingStyle
-##		if self.spacingFactor:result+='44\n%s\n'%self.spacingFactor
-##		return result
+	"""Mtext not functioning for minimal dxf."""
+	"""
+	def __init__(self,text='',point=(0,0,0),attachment=1,
+				 charWidth=None,charHeight=1,direction=1,height=100,rotation=0,
+				 spacingStyle=None,spacingFactor=None,style=None,width=100,
+				 xdirection=None,**common):
+		_Entity.__init__(self,**common)
+		self.text=text
+		self.point=point
+		self.attachment=attachment
+		self.charWidth=charWidth
+		self.charHeight=charHeight
+		self.direction=direction
+		self.height=height
+		self.rotation=rotation
+		self.spacingStyle=spacingStyle
+		self.spacingFactor=spacingFactor
+		self.style=style
+		self.width=width
+		self.xdirection=xdirection
+	def __str__(self):
+		input=self.text
+		text=''
+		while len(input)>250:
+			text+='3\n%s\n'%input[:250]
+			input=input[250:]
+		text+='1\n%s\n'%input
+		result= '0\nMTEXT\n%s\n%s\n40\n%s\n41\n%s\n71\n%s\n72\n%s%s\n43\n%s\n50\n%s\n'%\
+				(self._common(),_point(self.point),self.charHeight,self.width,
+				 self.attachment,self.direction,text,
+				 self.height,
+				 self.rotation)
+		if self.style:result+='7\n%s\n'%self.style
+		if self.xdirection:result+='%s\n'%_point(self.xdirection,1)
+		if self.charWidth:result+='42\n%s\n'%self.charWidth
+		if self.spacingStyle:result+='73\n%s\n'%self.spacingStyle
+		if self.spacingFactor:result+='44\n%s\n'%self.spacingFactor
+		return result
+	"""
 
+
 #---tables ---------------------------------------------------
 #-----------------------------------------------
 class Block(_Collection):
@@ -591,11 +612,11 @@
 				target=(0.0,0.0,0.0),
 				height=1.0,
 				ratio=1.0,
-				lens=50,
-				frontClipping=0,
-				backClipping=0,
-				snap_rotation=0,
-				twist=0,
+				lens=50.0,
+				frontClipping=0.0,
+				backClipping=0.0,
+				snap_rotation=0.0,
+				twist=0.0,
 				mode=0,
 				circle_zoom=100,
 				fast_zoom=1,
@@ -669,15 +690,15 @@
 #-----------------------------------------------
 class View(_Call):
 	def __init__(self,name,flag=0,
-			width=1,
-			height=1,
+			width=1.0,
+			height=1.0,
 			center=(0.5,0.5),
-			direction=(0,0,1),
-			target=(0,0,0),
-			lens=50,
-			frontClipping=0,
-			backClipping=0,
-			twist=0,mode=0
+			direction=(0.0,0.0,1.0),
+			target=(0.0,0.0,0.0),
+			lens=50.0,
+			frontClipping=0.0,
+			backClipping=0.0,
+			twist=0.0,mode=0
 			):
 		self.name=name
 		self.flag=flag
@@ -836,11 +857,12 @@
 		self.closed=closed
 		self.points=copy.copy(points)
 	def __str__(self):
-		if self.closed:points=self.points+[self.points[0]]
+		if self.closed:
+			points=self.points+[self.points[0]]
 		else: points=self.points
 		result=''
 		for i in range(len(points)-1):
-			result+= Line(points=[points[i],points[i+1]],parent=self)
+			result+= Line(points=[points[i][0],points[i+1][0]],parent=self)
 		return result[1:]
 
 #-----------------------------------------------------

Modified: branches/blender2.4/release/scripts/export_dxf.py
===================================================================
--- branches/blender2.4/release/scripts/export_dxf.py	2010-06-20 19:02:26 UTC (rev 29581)
+++ branches/blender2.4/release/scripts/export_dxf.py	2010-06-20 19:21:41 UTC (rev 29582)
@@ -7,7 +7,7 @@
  Tooltip: 'Export geometry to DXF/DWG-r12 (Drawing eXchange Format).'
 """
 
-__version__ = "1.35 - 2009.06.18"

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list