diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 63c8712908..604bb3781b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -220,15 +220,23 @@ ENDIF() FIND_LIBRARY(libCGAL NAMES CGAL PATHS ${CGAL_LIBRARY_DIR} NO_DEFAULT_PATH) IF(libCGAL) MESSAGE(STATUS "CGAL library files found") + foreach(lib ${CGAL_LIBRARY_NAMES}) + string(REPLACE libCGAL "${lib}" lib_path "${libCGAL}") + list(APPEND CGAL_LIBRARIES "${lib_path}") + endforeach() ELSE() - MESSAGE(FATAL_ERROR "Unable to find CGAL library files, aborting") + FILE(GLOB CGAL_LIBRARIES ${CGAL_LIBRARY_DIR}/CGAL*.lib) + LIST(LENGTH CGAL_LIBRARY_NAMES num_cgal_library_names) + LIST(LENGTH CGAL_LIBRARIES num_cgal_libraries) + LINK_DIRECTORIES("${CGAL_LIBRARY_DIR}") + if(NOT "${num_cgal_library_names}" STREQUAL "${num_cgal_library_names}") + MESSAGE(FATAL_ERROR "Unable to find CGAL library files, aborting") + endif() + MESSAGE(STATUS "CGAL library files found") ENDIF() -foreach(lib ${CGAL_LIBRARY_NAMES}) - string(REPLACE libCGAL "${lib}" lib_path "${libCGAL}") - list(APPEND CGAL_LIBRARIES "${lib_path}") -endforeach() -FIND_LIBRARY(libGMP NAMES gmp PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) -FIND_LIBRARY(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) +# TODO: Remove hardcoded version numbers for windows +FIND_LIBRARY(libGMP NAMES gmp "libgmp-10" PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) +FIND_LIBRARY(libMPFR NAMES mpfr "libmpfr-4" PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) IF(NOT libGMP) MESSAGE(FATAL_ERROR "Unable to find GMP library files, aborting") ENDIF() diff --git a/src/ifcgeom/kernels/cgal/CgalEntityMapping.h b/src/ifcgeom/kernels/cgal/CgalEntityMapping.h index 379d855231..371a2b7769 100644 --- a/src/ifcgeom/kernels/cgal/CgalEntityMapping.h +++ b/src/ifcgeom/kernels/cgal/CgalEntityMapping.h @@ -46,7 +46,9 @@ SHAPE(IfcSphere); SHAPE(IfcRectangularPyramid); SHAPE(IfcRightCircularCylinder); SHAPE(IfcRightCircularCone); +#ifdef USE_IFC4 SHAPE(IfcTriangulatedFaceSet); +#endif SHAPE(IfcHalfSpaceSolid); FACE(IfcArbitraryClosedProfileDef); diff --git a/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp b/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp index e419996de2..3eba31aa9c 100644 --- a/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp +++ b/src/ifcgeom/kernels/cgal/CgalIfcGeomShapes.cpp @@ -191,6 +191,10 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcExtrudedAreaSolid *l, cgal CGAL::Polygon_mesh_processing::reverse_face_orientations(polyhedron); } CGAL_postcondition(polyhedron.is_valid() && polyhedron.is_closed()); // std::cout << "After: " << polyhedron.size_of_vertices() << " vertices and " << polyhedron.size_of_facets() << " facets" << std::endl; + + for (auto &vertex : vertices(polyhedron)) { + vertex->point() = vertex->point().transform(trsf); + } shape = CGAL::Nef_polyhedron_3(polyhedron); @@ -241,6 +245,10 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcExtrudedAreaSolid *l, cgal fresult << hole_polyhedron << std::endl; fresult.close(); } + + for (auto &vertex : vertices(hole_polyhedron)) { + vertex->point() = vertex->point().transform(trsf); + } if (!CGAL::Polygon_mesh_processing::is_outward_oriented(hole_polyhedron)) { CGAL::Polygon_mesh_processing::reverse_face_orientations(hole_polyhedron); @@ -876,6 +884,7 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcRightCircularCone* l, cgal return true; } +#ifdef USE_IFC4 bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcTriangulatedFaceSet* l, cgal_shape_t& shape) { IfcSchema::IfcCartesianPointList3D* point_list = l->Coordinates(); const std::vector< std::vector > coordinates = point_list->CoordList(); @@ -937,6 +946,7 @@ bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcTriangulatedFaceSet* l, cg shape = CGAL::Nef_polyhedron_3(polyhedron); return true; } +#endif bool IfcGeom::CgalKernel::convert(const IfcSchema::IfcHalfSpaceSolid* l, cgal_shape_t& shape) { IfcSchema::IfcSurface* surface = l->BaseSurface(); diff --git a/src/ifcgeom/kernels/opencascade/OpenCascadeShape.cpp b/src/ifcgeom/kernels/opencascade/OpenCascadeShape.cpp index fcc94b52e3..da31ee08b9 100644 --- a/src/ifcgeom/kernels/opencascade/OpenCascadeShape.cpp +++ b/src/ifcgeom/kernels/opencascade/OpenCascadeShape.cpp @@ -11,7 +11,10 @@ void IfcGeom::OpenCascadeShape::Triangulate(const IfcGeom::IteratorSettings& settings, const IfcGeom::ConversionResultPlacement* place, IfcGeom::Representation::Triangulation* t, int surface_style_id) const { const TopoDS_Shape& s = shape_; - const gp_GTrsf& trsf = dynamic_cast(place)->trsf(); + gp_GTrsf trsf; + if (place) { + trsf = dynamic_cast(place)->trsf(); + } // Triangulate the shape try {