mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-18 11:20:21 +00:00
Add support for IfcGeometricSet IfcRevolvedAreaSolid IfcSurfaceOfLinearExtrusion IfcSurfaceOfRevolution IfcCenterLineProfileDef IfcArbitraryOpenProfileDef
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
/********************************************************************************
|
||||
* *
|
||||
* This file is part of IfcOpenShell. *
|
||||
* *
|
||||
* IfcOpenShell is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the Lesser GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3.0 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
* IfcOpenShell is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* Lesser GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the Lesser GNU General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
********************************************************************************/
|
||||
|
||||
/********************************************************************************
|
||||
* *
|
||||
* Example that generates various representations from *
|
||||
* IfcArbitraryOpenProfileDefs and its subclass IfcCenterLineProfileDef *
|
||||
* *
|
||||
********************************************************************************/
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include "../ifcparse/Ifc2x3.h"
|
||||
#include "../ifcparse/IfcUtil.h"
|
||||
#include "../ifcparse/IfcHierarchyHelper.h"
|
||||
|
||||
typedef std::string S;
|
||||
typedef IfcWrite::IfcGuidHelper guid;
|
||||
boost::none_t const null = (static_cast<boost::none_t>(0));
|
||||
static int i = 0;
|
||||
|
||||
void create_product_from_item(IfcHierarchyHelper& file, IfcSchema::IfcRepresentationItem* item, const std::string& s) {
|
||||
IfcSchema::IfcBuildingElementProxy* product = new IfcSchema::IfcBuildingElementProxy(
|
||||
guid(), 0, S("product"), null, null, 0, 0, null, null);
|
||||
file.addBuildingProduct(product);
|
||||
product->setOwnerHistory(file.getSingle<IfcSchema::IfcOwnerHistory>());
|
||||
|
||||
product->setObjectPlacement(file.addLocalPlacement(120 * i++));
|
||||
|
||||
IfcSchema::IfcRepresentation::list reps (new IfcTemplatedEntityList<IfcSchema::IfcRepresentation>());
|
||||
IfcSchema::IfcRepresentationItem::list items (new IfcTemplatedEntityList<IfcSchema::IfcRepresentationItem>());
|
||||
items->push(item);
|
||||
|
||||
if (s == "GeometricSet") {
|
||||
IfcSchema::IfcGeometricSet* set = new IfcSchema::IfcGeometricSet(items->generalize());
|
||||
file.AddEntity(set);
|
||||
items = IfcSchema::IfcRepresentationItem::list(new IfcTemplatedEntityList<IfcSchema::IfcRepresentationItem>());
|
||||
items->push(set);
|
||||
}
|
||||
|
||||
IfcSchema::IfcShapeRepresentation* rep = new IfcSchema::IfcShapeRepresentation(
|
||||
file.getSingle<IfcSchema::IfcRepresentationContext>(), S("Body"), s, items);
|
||||
reps->push(rep);
|
||||
|
||||
IfcSchema::IfcProductDefinitionShape* shape = new IfcSchema::IfcProductDefinitionShape(0, 0, reps);
|
||||
file.AddEntity(rep);
|
||||
file.AddEntity(shape);
|
||||
|
||||
product->setRepresentation(shape);
|
||||
}
|
||||
|
||||
void create_surfaces_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) {
|
||||
IfcSchema::IfcSurfaceOfLinearExtrusion* extrusion = new IfcSchema::IfcSurfaceOfLinearExtrusion(profile, file.addPlacement3d(), file.addTriplet<IfcSchema::IfcDirection>(0, 0, 1), 100.);
|
||||
file.AddEntity(extrusion);
|
||||
|
||||
IfcSchema::IfcAxis1Placement* ax1 = new IfcSchema::IfcAxis1Placement(file.addTriplet<IfcSchema::IfcCartesianPoint>(0,100,0), file.addTriplet<IfcSchema::IfcDirection>(1,0,0));
|
||||
IfcSchema::IfcSurfaceOfRevolution* revolution = new IfcSchema::IfcSurfaceOfRevolution(profile, file.addPlacement3d(), ax1);
|
||||
file.AddEntity(ax1);
|
||||
file.AddEntity(revolution);
|
||||
|
||||
create_product_from_item(file, extrusion, "GeometricSet");
|
||||
create_product_from_item(file, revolution, "GeometricSet");
|
||||
}
|
||||
|
||||
void create_solids_from_profile(IfcHierarchyHelper& file, IfcSchema::IfcProfileDef* profile) {
|
||||
IfcSchema::IfcExtrudedAreaSolid* extrusion = new IfcSchema::IfcExtrudedAreaSolid(profile, file.addPlacement3d(), file.addTriplet<IfcSchema::IfcDirection>(0, 0, 1), 100.);
|
||||
file.AddEntity(extrusion);
|
||||
|
||||
IfcSchema::IfcAxis1Placement* ax1 = new IfcSchema::IfcAxis1Placement(file.addTriplet<IfcSchema::IfcCartesianPoint>(0,100,0), file.addTriplet<IfcSchema::IfcDirection>(1,0,0));
|
||||
IfcSchema::IfcRevolvedAreaSolid* revolution1 = new IfcSchema::IfcRevolvedAreaSolid(profile, file.addPlacement3d(), ax1, 360.);
|
||||
IfcSchema::IfcRevolvedAreaSolid* revolution2 = new IfcSchema::IfcRevolvedAreaSolid(profile, file.addPlacement3d(), ax1, 90.);
|
||||
file.AddEntity(ax1);
|
||||
file.AddEntity(revolution1);
|
||||
file.AddEntity(revolution2);
|
||||
|
||||
create_product_from_item(file, extrusion, "SweptSolid");
|
||||
create_product_from_item(file, revolution1, "SweptSolid");
|
||||
create_product_from_item(file, revolution2, "SweptSolid");
|
||||
}
|
||||
|
||||
void create_products_from_curve(IfcHierarchyHelper& file, IfcSchema::IfcBoundedCurve* curve) {
|
||||
IfcSchema::IfcArbitraryOpenProfileDef* open = new IfcSchema::IfcArbitraryOpenProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_CURVE, null, curve);
|
||||
IfcSchema::IfcCenterLineProfileDef* center_line = new IfcSchema::IfcCenterLineProfileDef(IfcSchema::IfcProfileTypeEnum::IfcProfileType_AREA, null, curve, 10.);
|
||||
file.AddEntity(open);
|
||||
file.AddEntity(center_line);
|
||||
|
||||
create_surfaces_from_profile(file, open);
|
||||
create_solids_from_profile(file, center_line);
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
const char filename[] = "IfcArbitraryOpenProfileDef.ifc";
|
||||
IfcHierarchyHelper file;
|
||||
file.filename(filename);
|
||||
|
||||
double coords1[] = {-50.0, 0.0};
|
||||
double coords2[] = { 50.0, 0.0};
|
||||
IfcSchema::IfcCartesianPoint::list points (new IfcTemplatedEntityList<IfcSchema::IfcCartesianPoint>());
|
||||
points->push(new IfcSchema::IfcCartesianPoint(std::vector<double>(coords1, coords1+2)));
|
||||
points->push(new IfcSchema::IfcCartesianPoint(std::vector<double>(coords2, coords2+2)));
|
||||
file.AddEntities(points->generalize());
|
||||
IfcSchema::IfcPolyline* poly = new IfcSchema::IfcPolyline(points);
|
||||
file.AddEntity(poly);
|
||||
|
||||
create_products_from_curve(file, poly);
|
||||
|
||||
IfcSchema::IfcEllipse* ellipse = new IfcSchema::IfcEllipse(file.addPlacement2d(), 50., 25.);
|
||||
file.AddEntity(ellipse);
|
||||
IfcEntities trim1(new IfcEntityList());
|
||||
IfcEntities trim2(new IfcEntityList());
|
||||
trim1->push(new IfcWrite::IfcSelectHelper( 0., Ifc2x3::Type::IfcParameterValue));
|
||||
trim2->push(new IfcWrite::IfcSelectHelper(180., Ifc2x3::Type::IfcParameterValue));
|
||||
IfcSchema::IfcTrimmedCurve* trim = new IfcSchema::IfcTrimmedCurve(ellipse, trim1, trim2, true, IfcSchema::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER);
|
||||
file.AddEntity(trim);
|
||||
|
||||
create_products_from_curve(file, trim);
|
||||
|
||||
file.getSingle<Ifc2x3::IfcProject>()->setName("IfcArbitraryOpenProfileDef");
|
||||
|
||||
std::ofstream f(filename);
|
||||
f << file;
|
||||
}
|
||||
@@ -80,6 +80,7 @@ namespace IfcGeom {
|
||||
};
|
||||
|
||||
bool convert_wire_to_face(const TopoDS_Wire& wire, TopoDS_Face& face);
|
||||
bool convert_curve_to_wire(const Handle(Geom_Curve)& curve, TopoDS_Wire& wire);
|
||||
bool convert_shapes(const IfcUtil::IfcBaseClass* L, IfcRepresentationShapeItems& result);
|
||||
bool is_shape_collection(const IfcUtil::IfcBaseClass* L);
|
||||
bool convert_shape(const IfcUtil::IfcBaseClass* L, TopoDS_Shape& result);
|
||||
|
||||
@@ -50,23 +50,27 @@
|
||||
#include <Geom_Circle.hxx>
|
||||
#include <Geom_Ellipse.hxx>
|
||||
#include <Geom_TrimmedCurve.hxx>
|
||||
#include <Geom_OffsetCurve.hxx>
|
||||
|
||||
#include <BRepPrimAPI_MakePrism.hxx>
|
||||
#include <BRepPrimAPI_MakeHalfSpace.hxx>
|
||||
|
||||
#include <BRepOffsetAPI_Sewing.hxx>
|
||||
#include <BRepOffsetAPI_MakeOffset.hxx>
|
||||
|
||||
#include <BRepBuilderAPI_MakeFace.hxx>
|
||||
#include <BRepBuilderAPI_MakeEdge.hxx>
|
||||
#include <BRepBuilderAPI_MakeWire.hxx>
|
||||
#include <BRepBuilderAPI_MakePolygon.hxx>
|
||||
#include <BRepBuilderAPI_MakeVertex.hxx>
|
||||
#include <BRepBuilderAPI_MakeShell.hxx>
|
||||
#include <BRepBuilderAPI_MakeSolid.hxx>
|
||||
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Wire.hxx>
|
||||
#include <TopoDS_Face.hxx>
|
||||
#include <TopExp_Explorer.hxx>
|
||||
|
||||
#include <BRepPrimAPI_MakePrism.hxx>
|
||||
#include <BRepBuilderAPI_MakeShell.hxx>
|
||||
#include <BRepBuilderAPI_MakeSolid.hxx>
|
||||
#include <BRepPrimAPI_MakeHalfSpace.hxx>
|
||||
#include <BRepAlgoAPI_Cut.hxx>
|
||||
|
||||
#include <ShapeFix_Shape.hxx>
|
||||
@@ -76,6 +80,10 @@
|
||||
#include <TopLoc_Location.hxx>
|
||||
#include <BRepGProp_Face.hxx>
|
||||
|
||||
#include <Standard_Failure.hxx>
|
||||
|
||||
#include <BRep_Tool.hxx>
|
||||
|
||||
#include "../ifcgeom/IfcGeom.h"
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcFace::ptr l, TopoDS_Face& face) {
|
||||
@@ -183,11 +191,13 @@ bool IfcGeom::convert(const IfcSchema::IfcFace::ptr l, TopoDS_Face& face) {
|
||||
// return face_area(face) > 0.0001;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcArbitraryClosedProfileDef::ptr l, TopoDS_Face& face) {
|
||||
TopoDS_Wire wire;
|
||||
if ( ! IfcGeom::convert_wire(l->OuterCurve(),wire) ) return false;
|
||||
return IfcGeom::convert_wire_to_face(wire,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcArbitraryProfileDefWithVoids::ptr l, TopoDS_Face& face) {
|
||||
TopoDS_Wire profile;
|
||||
if ( ! IfcGeom::convert_wire(l->OuterCurve(),profile) ) return false;
|
||||
@@ -204,6 +214,7 @@ bool IfcGeom::convert(const IfcSchema::IfcArbitraryProfileDefWithVoids::ptr l, T
|
||||
face = TopoDS::Face(sfs.Shape());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcRectangleProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double x = l->XDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double y = l->YDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -218,6 +229,7 @@ bool IfcGeom::convert(const IfcSchema::IfcRectangleProfileDef::ptr l, TopoDS_Fac
|
||||
double coords[8] = {-x,-y,x,-y,x,y,-x,y};
|
||||
return IfcGeom::profile_helper(4,coords,0,0,0,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcRoundedRectangleProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double x = l->XDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double y = l->YDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -235,6 +247,7 @@ bool IfcGeom::convert(const IfcSchema::IfcRoundedRectangleProfileDef::ptr l, Top
|
||||
double radii[4] = {r,r,r,r};
|
||||
return IfcGeom::profile_helper(4,coords,4,fillets,radii,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcRectangleHollowProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double x = l->XDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double y = l->YDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -281,6 +294,7 @@ bool IfcGeom::convert(const IfcSchema::IfcRectangleHollowProfileDef::ptr l, Topo
|
||||
face = TopoDS::Face(sfs.Shape());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcTrapeziumProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double x1 = l->BottomXDim() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double w = l->TopXDim() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -297,6 +311,7 @@ bool IfcGeom::convert(const IfcSchema::IfcTrapeziumProfileDef::ptr l, TopoDS_Fac
|
||||
double coords[8] = {-x1,-y, x1,-y, dx+w-x1,y, dx-x1,y};
|
||||
return IfcGeom::profile_helper(4,coords,0,0,0,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcIShapeProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double x = l->OverallWidth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double y = l->OverallDepth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -321,6 +336,7 @@ bool IfcGeom::convert(const IfcSchema::IfcIShapeProfileDef::ptr l, TopoDS_Face&
|
||||
double radii[4] = {f,f,f,f};
|
||||
return IfcGeom::profile_helper(12,coords,doFillet ? 4 : 0,fillets,radii,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcZShapeProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double x = l->FlangeWidth() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double y = l->Depth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -353,6 +369,7 @@ bool IfcGeom::convert(const IfcSchema::IfcZShapeProfileDef::ptr l, TopoDS_Face&
|
||||
double radii[4] = {f2,f1,f2,f1};
|
||||
return IfcGeom::profile_helper(8,coords,(doFillet || doEdgeFillet) ? 4 : 0,fillets,radii,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcCShapeProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double y = l->Depth() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double x = l->Width() / 2.0f * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -379,6 +396,7 @@ bool IfcGeom::convert(const IfcSchema::IfcCShapeProfileDef::ptr l, TopoDS_Face&
|
||||
double radii[8] = {f2,f2,f1,f1,f1,f1,f2,f2};
|
||||
return IfcGeom::profile_helper(12,coords,doFillet ? 8 : 0,fillets,radii,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcLShapeProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const bool hasSlope = l->hasLegSlope();
|
||||
const bool doEdgeFillet = l->hasEdgeRadius();
|
||||
@@ -447,6 +465,7 @@ bool IfcGeom::convert(const IfcSchema::IfcLShapeProfileDef::ptr l, TopoDS_Face&
|
||||
double radii[3] = {f2,f1,f2};
|
||||
return IfcGeom::profile_helper(6,coords,doFillet ? 3 : 0,fillets,radii,trsf2d,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcUShapeProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const bool doEdgeFillet = l->hasEdgeRadius();
|
||||
const bool doFillet = l->hasFilletRadius();
|
||||
@@ -488,6 +507,7 @@ bool IfcGeom::convert(const IfcSchema::IfcUShapeProfileDef::ptr l, TopoDS_Face&
|
||||
double radii[4] = {f2,f1,f1,f2};
|
||||
return IfcGeom::profile_helper(8, coords, (doFillet || doEdgeFillet) ? 4 : 0, fillets, radii, trsf2d, face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcTShapeProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const bool doFlangeEdgeFillet = l->hasFlangeEdgeRadius();
|
||||
const bool doWebEdgeFillet = l->hasWebEdgeRadius();
|
||||
@@ -570,6 +590,7 @@ bool IfcGeom::convert(const IfcSchema::IfcTShapeProfileDef::ptr l, TopoDS_Face&
|
||||
double radii[6] = {f2,f1,f3,f3,f1,f2};
|
||||
return IfcGeom::profile_helper(8, coords, (doFillet || doWebEdgeFillet || doFlangeEdgeFillet) ? 6 : 0, fillets, radii, trsf2d, face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcCircleProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double r = l->Radius() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
if ( r == 0.0f ) {
|
||||
@@ -587,6 +608,7 @@ bool IfcGeom::convert(const IfcSchema::IfcCircleProfileDef::ptr l, TopoDS_Face&
|
||||
w.Add(edge);
|
||||
return IfcGeom::convert_wire_to_face(w,face);
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcCircleHollowProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double r = l->Radius() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
const double t = l->WallThickness() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -615,6 +637,7 @@ bool IfcGeom::convert(const IfcSchema::IfcCircleHollowProfileDef::ptr l, TopoDS_
|
||||
face = TopoDS::Face(sfs.Shape());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcEllipseProfileDef::ptr l, TopoDS_Face& face) {
|
||||
double rx = l->SemiAxis1() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
double ry = l->SemiAxis2() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
@@ -640,4 +663,53 @@ bool IfcGeom::convert(const IfcSchema::IfcEllipseProfileDef::ptr l, TopoDS_Face&
|
||||
TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(ellipse);
|
||||
w.Add(edge);
|
||||
return IfcGeom::convert_wire_to_face(w, face);
|
||||
}
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcCenterLineProfileDef::ptr l, TopoDS_Face& face) {
|
||||
const double d = l->Thickness() * IfcGeom::GetValue(GV_LENGTH_UNIT) / 2.;
|
||||
|
||||
TopoDS_Wire wire;
|
||||
if (!IfcGeom::convert_wire(l->Curve(), wire)) return false;
|
||||
|
||||
// BRepOffsetAPI_MakeOffset insists on creating circular arc
|
||||
// segments for joining the curves that constitute the center
|
||||
// line. This is probably not in accordance with the IFC spec.
|
||||
// Although it does not specify a method to join segments
|
||||
// explicitly, it does dictate 'a constant thickness along the
|
||||
// curve'. Therefore for simple singular wires a quick
|
||||
// alternative is provided that uses a straight join.
|
||||
|
||||
TopExp_Explorer exp(wire, TopAbs_EDGE);
|
||||
TopoDS_Edge edge = TopoDS::Edge(exp.Current());
|
||||
exp.Next();
|
||||
|
||||
if (!exp.More()) {
|
||||
double u1, u2;
|
||||
Handle(Geom_Curve) curve = BRep_Tool::Curve(edge, u1, u2);
|
||||
|
||||
Handle(Geom_TrimmedCurve) trim = new Geom_TrimmedCurve(curve, u1, u2);
|
||||
|
||||
Handle(Geom_OffsetCurve) c1 = new Geom_OffsetCurve(trim, d, gp::DZ());
|
||||
Handle(Geom_OffsetCurve) c2 = new Geom_OffsetCurve(trim, -d, gp::DZ());
|
||||
|
||||
gp_Pnt c1a, c1b, c2a, c2b;
|
||||
c1->D0(c1->FirstParameter(), c1a);
|
||||
c1->D0(c1->LastParameter(), c1b);
|
||||
c2->D0(c2->FirstParameter(), c2a);
|
||||
c2->D0(c2->LastParameter(), c2b);
|
||||
|
||||
BRepBuilderAPI_MakeWire mw;
|
||||
mw.Add(BRepBuilderAPI_MakeEdge(c1));
|
||||
mw.Add(BRepBuilderAPI_MakeEdge(c1a, c2a));
|
||||
mw.Add(BRepBuilderAPI_MakeEdge(c2));
|
||||
mw.Add(BRepBuilderAPI_MakeEdge(c2b, c1b));
|
||||
|
||||
face = BRepBuilderAPI_MakeFace(mw.Wire());
|
||||
} else {
|
||||
BRepOffsetAPI_MakeOffset offset(BRepBuilderAPI_MakeFace(gp_Pln(gp::Origin(), gp::DZ())));
|
||||
offset.AddWire(wire);
|
||||
offset.Perform(d);
|
||||
face = BRepBuilderAPI_MakeFace(TopoDS::Wire(offset));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -315,6 +315,12 @@ bool IfcGeom::convert_wire_to_face(const TopoDS_Wire& wire, TopoDS_Face& face) {
|
||||
face = mf.Face();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert_curve_to_wire(const Handle(Geom_Curve)& curve, TopoDS_Wire& wire) {
|
||||
wire = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(curve));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::profile_helper(int numVerts, double* verts, int numFillets, int* filletIndices, double* filletRadii, gp_Trsf2d trsf, TopoDS_Face& face) {
|
||||
TopoDS_Vertex* vertices = new TopoDS_Vertex[numVerts];
|
||||
|
||||
|
||||
@@ -131,6 +131,15 @@ bool IfcGeom::convert(const IfcSchema::IfcAxis2Placement3D::ptr l, gp_Trsf& trsf
|
||||
CACHE(IfcAxis2Placement3D,l,trsf)
|
||||
return true;
|
||||
}
|
||||
bool IfcGeom::convert(const IfcSchema::IfcAxis1Placement::ptr l, gp_Ax1& ax) {
|
||||
IN_CACHE(IfcAxis1Placement,l,gp_Ax1,ax)
|
||||
gp_Pnt o;gp_Dir axis = gp_Dir(0,0,1);
|
||||
IfcGeom::convert(l->Location(),o);
|
||||
if ( l->hasAxis() ) IfcGeom::convert(l->Axis(), axis);
|
||||
ax = gp_Ax1(o, axis);
|
||||
CACHE(IfcAxis1Placement,l,ax)
|
||||
return true;
|
||||
}
|
||||
bool IfcGeom::convert(const IfcSchema::IfcCartesianTransformationOperator3D::ptr l, gp_Trsf& trsf) {
|
||||
IN_CACHE(IfcCartesianTransformationOperator3D,l,gp_Trsf,trsf)
|
||||
gp_Pnt origin;
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <gp_GTrsf2d.hxx>
|
||||
#include <gp_Trsf.hxx>
|
||||
#include <gp_Trsf2d.hxx>
|
||||
#include <gp_Ax1.hxx>
|
||||
#include <gp_Ax3.hxx>
|
||||
#include <gp_Ax2d.hxx>
|
||||
#include <gp_Pln.hxx>
|
||||
@@ -62,6 +63,7 @@
|
||||
#include <TopExp_Explorer.hxx>
|
||||
|
||||
#include <BRepPrimAPI_MakePrism.hxx>
|
||||
#include <BRepPrimAPI_MakeRevol.hxx>
|
||||
#include <BRepBuilderAPI_MakeShell.hxx>
|
||||
#include <BRepBuilderAPI_MakeSolid.hxx>
|
||||
#include <BRepPrimAPI_MakeHalfSpace.hxx>
|
||||
@@ -92,6 +94,70 @@ bool IfcGeom::convert(const IfcSchema::IfcExtrudedAreaSolid::ptr l, TopoDS_Shape
|
||||
shape.Move(trsf);
|
||||
return ! shape.IsNull();
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcSurfaceOfLinearExtrusion::ptr l, TopoDS_Shape& shape) {
|
||||
TopoDS_Wire wire;
|
||||
if ( !IfcGeom::convert_wire(l->SweptCurve(), wire) ) {
|
||||
TopoDS_Face face;
|
||||
if ( !IfcGeom::convert_face(l->SweptCurve(),face) ) return false;
|
||||
TopExp_Explorer exp(face, TopAbs_WIRE);
|
||||
wire = TopoDS::Wire(exp.Current());
|
||||
}
|
||||
const double height = l->Depth() * IfcGeom::GetValue(GV_LENGTH_UNIT);
|
||||
gp_Trsf trsf;
|
||||
IfcGeom::convert(l->Position(),trsf);
|
||||
|
||||
gp_Dir dir;
|
||||
convert(l->ExtrudedDirection(),dir);
|
||||
|
||||
shape = BRepPrimAPI_MakePrism(wire, height*dir);
|
||||
shape.Move(trsf);
|
||||
return !shape.IsNull();
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcSurfaceOfRevolution::ptr l, TopoDS_Shape& shape) {
|
||||
TopoDS_Wire wire;
|
||||
if ( !IfcGeom::convert_wire(l->SweptCurve(), wire) ) {
|
||||
TopoDS_Face face;
|
||||
if ( !IfcGeom::convert_face(l->SweptCurve(),face) ) return false;
|
||||
TopExp_Explorer exp(face, TopAbs_WIRE);
|
||||
wire = TopoDS::Wire(exp.Current());
|
||||
}
|
||||
|
||||
gp_Ax1 ax1;
|
||||
IfcGeom::convert(l->AxisPosition(), ax1);
|
||||
|
||||
gp_Trsf trsf;
|
||||
IfcGeom::convert(l->Position(),trsf);
|
||||
|
||||
shape = BRepPrimAPI_MakeRevol(wire, ax1);
|
||||
|
||||
shape.Move(trsf);
|
||||
return !shape.IsNull();
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcRevolvedAreaSolid::ptr l, TopoDS_Shape& shape) {
|
||||
const double ang = l->Angle() * IfcGeom::GetValue(GV_PLANEANGLE_UNIT);
|
||||
|
||||
TopoDS_Face face;
|
||||
if ( ! IfcGeom::convert_face(l->SweptArea(),face) ) return false;
|
||||
|
||||
gp_Ax1 ax1;
|
||||
IfcGeom::convert(l->Axis(), ax1);
|
||||
|
||||
gp_Trsf trsf;
|
||||
IfcGeom::convert(l->Position(),trsf);
|
||||
|
||||
if (ang >= M_PI * 2. - ALMOST_ZERO) {
|
||||
shape = BRepPrimAPI_MakeRevol(face, ax1);
|
||||
} else {
|
||||
shape = BRepPrimAPI_MakeRevol(face, ax1, ang);
|
||||
}
|
||||
|
||||
shape.Move(trsf);
|
||||
return !shape.IsNull();
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcFacetedBrep::ptr l, IfcRepresentationShapeItems& shape) {
|
||||
TopoDS_Shape s;
|
||||
if (IfcGeom::convert_shape(l->Outer(),s) ) {
|
||||
@@ -100,6 +166,7 @@ bool IfcGeom::convert(const IfcSchema::IfcFacetedBrep::ptr l, IfcRepresentationS
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcFaceBasedSurfaceModel::ptr l, IfcRepresentationShapeItems& shapes) {
|
||||
IfcSchema::IfcConnectedFaceSet::list facesets = l->FbsmFaces();
|
||||
const SurfaceStyle* collective_style = get_style(l);
|
||||
@@ -112,6 +179,7 @@ bool IfcGeom::convert(const IfcSchema::IfcFaceBasedSurfaceModel::ptr l, IfcRepre
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcHalfSpaceSolid::ptr l, TopoDS_Shape& shape) {
|
||||
IfcSchema::IfcSurface::ptr surface = l->BaseSurface();
|
||||
if ( ! surface->is(IfcSchema::Type::IfcPlane) ) {
|
||||
@@ -124,6 +192,7 @@ bool IfcGeom::convert(const IfcSchema::IfcHalfSpaceSolid::ptr l, TopoDS_Shape& s
|
||||
shape = BRepPrimAPI_MakeHalfSpace(BRepBuilderAPI_MakeFace(pln),pnt).Solid();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcPolygonalBoundedHalfSpace::ptr l, TopoDS_Shape& shape) {
|
||||
TopoDS_Shape halfspace;
|
||||
if ( ! IfcGeom::convert(reinterpret_pointer_cast<IfcSchema::IfcPolygonalBoundedHalfSpace,IfcSchema::IfcHalfSpaceSolid>(l),halfspace) ) return false;
|
||||
@@ -137,6 +206,7 @@ bool IfcGeom::convert(const IfcSchema::IfcPolygonalBoundedHalfSpace::ptr l, Topo
|
||||
shape = BRepAlgoAPI_Common(halfspace,prism);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcShellBasedSurfaceModel::ptr l, IfcRepresentationShapeItems& shapes) {
|
||||
IfcUtil::IfcAbstractSelect::list shells = l->SbsmBoundary();
|
||||
const SurfaceStyle* collective_style = get_style(l);
|
||||
@@ -152,6 +222,7 @@ bool IfcGeom::convert(const IfcSchema::IfcShellBasedSurfaceModel::ptr l, IfcRepr
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcBooleanClippingResult::ptr l, TopoDS_Shape& shape) {
|
||||
TopoDS_Shape s1, s2;
|
||||
TopoDS_Wire boundary_wire;
|
||||
@@ -205,6 +276,7 @@ bool IfcGeom::convert(const IfcSchema::IfcBooleanClippingResult::ptr l, TopoDS_S
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcConnectedFaceSet::ptr l, TopoDS_Shape& shape) {
|
||||
IfcSchema::IfcFace::list faces = l->CfsFaces();
|
||||
bool facesAdded = false;
|
||||
@@ -249,6 +321,7 @@ bool IfcGeom::convert(const IfcSchema::IfcConnectedFaceSet::ptr l, TopoDS_Shape&
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcMappedItem::ptr l, IfcRepresentationShapeItems& shapes) {
|
||||
gp_GTrsf gtrsf;
|
||||
IfcSchema::IfcCartesianTransformationOperator::ptr transform = l->MappingTarget();
|
||||
@@ -301,4 +374,22 @@ bool IfcGeom::convert(const IfcSchema::IfcShapeRepresentation::ptr l, IfcReprese
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IfcGeom::convert(const IfcSchema::IfcGeometricSet::ptr l, IfcRepresentationShapeItems& shapes) {
|
||||
IfcUtil::IfcAbstractSelect::list elements = l->Elements();
|
||||
if ( !elements->Size() ) return false;
|
||||
const IfcGeom::SurfaceStyle* parent_style = get_style(l);
|
||||
for ( IfcUtil::IfcAbstractSelect::it it = elements->begin(); it != elements->end(); ++ it ) {
|
||||
IfcSchema::IfcGeometricSetSelect element = *it;
|
||||
if (element->is(IfcSchema::Type::IfcSurface)) {
|
||||
IfcSchema::IfcSurface* surface = (IfcSchema::IfcSurface*) element;
|
||||
TopoDS_Shape s;
|
||||
if (IfcGeom::convert_shape(surface, s)) {
|
||||
const IfcGeom::SurfaceStyle* style = get_style(surface);
|
||||
shapes.push_back(IfcRepresentationShapeItem(s, style ? style : parent_style));
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -306,4 +306,7 @@ bool IfcGeom::convert(const IfcSchema::IfcPolyLoop::ptr l, TopoDS_Wire& result)
|
||||
|
||||
result = w.Wire();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
bool IfcGeom::convert(const IfcSchema::IfcArbitraryOpenProfileDef::ptr l, TopoDS_Wire& result) {
|
||||
return IfcGeom::convert_wire(l->Curve(), result);
|
||||
}
|
||||
|
||||
@@ -58,6 +58,10 @@ bool IfcGeom::convert_shape(const IfcBaseClass* l, TopoDS_Shape& r) {
|
||||
}
|
||||
bool IfcGeom::convert_wire(const IfcBaseClass* l, TopoDS_Wire& r) {
|
||||
#include "IfcRegisterConvertWire.h"
|
||||
Handle(Geom_Curve) curve;
|
||||
if (IfcGeom::convert_curve(l, curve)) {
|
||||
return IfcGeom::convert_curve_to_wire(curve, r);
|
||||
}
|
||||
Logger::Message(Logger::LOG_ERROR,"No operation defined for:",l->entity);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -48,12 +48,16 @@ SHAPES(IfcFaceBasedSurfaceModel);
|
||||
SHAPES(IfcShapeRepresentation);
|
||||
SHAPES(IfcMappedItem);
|
||||
SHAPES(IfcFacetedBrep);
|
||||
SHAPES(IfcGeometricSet);
|
||||
|
||||
SHAPE(IfcExtrudedAreaSolid);
|
||||
SHAPE(IfcRevolvedAreaSolid);
|
||||
SHAPE(IfcConnectedFaceSet);
|
||||
SHAPE(IfcBooleanClippingResult);
|
||||
SHAPE(IfcPolygonalBoundedHalfSpace);
|
||||
SHAPE(IfcHalfSpaceSolid);
|
||||
SHAPE(IfcSurfaceOfLinearExtrusion);
|
||||
SHAPE(IfcSurfaceOfRevolution);
|
||||
|
||||
FACE(IfcArbitraryProfileDefWithVoids);
|
||||
FACE(IfcArbitraryClosedProfileDef);
|
||||
@@ -70,12 +74,14 @@ FACE(IfcZShapeProfileDef);
|
||||
FACE(IfcCircleHollowProfileDef);
|
||||
FACE(IfcCircleProfileDef);
|
||||
FACE(IfcEllipseProfileDef);
|
||||
FACE(IfcCenterLineProfileDef);
|
||||
FACE(IfcFace);
|
||||
|
||||
WIRE(IfcPolyline);
|
||||
WIRE(IfcPolyLoop);
|
||||
WIRE(IfcCompositeCurve);
|
||||
WIRE(IfcTrimmedCurve);
|
||||
WIRE(IfcArbitraryOpenProfileDef);
|
||||
|
||||
CURVE(IfcCircle);
|
||||
CURVE(IfcEllipse);
|
||||
@@ -85,6 +91,7 @@ CLASS(IfcCartesianPoint,gp_Pnt);
|
||||
CLASS(IfcDirection,gp_Dir);
|
||||
CLASS(IfcAxis2Placement2D,gp_Trsf2d);
|
||||
CLASS(IfcAxis2Placement3D,gp_Trsf);
|
||||
CLASS(IfcAxis1Placement,gp_Ax1);
|
||||
CLASS(IfcCartesianTransformationOperator2DnonUniform,gp_GTrsf2d);
|
||||
CLASS(IfcCartesianTransformationOperator3DnonUniform,gp_GTrsf);
|
||||
CLASS(IfcCartesianTransformationOperator2D,gp_Trsf2d);
|
||||
|
||||
@@ -0,0 +1,220 @@
|
||||
ISO-10303-21;
|
||||
HEADER;
|
||||
FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
|
||||
FILE_NAME('IfcArbitraryOpenProfileDef.ifc','2014-03-15T12:31:19',(''),('',''),'IfcOpenShell 0.5.0-dev','IfcOpenShell 0.5.0-dev','');
|
||||
FILE_SCHEMA(('IFC2X3'));
|
||||
ENDSEC;
|
||||
DATA;
|
||||
#1=IFCCARTESIANPOINT((-50.,0.));
|
||||
#2=IFCCARTESIANPOINT((50.,0.));
|
||||
#3=IFCPOLYLINE((#1,#2));
|
||||
#4=IFCARBITRARYOPENPROFILEDEF(.CURVE.,$,#3);
|
||||
#5=IFCCENTERLINEPROFILEDEF(.AREA.,$,#3,10.);
|
||||
#6=IFCDIRECTION((0.,0.,1.));
|
||||
#7=IFCDIRECTION((1.,0.,0.));
|
||||
#8=IFCDIRECTION((0.,0.,1.));
|
||||
#9=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#10=IFCAXIS2PLACEMENT3D(#9,#8,#7);
|
||||
#11=IFCSURFACEOFLINEAREXTRUSION(#4,#10,#6,100.);
|
||||
#12=IFCDIRECTION((1.,0.,0.));
|
||||
#13=IFCCARTESIANPOINT((0.,100.,0.));
|
||||
#14=IFCDIRECTION((1.,0.,0.));
|
||||
#15=IFCDIRECTION((0.,0.,1.));
|
||||
#16=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#17=IFCAXIS2PLACEMENT3D(#16,#15,#14);
|
||||
#18=IFCAXIS1PLACEMENT(#13,#12);
|
||||
#19=IFCSURFACEOFREVOLUTION(#4,#17,#18);
|
||||
#20=IFCPERSON($,$,'',$,$,$,$,$);
|
||||
#21=IFCORGANIZATION($,'IfcOpenShell',$,$,$);
|
||||
#22=IFCPERSONANDORGANIZATION(#20,#21,$);
|
||||
#23=IFCAPPLICATION(#21,'0.5.0-dev','IfcOpenShell','IfcOpenShell');
|
||||
#24=IFCOWNERHISTORY(#22,#23,$,.ADDED.,$,#22,#23,1394883079);
|
||||
#25=IFCDIRECTION((0.,1.,0.));
|
||||
#26=IFCDIRECTION((1.,0.,0.));
|
||||
#27=IFCDIRECTION((0.,0.,1.));
|
||||
#28=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#29=IFCAXIS2PLACEMENT3D(#28,#27,#26);
|
||||
#30=IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Model',3,1.E-005,#29,#25);
|
||||
#31=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);
|
||||
#32=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
|
||||
#33=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
|
||||
#34=IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(0.0174533),#33);
|
||||
#35=IFCCONVERSIONBASEDUNIT(#31,.PLANEANGLEUNIT.,'Degrees',#34);
|
||||
#36=IFCUNITASSIGNMENT((#32,#35));
|
||||
#37=IFCPROJECT('2S4bzmbK91DR1an5QDPsKz',#24,'IfcArbitraryOpenProfileDef',$,$,$,$,(#30),#36);
|
||||
#38=IFCDIRECTION((1.,0.,0.));
|
||||
#39=IFCDIRECTION((0.,0.,1.));
|
||||
#40=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#41=IFCAXIS2PLACEMENT3D(#40,#39,#38);
|
||||
#42=IFCLOCALPLACEMENT($,#41);
|
||||
#43=IFCSITE('0LsGW0$09828Obr9n1sdqQ',#24,$,$,$,#42,$,$,.ELEMENT.,$,$,$,$,$);
|
||||
#44=IFCRELAGGREGATES('1ua3xM$HD5oeLmZD4PO0la',#24,$,$,#37,(#43));
|
||||
#45=IFCDIRECTION((1.,0.,0.));
|
||||
#46=IFCDIRECTION((0.,0.,1.));
|
||||
#47=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#48=IFCAXIS2PLACEMENT3D(#47,#46,#45);
|
||||
#49=IFCLOCALPLACEMENT(#42,#48);
|
||||
#50=IFCBUILDING('2FTe$mmkjBL9YIRvDzQybm',#24,$,$,$,#49,$,$,.ELEMENT.,$,$,$);
|
||||
#51=IFCRELAGGREGATES('2nsb67rBX2cQrMOQ1Rcoe3',#24,$,$,#43,(#50));
|
||||
#52=IFCDIRECTION((1.,0.,0.));
|
||||
#53=IFCDIRECTION((0.,0.,1.));
|
||||
#54=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#55=IFCAXIS2PLACEMENT3D(#54,#53,#52);
|
||||
#56=IFCLOCALPLACEMENT(#49,#55);
|
||||
#57=IFCBUILDINGSTOREY('15SWWcmqX74wt$Utj2XBzx',#24,$,$,$,#56,$,$,.ELEMENT.,$);
|
||||
#58=IFCRELAGGREGATES('2QAO7ZaO55og2a5Jf9pWBp',#24,$,$,#50,(#57));
|
||||
#59=IFCBUILDINGELEMENTPROXY('1WkvPE4_D3_Av75vQlcPxv',#24,'product',$,$,#65,#68,$,$);
|
||||
#60=IFCRELCONTAINEDINSPATIALSTRUCTURE('0JL5z5w719JRvE5qa3uvUV',#24,$,$,(#59),#57);
|
||||
#61=IFCDIRECTION((1.,0.,0.));
|
||||
#62=IFCDIRECTION((0.,0.,1.));
|
||||
#63=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#64=IFCAXIS2PLACEMENT3D(#63,#62,#61);
|
||||
#65=IFCLOCALPLACEMENT($,#64);
|
||||
#66=IFCGEOMETRICSET((#11));
|
||||
#67=IFCSHAPEREPRESENTATION(#30,'Body','GeometricSet',(#66));
|
||||
#68=IFCPRODUCTDEFINITIONSHAPE($,$,(#67));
|
||||
#69=IFCBUILDINGELEMENTPROXY('1BDQqB$Tf03ut2ILxpxxYu',#24,'product',$,$,#75,#78,$,$);
|
||||
#70=IFCRELCONTAINEDINSPATIALSTRUCTURE('2lNRex5ej7WQB5AHHk19ix',#24,$,$,(#69),#57);
|
||||
#71=IFCDIRECTION((1.,0.,0.));
|
||||
#72=IFCDIRECTION((0.,0.,1.));
|
||||
#73=IFCCARTESIANPOINT((120.,0.,0.));
|
||||
#74=IFCAXIS2PLACEMENT3D(#73,#72,#71);
|
||||
#75=IFCLOCALPLACEMENT($,#74);
|
||||
#76=IFCGEOMETRICSET((#19));
|
||||
#77=IFCSHAPEREPRESENTATION(#30,'Body','GeometricSet',(#76));
|
||||
#78=IFCPRODUCTDEFINITIONSHAPE($,$,(#77));
|
||||
#79=IFCDIRECTION((0.,0.,1.));
|
||||
#80=IFCDIRECTION((1.,0.,0.));
|
||||
#81=IFCDIRECTION((0.,0.,1.));
|
||||
#82=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#83=IFCAXIS2PLACEMENT3D(#82,#81,#80);
|
||||
#84=IFCEXTRUDEDAREASOLID(#5,#83,#79,100.);
|
||||
#85=IFCDIRECTION((1.,0.,0.));
|
||||
#86=IFCCARTESIANPOINT((0.,100.,0.));
|
||||
#87=IFCDIRECTION((1.,0.,0.));
|
||||
#88=IFCDIRECTION((0.,0.,1.));
|
||||
#89=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#90=IFCAXIS2PLACEMENT3D(#89,#88,#87);
|
||||
#91=IFCDIRECTION((1.,0.,0.));
|
||||
#92=IFCDIRECTION((0.,0.,1.));
|
||||
#93=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#94=IFCAXIS2PLACEMENT3D(#93,#92,#91);
|
||||
#95=IFCAXIS1PLACEMENT(#86,#85);
|
||||
#96=IFCREVOLVEDAREASOLID(#5,#90,#95,360.);
|
||||
#97=IFCREVOLVEDAREASOLID(#5,#94,#95,90.);
|
||||
#98=IFCBUILDINGELEMENTPROXY('0QUwQLZlvCgwROXvNrmlKV',#24,'product',$,$,#104,#106,$,$);
|
||||
#99=IFCRELCONTAINEDINSPATIALSTRUCTURE('0Pohu5qJnCCR$L8K397yuP',#24,$,$,(#98),#57);
|
||||
#100=IFCDIRECTION((1.,0.,0.));
|
||||
#101=IFCDIRECTION((0.,0.,1.));
|
||||
#102=IFCCARTESIANPOINT((240.,0.,0.));
|
||||
#103=IFCAXIS2PLACEMENT3D(#102,#101,#100);
|
||||
#104=IFCLOCALPLACEMENT($,#103);
|
||||
#105=IFCSHAPEREPRESENTATION(#30,'Body','SweptSolid',(#84));
|
||||
#106=IFCPRODUCTDEFINITIONSHAPE($,$,(#105));
|
||||
#107=IFCBUILDINGELEMENTPROXY('23Uf10h$TEsutHBHaPlbxg',#24,'product',$,$,#113,#115,$,$);
|
||||
#108=IFCRELCONTAINEDINSPATIALSTRUCTURE('0HmHA_v4L3ggDlv$Usk9bl',#24,$,$,(#107),#57);
|
||||
#109=IFCDIRECTION((1.,0.,0.));
|
||||
#110=IFCDIRECTION((0.,0.,1.));
|
||||
#111=IFCCARTESIANPOINT((360.,0.,0.));
|
||||
#112=IFCAXIS2PLACEMENT3D(#111,#110,#109);
|
||||
#113=IFCLOCALPLACEMENT($,#112);
|
||||
#114=IFCSHAPEREPRESENTATION(#30,'Body','SweptSolid',(#96));
|
||||
#115=IFCPRODUCTDEFINITIONSHAPE($,$,(#114));
|
||||
#116=IFCBUILDINGELEMENTPROXY('0TTXA_XkD9Ogi0nWrTsmR_',#24,'product',$,$,#122,#124,$,$);
|
||||
#117=IFCRELCONTAINEDINSPATIALSTRUCTURE('1loI6OoPb6qxrsYY_8v6rp',#24,$,$,(#116),#57);
|
||||
#118=IFCDIRECTION((1.,0.,0.));
|
||||
#119=IFCDIRECTION((0.,0.,1.));
|
||||
#120=IFCCARTESIANPOINT((480.,0.,0.));
|
||||
#121=IFCAXIS2PLACEMENT3D(#120,#119,#118);
|
||||
#122=IFCLOCALPLACEMENT($,#121);
|
||||
#123=IFCSHAPEREPRESENTATION(#30,'Body','SweptSolid',(#97));
|
||||
#124=IFCPRODUCTDEFINITIONSHAPE($,$,(#123));
|
||||
#125=IFCDIRECTION((1.,0.));
|
||||
#126=IFCCARTESIANPOINT((0.,0.));
|
||||
#127=IFCAXIS2PLACEMENT2D(#126,#125);
|
||||
#128=IFCELLIPSE(#127,50.,25.);
|
||||
#129=IFCTRIMMEDCURVE(#128,(IFCPARAMETERVALUE(0.)),(IFCPARAMETERVALUE(180.)),.T.,.PARAMETER.);
|
||||
#130=IFCARBITRARYOPENPROFILEDEF(.CURVE.,$,#129);
|
||||
#131=IFCCENTERLINEPROFILEDEF(.AREA.,$,#129,10.);
|
||||
#132=IFCDIRECTION((0.,0.,1.));
|
||||
#133=IFCDIRECTION((1.,0.,0.));
|
||||
#134=IFCDIRECTION((0.,0.,1.));
|
||||
#135=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#136=IFCAXIS2PLACEMENT3D(#135,#134,#133);
|
||||
#137=IFCSURFACEOFLINEAREXTRUSION(#130,#136,#132,100.);
|
||||
#138=IFCDIRECTION((1.,0.,0.));
|
||||
#139=IFCCARTESIANPOINT((0.,100.,0.));
|
||||
#140=IFCDIRECTION((1.,0.,0.));
|
||||
#141=IFCDIRECTION((0.,0.,1.));
|
||||
#142=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#143=IFCAXIS2PLACEMENT3D(#142,#141,#140);
|
||||
#144=IFCAXIS1PLACEMENT(#139,#138);
|
||||
#145=IFCSURFACEOFREVOLUTION(#130,#143,#144);
|
||||
#146=IFCBUILDINGELEMENTPROXY('31jeMby89BwP182EYByoxC',#24,'product',$,$,#152,#155,$,$);
|
||||
#147=IFCRELCONTAINEDINSPATIALSTRUCTURE('3XCyftPiXBAgAK2bm9yNjB',#24,$,$,(#146),#57);
|
||||
#148=IFCDIRECTION((1.,0.,0.));
|
||||
#149=IFCDIRECTION((0.,0.,1.));
|
||||
#150=IFCCARTESIANPOINT((600.,0.,0.));
|
||||
#151=IFCAXIS2PLACEMENT3D(#150,#149,#148);
|
||||
#152=IFCLOCALPLACEMENT($,#151);
|
||||
#153=IFCGEOMETRICSET((#137));
|
||||
#154=IFCSHAPEREPRESENTATION(#30,'Body','GeometricSet',(#153));
|
||||
#155=IFCPRODUCTDEFINITIONSHAPE($,$,(#154));
|
||||
#156=IFCBUILDINGELEMENTPROXY('1gDJ0SyrDAifE7DJI_7xIU',#24,'product',$,$,#162,#165,$,$);
|
||||
#157=IFCRELCONTAINEDINSPATIALSTRUCTURE('0lV7yWPZz6MPHB7_j$PjNX',#24,$,$,(#156),#57);
|
||||
#158=IFCDIRECTION((1.,0.,0.));
|
||||
#159=IFCDIRECTION((0.,0.,1.));
|
||||
#160=IFCCARTESIANPOINT((720.,0.,0.));
|
||||
#161=IFCAXIS2PLACEMENT3D(#160,#159,#158);
|
||||
#162=IFCLOCALPLACEMENT($,#161);
|
||||
#163=IFCGEOMETRICSET((#145));
|
||||
#164=IFCSHAPEREPRESENTATION(#30,'Body','GeometricSet',(#163));
|
||||
#165=IFCPRODUCTDEFINITIONSHAPE($,$,(#164));
|
||||
#166=IFCDIRECTION((0.,0.,1.));
|
||||
#167=IFCDIRECTION((1.,0.,0.));
|
||||
#168=IFCDIRECTION((0.,0.,1.));
|
||||
#169=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#170=IFCAXIS2PLACEMENT3D(#169,#168,#167);
|
||||
#171=IFCEXTRUDEDAREASOLID(#131,#170,#166,100.);
|
||||
#172=IFCDIRECTION((1.,0.,0.));
|
||||
#173=IFCCARTESIANPOINT((0.,100.,0.));
|
||||
#174=IFCDIRECTION((1.,0.,0.));
|
||||
#175=IFCDIRECTION((0.,0.,1.));
|
||||
#176=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#177=IFCAXIS2PLACEMENT3D(#176,#175,#174);
|
||||
#178=IFCDIRECTION((1.,0.,0.));
|
||||
#179=IFCDIRECTION((0.,0.,1.));
|
||||
#180=IFCCARTESIANPOINT((0.,0.,0.));
|
||||
#181=IFCAXIS2PLACEMENT3D(#180,#179,#178);
|
||||
#182=IFCAXIS1PLACEMENT(#173,#172);
|
||||
#183=IFCREVOLVEDAREASOLID(#131,#177,#182,360.);
|
||||
#184=IFCREVOLVEDAREASOLID(#131,#181,#182,90.);
|
||||
#185=IFCBUILDINGELEMENTPROXY('3U5iCypsr15eERteN5DB2w',#24,'product',$,$,#191,#193,$,$);
|
||||
#186=IFCRELCONTAINEDINSPATIALSTRUCTURE('3HwrltQPTEUOdVcfwIgL_f',#24,$,$,(#185),#57);
|
||||
#187=IFCDIRECTION((1.,0.,0.));
|
||||
#188=IFCDIRECTION((0.,0.,1.));
|
||||
#189=IFCCARTESIANPOINT((840.,0.,0.));
|
||||
#190=IFCAXIS2PLACEMENT3D(#189,#188,#187);
|
||||
#191=IFCLOCALPLACEMENT($,#190);
|
||||
#192=IFCSHAPEREPRESENTATION(#30,'Body','SweptSolid',(#171));
|
||||
#193=IFCPRODUCTDEFINITIONSHAPE($,$,(#192));
|
||||
#194=IFCBUILDINGELEMENTPROXY('2Kg_xmrQP1TBWOYu7KzOWq',#24,'product',$,$,#200,#202,$,$);
|
||||
#195=IFCRELCONTAINEDINSPATIALSTRUCTURE('3Ifv7WLhn7T9IngmlJ9HXR',#24,$,$,(#194),#57);
|
||||
#196=IFCDIRECTION((1.,0.,0.));
|
||||
#197=IFCDIRECTION((0.,0.,1.));
|
||||
#198=IFCCARTESIANPOINT((960.,0.,0.));
|
||||
#199=IFCAXIS2PLACEMENT3D(#198,#197,#196);
|
||||
#200=IFCLOCALPLACEMENT($,#199);
|
||||
#201=IFCSHAPEREPRESENTATION(#30,'Body','SweptSolid',(#183));
|
||||
#202=IFCPRODUCTDEFINITIONSHAPE($,$,(#201));
|
||||
#203=IFCBUILDINGELEMENTPROXY('03Hf4Xqfv9agCAkle6P1Je',#24,'product',$,$,#209,#211,$,$);
|
||||
#204=IFCRELCONTAINEDINSPATIALSTRUCTURE('0HiOkaEir2wQY8MZsCgAh8',#24,$,$,(#203),#57);
|
||||
#205=IFCDIRECTION((1.,0.,0.));
|
||||
#206=IFCDIRECTION((0.,0.,1.));
|
||||
#207=IFCCARTESIANPOINT((1080.,0.,0.));
|
||||
#208=IFCAXIS2PLACEMENT3D(#207,#206,#205);
|
||||
#209=IFCLOCALPLACEMENT($,#208);
|
||||
#210=IFCSHAPEREPRESENTATION(#30,'Body','SweptSolid',(#184));
|
||||
#211=IFCPRODUCTDEFINITIONSHAPE($,$,(#210));
|
||||
ENDSEC;
|
||||
END-ISO-10303-21;
|
||||
Reference in New Issue
Block a user