create a setting to produce pythonOCC shapes for ifcopenshell.geom.iterator and -create_shape()

This commit is contained in:
Thomas Krijnen
2015-02-19 21:45:17 +00:00
parent 8f853ac5af
commit f20ae8e25e
2 changed files with 100 additions and 2 deletions
@@ -22,7 +22,33 @@ import sys
from .. import ifcopenshell_wrapper
settings = ifcopenshell_wrapper.settings
def has_occ():
try: import OCC.BRepTools
except: return False
return True
has_occ = has_occ()
wrap_shape_creation = lambda settings, shape: shape
if has_occ:
import occ_utils as utils
wrap_shape_creation = lambda settings, shape: utils.create_shape_from_serialization(shape) if getattr(settings, 'use_python_opencascade', False) else shape
# Subclass the settings module to provide an additional
# setting to enable pythonOCC when available
class settings(ifcopenshell_wrapper.settings):
if has_occ:
USE_PYTHON_OPENCASCADE = -1
def set(self, *args):
setting, value = args
if setting == settings.USE_PYTHON_OPENCASCADE:
self.set(settings.USE_BREP_DATA, value)
self.set(settings.DISABLE_TRIANGULATION, value)
self.use_python_opencascade = value
else:
ifcopenshell_wrapper.settings.set(self, *args)
# Hide templating precision to the user by choosing based on Python's
# internal float type. This is probably always going to be a double.
@@ -34,11 +60,15 @@ for ty in (ifcopenshell_wrapper.iterator_single_precision, ifcopenshell_wrapper.
# Make sure people are able to use python's platform agnostic paths
class iterator(_iterator):
def __init__(self, settings, filename):
self.settings = settings
_iterator.__init__(self, settings, os.path.abspath(filename))
if has_occ:
def get(self):
return wrap_shape_creation(self.settings, _iterator.get(self))
def create_shape(settings, inst):
return ifcopenshell_wrapper.create_shape(settings, inst.wrapped_data)
return wrap_shape_creation(settings, ifcopenshell_wrapper.create_shape(settings, inst.wrapped_data))
def iterate(settings, filename):
@@ -47,3 +77,5 @@ def iterate(settings, filename):
while True:
yield it.get()
if not it.next(): break