Browse Source
Allow Kicad to use OpenCascade
Allow Kicad to use OpenCascade
Adds the option of using OpenCascade not just the community edition. Fixes: lp:1628950 * https://bugs.launchpad.net/kicad/+bug/1628950pull/17/head
7 changed files with 298 additions and 11 deletions
-
30CMakeLists.txt
-
247CMakeModules/FindOpenCASCADE.cmake
-
18common/dialog_about/dialog_about.cpp
-
4plugins/3d/oce/CMakeLists.txt
-
2plugins/3d/oce/loadmodel.cpp
-
4utils/kicad2step/CMakeLists.txt
-
4utils/kicad2step/pcb/oce_utils.cpp
@ -0,0 +1,247 @@ |
|||
# Try to find OCE / OCC |
|||
# Once done this will define |
|||
# |
|||
# OCC_FOUND - system has OCC - OpenCASCADE |
|||
# OCC_INCLUDE_DIR - where the OCC include directory can be found |
|||
# OCC_LIBRARY_DIR - where the OCC library directory can be found |
|||
# OCC_LIBRARIES - Link this to use OCC |
|||
|
|||
############################################################################ |
|||
# |
|||
# Modifications Copyright (C) 2018 Seth Hillbrand |
|||
# |
|||
# Based on FindOpenCasCade.cmake by the FreeCAD CAx development team |
|||
# |
|||
# This library is free software; you can redistribute it and/or |
|||
# modify it under the terms of the GNU Lesser General Public |
|||
# License as published by the Free Software Foundation; either |
|||
# version 2.1 of the License, or (at your option) any later version. |
|||
# |
|||
# This library 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 GNU |
|||
# Lesser General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Lesser General Public |
|||
# License along with this library; if not, write to the Free Software |
|||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|||
|
|||
# Set the needed libraries |
|||
set( OCC_LIBS |
|||
PTKernel |
|||
TKBinL |
|||
TKBin |
|||
TKBinTObj |
|||
TKBinXCAF |
|||
TKBool |
|||
TKBO |
|||
TKBRep |
|||
TKCAF |
|||
TKCDF |
|||
TKernel |
|||
TKFeat |
|||
TKFillet |
|||
TKG2d |
|||
TKG3d |
|||
TKGeomAlgo |
|||
TKGeomBase |
|||
TKHLR |
|||
TKIGES |
|||
TKLCAF |
|||
TKMath |
|||
TKMesh |
|||
TKMeshVS |
|||
TKNIS |
|||
TKOffset |
|||
TKOpenGl |
|||
TKPCAF |
|||
TKPLCAF |
|||
TKPrim |
|||
TKPShape |
|||
TKService |
|||
TKShapeSchema |
|||
TKShHealing |
|||
TKStdLSchema |
|||
TKStdSchema |
|||
TKSTEP209 |
|||
TKSTEPAttr |
|||
TKSTEPBase |
|||
TKSTEP |
|||
TKSTL |
|||
TKTObj |
|||
TKTopAlgo |
|||
TKV3d |
|||
TKVoxel |
|||
TKVRML |
|||
TKXCAFSchema |
|||
TKXCAF |
|||
TKXDEIGES |
|||
TKXDESTEP |
|||
TKXMesh |
|||
TKXmlL |
|||
TKXml |
|||
TKXmlTObj |
|||
TKXmlXCAF |
|||
TKXSBase |
|||
) |
|||
|
|||
set( OCE_LIBS TKBinXCAF TKPCAF TKSTEP TKXDESTEP TKIGES TKXDEIGES ) |
|||
|
|||
# First try to find OpenCASCADE Community Edition |
|||
if(NOT DEFINED OCE_INCLUDE_DIR) |
|||
# Check for OSX needs to come first because UNIX evaluates to true on OSX |
|||
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") |
|||
if(DEFINED HOMEBREW_PREFIX) |
|||
find_package(OCE 0.16 QUIET COMPONENTS ${OCE_LIBS} |
|||
HINTS |
|||
${OCC_LIBRARY_DIR} |
|||
${HOMEBREW_PREFIX}/Cellar/oce/* |
|||
) |
|||
elseif(DEFINED MACPORTS_PREFIX) |
|||
find_package(OCE 0.16 QUIET COMPONENTS ${OCE_LIBS} |
|||
HINTS |
|||
${OCC_LIBRARY_DIR} |
|||
${MACPORTS_PREFIX}/Library/Frameworks |
|||
) |
|||
endif() |
|||
else() |
|||
find_package(OCE 0.16 QUIET COMPONENTS ${OCE_LIBS} |
|||
HINTS |
|||
${OCC_LIBRARY_DIR} |
|||
/usr |
|||
/usr/local |
|||
/opt |
|||
/opt/oce |
|||
PATH_SUFFIXES lib |
|||
) |
|||
endif() |
|||
endif() |
|||
|
|||
if(OCE_FOUND AND NOT KICAD_USE_OCC) |
|||
set(OCC_TYPE "OpenCASCADE Community Edition") |
|||
set(OCC_INCLUDE_DIR ${OCE_INCLUDE_DIRS}) |
|||
FIND_LIBRARY(OCC_LIBRARY TKernel |
|||
HINTS |
|||
${OCC_LIBRARY_DIR} |
|||
/usr |
|||
/usr/local |
|||
/opt |
|||
/opt/oce |
|||
PATH_SUFFIXES lib |
|||
) |
|||
else(OCE_FOUND AND NOT KICAD_USE_OCC) #look for OpenCASCADE |
|||
set(OCC_TYPE "OpenCASCADE Standard Edition") |
|||
if(WIN32) |
|||
if(CYGWIN OR MINGW) |
|||
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx |
|||
/usr/include/opencascade |
|||
/usr/local/include/opencascade |
|||
/opt/opencascade/include |
|||
/opt/opencascade/inc |
|||
) |
|||
FIND_LIBRARY(OCC_LIBRARY TKernel |
|||
HINTS |
|||
${OCC_LIBRARY_DIR} |
|||
/usr/lib |
|||
/usr/local/lib |
|||
/opt/opencascade/lib |
|||
) |
|||
else(CYGWIN OR MINGW) |
|||
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx |
|||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/include" |
|||
) |
|||
FIND_LIBRARY(OCC_LIBRARY TKernel |
|||
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/lib" |
|||
) |
|||
endif(CYGWIN OR MINGW) |
|||
else(WIN32) |
|||
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx |
|||
/usr/include/opencascade |
|||
/usr/local/include/opencascade |
|||
/opt/opencascade/include |
|||
/opt/opencascade/inc |
|||
) |
|||
FIND_LIBRARY(OCC_LIBRARY TKernel |
|||
HINTS |
|||
${OCC_LIBRARY_DIR} |
|||
/usr |
|||
/usr/local |
|||
/opt/opencascade |
|||
/opt/opencascade/lin64/gcc |
|||
PATH_SUFFIXES lib |
|||
) |
|||
endif(WIN32) |
|||
endif(OCE_FOUND AND NOT KICAD_USE_OCC) |
|||
|
|||
if(OCC_LIBRARY) |
|||
GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH) |
|||
IF(NOT OCC_INCLUDE_DIR) |
|||
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx |
|||
${OCC_LIBRARY_DIR}/../inc |
|||
) |
|||
ENDIF() |
|||
else(OCC_LIBRARY) |
|||
message( "" ) |
|||
message( "*** OpenCascade library missing ***" ) |
|||
message( "Verify your OpenCascade installation or pass CMake" ) |
|||
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" ) |
|||
message( "" ) |
|||
message( FATAL_ERROR "" ) |
|||
endif(OCC_LIBRARY) |
|||
|
|||
if(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND") |
|||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR |
|||
REGEX "#define OCC_VERSION_MAJOR.*" |
|||
) |
|||
string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR}) |
|||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR |
|||
REGEX "#define OCC_VERSION_MINOR.*" |
|||
) |
|||
string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR}) |
|||
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT |
|||
REGEX "#define OCC_VERSION_MAINTENANCE.*" |
|||
) |
|||
string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT}) |
|||
|
|||
set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") |
|||
else(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND") |
|||
message( "" ) |
|||
message( "*** OpenCascade header files missing ***" ) |
|||
message( "Verify your OpenCascade installation or pass CMake" ) |
|||
message( " the header directory as '-DOCC_INCLUDE_DIR=<path>'" ) |
|||
message( "" ) |
|||
message( FATAL_ERROR "" ) |
|||
endif(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND") |
|||
|
|||
# handle the QUIETLY and REQUIRED arguments and set OCC_FOUND to TRUE if |
|||
# all listed variables are TRUE |
|||
include(FindPackageHandleStandardArgs) |
|||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OCC REQUIRED_VARS OCC_INCLUDE_DIR VERSION_VAR OCC_VERSION_STRING) |
|||
|
|||
if(OCC_FOUND) |
|||
foreach(lib IN LISTS OCC_LIBS) |
|||
|
|||
#Use the specified library location if given |
|||
find_library(OCC_TEMP_LIB ${lib} HINTS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH) |
|||
if(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND") |
|||
message( "" ) |
|||
message( "*** OpenCascade library missing ***" ) |
|||
message( "Could not find a library for ${lib} at ${OCC_LIBRARY_DIR}" ) |
|||
message( "Verify your OpenCascade installation or pass CMake" ) |
|||
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" ) |
|||
message( "" ) |
|||
message( FATAL_ERROR "" ) |
|||
else(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND") |
|||
list(APPEND OCC_LIBRARIES ${OCC_TEMP_LIB}) |
|||
endif(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND") |
|||
|
|||
unset(OCC_TEMP_LIB CACHE) |
|||
endforeach(lib) |
|||
|
|||
#Convert path names to absolute for cleaner display |
|||
get_filename_component(OCC_INCLUDE_DIR "${OCC_INCLUDE_DIR}" ABSOLUTE) |
|||
get_filename_component(OCC_LIBRARY_DIR "${OCC_LIBRARY_DIR}" ABSOLUTE) |
|||
message(STATUS "Found ${OCC_TYPE} version: ${OCC_VERSION_STRING}") |
|||
message(STATUS " ++ ${OCC_TYPE} include directory: ${OCC_INCLUDE_DIR}") |
|||
message(STATUS " ++ ${OCC_TYPE} shared libraries directory: ${OCC_LIBRARY_DIR}") |
|||
endif(OCC_FOUND) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue