| 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 | { |
nothing calls this directly
no test coverage detected