Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2007-01-05 06:49:54 +0300
committerCampbell Barton <ideasman42@gmail.com>2007-01-05 06:49:54 +0300
commit330efd46fa4f2d3d5d70ebcd44d85c2c661dbbe2 (patch)
tree5d66f26233487ef1c0b7e7ffbbd03ad2f3be11f4 /release
parentea71aeb25483da1445975394e1140f951652f77a (diff)
standard set of minor improvements, tho this is a good script and not much to change.
faster dict/list operations. use layer flags ratehr then lists.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/bpymodules/dxfImportObjects.py58
-rw-r--r--release/scripts/bpymodules/dxfReader.py15
-rw-r--r--release/scripts/import_dxf.py72
3 files changed, 93 insertions, 52 deletions
diff --git a/release/scripts/bpymodules/dxfImportObjects.py b/release/scripts/bpymodules/dxfImportObjects.py
index b78e91e8428..960c4c1ac15 100644
--- a/release/scripts/bpymodules/dxfImportObjects.py
+++ b/release/scripts/bpymodules/dxfImportObjects.py
@@ -162,8 +162,9 @@ class Line:
else:
self.color_index = BYLAYER
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
+
self.points = self.get_points(obj.data)
@@ -238,8 +239,8 @@ class LWpolyline:
self.flags = 0
self.closed = self.flags&1 # byte coded, 1 = closed, 128 = plinegen
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.points = self.get_points(obj.data)
self.extrusion = self.get_extrusion(obj.data)
@@ -341,8 +342,8 @@ class Polyline:
self.closed = self.flags&1 # byte coded, 1 = closed, 128 = plinegen
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.extrusion = self.get_extrusion(obj.data)
@@ -531,8 +532,8 @@ class Text:
else:
self.valignment = self.valignment[0]
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data, self.halignment, self.valignment)
self.extrusion = self.get_extrusion(obj.data)
@@ -638,8 +639,8 @@ class Mtext:
else:
self.line_space = self.line_space[0]
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data)
self.extrusion = self.get_extrusion(obj.data)
@@ -730,8 +731,8 @@ class Circle:
else:
self.color_index = BYLAYER
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data)
self.extrusion = self.get_extrusion(obj.data)
@@ -805,8 +806,8 @@ class Arc:
else:
self.color_index = BYLAYER
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data)
self.extrusion = self.get_extrusion(obj.data)
@@ -923,8 +924,8 @@ class Block:
else:
self.discription = ''
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data)
@@ -984,9 +985,9 @@ class Insert:
self.color_index = self.color_index[0]
else:
self.color_index = BYLAYER
-
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data)
self.scale = self.get_scale(obj.data)
self.rows, self.columns = self.get_array(obj.data)
@@ -1097,8 +1098,8 @@ class Ellipse:
else:
self.color_index = BYLAYER
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.loc = self.get_loc(obj.data)
self.major = self.get_major(obj.data)
self.extrusion = self.get_extrusion(obj.data)
@@ -1185,8 +1186,8 @@ class Face:
else:
self.color_index = BYLAYER
- discard, self.layer = get_layer(obj.data)
- obj.data.remove(discard)
+ discard, self.layer, discard_index = get_layer(obj.data)
+ del obj.data[discard_index]
self.points = self.get_points(obj.data)
@@ -1242,7 +1243,6 @@ class Face:
return "%s: layer - %s, points - %s" %(self.__class__.__name__, self.layer, self.points)
-
def get_name(data):
"""Get the name of an object from its object data.
@@ -1251,23 +1251,23 @@ def get_name(data):
name not None before using the returned values!
"""
value = None
- for item in data:
+ for i, item in enumerate(data):
if item[0] == 2:
value = item[1]
break
- return item, value
+ return item, value, i
def get_layer(data):
"""Expects object data as input.
- Returns (entry, layer_name) where entry is the data item that provided the layer name.
+ Returns (entry, layer_name, entry_index) where entry is the data item that provided the layer name.
"""
value = None
- for item in data:
+ for i, item in enumerate(data):
if item[0] == 8:
value = item[1]
break
- return item, value
+ return item, value, i
# type to object map
diff --git a/release/scripts/bpymodules/dxfReader.py b/release/scripts/bpymodules/dxfReader.py
index 8d122173b82..f0635e00613 100644
--- a/release/scripts/bpymodules/dxfReader.py
+++ b/release/scripts/bpymodules/dxfReader.py
@@ -26,6 +26,9 @@
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
+# development
+#import dxfImportObjects
+#reload(dxfImportObjects)
from dxfImportObjects import *
@@ -141,9 +144,9 @@ def handleObject(infile):
def handleTable(table, infile):
"""Special handler for dealing with nested table objects."""
- item, name = get_name(table.data)
+ item, name, item_index = get_name(table.data)
if name: # We should always find a name
- table.data.remove(item)
+ del table.data[item_index]
table.name = name.lower()
# This next bit is from handleObject
# handleObject should be generalized to work with any section like object
@@ -162,9 +165,9 @@ def handleTable(table, infile):
def handleBlock(block, infile):
"""Special handler for dealing with nested table objects."""
- item, name = get_name(block.data)
+ item, name, item_index = get_name(block.data)
if name: # We should always find a name
- block.data.remove(item)
+ del block.data[item_index]
block.name = name.lower()
# This next bit is from handleObject
# handleObject should be generalized to work with any section like object
@@ -302,9 +305,9 @@ def readDXF(filename):
if drawing:
drawing.name = filename
for obj in drawing.data:
- item, name = get_name(obj.data)
+ item, name, item_index = get_name(obj.data)
if name:
- obj.data.remove(item)
+ del obj.data[item_index]
obj.name = name.lower()
setattr(drawing, name.lower(), obj)
# Call the objectify function from dxfImportObjects to cast
diff --git a/release/scripts/import_dxf.py b/release/scripts/import_dxf.py
index 15bee5b3905..535d762ffaa 100644
--- a/release/scripts/import_dxf.py
+++ b/release/scripts/import_dxf.py
@@ -78,10 +78,17 @@ except ImportError:
import sys
curdir = Sys.dirname(Blender.Get('filename'))
sys.path.append(curdir)
+
+# development
+#import dxfReader
+#reload(dxfReader)
+
from dxfReader import readDXF
from dxfColorMap import color_map
from math import *
+
+
try:
import os
if os.name:# != 'mac':
@@ -137,7 +144,7 @@ class MatColors:
self.map[color] = layer
color = 0
color = abs(color)
- if color not in self.colors.keys():
+ if color not in self.colors: # .keys()
self.add(color)
return self.colors[color]
@@ -179,7 +186,7 @@ class Blocks:
"""
if not name:
return self.blocks
- if name not in self.blocks.keys():
+ if name not in self.blocks: # .keys():
self.add(name)
return self.blocks[name]
@@ -223,17 +230,17 @@ class Settings:
# The header section may be omited
if self.optimization <= self.MID:
- if 'header' in sections.keys():
+ if 'header' in sections: #.keys():
print "Found header!"
else:
print "File contains no header!"
# The tables section may be partialy or completely missing.
- if 'tables' in sections.keys():
+ if 'tables' in sections: # .keys():
if self.optimization <= self.MID:
print "Found tables!"
tables = dict([(item.name, item) for item in sections["tables"].data])
- if 'layer' in tables.keys():
+ if 'layer' in tables: # .keys():
if self.optimization <= self.MID:
print "Found layers!"
# Read the layers table and get the layer colors
@@ -251,7 +258,7 @@ class Settings:
self.colors = MatColors({})
# The blocks section may be omited
- if 'blocks' in sections.keys():
+ if 'blocks' in sections: #.keys():
if self.optimization <= self.MID:
print "Found blocks!"
# Read the block definitions and build our block object
@@ -347,11 +354,11 @@ class Drawer:
# Set the visability
if settings.isOff(entity.layer):
- ob.layers = [20]
+ ob.Layers = 1<<19 # [20]
elif block_def:
- ob.layers = [19]
+ ob.Layers = (1<<18) # [19]
else:
- ob.layers = [i+1 for i in range(20)]
+ ob.Layers = (1<<20)-1 # [i+1 for i in xrange(20)] # all layers
# # Set the visability
# if settings.isOff(entity.layer) or block_def:
@@ -500,7 +507,7 @@ def drawDrawing(drawing):
drawEntities(drawing.entities, settings)
# Set the visable layers
- SCENE.setLayers([i+1 for i in range(18)])
+ SCENE.setLayers([i+1 for i in xrange(18)]) # SCENE.Layers = 262143 or (1<<18)
Blender.Redraw(-1)
if settings.optimization <= settings.MID:
print "Done!"
@@ -509,7 +516,7 @@ def drawEntities(entities, settings, group=None):
If provided 'group' is the Blender group new entities are to be added to.
"""
- for _type, drawer in type_map.items():
+ for _type, drawer in type_map.iteritems():
# for each known type get a list of that type and call the associated draw function
drawer(entities.get_type(_type), settings, group)
@@ -539,7 +546,7 @@ def drawLWpolyline(pline, curves=False):
"""Do all the specific things needed to import plines into Blender."""
# Generate the geometery
points = []
- for i in range(len(pline.points)):
+ for i in xrange(len(pline.points)):
point = pline.points[i]
if not point.bulge:
points.append(point.loc)
@@ -552,7 +559,7 @@ def drawLWpolyline(pline, curves=False):
if point.bulge >= 0:
verts.reverse()
points.extend(verts)
- edges = [[num, num+1] for num in range(len(points)-1)]
+ edges = [[num, num+1] for num in xrange(len(points)-1)]
if pline.closed:
edges.append([len(pline.points)-1, 0])
@@ -575,7 +582,7 @@ def drawPolyline(pline, curves=False):
"""Do all the specific things needed to import plines into Blender."""
# Generate the geometery
points = []
- for i in range(len(pline.points)):
+ for i in xrange(len(pline.points)):
point = pline.points[i]
if not point.bulge:
points.append(point.loc)
@@ -588,7 +595,7 @@ def drawPolyline(pline, curves=False):
if point.bulge >= 0:
verts.reverse()
points.extend(verts)
- edges = [[num, num+1] for num in range(len(points)-1)]
+ edges = [[num, num+1] for num in xrange(len(points)-1)]
if pline.closed:
edges.append([len(pline.points)-1, 0])
@@ -817,14 +824,14 @@ def drawArc(center, radius, start, end, step=0.5):
stepmatrix = Mathutils.RotationMatrix(step, 3, "Z")
point = Mathutils.Vector(startpoint)
- for i in range(int(pieces)):
+ for i in xrange(int(pieces)):
point = stepmatrix * point
points.append(point)
points.append(endpoint)
if center:
points = [[point[0]+center[0], point[1]+center[1], point[2]+center[2]] for point in points]
- edges = [[num, num+1] for num in range(len(points)-1)]
+ edges = [[num, num+1] for num in xrange(len(points)-1)]
return points, edges
drawEllipses = Drawer()
@@ -1003,3 +1010,34 @@ type_map = {
if __name__ == "__main__":
Window.FileSelector(main, 'Import a DXF file', '*.dxf')
+
+
+"""
+# For testing compatibility
+if 1:
+ # DEBUG ONLY
+ TIME= Blender.sys.time()
+ import os
+ print 'Searching for files'
+ os.system('find /metavr/ -iname "*.dxf" > /tmp/tempdxf_list')
+ print '...Done'
+ file= open('/tmp/tempdxf_list', 'r')
+ lines= file.readlines()
+ file.close()
+
+ def between(v,a,b):
+ if v <= max(a,b) and v >= min(a,b):
+ return True
+ return False
+
+ for i, _file in enumerate(lines):
+ if between(i, 50,60):
+ _file= _file[:-1]
+ print 'Importing', _file, '\nNUMBER', i, 'of', len(lines)
+ _file_name= _file.split('/')[-1].split('\\')[-1]
+ newScn= Scene.New(_file_name)
+ newScn.makeCurrent()
+ main(_file)
+
+ print 'TOTAL TIME: %.6f' % (Blender.sys.time() - TIME)
+""" \ No newline at end of file