mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 15:08:51 +00:00
Fix #1589. Saving beveled curves as rswept disk solids is now supported.
This commit is contained in:
@@ -217,7 +217,9 @@ class Usecase:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def create_variable_representation(self):
|
def create_variable_representation(self):
|
||||||
if isinstance(self.settings["geometry"], bpy.types.Curve):
|
if isinstance(self.settings["geometry"], bpy.types.Curve) and self.settings["geometry"].bevel_depth:
|
||||||
|
return self.create_swept_disk_solid_representation()
|
||||||
|
elif isinstance(self.settings["geometry"], bpy.types.Curve):
|
||||||
return self.create_curve3d_representation()
|
return self.create_curve3d_representation()
|
||||||
elif isinstance(self.settings["geometry"], bpy.types.Camera):
|
elif isinstance(self.settings["geometry"], bpy.types.Camera):
|
||||||
return self.create_camera_block_representation()
|
return self.create_camera_block_representation()
|
||||||
@@ -273,6 +275,14 @@ class Usecase:
|
|||||||
> self.settings["geometry"].BIMCameraProperties.raster_y
|
> self.settings["geometry"].BIMCameraProperties.raster_y
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def create_swept_disk_solid_representation(self):
|
||||||
|
return self.file.createIfcShapeRepresentation(
|
||||||
|
self.settings["context"],
|
||||||
|
self.settings["context"].ContextIdentifier,
|
||||||
|
"AdvancedSweptSolid",
|
||||||
|
self.create_swept_disk_solids(),
|
||||||
|
)
|
||||||
|
|
||||||
def create_curve3d_representation(self):
|
def create_curve3d_representation(self):
|
||||||
return self.file.createIfcShapeRepresentation(
|
return self.file.createIfcShapeRepresentation(
|
||||||
self.settings["context"],
|
self.settings["context"],
|
||||||
@@ -335,6 +345,14 @@ class Usecase:
|
|||||||
]
|
]
|
||||||
return self.file.createIfcPolyline([points[i] for i in indices])
|
return self.file.createIfcPolyline([points[i] for i in indices])
|
||||||
|
|
||||||
|
def create_swept_disk_solids(self):
|
||||||
|
curves = self.create_curves()
|
||||||
|
results = []
|
||||||
|
radius = self.convert_si_to_unit(round(self.settings["geometry"].bevel_depth, 3))
|
||||||
|
for curve in curves:
|
||||||
|
results.append(self.file.createIfcSweptDiskSolid(curve, radius))
|
||||||
|
return results
|
||||||
|
|
||||||
def create_curves(self, should_exclude_faces=False, is_2d=False):
|
def create_curves(self, should_exclude_faces=False, is_2d=False):
|
||||||
if isinstance(self.settings["geometry"], bpy.types.Mesh):
|
if isinstance(self.settings["geometry"], bpy.types.Mesh):
|
||||||
if self.file.schema == "IFC2X3":
|
if self.file.schema == "IFC2X3":
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ class Usecase:
|
|||||||
for item in element.Items:
|
for item in element.Items:
|
||||||
if not item.is_a("IfcGeometricRepresentationItem"):
|
if not item.is_a("IfcGeometricRepresentationItem"):
|
||||||
continue
|
continue
|
||||||
style = self.settings["styles"].pop(0)
|
if self.settings["styles"]:
|
||||||
|
# If there are more items than styles, fallback to using the last style
|
||||||
|
style = self.settings["styles"].pop(0)
|
||||||
name = style.Name
|
name = style.Name
|
||||||
if self.file.schema == "IFC2X3" or self.settings["should_use_presentation_style_assignment"]:
|
if self.file.schema == "IFC2X3" or self.settings["should_use_presentation_style_assignment"]:
|
||||||
style = self.file.createIfcPresentationStyleAssignment([style])
|
style = self.file.createIfcPresentationStyleAssignment([style])
|
||||||
|
|||||||
Reference in New Issue
Block a user