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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_import_dxf/dxfgrabber/entitysection.py')
-rwxr-xr-xio_import_dxf/dxfgrabber/entitysection.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/io_import_dxf/dxfgrabber/entitysection.py b/io_import_dxf/dxfgrabber/entitysection.py
new file mode 100755
index 00000000..e87bbb46
--- /dev/null
+++ b/io_import_dxf/dxfgrabber/entitysection.py
@@ -0,0 +1,94 @@
+# Purpose: handle entity section
+# Created: 21.07.2012, taken from my ezdxf project
+# Copyright (C) 2012, Manfred Moitzi
+# License: MIT License
+from __future__ import unicode_literals
+__author__ = "mozman <mozman@gmx.at>"
+
+from itertools import islice
+
+from .tags import TagGroups, DXFStructureError
+from .tags import ClassifiedTags
+from .entities import entity_factory
+
+
+class EntitySection(object):
+ name = 'entities'
+
+ def __init__(self):
+ self._entities = list()
+
+ @classmethod
+ def from_tags(cls, tags, drawing):
+ entity_section = cls()
+ entity_section._build(tags, drawing.dxfversion)
+ return entity_section
+
+ def get_entities(self):
+ return self._entities
+
+ # start of public interface
+
+ def __len__(self):
+ return len(self._entities)
+
+ def __iter__(self):
+ return iter(self._entities)
+
+ def __getitem__(self, index):
+ return self._entities[index]
+
+ # end of public interface
+
+ def _build(self, tags, dxfversion):
+ if len(tags) == 3: # empty entities section
+ return
+ groups = TagGroups(islice(tags, 2, len(tags)-1))
+ self._entities = build_entities(groups, dxfversion)
+
+
+class ObjectsSection(EntitySection):
+ name = 'objects'
+
+
+def build_entities(tag_groups, dxfversion):
+ def build_entity(group):
+ try:
+ entity = entity_factory(ClassifiedTags(group), dxfversion)
+ except KeyError:
+ entity = None # ignore unsupported entities
+ return entity
+
+ entities = list()
+ collector = None
+ for group in tag_groups:
+ entity = build_entity(group)
+ if entity is not None:
+ if collector:
+ if entity.dxftype == 'SEQEND':
+ collector.stop()
+ entities.append(collector.entity)
+ collector = None
+ else:
+ collector.append(entity)
+ elif entity.dxftype == 'POLYLINE':
+ collector = _Collector(entity)
+ elif entity.dxftype == 'INSERT' and entity.attribsfollow:
+ collector = _Collector(entity)
+ else:
+ entities.append(entity)
+ return entities
+
+
+class _Collector:
+ def __init__(self, entity):
+ self.entity = entity
+ self._data = list()
+
+ def append(self, entity):
+ self._data.append(entity)
+
+ def stop(self):
+ self.entity.append_data(self._data)
+ if hasattr(self.entity, 'cast'):
+ self.entity = self.entity.cast()