MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / construct

Function construct

src/ifcgeom/hybrid_kernel.h:170–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

168 };
169
170 inline std::unique_ptr<AbstractKernel> construct(IfcParse::IfcFile* file, const std::string& geometry_library, Settings& conv_settings) {
171 std::string geometry_library_lower = boost::to_lower_copy(geometry_library);
172
173#ifdef IFOPSH_WITH_OPENCASCADE
174 if (geometry_library_lower == "opencascade") {
175 return std::make_unique<IfcGeom::OpenCascadeKernel>(conv_settings);
176 }
177#endif
178
179#ifdef IFOPSH_WITH_CGAL
180 if (geometry_library_lower == "cgal") {
181 return std::make_unique<CgalKernel>(conv_settings);
182 }
183
184 if (geometry_library_lower == "cgal-simple") {
185 return std::make_unique<SimpleCgalKernel>(conv_settings);
186 }
187#endif
188
189 if (geometry_library_lower.rfind("hybrid-", 0) == 0) {
190 geometry_library_lower = geometry_library_lower.substr(strlen("hybrid"));
191 std::vector<std::unique_ptr<AbstractKernel>> kernels;
192 while (!geometry_library_lower.empty()) {
193 if (geometry_library_lower.find("-", 0) == 0) {
194 geometry_library_lower = geometry_library_lower.substr(strlen("-"));
195 } else {
196 throw IfcParse::IfcException("Invalid hybrid kernel " + geometry_library);
197 }
198 auto n = kernels.size();
199#ifdef IFOPSH_WITH_OPENCASCADE
200 if (geometry_library_lower.find("opencascade", 0) == 0) {
201 kernels.emplace_back(new IfcGeom::OpenCascadeKernel(conv_settings));
202 geometry_library_lower = geometry_library_lower.substr(strlen("opencascade"));
203 }
204#endif
205
206#ifdef IFOPSH_WITH_CGAL
207 if (geometry_library_lower.find("cgal-simple", 0) == 0) {
208 kernels.emplace_back(new SimpleCgalKernel(conv_settings));
209 geometry_library_lower = geometry_library_lower.substr(strlen("cgal-simple"));
210 }
211
212 if (geometry_library_lower.find("cgal", 0) == 0) {
213 kernels.emplace_back(new CgalKernel(conv_settings));
214 geometry_library_lower = geometry_library_lower.substr(strlen("cgal"));
215 }
216#endif
217 if (kernels.size() != n + 1) {
218 throw IfcParse::IfcException("Invalid hybrid kernel " + geometry_library);
219 }
220 }
221
222 for (auto it = kernels.begin(); it != kernels.end(); ++it) {
223 (**it).propagate_exceptions = it == kernels.begin();
224 (**it).partial_success_is_success = it == kernels.end() - 1;
225 }
226
227 if (!kernels.empty()) {

Callers 3

ParseMethod · 0.85
IfcConvert.cppFile · 0.85
fix_quantitiesFunction · 0.85

Calls 6

substrMethod · 0.80
emptyMethod · 0.45
findMethod · 0.45
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected