[Bf-blender-cvs] [581ca8f7639] nurbs-opencascade: Nurbs: Trying to get opencascade backend to make nurbs, not working yet.

YimingWu noreply at git.blender.org
Sat Dec 25 15:24:36 CET 2021


Commit: 581ca8f7639597f8e58294cef39ee3e13015dc78
Author: YimingWu
Date:   Sat Dec 25 22:23:41 2021 +0800
Branches: nurbs-opencascade
https://developer.blender.org/rB581ca8f7639597f8e58294cef39ee3e13015dc78

Nurbs: Trying to get opencascade backend to make nurbs, not working yet.

===================================================================

M	CMakeLists.txt
A	build_files/cmake/Modules/FindOpenCascade.cmake
M	build_files/cmake/macros.cmake
M	build_files/cmake/platform/platform_unix.cmake
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/curve.cc

===================================================================

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5c5b5eb317e..c1f31850807 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -699,6 +699,8 @@ if(UNIX AND NOT APPLE)
   mark_as_advanced(WITH_CXX11_ABI)
 endif()
 
+option(WITH_OPENCASCADE         "Enable opencascade for curve" ON)
+
 # Installation process.
 option(POSTINSTALL_SCRIPT "Run given CMake script after installation process" OFF)
 mark_as_advanced(POSTINSTALL_SCRIPT)
diff --git a/build_files/cmake/Modules/FindOpenCascade.cmake b/build_files/cmake/Modules/FindOpenCascade.cmake
new file mode 100644
index 00000000000..0b5a9eeeba6
--- /dev/null
+++ b/build_files/cmake/Modules/FindOpenCascade.cmake
@@ -0,0 +1,157 @@
+# This script finds OpenCASCADE Technology libraries.
+# The script requires:
+#  OpenCASCADE_DIR - root OCCT folder or folder with CMake configuration files
+#
+# Script will define the following variables on success:
+#  OpenCASCADE_FOUND       - package is successfully found
+#  OpenCASCADE_INCLUDE_DIR - directory with headers
+#  OpenCASCADE_LIBRARY_DIR - directory with libraries for linker
+#  OpenCASCADE_BINARY_DIR  - directory with DLLs
+include(FindPackageHandleStandardArgs)
+
+# MY_PLATFORM variable
+math (EXPR MY_BITNESS "32 + 32*(${CMAKE_SIZEOF_VOID_P}/8)")
+if (WIN32)
+  set (MY_PLATFORM "win${MY_BITNESS}")
+elseif(APPLE)
+  set (MY_PLATFORM "mac")
+else()
+  set (MY_PLATFORM "lin")
+endif()
+
+# MY_PLATFORM_AND_COMPILER variable
+if (MSVC)
+  if (MSVC90)
+    set (MY_COMPILER vc9)
+  elseif (MSVC10)
+    set (MY_COMPILER vc10)
+  elseif (MSVC11)
+    set (MY_COMPILER vc11)
+  elseif (MSVC12)
+    set (MY_COMPILER vc12)
+  elseif (MSVC14)
+    set (MY_COMPILER vc14)
+  else()
+    set (MY_COMPILER vc15)
+    message (WARNING "Unknown msvc version. $$MY_COMPILER is used")
+  endif()
+elseif (DEFINED CMAKE_COMPILER_IS_GNUCC)
+  set (MY_COMPILER gcc)
+elseif (DEFINED CMAKE_COMPILER_IS_GNUCXX)
+  set (MY_COMPILER gcc)
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+  set (MY_COMPILER clang)
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
+  set (MY_COMPILER icc)
+else()
+  set (MY_COMPILER ${CMAKE_GENERATOR})
+  string (REGEX REPLACE " " "" COMPILER ${MY_COMPILER})
+endif()
+set (MY_PLATFORM_AND_COMPILER "${MY_PLATFORM}/${MY_COMPILER}")
+
+set (OpenCASCADE_DIR "" CACHE PATH "Path to Open CASCADE libraries.")
+
+# default paths
+set (OpenCASCADE_INCLUDE_DIR "${OpenCASCADE_DIR}/inc")
+set (OpenCASCADE_LIBRARY_DIR "${OpenCASCADE_DIR}/${MY_PLATFORM_AND_COMPILER}/lib")
+set (OpenCASCADE_BINARY_DIR  "${OpenCASCADE_DIR}/${MY_PLATFORM_AND_COMPILER}/bin")
+
+# complete list of OCCT Toolkits (copy-paste from adm/UDLIST, since installed OCCT does not include UDLIST)
+set (OpenCASCADE_TKLIST "")
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKernel TKMath) # FoundationClasses
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKG2d TKG3d TKGeomBase TKBRep) # ModelingData
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing) # ModelingAlgorithms
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKService TKV3d TKOpenGl TKMeshVS TKIVtk TKD3DHost) # Visualization
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF) # ApplicationFramework
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh) # DataExchange
+set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKDraw TKViewerTest) # Draw
+
+# validate location of OCCT libraries and headers
+set (OpenCASCADE_INCLUDE_DIR_FOUND)
+set (OpenCASCADE_LIBRARY_DIR_FOUND)
+set (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND)
+set (OpenCASCADE_IMPLIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
+set (OpenCASCADE_SHAREDLIB_RELEASE_FOUND)
+set (OpenCASCADE_SHAREDLIB_DEBUG_FOUND)
+if (EXISTS "${OpenCASCADE_INCLUDE_DIR}/Standard.hxx")
+  set (OpenCASCADE_INCLUDE_DIR_FOUND ON)
+endif()
+
+if (EXISTS "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_STATIC_LIBRARY_SUFFIX}")
+  set (OpenCASCADE_LIBRARY_DIR_FOUND ON)
+elseif (NOT WIN32 AND EXISTS "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+  set (OpenCASCADE_LIBRARY_DIR_FOUND ON)
+  set (OpenCASCADE_IMPLIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
+endif()
+
+if (EXISTS "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_STATIC_LIBRARY_SUFFIX}")
+  set (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND ON)
+elseif (NOT WIN32 AND EXISTS "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+  set (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND ON)
+  set (OpenCASCADE_IMPLIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
+elseif (OpenCASCADE_LIBRARY_DIR_FOUND)
+  message (STATUS "Only release OpenCASCADE libraries have been found")
+endif()
+
+if (NOT OpenCASCADE_LIBRARY_DIR_FOUND AND OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND)
+  set (OpenCASCADE_LIBRARY_DIR_FOUND ON)
+  message (WARNING "Only debug OpenCASCADE libraries have been found")
+endif()
+
+if (WIN32)
+  if (EXISTS "${OpenCASCADE_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    set (OpenCASCADE_SHAREDLIB_RELEASE_FOUND ON)
+  endif()
+  if (EXISTS "${OpenCASCADE_BINARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    set (OpenCASCADE_SHAREDLIB_DEBUG_FOUND ON)
+  endif()
+else()
+  if (EXISTS "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    set (OpenCASCADE_SHAREDLIB_RELEASE_FOUND ON)
+  endif()
+  if (EXISTS "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
+    set (OpenCASCADE_SHAREDLIB_DEBUG_FOUND ON)
+  endif()
+endif()
+
+if (OpenCASCADE_INCLUDE_DIR_FOUND AND OpenCASCADE_LIBRARY_DIR_FOUND)
+  set (OpenCASCADE_FOUND ON)
+  set (OpenCASCADE_INSTALL_PREFIX ${OpenCASCADE_DIR})
+
+  # Define OCCT toolkits so that CMake can put absolute paths to linker;
+  # the library existance is not checked here, since modules can be disabled.
+  foreach (aLibIter ${OpenCASCADE_TKLIST})
+    add_library (${aLibIter} SHARED IMPORTED)
+
+    set_property (TARGET ${aLibIter} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
+    set_target_properties (${aLibIter} PROPERTIES IMPORTED_IMPLIB_RELEASE "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${OpenCASCADE_IMPLIB_SUFFIX}")
+    if (OpenCASCADE_SHAREDLIB_RELEASE_FOUND)
+      if (WIN32)
+        set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_RELEASE "${OpenCASCADE_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      else()
+        set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_RELEASE "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      endif()
+    endif()
+
+    if (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND)
+      set_property (TARGET ${aLibIter} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
+      set_target_properties (${aLibIter} PROPERTIES IMPORTED_IMPLIB_DEBUG "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${OpenCASCADE_IMPLIB_SUFFIX}")
+      if (OpenCASCADE_SHAREDLIB_DEBUG_FOUND)
+        if (WIN32)
+          set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_DEBUG "${OpenCASCADE_BINARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+        else()
+          set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_DEBUG "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+        endif()
+      endif()
+    endif()
+  endforeach()
+else()
+  # fallback searching for CMake configs
+  if (NOT "${OpenCASCADE_DIR}" STREQUAL "")
+    set (anOcctDirBak "${OpenCASCADE_DIR}")
+    find_package (OpenCASCADE CONFIG QUIET PATHS "${OpenCASCADE_DIR}" NO_DEFAULT_PATH)
+    set (OpenCASCADE_DIR "${anOcctDirBak}" CACHE PATH "Path to Open CASCADE libraries." FORCE)
+  else()
+    find_package (OpenCASCADE CONFIG QUIET)
+  endif()
+endif()
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 34c2c9a684d..81119b83316 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -596,6 +596,10 @@ function(SETUP_LIBDIRS)
       link_directories(${GMP_LIBPATH})
     endif()
 
+    if(WITH_OPENCASCADE)
+      link_directories(${OpenCASCADE_LIBRARY_DIR})
+    endif()
+
     if(WIN32 AND NOT UNIX)
       link_directories(${PTHREADS_LIBPATH})
     endif()
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 2f1a622c63d..8605e00684a 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -738,3 +738,8 @@ if(WITH_COMPILER_CCACHE)
     set(WITH_COMPILER_CCACHE OFF)
   endif()
 endif()
+
+if(WITH_OPENCASCADE)
+  find_package_wrapper(OpenCascade REQUIRED)
+endif()
+
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 02aef4ef79e..d57d24f98b2 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -791,6 +791,24 @@ if(WITH_GMP)
   )
 endif()
 
+if(WITH_OPENCASCADE)
+  add_definitions(-DWITH_OPENCASCADE)
+
+  list(APPEND INC_SYS
+    ${OpenCASCADE_INCLUDE_DIR}
+  )
+  SET(OpenCASCADE_LIBS 
+    TKTObjDRAW.a TKQADraw.a TKXDEDRAW.a TKDCAF.a TKDCAF.a TKXSDRAW.a
+    TKViewerTest.a TKTopTest.a TKDraw.a TKXDESTEP.a TKBinXCAF.a TKXmlXCAF.a TKXDEIGES.a TKXCAF.a TKIGES.a TKSTEP.a TKSTEP209.a TKSTEPAttr.a
+    TKSTEPBase.a TKXSBase.a TKStd.a TKStdL.a TKSTL.a TKXml.a TKBin.a TKXmlL.a TKBinL.a TKCAF.a TKXCAF.a TKLCAF.a TKCDF.a TKMeshVS.a TKOpenGl.a TKV3d.a TKService.a
+    TKXMesh.a TKMesh.a TKOffset.a TKFeat.a TKFillet.a TKHLR.a TKBool.a TKBO.a TKShHealing.a TKPrim.a TKTopAlgo.a TKGeomAlgo.a TKBRep.a
+    TKGeomBase.a TKG3d.a TKG2d.a TKMath.a TKernel.a
+    )
+  list(APPEND LIB
+    ${OpenCASCADE_LIBS}
+  )
+endif()
+
 # # Warnings as errors, this is too strict!

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list