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:
Diffstat (limited to 'release/scripts/bpymodules/dxfReader.py')
-rw-r--r--release/scripts/bpymodules/dxfReader.py84
1 files changed, 70 insertions, 14 deletions
diff --git a/release/scripts/bpymodules/dxfReader.py b/release/scripts/bpymodules/dxfReader.py
index f0635e00613..d4a39cf63d6 100644
--- a/release/scripts/bpymodules/dxfReader.py
+++ b/release/scripts/bpymodules/dxfReader.py
@@ -5,7 +5,7 @@
"""
# --------------------------------------------------------------------------
-# DXF Reader v0.8 by Ed Blake (AKA Kitsu)
+# DXF Reader v0.9 by Ed Blake (AKA Kitsu)
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
@@ -26,11 +26,40 @@
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
-# development
-#import dxfImportObjects
-#reload(dxfImportObjects)
-from dxfImportObjects import *
+#from dxfImportObjects import *
+
+class Object:
+ """Empty container class for dxf objects"""
+
+ def __init__(self, _type='', block=False):
+ """_type expects a string value."""
+ self.type = _type
+ self.name = ''
+ self.data = []
+
+ def __str__(self):
+ if self.name:
+ return self.name
+ else:
+ return self.type
+
+ def __repr__(self):
+ return str(self.data)
+
+ def get_type(self, kind=''):
+ """Despite the name, this method actually returns all objects of type 'kind' from self.data."""
+ if type:
+ objects = []
+ for item in self.data:
+ if type(item) != list and item.type == kind:
+ # we want this type of object
+ objects.append(item)
+ elif type(item) == list and item[0] == kind:
+ # we want this type of data
+ objects.append(item[1])
+ return objects
+
class InitializationError(Exception): pass
@@ -72,6 +101,33 @@ class StateMachine:
else:
handler = newState
+def get_name(data):
+ """Get the name of an object from its object data.
+
+ Returns a pair of (data_item, name) where data_item is the list entry where the name was found
+ (the data_item can be used to remove the entry from the object data). Be sure to check
+ name not None before using the returned values!
+ """
+ value = None
+ for item in data:
+ if item[0] == 2:
+ value = item[1]
+ break
+ return item, value
+
+def get_layer(data):
+ """Expects object data as input.
+
+ Returns (entry, layer_name) where entry is the data item that provided the layer name.
+ """
+ value = None
+ for item in data:
+ if item[0] == 8:
+ value = item[1]
+ break
+ return item, value
+
+
def convert(code, value):
"""Convert a string to the correct Python type based on its dxf code.
code types:
@@ -144,9 +200,9 @@ def handleObject(infile):
def handleTable(table, infile):
"""Special handler for dealing with nested table objects."""
- item, name, item_index = get_name(table.data)
+ item, name = get_name(table.data)
if name: # We should always find a name
- del table.data[item_index]
+ table.data.remove(item)
table.name = name.lower()
# This next bit is from handleObject
# handleObject should be generalized to work with any section like object
@@ -165,10 +221,10 @@ def handleTable(table, infile):
def handleBlock(block, infile):
"""Special handler for dealing with nested table objects."""
- item, name, item_index = get_name(block.data)
+ item, name = get_name(block.data)
if name: # We should always find a name
- del block.data[item_index]
- block.name = name.lower()
+ block.data.remove(item)
+ block.name = name
# This next bit is from handleObject
# handleObject should be generalized to work with any section like object
while 1:
@@ -271,7 +327,7 @@ def error(cargo):
print err
return False
-def readDXF(filename):
+def readDXF(filename, objectify):
"""Given a file name try to read it as a dxf file.
Output is an object with the following structure
@@ -305,12 +361,12 @@ def readDXF(filename):
if drawing:
drawing.name = filename
for obj in drawing.data:
- item, name, item_index = get_name(obj.data)
+ item, name = get_name(obj.data)
if name:
- del obj.data[item_index]
+ obj.data.remove(item)
obj.name = name.lower()
setattr(drawing, name.lower(), obj)
- # Call the objectify function from dxfImportObjects to cast
+ # Call the objectify function to cast
# raw objects into the right types of object
obj.data = objectify(obj.data)
#print obj.name