MCPcopy Create free account
hub / github.com/ThatOpen/engine_web-ifc / GetProfileByLine

Method GetProfileByLine

src/cpp/web-ifc/geometry/IfcGeometryLoader.cpp:3125–3686  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3123 }
3124
3125 IfcProfile IfcGeometryLoader::GetProfileByLine(uint32_t expressID) const
3126 {
3127 spdlog::debug("[GetProfileByLine({})]", expressID);
3128 auto lineType = _loader.GetLineType(expressID);
3129 switch (lineType)
3130 {
3131 case schema::IFCARBITRARYOPENPROFILEDEF:
3132 case schema::IFCARBITRARYCLOSEDPROFILEDEF:
3133 {
3134 IfcProfile profile;
3135
3136 _loader.MoveToArgumentOffset(expressID, 0);
3137 profile.type = _loader.GetStringArgument();
3138 _loader.MoveToArgumentOffset(expressID, 2);
3139 uint32_t curveID = _loader.GetRefArgument();
3140 // ISSUES 765,1604 require dimension 3, not sure how to solve it without a stopgap
3141 profile.curve = GetCurve(curveID, 3);
3142 profile.isConvex = IsCurveConvex(profile.curve);
3143
3144 return profile;
3145 }
3146 case schema::IFCARBITRARYPROFILEDEFWITHVOIDS:
3147 {
3148 IfcProfile profile;
3149
3150 _loader.MoveToArgumentOffset(expressID, 0);
3151 profile.type = _loader.GetStringArgument();
3152 _loader.MoveToArgumentOffset(expressID, 2);
3153 profile.curve = GetCurve(_loader.GetRefArgument(), 2);
3154 profile.isConvex = IsCurveConvex(profile.curve);
3155
3156 _loader.MoveToArgumentOffset(expressID, 3);
3157 auto holes = _loader.GetSetArgument();
3158
3159 for (auto &hole : holes)
3160 {
3161 IfcCurve holeCurve = GetCurve(_loader.GetRefArgument(hole), 2);
3162 profile.holes.push_back(holeCurve);
3163 }
3164
3165 return profile;
3166 }
3167 case schema::IFCRECTANGLEPROFILEDEF:
3168 case schema::IFCROUNDEDRECTANGLEPROFILEDEF:
3169 {
3170 IfcProfile profile;
3171
3172 _loader.MoveToArgumentOffset(expressID, 0);
3173 profile.type = _loader.GetStringArgument();
3174 profile.isConvex = true;
3175
3176 _loader.MoveToArgumentOffset(expressID, 2);
3177 uint32_t placementID = _loader.GetRefArgument();
3178 double xdim = _loader.GetDoubleArgument();
3179 double ydim = _loader.GetDoubleArgument();
3180
3181 if (placementID != 0)
3182 {

Callers

nothing calls this directly

Calls 15

debugFunction · 0.85
IsCurveConvexFunction · 0.85
GetCircleCurveFunction · 0.85
IfcProfileClass · 0.85
errorFunction · 0.85
MoveToArgumentOffsetMethod · 0.80
GetStringArgumentMethod · 0.80
GetRefArgumentMethod · 0.80
GetSetArgumentMethod · 0.80
GetDoubleArgumentMethod · 0.80
GetTokenTypeMethod · 0.80
StepBackMethod · 0.80

Tested by

no test coverage detected