mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-13 02:47:48 +00:00
Generate functions for all API usecases for better static code features. See #2693.
This commit is contained in:
@@ -19,39 +19,42 @@
|
||||
import ifcopenshell.util.unit
|
||||
|
||||
|
||||
def add_arbitrary_profile(file, profile=None, name=None) -> 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
|
||||
|
||||
Example:
|
||||
|
||||
.. code:: python
|
||||
|
||||
# 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")
|
||||
"""
|
||||
usecase = Usecase()
|
||||
usecase.file = file
|
||||
usecase.settings = {"profile": profile, "name": name}
|
||||
return usecase.execute()
|
||||
|
||||
|
||||
class Usecase:
|
||||
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
|
||||
|
||||
Example:
|
||||
|
||||
.. code:: python
|
||||
|
||||
# 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": profile, "name": name}
|
||||
|
||||
def execute(self):
|
||||
self.settings["unit_scale"] = ifcopenshell.util.unit.calculate_unit_scale(self.file)
|
||||
points = [self.convert_si_to_unit(p) for p in self.settings["profile"]]
|
||||
|
||||
Reference in New Issue
Block a user