mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-19 03:33:48 +00:00
ifccityjson conversion support for MultiLineString and MultiPoint
This commit is contained in:
@@ -35,16 +35,50 @@ class GeometryIO:
|
||||
IFC_cartesian_point = IFC_model.create_entity("IfcCartesianPoint", IFC_vertex)
|
||||
self.vertices[tuple(coord)] = IFC_cartesian_point
|
||||
|
||||
# See for CityJSON geometries:
|
||||
# https://www.cityjson.org/dev/geom-arrays/
|
||||
# https://www.cityjson.org/specs/1.0.3/#geometry-objects
|
||||
def create_IFC_geometry(self, IFC_model, geometry):
|
||||
if geometry.type == "Solid":
|
||||
return self.create_IFC_closed_shell(IFC_model, geometry)
|
||||
elif geometry.type in ["CompositeSolid", "MultiSolid"]:
|
||||
return self.create_IFC_composite_closed_shell(IFC_model, geometry)
|
||||
IFC_Geometry = None
|
||||
geometry_type = 'brep'
|
||||
if geometry.type in ["MultiPoint"]:
|
||||
IFC_geometry = self.create_IFC_cartesian_point_list3D(IFC_model, geometry)
|
||||
geometry_type = 'PointCloud'
|
||||
elif geometry.type in ["MultiLineString"]:
|
||||
IFC_geometry = self.create_IFC_composite_curve(IFC_model, geometry)
|
||||
geometry_type = 'Curve3D'
|
||||
elif geometry.type in ["CompositeSurface", "MultiSurface"]:
|
||||
return self.create_IFC_surface(IFC_model, geometry)
|
||||
IFC_geometry = self.create_IFC_surface(IFC_model, geometry)
|
||||
elif geometry.type == "Solid":
|
||||
IFC_geometry = self.create_IFC_closed_shell(IFC_model, geometry)
|
||||
elif geometry.type in ["CompositeSolid", "MultiSolid"]:
|
||||
IFC_geometry = self.create_IFC_composite_closed_shell(IFC_model, geometry)
|
||||
elif geometry.type in ["GeometryInstance"]:
|
||||
warnings.warn("GeometryInstance is not supported.")
|
||||
return None, None
|
||||
else:
|
||||
warnings.warn("Types other than solids are not yet supported")
|
||||
return
|
||||
warnings.warn("Custom CityJSON geometries are not supported.")
|
||||
return None, None
|
||||
return IFC_geometry, geometry_type
|
||||
|
||||
def create_IFC_cartesian_point_list3D(self, IFC_model, geometry):
|
||||
# https://www.cityjson.org/dev/geom-arrays/
|
||||
# https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifcgeometricmodelresource/lexical/ifccartesianpointlist3d.htm
|
||||
IFC_geometry = IFC_model.create_entity("IfcCartesianPointList3D", geometry.boundaries)
|
||||
return IFC_geometry
|
||||
|
||||
def create_IFC_composite_curve(self, IFC_model, geometry):
|
||||
# https://www.cityjson.org/dev/geom-arrays/
|
||||
# https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifcgeometryresource/lexical/ifccompositecurve.htm
|
||||
# https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/schema/ifcgeometryresource/lexical/ifccompositecurvesegment.htm
|
||||
IFC_geometry = []
|
||||
for line in geometry.boundaries:
|
||||
vertices = []
|
||||
for vertex in line:
|
||||
vertices.append(self.vertices[tuple(vertex)])
|
||||
polyline = IFC_model.create_entity("IfcPolyLine", vertices)
|
||||
IFC_geometry.append(polyline)
|
||||
return IFC_geometry
|
||||
|
||||
def create_IFC_composite_closed_shell(self, IFC_model, geometry):
|
||||
shells = []
|
||||
|
||||
Reference in New Issue
Block a user