mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 09:15:21 +00:00
This commit is contained in:
@@ -1170,7 +1170,7 @@ class DumbWallJoiner:
|
|||||||
ifcopenshell.util.element.replace_element(old_rep, rep)
|
ifcopenshell.util.element.replace_element(old_rep, rep)
|
||||||
ifcopenshell.util.element.remove_deep2(tool.Ifc.get(), old_rep)
|
ifcopenshell.util.element.remove_deep2(tool.Ifc.get(), old_rep)
|
||||||
else:
|
else:
|
||||||
ifcopenshell.api.geometry.assign_representation(self.file, product=wall, representation=rep)
|
ifcopenshell.api.geometry.assign_representation(tool.Ifc.get(), product=wall, representation=rep)
|
||||||
|
|
||||||
def extend(self, wall1, target):
|
def extend(self, wall1, target):
|
||||||
if tool.Ifc.is_moved(wall1):
|
if tool.Ifc.is_moved(wall1):
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ def regenerate_wall_representation(
|
|||||||
0.0)). This is a logical, consistent, and useful placement coordinate
|
0.0)). This is a logical, consistent, and useful placement coordinate
|
||||||
(especially for apps that can pivot using this point).
|
(especially for apps that can pivot using this point).
|
||||||
|
|
||||||
|
All this functionality relies on the Plan/Axis/GRAPH_VIEW representation
|
||||||
|
context. It will be created if it does not exist.
|
||||||
|
|
||||||
:param wall: The IfcWall for the representation,
|
:param wall: The IfcWall for the representation,
|
||||||
only Model/Body/MODEL_VIEW type of representations are currently supported.
|
only Model/Body/MODEL_VIEW type of representations are currently supported.
|
||||||
:param length: If the wall doesn't have an axis length, this is the default
|
:param length: If the wall doesn't have an axis length, this is the default
|
||||||
@@ -94,6 +97,13 @@ class Regenerator:
|
|||||||
self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(file)
|
self.unit_scale = ifcopenshell.util.unit.calculate_unit_scale(file)
|
||||||
self.is_angled = False
|
self.is_angled = False
|
||||||
|
|
||||||
|
if not self.axis:
|
||||||
|
if not (plan := ifcopenshell.util.representation.get_context(file, "Plan")):
|
||||||
|
plan = ifcopenshell.api.context.add_context(file, context_type="Plan")
|
||||||
|
self.axis = ifcopenshell.api.context.add_context(
|
||||||
|
file, context_type="Plan", context_identifier="Axis", target_view="GRAPH_VIEW", parent=plan
|
||||||
|
)
|
||||||
|
|
||||||
def regenerate(self, wall, length=1.0, height=1.0, angle=None):
|
def regenerate(self, wall, length=1.0, height=1.0, angle=None):
|
||||||
print("-" * 100)
|
print("-" * 100)
|
||||||
print(wall)
|
print(wall)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import numpy.typing as npt
|
import numpy.typing as npt
|
||||||
import ifcopenshell
|
import ifcopenshell
|
||||||
|
import ifcopenshell.util.shape
|
||||||
import ifcopenshell.util.placement
|
import ifcopenshell.util.placement
|
||||||
from typing import Optional, Union, TypedDict, Literal, Generator, Sequence
|
from typing import Optional, Union, TypedDict, Literal, Generator, Sequence
|
||||||
|
|
||||||
@@ -488,4 +489,13 @@ def get_reference_line(wall: ifcopenshell.entity_instance, fallback_length: floa
|
|||||||
if points[0][0] < points[1][0]: # An axis always goes in the +X direction
|
if points[0][0] < points[1][0]: # An axis always goes in the +X direction
|
||||||
return [np.array(points[0]), np.array(points[1])]
|
return [np.array(points[0]), np.array(points[1])]
|
||||||
return [np.array(points[1]), np.array(points[0])]
|
return [np.array(points[1]), np.array(points[0])]
|
||||||
|
elif extrusions := ifcopenshell.util.shape.get_base_extrusions(wall):
|
||||||
|
for item in extrusions:
|
||||||
|
if item.is_a("IfcPolyline"):
|
||||||
|
x = [p[0][0] for p in item.Points]
|
||||||
|
elif item.is_a("IfcIndexedPolyCurve"):
|
||||||
|
x = [p[0] for p in item.Points.CoordList]
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
return [np.array((min(x), 0.0)), np.array((max(x), 0.0))]
|
||||||
return [np.array((0.0, 0.0)), np.array((fallback_length, 0.0))]
|
return [np.array((0.0, 0.0)), np.array((fallback_length, 0.0))]
|
||||||
|
|||||||
Reference in New Issue
Block a user