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