mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
ifc2sql - small optimizations
This commit is contained in:
@@ -231,20 +231,22 @@ class Patcher:
|
|||||||
checkpoint = time.time()
|
checkpoint = time.time()
|
||||||
shape = iterator.get()
|
shape = iterator.get()
|
||||||
if shape:
|
if shape:
|
||||||
if shape.geometry.id not in self.geometry_rows:
|
shape_id = shape.id
|
||||||
v = np.array(shape.geometry.verts).tobytes()
|
geometry_id = shape.geometry.id
|
||||||
e = np.array(shape.geometry.edges).tobytes()
|
if geometry_id not in self.geometry_rows:
|
||||||
f = np.array(shape.geometry.faces).tobytes()
|
geometry: ShapeType
|
||||||
mids = np.array(shape.geometry.material_ids).tobytes()
|
geometry = shape.geometry
|
||||||
|
v = geometry.verts_buffer
|
||||||
|
e = geometry.edges_buffer
|
||||||
|
f = geometry.faces_buffer
|
||||||
|
mids = geometry.material_ids_buffer
|
||||||
m = json.dumps([m.instance_id() for m in shape.geometry.materials])
|
m = json.dumps([m.instance_id() for m in shape.geometry.materials])
|
||||||
self.geometry_rows[shape.geometry.id] = [shape.geometry.id, v, e, f, mids, m]
|
self.geometry_rows[geometry_id] = [geometry_id, v, e, f, mids, m]
|
||||||
# Copy required since otherwise it is read-only
|
# Copy required since otherwise it is read-only
|
||||||
m = ifcopenshell.util.shape.get_shape_matrix(shape).copy()
|
m = ifcopenshell.util.shape.get_shape_matrix(shape).copy()
|
||||||
m[0][3] /= self.unit_scale
|
m[:3, 3] /= self.unit_scale
|
||||||
m[1][3] /= self.unit_scale
|
x, y, z = m[:, 3][0:3].tolist()
|
||||||
m[2][3] /= self.unit_scale
|
self.shape_rows[shape_id] = [shape_id, x, y, z, m.tobytes(), geometry_id]
|
||||||
x, y, z = m[:, 3][0:3]
|
|
||||||
self.shape_rows[shape.id] = [shape.id, float(x), float(y), float(z), m.tobytes(), shape.geometry.id]
|
|
||||||
if not iterator.next():
|
if not iterator.next():
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -469,10 +471,10 @@ class Patcher:
|
|||||||
pset_rows.append([element.id(), pset_name, prop_name, value])
|
pset_rows.append([element.id(), pset_name, prop_name, value])
|
||||||
|
|
||||||
if self.should_get_geometry:
|
if self.should_get_geometry:
|
||||||
if element.id() not in self.shape_rows and getattr(element, "ObjectPlacement", None):
|
if element.id() not in self.shape_rows and (placement := getattr(element, "ObjectPlacement", None)):
|
||||||
m = ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement)
|
m = ifcopenshell.util.placement.get_local_placement(placement)
|
||||||
x, y, z = m[:, 3][0:3]
|
x, y, z = m[:, 3][0:3].tolist()
|
||||||
self.shape_rows[element.id()] = [element.id(), float(x), float(y), float(z), m.tobytes(), None]
|
self.shape_rows[element.id()] = [element.id(), x, y, z, m.tobytes(), None]
|
||||||
|
|
||||||
if self.sql_type == "sqlite":
|
if self.sql_type == "sqlite":
|
||||||
if rows:
|
if rows:
|
||||||
|
|||||||
Reference in New Issue
Block a user