Skip to content

Commit 29b14ab

Browse files
committed
First draft of the new pythonocc-core
1 parent 2b4e465 commit 29b14ab

690 files changed

Lines changed: 645484 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
##Copyright (c) 2011-2014 Thomas Paviot (tpaviot@gmail.com)
2+
##
3+
##This file is part of pythonOCC.
4+
##
5+
##pythonOCC is free software: you can redistribute it and/or modify
6+
##it under the terms of the GNU General Public License as published by
7+
##the Free Software Foundation, either version 3 of the License, or
8+
##(at your option) any later version.
9+
##
10+
##pythonOCC is distributed in the hope that it will be useful,
11+
##but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
##MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
##GNU General Public License for more details.
14+
##
15+
##You should have received a copy of the GNU General Public License
16+
##along with pythonOCC. If not, see <http://www.gnu.org/licenses/>.
17+
18+
# pythonOCC cmake build file
19+
SET(PROJECT_NAME pythonOCC)
20+
PROJECT(${PROJECT_NAME})
21+
22+
# set pythonOCC version
23+
SET(${PROJECT_NAME}_VERSION_MAJOR 0)
24+
SET(${PROJECT_NAME}_VERSION_MINOR 16)
25+
# Empty for official releases, set to -dev, -rc1, etc for development releases
26+
SET(${PROJECT_NAME}_VERSION_DEVEL -dev)
27+
28+
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
29+
30+
SET(CMAKE_BUILD_TYPE "MinSizeRel" CACHE STRING "Build type")
31+
MESSAGE(STATUS " ${CMAKE_CXX_FLAGS}")
32+
SET(BUILD_SHARED_LIBS ON)
33+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
34+
35+
#############################
36+
# Option_With_Default macro #
37+
#############################
38+
MACRO( OPTION_WITH_DEFAULT OPTION_NAME OPTION_STRING OPTION_DEFAULT )
39+
IF( NOT DEFINED ${OPTION_NAME} )
40+
SET( ${OPTION_NAME} ${OPTION_DEFAULT} )
41+
ENDIF( NOT DEFINED ${OPTION_NAME} )
42+
OPTION( ${OPTION_NAME} "${OPTION_STRING}" ${${OPTION_NAME}} )
43+
ENDMACRO( OPTION_WITH_DEFAULT OPTION_NAME OPTION_STRING OPTION_DEFAULT )
44+
45+
##########
46+
# Python #
47+
##########
48+
FIND_PACKAGE(PythonLibs)
49+
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
50+
51+
##############################################################
52+
# 32/64 bit detection
53+
###############################################################
54+
IF(${CMAKE_SIZEOF_VOID_P} MATCHES "8")
55+
# If in 64bit mode, we have to define the _OCC64 variable
56+
ADD_DEFINITIONS(-D_OCC64)
57+
SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -D_OCC64)
58+
SET(BIT 64)
59+
ELSE(${CMAKE_SIZEOF_VOID_P} MATCHES "8")
60+
SET(BIT 32)
61+
ENDIF(${CMAKE_SIZEOF_VOID_P} MATCHES "8")
62+
MESSAGE(STATUS "Build ${BIT}bit")
63+
64+
IF ((NOT MSVC) OR (CMAKE_BUILD_TOOL STREQUAL "nmake"))
65+
IF( NOT DEFINED ${PROJECT_NAME}_BUILD_TYPE )
66+
SET( ${PROJECT_NAME}_BUILD_TYPE "MinSizeRel" CACHE STRING "Build type" ) # By default set release build
67+
ENDIF( NOT DEFINED ${PROJECT_NAME}_BUILD_TYPE )
68+
SET( CMAKE_BUILD_TYPE ${${PROJECT_NAME}_BUILD_TYPE} CACHE INTERNAL "Build type,
69+
immutable" FORCE )
70+
ENDIF((NOT MSVC) OR (CMAKE_BUILD_TOOL STREQUAL "nmake"))
71+
72+
########
73+
# SWIG #
74+
########
75+
FIND_PACKAGE(SWIG)
76+
INCLUDE(${SWIG_USE_FILE})
77+
SET(SWIG_FILES_PATH src/SWIG_files/wrapper)
78+
79+
################################
80+
# OCE include and lib location #
81+
################################
82+
SET(OCE_INCLUDE_PATH /usr/local/include/oce CACHE PATH "OCE include path" )
83+
SET(OCE_LIB_PATH /usr/local/lib CACHE PATH "OCE lib path" )
84+
85+
##############################################
86+
# Installation directory #
87+
# by default, installed to site-packages/OCC #
88+
##############################################
89+
EXECUTE_PROCESS(COMMAND python -c "from distutils.sysconfig import get_python_lib; import os;print get_python_lib()" OUTPUT_VARIABLE python_lib OUTPUT_STRIP_TRAILING_WHITESPACE )
90+
SET(${PROJECT_NAME}_INSTALL_DIRECTORY ${python_lib}/OCC CACHE PATH "pythonOCC install directory" )
91+
92+
# List of OCE shared libraries to link with
93+
# TODO: this should be build from the module list
94+
SET(OCE_MODEL_LIBRARIES TKernel TKMath TKAdvTools TKG2d TKG3d TKGeomBase TKBRep TKGeomAlgo
95+
TKTopAlgo TKPrim TKBO TKHLR TKMesh TKShHealing TKXMesh
96+
TKBool TKFillet TKFeat TKOffset)
97+
SET(OCE_VISUALIZATION_LIBRARIES TKService TKV3d TKOpenGl)
98+
SET(OCE_DATAEXCHANGE_LIBRARIES TKSTL TKXSBase TKSTEPBase TKIGES TKSTEPAttr TKSTEP209
99+
TKSTEP TKVRML)
100+
# Tells CMake where are the required headers
101+
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
102+
INCLUDE_DIRECTORIES(${OCE_INCLUDE_PATH})
103+
LINK_DIRECTORIES(${OCE_LIB_PATH})
104+
105+
######################################################
106+
# Configure Build settings according to the platform #
107+
######################################################
108+
IF(UNIX)
109+
IF(APPLE)
110+
######### MacOSX ###########
111+
SET(PLATFORM Darwin)
112+
ELSE(APPLE)
113+
######### Unix/Linux ###########
114+
SET(PLATFORM Unix)
115+
ENDIF(APPLE)
116+
SET(CMAKE_SWIG_FLAGS -O -w302,401,314,509,512
117+
-DCSFDB -DHAVE_CONFIG_H -DOCC_CONVERT_SIGNALS)
118+
ADD_DEFINITIONS(-DHAVE_CONFIG_H -DCSFDB -DOCC_CONVERT_SIGNALS)
119+
ELSE(UNIX)
120+
IF(WIN32)
121+
######### Windows ###########
122+
ADD_DEFINITIONS(-DWNT -DWIN32 -D_WINDOWS -DCSFDB -DHAVE_CONFIG_H)
123+
# specific windows defines for python version >=2.6.0
124+
EXECUTE_PROCESS(COMMAND python -c "import sys;print (2,6)>=sys.version_info[:2]" OUTPUT_VARIABLE PYTHON_26_OR_HIGHER OUTPUT_STRIP_TRAILING_WHITESPACE)
125+
IF(${PYTHON_26_OR_HIGHER} MATCHES "True")
126+
ADD_DEFINITIONS(-DHAVE_ACOSH -DHAVE_ASINH -DHAVE_ATANH)
127+
ENDIF(${PYTHON_26_OR_HIGHER} MATCHES "True")
128+
SET(CMAKE_SWIG_FLAGS -O -w302,401,314,509,512 -DCSFDB -DWIN32 -D_WINDOWS)
129+
SET(PLATFORM win)
130+
ELSE(WIN32)
131+
MESSAGE(STATUS "Unknown platform")
132+
ENDIF(WIN32)
133+
ENDIF(UNIX)
134+
MESSAGE(STATUS "Platform:" ${PLATFORM})
135+
136+
################################################
137+
# Define output path for generated libraries: #
138+
# platform/compiler-build_type-bits #
139+
# for instance: #
140+
# ./win32/bin/vc7.1-release-64 #
141+
# ./win32/bin/vc9-debug-32 #
142+
# ./Unix/i386-debug-64 #
143+
################################################
144+
IF(WIN32)
145+
IF(MSVC) # The compiler used is MSVC
146+
MESSAGE(STATUS "Found MSVC compiler: ${MSVC} ${MSVC_VERSION}")
147+
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin/)
148+
ELSEIF (BORLAND) # The compiler used is BORLAND
149+
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/win${BIT}/bin/${CMAKE_BUILD_TYPE})
150+
ELSE()
151+
SET(LIBRARY_OUTPUT_PATH win${BIT}/bin/${CMAKE_BUILD_TYPE})
152+
ENDIF()
153+
SET(EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH})
154+
ELSE(WIN32)
155+
SET(LIBRARY_OUTPUT_PATH ${PLATFORM}/${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_BUILD_TYPE}-${BIT})
156+
ENDIF(WIN32)
157+
SET(CMAKE_SWIG_OUTDIR ${LIBRARY_OUTPUT_PATH})
158+
MESSAGE(STATUS "output_path: ${LIBRARY_OUTPUT_PATH}")
159+
160+
############################
161+
# OpenCASCADE Modules list #
162+
############################
163+
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/OCE_Modules.cmake)
164+
# add an option to choose toolkits to compile
165+
OPTION_WITH_DEFAULT(${PROJECT_NAME}_WRAP_MODEL "Compile Foundation/Model" TRUE)
166+
OPTION_WITH_DEFAULT(${PROJECT_NAME}_WRAP_VISU "Compile Visualisation" TRUE)
167+
OPTION_WITH_DEFAULT(${PROJECT_NAME}_WRAP_DATAEXCHANGE "Compile Data Exchange" TRUE)
168+
169+
###################
170+
# Wrapper Modules #
171+
###################
172+
173+
# MODEL Toolkits
174+
FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${SWIG_FILES_PATH})
175+
FOREACH(OCE_MODULE ${OCE_TOOLKIT_MODEL})
176+
SET(FILE ${SWIG_FILES_PATH}/${OCE_MODULE}.i)
177+
SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON)
178+
SWIG_ADD_MODULE(${OCE_MODULE} python ${FILE})
179+
SWIG_LINK_LIBRARIES(${OCE_MODULE} ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES})
180+
ENDFOREACH(OCE_MODULE)
181+
182+
# Visualisation
183+
IF(${PROJECT_NAME}_WRAP_VISU)
184+
FOREACH(OCE_MODULE ${OCE_TOOLKIT_VISUALIZATION})
185+
SET(FILE ${SWIG_FILES_PATH}/${OCE_MODULE}.i)
186+
SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON)
187+
SWIG_ADD_MODULE(${OCE_MODULE} python ${FILE})
188+
SWIG_LINK_LIBRARIES(${OCE_MODULE} ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES})
189+
ENDFOREACH(OCE_MODULE)
190+
ENDIF(${PROJECT_NAME}_WRAP_VISU)
191+
192+
IF(${PROJECT_NAME}_WRAP_VISU)
193+
# Build third part modules
194+
# TODO : the following line is strange but necessary
195+
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory src/Visualization)
196+
SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Visualization.i PROPERTIES CPLUSPLUS ON)
197+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization)
198+
SET(VISUALIZATION_SOURCE_FILES
199+
${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Visualization.i
200+
${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Display3d.cpp
201+
${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Tesselator.cpp
202+
)
203+
SWIG_ADD_MODULE(Visualization python ${VISUALIZATION_SOURCE_FILES})
204+
IF(APPLE)
205+
# on OSX, always add /System/Library/Frameworks/Cocoa.framework, even
206+
# if GLX is enabled
207+
SWIG_LINK_LIBRARIES(Visualization ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES} /System/Library/Frameworks/Cocoa.framework)
208+
ELSE(APPLE)
209+
SWIG_LINK_LIBRARIES(Visualization ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES})
210+
ENDIF(APPLE)
211+
ENDIF(${PROJECT_NAME}_WRAP_VISU)
212+
213+
# DataExchange
214+
IF(${PROJECT_NAME}_WRAP_DATAEXCHANGE)
215+
FOREACH(OCE_MODULE ${OCE_TOOLKIT_DATAEXCHANGE})
216+
SET(FILE ${SWIG_FILES_PATH}/${OCE_MODULE}.i)
217+
SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON)
218+
SWIG_ADD_MODULE(${OCE_MODULE} python ${FILE})
219+
SWIG_LINK_LIBRARIES(${OCE_MODULE} ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES} ${OCE_DATAEXCHANGE_LIBRARIES})
220+
ENDFOREACH(OCE_MODULE)
221+
ENDIF(${PROJECT_NAME}_WRAP_DATAEXCHANGE)
222+
223+
################
224+
# Installation #
225+
################
226+
IF(WIN32)
227+
SET(EXTENSION "pyd")
228+
ELSE(WIN32)
229+
SET(EXTENSION "so")
230+
ENDIF(WIN32)
231+
SET(BUILD_DIR ${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_PATH})
232+
233+
# install pythonOCC modules
234+
FOREACH(OCE_MODULE ${OCE_TOOLKIT_MODEL})
235+
INSTALL(FILES ${BUILD_DIR}/${OCE_MODULE}.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
236+
INSTALL(FILES ${BUILD_DIR}/_${OCE_MODULE}.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
237+
ENDFOREACH(OCE_MODULE)
238+
IF(${PROJECT_NAME}_WRAP_VISU)
239+
FOREACH(OCE_MODULE ${OCE_TOOLKIT_VISUALIZATION})
240+
INSTALL(FILES ${BUILD_DIR}/${OCE_MODULE}.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
241+
INSTALL(FILES ${BUILD_DIR}/_${OCE_MODULE}.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
242+
ENDFOREACH(OCE_MODULE)
243+
ENDIF(${PROJECT_NAME}_WRAP_VISU)
244+
IF(${PROJECT_NAME}_WRAP_DATAEXCHANGE)
245+
FOREACH(OCE_MODULE ${OCE_TOOLKIT_DATAEXCHANGE})
246+
INSTALL(FILES ${BUILD_DIR}/${OCE_MODULE}.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
247+
INSTALL(FILES ${BUILD_DIR}/_${OCE_MODULE}.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
248+
ENDFOREACH(OCE_MODULE)
249+
ENDIF(${PROJECT_NAME}_WRAP_DATAEXCHANGE)
250+
251+
# install third part modules
252+
IF(${PROJECT_NAME}_WRAP_VISU)
253+
INSTALL(FILES ${BUILD_DIR}/Visualization.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
254+
INSTALL(FILES ${BUILD_DIR}/_Visualization.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
255+
ENDIF(${PROJECT_NAME}_WRAP_VISU)
256+
257+
# install GC
258+
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/GarbageCollector.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
259+
# install addons
260+
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/addons/Display DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
261+
# install LICENSE file
262+
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
263+
# install __init__.py file
264+
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/__init__.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} )
265+
266+
#######################
267+
# pythonOCC Packaging #
268+
# $ make package #
269+
#######################
270+
IF(UNIX)
271+
INCLUDE(InstallRequiredSystemLibraries)
272+
ENDIF(UNIX)
273+
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "pythonOCC")
274+
SET(CPACK_PACKAGE_VENDOR "Thomas Paviot")
275+
SET(CPACK_SET_DESTDIR "ON")
276+
SET(CPACK_PACKAGE_VERSION_MAJOR ${${PROJECT_NAME}_VERSION_MAJOR})
277+
SET(CPACK_PACKAGE_VERSION_MINOR ${${PROJECT_NAME}_VERSION_MINOR})
278+
SET(CPACK_PACKAGE_VERSION_PATCH 0)
279+
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
280+
SET(CPACK_PACKAGE_CONTACT "pythonOCC users <pythonocc-users@gna.org")
281+
INCLUDE(CPack)

INSTALL

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
OVERVIEW:
2+
========
3+
4+
pythonOCC is a python library whose purpose is to provide 3D modeling features
5+
as well as parametric modeling, data exchange, meshing etc. It's intended to
6+
developers who aim at developing a complete CAD/PLM application, and to
7+
engineers who want to have a total control over the data during complex design
8+
activities.
9+
10+
ABOUT THIS DOCUMENT:
11+
====================
12+
13+
This file explains how to build pythonOCC-core from source on Windows, Linux or
14+
MacOSX platforms.
15+
16+
REQUIREMENTS:
17+
=============
18+
19+
pythonOCC needs the following libraries or programs to be installed before you
20+
can compile/use it :
21+
22+
- the python programming language (http://www.python.org). Python 2.5 or
23+
higher is required,
24+
25+
- SWIG 1.3.36 or higher,
26+
27+
- OCE 0.16 (https://github.com/tpaviot/oce),
28+
29+
- CMake 2.8 or higher (http://www.cmake.org)
30+
31+
32+
PYTHON WRAPPER COMPILATION:
33+
===========================
34+
cd to the root pythonocc directory:
35+
your_dev_folder/$cd pythonocc
36+
your_dev_folder/pythonocc$
37+
38+
Create a work directory:
39+
your_dev_folder/pythonocc$ mkdir cmake-build
40+
your_dev_folder/pythonocc$ mkdir cd cmake-build
41+
your_dev_folder/pythonocc/cmake-build$
42+
43+
Launch the cmake-gui:
44+
your_dev_folder/pythonocc/cmake-build$ cmake-gui ..
45+
46+
Check :
47+
* the oce include and lib directories,
48+
* the install path (default points to the default site-packages directory)
49+
50+
Then
51+
your_dev_folder/pythonocc/cmake-build$ make
52+
53+
When completed ([100%] done), install the python package:
54+
your_dev_folder/pythonocc/cmake-build$ make install
55+
56+
(you may have to sudo make install if admin privileges are required)
57+
58+
TEST:
59+
=====
60+
You can either run the unittest suite to check that everything is ok:
61+
your_dev_folder/pythonocc/cmake-build$ cd ../tests
62+
63+
your_dev_folder/pythonocc/src/unittests$ python run_tests.py
64+
65+
You can also run the examples avalaible from the examples directory.

0 commit comments

Comments
 (0)