mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-12 18:43:26 +00:00
Preliminary changes to blenderbim for v0.8 #4565
This commit is contained in:
@@ -148,7 +148,7 @@ class IfcStore:
|
||||
bpy.context.scene.BIMProjectProperties.export_schema
|
||||
)
|
||||
elif IfcStore.schema is None:
|
||||
IfcStore.schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(IfcStore.file.schema)
|
||||
IfcStore.schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(IfcStore.file.schema_identifier)
|
||||
return IfcStore.schema
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -391,20 +391,20 @@ class IfcImporter:
|
||||
|
||||
for context in self.contexts:
|
||||
settings = ifcopenshell.geom.settings()
|
||||
settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
|
||||
settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance)
|
||||
settings.set(settings.STRICT_TOLERANCE, True)
|
||||
settings.set(settings.INCLUDE_CURVES, True)
|
||||
settings.set_context_ids([context.id()])
|
||||
settings.set('mesher-linear-deflection', self.ifc_import_settings.deflection_tolerance)
|
||||
settings.set('mesher-angular-deflection', self.ifc_import_settings.angular_tolerance)
|
||||
# settings.set(settings.STRICT_TOLERANCE, True)
|
||||
settings.set('dimensionality', ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS)
|
||||
settings.set('context-ids', [context.id()])
|
||||
self.context_settings.append(settings)
|
||||
|
||||
settings = ifcopenshell.geom.settings()
|
||||
settings.set_deflection_tolerance(self.ifc_import_settings.deflection_tolerance)
|
||||
settings.set_angular_tolerance(self.ifc_import_settings.angular_tolerance)
|
||||
settings.set(settings.STRICT_TOLERANCE, True)
|
||||
settings.set(settings.INCLUDE_CURVES, True)
|
||||
settings.set(settings.DISABLE_OPENING_SUBTRACTIONS, True)
|
||||
settings.set_context_ids([context.id()])
|
||||
settings.set('mesher-linear-deflection', self.ifc_import_settings.deflection_tolerance)
|
||||
settings.set('mesher-angular-deflection', self.ifc_import_settings.angular_tolerance)
|
||||
# settings.set(settings.STRICT_TOLERANCE, True)
|
||||
settings.set('dimensionality', ifcopenshell.ifcopenshell_wrapper.CURVES_SURFACES_AND_SOLIDS)
|
||||
settings.set('disable-opening-subtractions', True)
|
||||
settings.set('context-ids', [context.id()])
|
||||
self.gross_context_settings.append(settings)
|
||||
|
||||
def process_element_filter(self):
|
||||
@@ -693,10 +693,7 @@ class IfcImporter:
|
||||
shape = self.create_generic_shape(element)
|
||||
if not shape:
|
||||
continue
|
||||
m = shape.transformation.matrix.data
|
||||
mat = np.array(
|
||||
([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])
|
||||
)
|
||||
mat = np.array(shape.transformation.matrix).reshape((4,4))
|
||||
point = np.array(
|
||||
(
|
||||
shape.geometry.verts[0] / self.unit_scale,
|
||||
@@ -1153,11 +1150,7 @@ class IfcImporter:
|
||||
self.link_element(element, obj)
|
||||
|
||||
if shape:
|
||||
m = shape.transformation.matrix.data
|
||||
# We use numpy here because Blender mathutils.Matrix is not accurate enough
|
||||
mat = np.array(
|
||||
([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])
|
||||
)
|
||||
mat = np.array(shape.transformation.matrix).reshape((4,4))
|
||||
self.set_matrix_world(obj, self.apply_blender_offset_to_matrix_world(obj, mat))
|
||||
self.material_creator.create(element, obj, mesh)
|
||||
elif mesh:
|
||||
@@ -1893,10 +1886,7 @@ class IfcImporter:
|
||||
and geometry.verts
|
||||
and self.is_point_far_away((geometry.verts[0], geometry.verts[1], geometry.verts[2]))
|
||||
):
|
||||
m = shape.transformation.matrix.data
|
||||
mat = np.array(
|
||||
([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])
|
||||
)
|
||||
mat = np.array(shape.transformation.matrix).reshape((4,4))
|
||||
offset_point = np.linalg.inv(mat) @ np.array(
|
||||
(
|
||||
float(props.blender_eastings),
|
||||
@@ -1950,7 +1940,7 @@ class IfcImporter:
|
||||
edges = [[e[i], e[i + 1]] for i in range(0, len(e), 2)]
|
||||
mesh.from_pydata(vertices, edges, [])
|
||||
|
||||
mesh["ios_materials"] = [int(m.name.split("-")[2]) for m in geometry.materials]
|
||||
mesh["ios_materials"] = [m.instance_id() for m in geometry.materials]
|
||||
mesh["ios_material_ids"] = geometry.material_ids
|
||||
return mesh
|
||||
except:
|
||||
|
||||
@@ -832,7 +832,7 @@ class AddBoundary(bpy.types.Operator, tool.Ifc.Operator):
|
||||
settings = ifcopenshell.geom.settings()
|
||||
settings.set(settings.STRICT_TOLERANCE, True)
|
||||
shape = ifcopenshell.geom.create_shape(settings, opening)
|
||||
m = shape.transformation.matrix.data
|
||||
m = shape.transformation.matrix
|
||||
mat = Matrix(
|
||||
(
|
||||
[m[0], m[3], m[6], m[9]],
|
||||
@@ -1035,7 +1035,7 @@ class AddBoundary(bpy.types.Operator, tool.Ifc.Operator):
|
||||
settings.set(settings.STRICT_TOLERANCE, True)
|
||||
# geometry = ifcopenshell.geom.create_shape(settings, body)
|
||||
shape = ifcopenshell.geom.create_shape(settings, element)
|
||||
m = shape.transformation.matrix.data
|
||||
m = shape.transformation.matrix
|
||||
mat = Matrix(([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]))
|
||||
verts = [space_matrix_i @ mat @ Vector(v) for v in ifcopenshell.util.shape.get_vertices(shape.geometry)]
|
||||
faces = ifcopenshell.util.shape.get_faces(shape.geometry)
|
||||
|
||||
@@ -736,7 +736,7 @@ class LoadProjectElements(bpy.types.Operator):
|
||||
def execute(self, context):
|
||||
self.props = context.scene.BIMProjectProperties
|
||||
self.file = IfcStore.get_file()
|
||||
blenderbim.bim.schema.reload(self.file.schema)
|
||||
blenderbim.bim.schema.reload(self.file.schema_identifier)
|
||||
start = time.time()
|
||||
logger = logging.getLogger("ImportIFC")
|
||||
path_log = os.path.join(context.scene.BIMProperties.data_dir, "process.log")
|
||||
@@ -1427,7 +1427,7 @@ class LoadLinkedProject(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
|
||||
def is_local(self, shape):
|
||||
m = shape.transformation.matrix.data
|
||||
m = shape.transformation.matrix
|
||||
if max([abs(co) for co in (m[9], m[10], m[11])]) > 1000:
|
||||
return False
|
||||
elif max([abs(co) for co in shape.geometry.verts[0:3]]) > 1000:
|
||||
@@ -1436,13 +1436,13 @@ class LoadLinkedProject(bpy.types.Operator):
|
||||
|
||||
def process_occurrence(self, shape):
|
||||
element = self.file.by_id(shape.id)
|
||||
matrix = shape.transformation.matrix.data
|
||||
matrix = shape.transformation.matrix
|
||||
faces = shape.geometry.faces
|
||||
verts = shape.geometry.verts
|
||||
materials = shape.geometry.materials
|
||||
material_ids = shape.geometry.material_ids
|
||||
|
||||
m = shape.transformation.matrix.data
|
||||
m = shape.transformation.matrix
|
||||
mat = np.array(([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1]))
|
||||
|
||||
mesh = self.meshes.get(shape.geometry.id, None)
|
||||
|
||||
@@ -692,7 +692,7 @@ class Drawing(blenderbim.core.tool.Drawing):
|
||||
cls.import_camera_props(drawing, obj)
|
||||
tool.Ifc.link(drawing, obj)
|
||||
|
||||
m = shape.transformation.matrix.data
|
||||
m = shape.transformation.matrix
|
||||
mat = mathutils.Matrix(
|
||||
([m[0], m[3], m[6], m[9]], [m[1], m[4], m[7], m[10]], [m[2], m[5], m[8], m[11]], [0, 0, 0, 1])
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user