Write docs for profile API module

This commit is contained in:
Dion Moult
2022-12-14 16:49:06 +11:00
parent a5a1ef2e8e
commit a5bdcf488b
4 changed files with 91 additions and 17 deletions
@@ -20,11 +20,35 @@ import ifcopenshell.util.unit
class Usecase:
def __init__(self, file, **settings):
def __init__(self, file, profile=None, name=None):
"""Adds a new arbitrary polyline-based profile
The profile is represented as a polyline defined by a list of
coordinates. Only straight segments are allowed. Coordinates must be
provided in SI meters.
To represent a closed curve, the first and last coordinate must be
identical.
:param profile: A list of coordinates
:type profile: list[list[float]]
:param name: If the profile is semantically significant (i.e. to be
managed and reused by the user) then it must be named. Otherwise,
this may be left as none.
:type name: str, optional
:return: The newly created IfcArbitraryClosedProfileDef
:rtype: ifcopenshell.entity_instance.entity_instance
Example::
# A 10mm by 100mm rectangle, such that might be used as a wooden
# skirting board or kick plate.
square = ifcopenshell.api.run("profile.add_arbitrary_profile", model,
profile=[(0., 0.), (.01, 0.), (.01, .1), (0., .1), (0., 0.)],
name="SK01 Profile")
"""
self.file = file
self.settings = {"profile": None}
for key, value in settings.items():
self.settings[key] = value
self.settings = {"profile": profile, "name": name}
def execute(self):
self.settings["unit_scale"] = ifcopenshell.util.unit.calculate_unit_scale(self.file)
@@ -33,7 +57,7 @@ class Usecase:
curve = self.file.createIfcPolyline([self.file.createIfcCartesianPoint(p) for p in points])
else:
curve = self.file.createIfcIndexedPolyCurve(self.file.createIfcCartesianPointList3D(points))
return self.file.createIfcArbitraryClosedProfileDef("AREA", None, curve)
return self.file.createIfcArbitraryClosedProfileDef("AREA", self.settings["name"], curve)
def convert_si_to_unit(self, co):
if isinstance(co, (tuple, list)):