Adds object placement to stationing referent.

This commit is contained in:
Richard Brice
2025-05-12 16:14:53 -07:00
parent 3085072751
commit 686e9c946b
2 changed files with 18 additions and 16 deletions
@@ -23,7 +23,7 @@ import ifcopenshell.guid
from ifcopenshell import entity_instance from ifcopenshell import entity_instance
def add_stationing_to_alignment(file: ifcopenshell.file, alignment: entity_instance, start_station: float) -> None: def add_stationing_to_alignment(file: ifcopenshell.file, alignment: entity_instance, start_station: float, plus_seperator=3,accuracy=3) -> None:
""" """
Adds stationing to an alignment by creating an IfcReferent with the Pset_Stationing property set to establish the stationing at the start of the alignment. Adds stationing to an alignment by creating an IfcReferent with the Pset_Stationing property set to establish the stationing at the start of the alignment.
Note - this function assumes the stationing has not been previously defined Note - this function assumes the stationing has not been previously defined
@@ -43,20 +43,20 @@ def add_stationing_to_alignment(file: ifcopenshell.file, alignment: entity_insta
# the example is a circle. a better way would be to pass a representation into the function # the example is a circle. a better way would be to pass a representation into the function
object_placement = None object_placement = None
representation = None representation = None
# basis_curve = ifcopenshell.api.alignment.get_basis_curve(alignment) basis_curve = ifcopenshell.api.alignment.get_basis_curve(alignment)
# if basis_curve: if basis_curve:
# object_placement = file.createIfcLinearPlacement( object_placement = file.createIfcLinearPlacement(
# RelativePlacement=file.createIfcAxis2PlacementLinear( RelativePlacement=file.createIfcAxis2PlacementLinear(
# Location=file.createIfcPointByDistanceExpression( Location=file.createIfcPointByDistanceExpression(
# DistanceAlong=file.createIfcLengthMeasure(0.0), DistanceAlong=file.createIfcLengthMeasure(0.0),
# OffsetLateral=None, OffsetLateral=None,
# OffsetVertical=None, OffsetVertical=None,
# OffsetLongitudinal=None, OffsetLongitudinal=None,
# BasisCurve=basis_curve, BasisCurve=basis_curve,
# ) )
# ), ),
# CartesianPosition=None, CartesianPosition=None,
# ) )
# representation = file.create_entity( # representation = file.create_entity(
# name="IfcCircle", # name="IfcCircle",
# position=file.createIfcAxis2Placement2D(Location=file.createIfcCartesianPoint(Coordinates=(0.0, 0.0)), # position=file.createIfcAxis2Placement2D(Location=file.createIfcCartesianPoint(Coordinates=(0.0, 0.0)),
@@ -67,7 +67,7 @@ def add_stationing_to_alignment(file: ifcopenshell.file, alignment: entity_insta
start_referent = file.createIfcReferent( start_referent = file.createIfcReferent(
GlobalId=ifcopenshell.guid.new(), GlobalId=ifcopenshell.guid.new(),
OwnerHistory=None, OwnerHistory=None,
Name=ifcopenshell.util.stationing.station_as_string(start_station), Name=ifcopenshell.util.stationing.station_as_string(start_station,plus_seperator,accuracy),
Description=None, Description=None,
ObjectType=None, ObjectType=None,
ObjectPlacement=object_placement, ObjectPlacement=object_placement,
@@ -41,6 +41,7 @@ def test_add_stationing_to_alignment():
alignment = ifcopenshell.api.alignment.create_alignment_by_pi_method( alignment = ifcopenshell.api.alignment.create_alignment_by_pi_method(
file, "TestAlignment", coordinates, radii, vpoints, lengths file, "TestAlignment", coordinates, radii, vpoints, lengths
) )
ifcopenshell.api.alignment.create_geometric_representation(file, alignment)
ifcopenshell.api.alignment.add_stationing_to_alignment(file, alignment, 2000.0) ifcopenshell.api.alignment.add_stationing_to_alignment(file, alignment, 2000.0)
@@ -54,3 +55,4 @@ def test_add_stationing_to_alignment():
ifcopenshell.util.element.get_pset(element=referent, name="Pset_Stationing", prop="Station") ifcopenshell.util.element.get_pset(element=referent, name="Pset_Stationing", prop="Station")
== 2000.0 == 2000.0
) )
assert(referent.ObjectPlacement != None)