Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
cd7814871b |
4
.gitattributes
vendored
@@ -1,8 +1,6 @@
|
||||
.gitattributes eol=lf
|
||||
.gitignore eol=lf
|
||||
*.txt eol=lf
|
||||
*.htm eol=lf
|
||||
*.html eol=lf
|
||||
*.h eol=lf
|
||||
*.c eol=lf
|
||||
*.inl eol=lf
|
||||
@@ -31,7 +29,6 @@
|
||||
*.xib eol=lf
|
||||
*.plist eol=lf
|
||||
*.java eol=lf
|
||||
*.js eol=lf
|
||||
*.igs eol=lf
|
||||
*.iges eol=lf
|
||||
*.stp eol=lf
|
||||
@@ -47,7 +44,6 @@
|
||||
FILES eol=lf
|
||||
PACKAGES eol=lf
|
||||
EXTERNLIB eol=lf
|
||||
EXTERNLIB_STATIC eol=lf
|
||||
UDLIST eol=lf
|
||||
tests/* eol=lf
|
||||
tests/*/* eol=lf
|
||||
|
218
CMakeLists.txt
@@ -91,16 +91,6 @@ if (NOT DEFINED BUILD_RELEASE_DISABLE_EXCEPTIONS)
|
||||
set (BUILD_RELEASE_DISABLE_EXCEPTIONS ON CACHE BOOL "${BUILD_RELEASE_DISABLE_EXCEPTIONS_DESCR}")
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
set (BUILD_FORCE_RelWithDebInfo OFF CACHE BOOL "${BUILD_FORCE_RelWithDebInfo_DESCR}")
|
||||
else()
|
||||
set (BUILD_FORCE_RelWithDebInfo OFF)
|
||||
endif()
|
||||
|
||||
if (BUILD_FORCE_RelWithDebInfo)
|
||||
set (CMAKE_CONFIGURATION_TYPES Release Debug CACHE INTERNAL "" FORCE)
|
||||
endif()
|
||||
|
||||
# option to enable or disable use of precompiled headers
|
||||
if (NOT DEFINED BUILD_USE_PCH)
|
||||
set (BUILD_USE_PCH OFF CACHE BOOL "${BUILD_USE_PCH_DESCR}")
|
||||
@@ -209,10 +199,15 @@ endif()
|
||||
set (CMAKE_INSTALL_PREFIX "${INSTALL_DIR}" CACHE INTERNAL "" FORCE)
|
||||
|
||||
set (BIN_LETTER "")
|
||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||||
set (BIN_LETTER "d")
|
||||
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
|
||||
set (BIN_LETTER "i")
|
||||
if ("${INSTALL_DIR_LAYOUT}" STREQUAL "Windows")
|
||||
message(STATUS "Info: Windows layout was defined")
|
||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||||
set (BIN_LETTER "d")
|
||||
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
|
||||
set (BIN_LETTER "i")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Info: Unix layout was defined")
|
||||
endif()
|
||||
|
||||
# Get all used variables: OS_WITH_BIT, COMPILER
|
||||
@@ -374,28 +369,12 @@ if (MSVC)
|
||||
endif()
|
||||
|
||||
# whether use optional 3rdparty or not
|
||||
set (USE_TK ON CACHE BOOL "${USE_TK_DESCR}")
|
||||
set (USE_FREETYPE ON CACHE BOOL "${USE_FREETYPE_DESCR}")
|
||||
set (USE_FREEIMAGE OFF CACHE BOOL "${USE_FREEIMAGE_DESCR}")
|
||||
set (USE_FFMPEG OFF CACHE BOOL "${USE_FFMPEG_DESCR}")
|
||||
set (USE_OPENVR OFF CACHE BOOL "${USE_OPENVR_DESCR}")
|
||||
set (USE_RAPIDJSON OFF CACHE BOOL "${USE_RAPIDJSON_DESCR}")
|
||||
set (USE_DRACO OFF CACHE BOOL "${USE_DRACO_DESCR}")
|
||||
set (USE_TBB OFF CACHE BOOL "${USE_TBB_DESCR}")
|
||||
set (USE_EIGEN OFF CACHE BOOL "${USE_EIGEN_DESCR}")
|
||||
|
||||
if (WIN32 OR ANDROID OR IOS OR EMSCRIPTEN)
|
||||
# no Xlib
|
||||
elseif (APPLE)
|
||||
set (USE_XLIB OFF CACHE BOOL "${USE_XLIB_DESCR}")
|
||||
else()
|
||||
set (USE_XLIB ON CACHE BOOL "${USE_XLIB_DESCR}")
|
||||
if (APPLE)
|
||||
set (USE_GLX OFF CACHE BOOL "${USE_GLX_DESCR}")
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
set (USE_D3D OFF CACHE BOOL "${USE_D3D_DESCR}")
|
||||
else()
|
||||
set (USE_D3D OFF)
|
||||
endif()
|
||||
|
||||
# Enable/Disable the floating point exceptions (FPE) during runtime.
|
||||
@@ -409,15 +388,6 @@ else()
|
||||
set (BUILD_ENABLE_FPE_SIGNAL_HANDLER 0)
|
||||
endif()
|
||||
|
||||
# OpenGL
|
||||
if (ANDROID OR IOS OR EMSCRIPTEN OR "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||
set (USE_OPENGL OFF)
|
||||
set (USE_GLES2 ON)
|
||||
else()
|
||||
set (USE_OPENGL ON CACHE BOOL "${USE_OPENGL_DESCR}")
|
||||
set (USE_GLES2 OFF CACHE BOOL "${USE_GLES2_DESCR}")
|
||||
endif()
|
||||
|
||||
# include the patched or original list of modules
|
||||
# list <MODULENAME>_TOOLKITS is created foreach module and contains its toolkits
|
||||
# list <OCCT_MODULES> will contain all modules
|
||||
@@ -449,6 +419,10 @@ if (NOT DEFINED BUILD_DOC_Overview)
|
||||
set (BUILD_DOC_Overview ${CAN_DOXYGEN_BE_USED} CACHE BOOL "${BUILD_DOC_Overview_DESCR}")
|
||||
endif()
|
||||
|
||||
if (NOT USE_D3D)
|
||||
list (REMOVE_ITEM Visualization_TOOLKITS TKD3DHost)
|
||||
endif()
|
||||
|
||||
# accumulate used toolkits (first level) in BUILD_TOOLKITS variable
|
||||
list (APPEND BUILD_TOOLKITS ${BUILD_ADDITIONAL_TOOLKITS})
|
||||
|
||||
@@ -458,6 +432,12 @@ foreach (OCCT_MODULE ${OCCT_MODULES})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# DRAWEXE excluded when library build is static
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS DRAWEXE)
|
||||
message (STATUS "Info: DRAWEXE is not included due to ${BUILD_LIBRARY_TYPE} build library type")
|
||||
endif()
|
||||
|
||||
# accumulate all used toolkits
|
||||
list (REMOVE_DUPLICATES BUILD_TOOLKITS)
|
||||
set (RAW_BUILD_TOOLKITS)
|
||||
@@ -509,70 +489,35 @@ endif()
|
||||
# search for CSF variable in EXTERNLIB of each being used toolkit
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_FreeImagePlus CAN_USE_FREEIMAGE)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_TclLibs USE_TCL)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_TclTkLibs CAN_USE_TK)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_XwLibs CAN_USE_XLIB)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_FREETYPE CAN_USE_FREETYPE)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_OpenGlLibs CAN_USE_OPENGL)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_OpenGlesLibs CAN_USE_GLES2)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_FREETYPE USE_FREETYPE)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_OpenGlLibs CAN_USE_GLES2)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_TBB CAN_USE_TBB)
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_EIGEN CAN_USE_EIGEN)
|
||||
|
||||
# define CSF variable
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_csf")
|
||||
|
||||
# Tcl (mandatory for Draw Harness)
|
||||
if (USE_TCL)
|
||||
message (STATUS "Info: TCL is used by OCCT")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/tcl")
|
||||
|
||||
message (STATUS "Info: TK is used by OCCT")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/tk")
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TCL")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_TCL")
|
||||
endif()
|
||||
|
||||
# Tk (optional for Draw Harness)
|
||||
if (CAN_USE_TK)
|
||||
if (USE_TK)
|
||||
message (STATUS "Info: TK is used by OCCT")
|
||||
add_definitions (-DHAVE_TK)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/tk")
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TK")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_TK")
|
||||
endif()
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET ("USE_TK")
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TK")
|
||||
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_TCL")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_TK")
|
||||
endif()
|
||||
|
||||
# Xlib
|
||||
if (CAN_USE_XLIB)
|
||||
if (USE_XLIB)
|
||||
message (STATUS "Info: Xlib is used by OCCT")
|
||||
add_definitions (-DHAVE_XLIB)
|
||||
if (APPLE)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/glx")
|
||||
endif()
|
||||
endif()
|
||||
if (USE_FREETYPE)
|
||||
message (STATUS "Info: Freetype is used by OCCT")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/freetype")
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET ("USE_XLIB")
|
||||
endif()
|
||||
|
||||
# FreeType
|
||||
if (CAN_USE_FREETYPE)
|
||||
if (USE_FREETYPE)
|
||||
message (STATUS "Info: FreeType is used by OCCT")
|
||||
add_definitions (-DHAVE_FREETYPE)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/freetype")
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_FREETYPE")
|
||||
OCCT_CHECK_AND_UNSET ("3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2")
|
||||
OCCT_CHECK_AND_UNSET ("3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_FREETYPE")
|
||||
endif()
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET ("USE_FREETYPE")
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_FREETYPE")
|
||||
OCCT_CHECK_AND_UNSET ("3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2")
|
||||
OCCT_CHECK_AND_UNSET ("3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_FREETYPE")
|
||||
endif()
|
||||
|
||||
@@ -592,8 +537,25 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# D3D
|
||||
if (USE_D3D)
|
||||
add_definitions (-DHAVE_D3D)
|
||||
#if(MSVC_VERSION LESS 1700)
|
||||
#OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/d3d")
|
||||
#endif()
|
||||
endif()
|
||||
|
||||
# GLX
|
||||
if (USE_GLX)
|
||||
add_definitions (-DMACOSX_USE_GLX)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/glx")
|
||||
endif()
|
||||
|
||||
# FREEIMAGE
|
||||
|
||||
if (CAN_USE_FREEIMAGE)
|
||||
set (USE_FREEIMAGE OFF CACHE BOOL "${USE_FREEIMAGE_DESCR}")
|
||||
|
||||
if (USE_FREEIMAGE)
|
||||
add_definitions (-DHAVE_FREEIMAGE)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/freeimage")
|
||||
@@ -612,6 +574,8 @@ endif()
|
||||
# search for CSF_OpenVR variable in EXTERNLIB of each being used toolkit
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_OpenVR CAN_USE_OPENVR)
|
||||
if (CAN_USE_OPENVR)
|
||||
set (USE_OPENVR OFF CACHE BOOL "${USE_OPENVR_DESCR}")
|
||||
|
||||
if (USE_OPENVR)
|
||||
add_definitions (-DHAVE_OPENVR)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/openvr")
|
||||
@@ -631,6 +595,8 @@ endif()
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_FFmpeg CAN_USE_FFMPEG)
|
||||
|
||||
if (CAN_USE_FFMPEG)
|
||||
set (USE_FFMPEG OFF CACHE BOOL "${USE_FFMPEG_DESCR}")
|
||||
|
||||
if (USE_FFMPEG)
|
||||
add_definitions (-DHAVE_FFMPEG)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/ffmpeg")
|
||||
@@ -645,31 +611,23 @@ else()
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_FFMPEG")
|
||||
endif()
|
||||
|
||||
# OpenGL
|
||||
if (CAN_USE_OPENGL)
|
||||
if (USE_OPENGL)
|
||||
add_definitions (-DHAVE_OPENGL_EXT)
|
||||
else()
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS TKOpenGl)
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS TKOpenGlTest)
|
||||
endif()
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET ("USE_OPENGL")
|
||||
endif()
|
||||
|
||||
# OpenGL ES 2.0
|
||||
if (CAN_USE_GLES2)
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
||||
set (USE_GLES2 ON)
|
||||
else()
|
||||
set (USE_GLES2 OFF CACHE BOOL "${USE_GLES2_DESCR}")
|
||||
endif()
|
||||
|
||||
if (USE_GLES2)
|
||||
add_definitions (-DHAVE_GLES2_EXT)
|
||||
add_definitions (-DHAVE_GLES2)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/egl")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/gles2")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/gles2")
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_EGL")
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_GLES2")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_EGL")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_GLES2")
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS TKOpenGles)
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS TKOpenGlesTest)
|
||||
endif()
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET ("USE_GLES2")
|
||||
@@ -680,19 +638,10 @@ else()
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_GLES2")
|
||||
endif()
|
||||
|
||||
# D3D
|
||||
if (USE_D3D)
|
||||
add_definitions (-DHAVE_D3D)
|
||||
#if(MSVC_VERSION LESS 1700)
|
||||
#OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/d3d")
|
||||
#endif()
|
||||
else()
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS TKD3DHost)
|
||||
list (REMOVE_ITEM BUILD_TOOLKITS TKD3DHostTest)
|
||||
endif()
|
||||
|
||||
# TBB
|
||||
if (NOT DEFINED ANDROID AND CAN_USE_TBB)
|
||||
set (USE_TBB OFF CACHE BOOL "${USE_TBB_DESCR}")
|
||||
|
||||
if (USE_TBB)
|
||||
add_definitions (-DHAVE_TBB)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/tbb")
|
||||
@@ -713,6 +662,8 @@ endif()
|
||||
# search for CSF_RapidJSON variable in EXTERNLIB of each being used toolkit
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_RapidJSON CAN_USE_RAPIDJSON)
|
||||
if (CAN_USE_RAPIDJSON)
|
||||
set (USE_RAPIDJSON OFF CACHE BOOL "${USE_RAPIDJSON_DESCR}")
|
||||
|
||||
if (USE_RAPIDJSON)
|
||||
add_definitions (-DHAVE_RAPIDJSON)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/rapidjson")
|
||||
@@ -727,26 +678,10 @@ else()
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_RAPIDJSON")
|
||||
endif()
|
||||
|
||||
# Draco library
|
||||
# search for CSF_Draco variable in EXTERNLIB of each being used toolkit
|
||||
OCCT_IS_PRODUCT_REQUIRED (CSF_Draco CAN_USE_DRACO)
|
||||
if (CAN_USE_DRACO)
|
||||
if (USE_DRACO)
|
||||
add_definitions (-DHAVE_DRACO)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/draco")
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_DRACO")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_DRACO")
|
||||
endif()
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET ("USE_DRACO")
|
||||
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_DRACO")
|
||||
OCCT_CHECK_AND_UNSET ("INSTALL_DRACO")
|
||||
endif()
|
||||
|
||||
# EIGEN
|
||||
if (CAN_USE_EIGEN)
|
||||
set (USE_EIGEN OFF CACHE BOOL "${USE_EIGEN_DESCR}")
|
||||
|
||||
if (USE_EIGEN)
|
||||
add_definitions (-DHAVE_EIGEN)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/eigen")
|
||||
@@ -862,13 +797,13 @@ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/
|
||||
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib")
|
||||
|
||||
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libi")
|
||||
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libi")
|
||||
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
|
||||
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BIN_LETTER}")
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
|
||||
|
||||
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
|
||||
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/libd")
|
||||
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
|
||||
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BIN_LETTER}")
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BIN_LETTER}")
|
||||
|
||||
if (WIN32)
|
||||
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
|
||||
@@ -1209,9 +1144,6 @@ foreach (OCCT_TOOLKIT ${BUILD_TOOLKITS})
|
||||
endforeach()
|
||||
list (REMOVE_DUPLICATES OCCT_MODULES_ENABLED)
|
||||
list (REMOVE_DUPLICATES OCCT_COMPILE_DEFINITIONS)
|
||||
# these macros are defined for specific tookits, not globalwise
|
||||
list (REMOVE_ITEM OCCT_COMPILE_DEFINITIONS HAVE_OPENGL)
|
||||
list (REMOVE_ITEM OCCT_COMPILE_DEFINITIONS HAVE_GLES2)
|
||||
|
||||
# export compile definitions and C/C++ flags for each configuration to OpenCASCADE config files
|
||||
foreach (OCCT_CONFIGURATION ${CMAKE_CONFIGURATION_TYPES})
|
||||
@@ -1265,7 +1197,7 @@ if (WIN32)
|
||||
set (SET_OpenCASCADE_WITH_D3D "set (OpenCASCADE_WITH_D3D ${USE_D3D})")
|
||||
endif()
|
||||
if (APPLE)
|
||||
set (SET_OpenCASCADE_WITH_GLX "set (OpenCASCADE_WITH_GLX ${USE_XLIB})")
|
||||
set (SET_OpenCASCADE_WITH_GLX "set (OpenCASCADE_WITH_GLX ${USE_GLX})")
|
||||
endif()
|
||||
|
||||
# Configure and install cmake config file
|
||||
|
@@ -1,7 +1,7 @@
|
||||
FoundationClasses TKernel TKMath
|
||||
ModelingData TKG2d TKG3d TKGeomBase TKBRep
|
||||
ModelingAlgorithms TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing
|
||||
Visualization TKService TKV3d TKOpenGl TKOpenGles TKMeshVS TKIVtk TKD3DHost
|
||||
Visualization TKService TKV3d TKOpenGl TKMeshVS TKIVtk TKD3DHost
|
||||
ApplicationFramework TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF
|
||||
DataExchange TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh
|
||||
Draw TKDraw TKTopTest TKOpenGlTest TKOpenGlesTest TKD3DHostTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
|
||||
Draw TKDraw TKTopTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
|
||||
|
@@ -1,4 +1,4 @@
|
||||
TModelingData TKShapeView TKMessageModel TKMessageView
|
||||
TModelingData TKShapeView
|
||||
TVisualization TKView TKVInspector
|
||||
TApplicationFramework TKTreeModel TKTInspectorAPI TKDFBrowser
|
||||
TTool TKTInspector TKToolsDraw TInspectorEXE
|
13
adm/UDLIST
@@ -11,6 +11,7 @@ n Expr
|
||||
n ExprIntrp
|
||||
n FSD
|
||||
n GeomAbs
|
||||
n MMgt
|
||||
n Message
|
||||
n OSD
|
||||
n PLib
|
||||
@@ -197,6 +198,7 @@ t TKPrim
|
||||
t TKShHealing
|
||||
t TKTopAlgo
|
||||
t TKXMesh
|
||||
n InterfaceGraphic
|
||||
n AIS
|
||||
n Aspect
|
||||
n DsgPrs
|
||||
@@ -206,7 +208,6 @@ n Image
|
||||
n Media
|
||||
n MeshVS
|
||||
n OpenGl
|
||||
n OpenGles
|
||||
n D3DHost
|
||||
n Prs3d
|
||||
n PrsMgr
|
||||
@@ -216,7 +217,6 @@ n SelectMgr
|
||||
n StdPrs
|
||||
n StdSelect
|
||||
n V3d
|
||||
n Wasm
|
||||
n WNT
|
||||
n Xw
|
||||
n Cocoa
|
||||
@@ -225,7 +225,6 @@ r Shaders
|
||||
r XRResources
|
||||
t TKMeshVS
|
||||
t TKOpenGl
|
||||
t TKOpenGles
|
||||
t TKD3DHost
|
||||
t TKService
|
||||
t TKV3d
|
||||
@@ -328,7 +327,6 @@ n RWStepDimTol
|
||||
n RWStepElement
|
||||
n RWStepFEA
|
||||
n RWStepGeom
|
||||
n RWStepKinematics
|
||||
n RWStepRepr
|
||||
n RWStepShape
|
||||
n RWStepVisual
|
||||
@@ -348,7 +346,6 @@ n StepDimTol
|
||||
n StepElement
|
||||
n StepFEA
|
||||
n StepGeom
|
||||
n StepKinematics
|
||||
n StepRepr
|
||||
n StepSelect
|
||||
n StepShape
|
||||
@@ -406,9 +403,6 @@ n HLRTest
|
||||
n MeshTest
|
||||
n SWDRAW
|
||||
n TObjDRAW
|
||||
n OpenGlTest
|
||||
n OpenGlesTest
|
||||
n D3DHostTest
|
||||
n ViewerTest
|
||||
n XDEDRAW
|
||||
n XSDRAW
|
||||
@@ -420,9 +414,6 @@ t TKDCAF
|
||||
t TKDraw
|
||||
t TKTObjDRAW
|
||||
t TKTopTest
|
||||
t TKOpenGlTest
|
||||
t TKOpenGlesTest
|
||||
t TKD3DHostTest
|
||||
t TKViewerTest
|
||||
t TKXDEDRAW
|
||||
t TKXSDRAW
|
||||
|
@@ -3017,7 +3017,7 @@ function (cotire_setup_unity_build_target _languages _configurations _target)
|
||||
endif()
|
||||
else()
|
||||
if (_targetAutoMoc OR _targetAutoUic OR _targetAutoRcc)
|
||||
# depend on the original target's implicitly generated <targetname>_automoc target
|
||||
# depend on the original target's implicity generated <targetname>_automoc target
|
||||
if (CMAKE_VERSION VERSION_LESS "3.8.0")
|
||||
add_dependencies(${_unityTargetName} ${_target}_automoc)
|
||||
else()
|
||||
|
@@ -1,4 +0,0 @@
|
||||
# Draco - a library for a lossy vertex data compression, used as extension to glTF format.
|
||||
# https://github.com/google/draco
|
||||
|
||||
THIRDPARTY_PRODUCT("DRACO" "draco/compression/decode.h" "CSF_Draco" "")
|
@@ -1,3 +1,3 @@
|
||||
# EGL
|
||||
|
||||
THIRDPARTY_PRODUCT("EGL" "EGL/egl.h" "CSF_OpenGlesLibs" "")
|
||||
THIRDPARTY_PRODUCT("EGL" "EGL/egl.h" "CSF_OpenGlLibs" "")
|
||||
|
@@ -191,13 +191,13 @@ foreach (LIBRARY_NAME ${CSF_FFmpeg})
|
||||
else()
|
||||
install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
|
||||
CONFIGURATIONS Release
|
||||
DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${INSTALL_DIR_BIN}")
|
||||
DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin")
|
||||
install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
|
||||
CONFIGURATIONS RelWithDebInfo
|
||||
DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${INSTALL_DIR_BIN}i")
|
||||
DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bini")
|
||||
install (FILES "${3RDPARTY_FFMPEG_DLL_${LIBRARY_NAME}}"
|
||||
CONFIGURATIONS Debug
|
||||
DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/${INSTALL_DIR_BIN}d")
|
||||
DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bind")
|
||||
endif()
|
||||
else()
|
||||
get_filename_component(3RDPARTY_FFMPEG_LIBRARY_ABS ${3RDPARTY_FFMPEG_LIBRARY_${LIBRARY_NAME}} REALPATH)
|
||||
|
@@ -1,3 +1,3 @@
|
||||
# OpenGL ES 2.0
|
||||
|
||||
THIRDPARTY_PRODUCT("GLES2" "GLES2/gl2.h" "CSF_OpenGlesLibs" "")
|
||||
THIRDPARTY_PRODUCT("GLES2" "GLES2/gl2.h" "CSF_OpenGlLibs" "")
|
||||
|
@@ -49,39 +49,22 @@ else()
|
||||
set (CSF_OpenVR)
|
||||
endif()
|
||||
|
||||
# TCL
|
||||
# TCL/TK
|
||||
if (USE_TCL)
|
||||
if (WIN32)
|
||||
set (CSF_TclLibs "tcl86")
|
||||
else()
|
||||
if(APPLE)
|
||||
set (CSF_TclLibs Tcl)
|
||||
elseif(UNIX)
|
||||
set (CSF_TclLibs "tcl8.6")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# TK
|
||||
if (USE_TK)
|
||||
if (WIN32)
|
||||
set (CSF_TclTkLibs "tk86")
|
||||
else()
|
||||
if(APPLE)
|
||||
set (CSF_TclTkLibs Tk)
|
||||
set (CSF_TclLibs Tcl)
|
||||
elseif(UNIX)
|
||||
set (CSF_TclTkLibs "tk8.6")
|
||||
set (CSF_TclLibs "tcl8.6")
|
||||
set (CSF_TclTkLibs "tk8.6")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Draco
|
||||
if (USE_DRACO)
|
||||
set (CSF_Draco "draco")
|
||||
else()
|
||||
set (CSF_Draco)
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
set (CSF_advapi32 "advapi32.lib")
|
||||
set (CSF_gdi32 "gdi32.lib")
|
||||
@@ -91,8 +74,12 @@ if (WIN32)
|
||||
set (CSF_psapi "psapi.lib")
|
||||
set (CSF_winmm "winmm.lib")
|
||||
set (CSF_d3d9 "D3D9.lib")
|
||||
set (CSF_OpenGlLibs "opengl32.lib")
|
||||
set (CSF_OpenGlesLibs "libEGL libGLESv2")
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore" OR USE_GLES2)
|
||||
set (CSF_OpenGlLibs "libEGL libGLESv2")
|
||||
else()
|
||||
set (CSF_OpenGlLibs "opengl32.lib")
|
||||
endif()
|
||||
|
||||
else()
|
||||
|
||||
if (APPLE)
|
||||
@@ -113,38 +100,31 @@ else()
|
||||
OCCT_CHECK_AND_UNSET (IOKit_LIB)
|
||||
|
||||
if (IOS)
|
||||
find_library (OpenGlesLibs_LIB NAMES OpenGLES)
|
||||
set (CSF_OpenGlesLibs ${OpenGlesLibs_LIB})
|
||||
OCCT_CHECK_AND_UNSET (OpenGlesLibs_LIB)
|
||||
elseif (USE_XLIB)
|
||||
set (CSF_OpenGlLibs "GL")
|
||||
set (CSF_XwLibs "X11")
|
||||
find_library (OpenGlLibs_LIB NAMES OpenGLES)
|
||||
set (CSF_OpenGlLibs ${OpenGlLibs_LIB})
|
||||
OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
|
||||
elseif (USE_GLX)
|
||||
set (CSF_OpenGlLibs GL)
|
||||
set (CSF_XwLibs "X11 Xext Xmu Xi")
|
||||
else()
|
||||
find_library (OpenGlLibs_LIB NAMES OpenGL)
|
||||
set (CSF_OpenGlLibs ${OpenGlLibs_LIB})
|
||||
OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
|
||||
endif()
|
||||
|
||||
elseif (EMSCRIPTEN)
|
||||
set (CSF_ThreadLibs "pthread rt stdc++")
|
||||
set (CSF_OpenGlesLibs "EGL GLESv2")
|
||||
set (CSF_dl "dl")
|
||||
|
||||
elseif (ANDROID)
|
||||
set (CSF_ThreadLibs "c")
|
||||
set (CSF_OpenGlesLibs "EGL GLESv2")
|
||||
set (CSF_OpenGlLibs "EGL GLESv2")
|
||||
set (CSF_androidlog "log")
|
||||
elseif (UNIX)
|
||||
set (CSF_ThreadLibs "pthread rt stdc++")
|
||||
if (USE_XLIB)
|
||||
set (CSF_OpenGlLibs "GL")
|
||||
set (CSF_XwLibs "X11")
|
||||
if (USE_GLES2)
|
||||
set (CSF_OpenGlLibs "EGL GLESv2")
|
||||
else()
|
||||
set (CSF_OpenGlLibs "GL EGL")
|
||||
set (CSF_OpenGlLibs "GL")
|
||||
endif()
|
||||
set (CSF_OpenGlesLibs "EGL GLESv2")
|
||||
set (CSF_XwLibs "X11 Xext Xmu Xi")
|
||||
set (CSF_dl "dl")
|
||||
if (USE_FREETYPE)
|
||||
set (CSF_fontconfig "fontconfig")
|
||||
endif()
|
||||
set (CSF_fontconfig "fontconfig")
|
||||
endif()
|
||||
endif()
|
||||
|
@@ -40,19 +40,6 @@ elseif (MSVC)
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHa")
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
# string pooling (GF), function-level linking (Gy)
|
||||
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GF /Gy")
|
||||
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GF /Gy")
|
||||
if (BUILD_FORCE_RelWithDebInfo)
|
||||
# generate debug info (Zi), inline expansion level (Ob1)
|
||||
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi /Ob1")
|
||||
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi /Ob1")
|
||||
# generate debug info (debug), OptimizeReferences=true (OPT:REF), EnableCOMDATFolding=true (OPT:ICF)
|
||||
set (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /debug /OPT:REF /OPT:ICF")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# remove _WINDOWS flag if it exists
|
||||
string (REGEX MATCH "/D_WINDOWS" IS_WINDOWSFLAG "${CMAKE_CXX_FLAGS}")
|
||||
if (IS_WINDOWSFLAG)
|
||||
@@ -136,9 +123,7 @@ if ("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xClang")
|
||||
# Optimize size of binaries
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "-Wl,-s ${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
elseif(MINGW)
|
||||
add_definitions(-D_WIN32_WINNT=0x0601)
|
||||
# _WIN32_WINNT=0x0601 (use Windows 7 SDK)
|
||||
#set (CMAKE_SYSTEM_VERSION "6.1")
|
||||
add_definitions(-D_WIN32_WINNT=0x0501)
|
||||
# workaround bugs in mingw with vtable export
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--export-all-symbols")
|
||||
|
||||
|
@@ -22,7 +22,7 @@ if ("${OCCT_TOOLKITS_NAME_SUFFIX}" STREQUAL "")
|
||||
set (OCCT_TOOLKITS_NAME_SUFFIX "TOOLKITS")
|
||||
endif()
|
||||
|
||||
# parse PACKAGES file
|
||||
# parce PACKAGES file
|
||||
FILE_TO_LIST ("${RELATIVE_SOURCES_DIR}/${PROJECT_NAME}/PACKAGES" USED_PACKAGES)
|
||||
if ("${USED_PACKAGES}" STREQUAL "")
|
||||
set (USED_PACKAGES ${PROJECT_NAME})
|
||||
@@ -39,7 +39,7 @@ set (PRECOMPILED_DEFS)
|
||||
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
list (APPEND PRECOMPILED_DEFS "-DOCCT_NO_PLUGINS")
|
||||
if (WIN32 AND NOT EXECUTABLE_PROJECT)
|
||||
if (WIN32)
|
||||
list (APPEND PRECOMPILED_DEFS "-DOCCT_STATIC_BUILD")
|
||||
endif()
|
||||
endif()
|
||||
@@ -214,7 +214,7 @@ foreach (OCCT_MODULE ${OCC_MODULES_LIST})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if (MSVC)
|
||||
if (MSVC AND "${INSTALL_DIR_LAYOUT}" STREQUAL "Windows")
|
||||
OCCT_INSERT_CODE_FOR_TARGET ()
|
||||
endif()
|
||||
|
||||
@@ -228,21 +228,12 @@ if (EXECUTABLE_PROJECT)
|
||||
|
||||
install (TARGETS ${PROJECT_NAME}
|
||||
DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}")
|
||||
|
||||
if (EMSCRIPTEN)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.wasm DESTINATION "${INSTALL_DIR_BIN}/${OCCT_INSTALL_BIN_LETTER}")
|
||||
endif()
|
||||
else()
|
||||
add_library (${PROJECT_NAME} ${USED_SRCFILES} ${USED_INCFILES} ${USED_RCFILE} ${RESOURCE_FILES} ${${PROJECT_NAME}_MOC_FILES})
|
||||
|
||||
if (MSVC)
|
||||
if (BUILD_FORCE_RelWithDebInfo)
|
||||
set (aReleasePdbConf "Release")
|
||||
else()
|
||||
set (aReleasePdbConf)
|
||||
endif()
|
||||
install (FILES ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.pdb
|
||||
CONFIGURATIONS Debug ${aReleasePdbConf} RelWithDebInfo
|
||||
CONFIGURATIONS Debug RelWithDebInfo
|
||||
DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}")
|
||||
endif()
|
||||
|
||||
@@ -292,12 +283,8 @@ endif()
|
||||
set (USED_TOOLKITS_BY_CURRENT_PROJECT)
|
||||
set (USED_EXTERNAL_LIBS_BY_CURRENT_PROJECT)
|
||||
|
||||
# parse EXTERNLIB file
|
||||
if (CUSTOM_EXTERNLIB)
|
||||
set (USED_EXTERNLIB_AND_TOOLKITS ${CUSTOM_EXTERNLIB})
|
||||
else()
|
||||
FILE_TO_LIST ("${RELATIVE_SOURCES_DIR}/${PROJECT_NAME}/EXTERNLIB" USED_EXTERNLIB_AND_TOOLKITS)
|
||||
endif()
|
||||
# parce EXTERNLIB file
|
||||
FILE_TO_LIST ("${RELATIVE_SOURCES_DIR}/${PROJECT_NAME}/EXTERNLIB" USED_EXTERNLIB_AND_TOOLKITS)
|
||||
foreach (USED_ITEM ${USED_EXTERNLIB_AND_TOOLKITS})
|
||||
string (REGEX MATCH "^ *#" COMMENT_FOUND ${USED_ITEM})
|
||||
if (NOT COMMENT_FOUND)
|
||||
@@ -316,13 +303,6 @@ foreach (USED_ITEM ${USED_EXTERNLIB_AND_TOOLKITS})
|
||||
else() # get CSF_ value
|
||||
set (CURRENT_CSF ${${USED_ITEM}})
|
||||
if (NOT "x${CURRENT_CSF}" STREQUAL "x")
|
||||
if ("${CURRENT_CSF}" STREQUAL "CSF_OpenGlLibs")
|
||||
add_definitions (-DHAVE_OPENGL)
|
||||
endif()
|
||||
if ("${CURRENT_CSF}" STREQUAL "CSF_OpenGlesLibs")
|
||||
add_definitions (-DHAVE_GLES2)
|
||||
endif()
|
||||
|
||||
set (LIBRARY_FROM_CACHE 0)
|
||||
separate_arguments (CURRENT_CSF)
|
||||
foreach (CSF_LIBRARY ${CURRENT_CSF})
|
||||
@@ -364,7 +344,7 @@ endforeach()
|
||||
if (APPLE)
|
||||
list (FIND USED_EXTERNAL_LIBS_BY_CURRENT_PROJECT X11 IS_X11_FOUND)
|
||||
if (NOT ${IS_X11_FOUND} EQUAL -1)
|
||||
find_package (X11 COMPONENTS X11)
|
||||
find_package (X11 COMPONENTS X11 Xext Xmu Xi)
|
||||
if (NOT X11_FOUND)
|
||||
message (STATUS "Warning: X11 is not found. It's required to install The XQuartz project: http://www.xquartz.org")
|
||||
endif()
|
||||
@@ -396,7 +376,7 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (BUILD_SHARED_LIBS OR EXECUTABLE_PROJECT)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
if(IS_VTK_9XX)
|
||||
string (REGEX REPLACE "vtk" "VTK::" USED_TOOLKITS_BY_CURRENT_PROJECT "${USED_TOOLKITS_BY_CURRENT_PROJECT}")
|
||||
endif()
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# tcl
|
||||
|
||||
if (NOT DEFINED INSTALL_TCL)
|
||||
if (NOT DEFINED INSTALL_TCL AND BUILD_SHARED_LIBS)
|
||||
set (INSTALL_TCL OFF CACHE BOOL "${INSTALL_TCL_DESCR}")
|
||||
endif()
|
||||
|
||||
@@ -14,30 +14,30 @@ if (NOT DEFINED 3RDPARTY_TCL_INCLUDE_DIR)
|
||||
set (3RDPARTY_TCL_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of tcl")
|
||||
endif()
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
# tcl library file (with absolute path)
|
||||
if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library" FORCE)
|
||||
endif()
|
||||
|
||||
# tcl library file (with absolute path)
|
||||
if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library" FORCE)
|
||||
endif()
|
||||
# tcl library directory
|
||||
if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
|
||||
endif()
|
||||
|
||||
# tcl library directory
|
||||
if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
|
||||
endif()
|
||||
# tcl shared library (with absolute path)
|
||||
if (WIN32)
|
||||
if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
|
||||
set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# tcl shared library (with absolute path)
|
||||
if (WIN32)
|
||||
if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
|
||||
set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
|
||||
# tcl shared library directory
|
||||
if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
|
||||
set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# tcl shared library directory
|
||||
if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
|
||||
set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
|
||||
endif()
|
||||
|
||||
|
||||
# search for tcl in user defined directory
|
||||
if (NOT 3RDPARTY_TCL_DIR AND 3RDPARTY_DIR)
|
||||
FIND_PRODUCT_DIR("${3RDPARTY_DIR}" tcl TCL_DIR_NAME)
|
||||
@@ -64,197 +64,203 @@ if (NOT 3RDPARTY_TCL_INCLUDE_DIR)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# tcl dir and library
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY)
|
||||
if (TCL_LIBRARY AND EXISTS "${TCL_LIBRARY}")
|
||||
set (3RDPARTY_TCL_LIBRARY "${TCL_LIBRARY}" CACHE FILEPATH "TCL library" FORCE)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
# tcl dir and library
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY)
|
||||
if (TCL_LIBRARY AND EXISTS "${TCL_LIBRARY}")
|
||||
set (3RDPARTY_TCL_LIBRARY "${TCL_LIBRARY}" CACHE FILEPATH "TCL library" FORCE)
|
||||
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
|
||||
set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
|
||||
set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
if (NOT 3RDPARTY_TCL_DLL)
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
|
||||
|
||||
set (DLL_FOLDER_FOR_SEARCH "")
|
||||
if (3RDPARTY_TCL_DLL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
|
||||
elseif (3RDPARTY_TCL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
|
||||
elseif (3RDPARTY_TCL_LIBRARY_DIR)
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
|
||||
if (WIN32)
|
||||
if (NOT 3RDPARTY_TCL_DLL)
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
|
||||
|
||||
set (DLL_FOLDER_FOR_SEARCH "")
|
||||
if (3RDPARTY_TCL_DLL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
|
||||
elseif (3RDPARTY_TCL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
|
||||
elseif (3RDPARTY_TCL_LIBRARY_DIR)
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
|
||||
endif()
|
||||
|
||||
set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
|
||||
find_library (3RDPARTY_TCL_DLL NAMES ${CSF_TclLibs}
|
||||
PATHS "${DLL_FOLDER_FOR_SEARCH}"
|
||||
NO_DEFAULT_PATH)
|
||||
endif()
|
||||
|
||||
set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
|
||||
find_library (3RDPARTY_TCL_DLL NAMES ${CSF_TclLibs}
|
||||
PATHS "${DLL_FOLDER_FOR_SEARCH}"
|
||||
NO_DEFAULT_PATH)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
COMPLIANCE_PRODUCT_CONSISTENCY(TCL)
|
||||
|
||||
# tcl dir and library
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY)
|
||||
set (3RDPARTY_TCL_LIBRARY "3RDPARTY_TCL_LIBRARY-NOTFOUND" CACHE FILEPATH "TCL library" FORCE)
|
||||
find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
|
||||
PATHS "${3RDPARTY_TCL_LIBRARY_DIR}"
|
||||
NO_DEFAULT_PATH)
|
||||
if (BUILD_SHARED_LIBS)
|
||||
# tcl dir and library
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY)
|
||||
set (3RDPARTY_TCL_LIBRARY "3RDPARTY_TCL_LIBRARY-NOTFOUND" CACHE FILEPATH "TCL library" FORCE)
|
||||
find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
|
||||
PATHS "${3RDPARTY_TCL_LIBRARY_DIR}"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
# search in another place if previous search doesn't find anything
|
||||
find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
|
||||
PATHS "${3RDPARTY_TCL_DIR}/lib"
|
||||
NO_DEFAULT_PATH)
|
||||
# search in another place if previous search doesn't find anything
|
||||
find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
|
||||
PATHS "${3RDPARTY_TCL_DIR}/lib"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY OR NOT EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
||||
set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "TCL library" FORCE)
|
||||
endif()
|
||||
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY_DIR AND 3RDPARTY_TCL_LIBRARY)
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
|
||||
set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION "")
|
||||
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
||||
get_filename_component (TCL_LIBRARY_NAME "${3RDPARTY_TCL_LIBRARY}" NAME)
|
||||
string(REGEX REPLACE "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY_NAME}")
|
||||
|
||||
if (NOT "${TCL_LIBRARY_VERSION}" STREQUAL "${TCL_LIBRARY_NAME}")
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION "${TCL_LIBRARY_VERSION}")
|
||||
else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
|
||||
message (STATUS "Info: TCL version isn't found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "")
|
||||
if (3RDPARTY_TCL_LIBRARY_VERSION)
|
||||
string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_TCL_MAJOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
|
||||
string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_TCL_MINOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_TCL_MAJOR_VERSION}.${3RDPARTY_TCL_MINOR_VERSION}")
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
if (NOT 3RDPARTY_TCL_DLL)
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
|
||||
|
||||
set (DLL_FOLDER_FOR_SEARCH "")
|
||||
if (3RDPARTY_TCL_DLL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
|
||||
elseif (3RDPARTY_TCL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
|
||||
else()
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY OR NOT EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
||||
set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "TCL library" FORCE)
|
||||
endif()
|
||||
|
||||
set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
|
||||
find_library (3RDPARTY_TCL_DLL NAMES tcl${3RDPARTY_TCL_LIBRARY_VERSION}
|
||||
PATHS "${DLL_FOLDER_FOR_SEARCH}"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
if (NOT 3RDPARTY_TCL_DLL OR NOT EXISTS "${3RDPARTY_TCL_DLL}")
|
||||
set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "TCL shared library" FORCE)
|
||||
if (NOT 3RDPARTY_TCL_LIBRARY_DIR AND 3RDPARTY_TCL_LIBRARY)
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
|
||||
set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
if (NOT 3RDPARTY_TCL_DLL_DIR AND 3RDPARTY_TCL_DLL)
|
||||
get_filename_component (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
|
||||
set (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL_DIR}" CACHE FILEPATH "The directory containing TCL shared library" FORCE)
|
||||
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION "")
|
||||
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
||||
get_filename_component (TCL_LIBRARY_NAME "${3RDPARTY_TCL_LIBRARY}" NAME)
|
||||
string(REGEX REPLACE "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY_NAME}")
|
||||
|
||||
if (NOT "${TCL_LIBRARY_VERSION}" STREQUAL "${TCL_LIBRARY_NAME}")
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION "${TCL_LIBRARY_VERSION}")
|
||||
else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
|
||||
message (STATUS "Info: TCL version isn't found")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# include found paths to common variables
|
||||
if (3RDPARTY_TCL_INCLUDE_DIR AND EXISTS "${3RDPARTY_TCL_INCLUDE_DIR}")
|
||||
list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TCL_INCLUDE_DIR}")
|
||||
else()
|
||||
list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_INCLUDE_DIR)
|
||||
endif()
|
||||
|
||||
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
||||
list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
|
||||
else()
|
||||
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
if (3RDPARTY_TCL_DLL OR EXISTS "${3RDPARTY_TCL_DLL}")
|
||||
list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_TCL_DLL_DIR}")
|
||||
else()
|
||||
list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_TCL_DLL_DIR)
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "")
|
||||
if (3RDPARTY_TCL_LIBRARY_VERSION)
|
||||
string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_TCL_MAJOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
|
||||
string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_TCL_MINOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
|
||||
set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_TCL_MAJOR_VERSION}.${3RDPARTY_TCL_MINOR_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# install tcl
|
||||
if (INSTALL_TCL)
|
||||
# include occt macros. compiler_bitness, os_wiht_bit, compiler
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
|
||||
|
||||
OCCT_MAKE_OS_WITH_BITNESS()
|
||||
OCCT_MAKE_COMPILER_SHORT_NAME()
|
||||
|
||||
if (WIN32)
|
||||
# tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
|
||||
if (NOT 3RDPARTY_TCL_DLL)
|
||||
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
|
||||
|
||||
# collect and install all dlls from tcl dll dirs
|
||||
file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
|
||||
set (DLL_FOLDER_FOR_SEARCH "")
|
||||
if (3RDPARTY_TCL_DLL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
|
||||
elseif (3RDPARTY_TCL_DIR)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
|
||||
else()
|
||||
get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
|
||||
set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
|
||||
endif()
|
||||
|
||||
if (SINGLE_GENERATOR)
|
||||
install (FILES ${TCL_DLLS} DESTINATION "${INSTALL_DIR_BIN}")
|
||||
else()
|
||||
install (FILES ${TCL_DLLS}
|
||||
CONFIGURATIONS Release
|
||||
DESTINATION "${INSTALL_DIR_BIN}")
|
||||
install (FILES ${TCL_DLLS}
|
||||
CONFIGURATIONS RelWithDebInfo
|
||||
DESTINATION "${INSTALL_DIR_BIN}i")
|
||||
install (FILES ${TCL_DLLS}
|
||||
CONFIGURATIONS Debug
|
||||
DESTINATION "${INSTALL_DIR_BIN}d")
|
||||
set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
|
||||
find_library (3RDPARTY_TCL_DLL NAMES tcl${3RDPARTY_TCL_LIBRARY_VERSION}
|
||||
PATHS "${DLL_FOLDER_FOR_SEARCH}"
|
||||
NO_DEFAULT_PATH)
|
||||
|
||||
if (NOT 3RDPARTY_TCL_DLL OR NOT EXISTS "${3RDPARTY_TCL_DLL}")
|
||||
set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "TCL shared library" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
|
||||
|
||||
if (SINGLE_GENERATOR)
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH} DESTINATION "${INSTALL_DIR_LIB}")
|
||||
else()
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
||||
CONFIGURATIONS Release
|
||||
DESTINATION "${INSTALL_DIR_LIB}")
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
||||
CONFIGURATIONS RelWithDebInfo
|
||||
DESTINATION "${INSTALL_DIR_LIB}i")
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
||||
CONFIGURATIONS Debug
|
||||
DESTINATION "${INSTALL_DIR_LIB}d")
|
||||
if (NOT 3RDPARTY_TCL_DLL_DIR AND 3RDPARTY_TCL_DLL)
|
||||
get_filename_component (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
|
||||
set (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL_DIR}" CACHE FILEPATH "The directory containing TCL shared library" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (TCL_TCLSH_VERSION)
|
||||
# tcl is required to install in lib folder (without)
|
||||
install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8" DESTINATION "${INSTALL_DIR_LIB}")
|
||||
install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR_LIB}")
|
||||
# include found paths to common variables
|
||||
if (3RDPARTY_TCL_INCLUDE_DIR AND EXISTS "${3RDPARTY_TCL_INCLUDE_DIR}")
|
||||
list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TCL_INCLUDE_DIR}")
|
||||
else()
|
||||
message (STATUS "\nWarning: tclX.X subdir won't be copied during the installation process.")
|
||||
message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
|
||||
list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_INCLUDE_DIR)
|
||||
endif()
|
||||
|
||||
if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
|
||||
list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
|
||||
else()
|
||||
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_TCL_LIBRARY_DIR)
|
||||
endif()
|
||||
|
||||
set (USED_3RDPARTY_TCL_DIR "")
|
||||
else()
|
||||
# the library directory for using by the executable
|
||||
if (WIN32)
|
||||
set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
|
||||
else()
|
||||
set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
|
||||
if (3RDPARTY_TCL_DLL OR EXISTS "${3RDPARTY_TCL_DLL}")
|
||||
list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_TCL_DLL_DIR}")
|
||||
else()
|
||||
list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_TCL_DLL_DIR)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TCL_DLL)
|
||||
# install tcl
|
||||
if (INSTALL_TCL)
|
||||
# include occt macros. compiler_bitness, os_wiht_bit, compiler
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
|
||||
|
||||
OCCT_MAKE_OS_WITH_BITNESS()
|
||||
OCCT_MAKE_COMPILER_SHORT_NAME()
|
||||
|
||||
if (WIN32)
|
||||
# tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
|
||||
|
||||
# collect and install all dlls from tcl dll dirs
|
||||
file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
|
||||
|
||||
if (SINGLE_GENERATOR)
|
||||
install (FILES ${TCL_DLLS} DESTINATION "${INSTALL_DIR_BIN}")
|
||||
else()
|
||||
install (FILES ${TCL_DLLS}
|
||||
CONFIGURATIONS Release
|
||||
DESTINATION "${INSTALL_DIR_BIN}")
|
||||
install (FILES ${TCL_DLLS}
|
||||
CONFIGURATIONS RelWithDebInfo
|
||||
DESTINATION "${INSTALL_DIR_BIN}i")
|
||||
install (FILES ${TCL_DLLS}
|
||||
CONFIGURATIONS Debug
|
||||
DESTINATION "${INSTALL_DIR_BIN}d")
|
||||
endif()
|
||||
else()
|
||||
get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
|
||||
|
||||
if (SINGLE_GENERATOR)
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH} DESTINATION "${INSTALL_DIR_LIB}")
|
||||
else()
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
||||
CONFIGURATIONS Release
|
||||
DESTINATION "${INSTALL_DIR_LIB}")
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
||||
CONFIGURATIONS RelWithDebInfo
|
||||
DESTINATION "${INSTALL_DIR_LIB}i")
|
||||
install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
|
||||
CONFIGURATIONS Debug
|
||||
DESTINATION "${INSTALL_DIR_LIB}d")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (TCL_TCLSH_VERSION)
|
||||
# tcl is required to install in lib folder (without)
|
||||
install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8" DESTINATION "${INSTALL_DIR_LIB}")
|
||||
install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR_LIB}")
|
||||
else()
|
||||
message (STATUS "\nWarning: tclX.X subdir won't be copied during the installation process.")
|
||||
message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
|
||||
endif()
|
||||
|
||||
set (USED_3RDPARTY_TCL_DIR "")
|
||||
else()
|
||||
# the library directory for using by the executable
|
||||
if (WIN32)
|
||||
set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
|
||||
else()
|
||||
set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TCL_DLL)
|
||||
endif()
|
||||
|
||||
if (TK_FOUND AND 3RDPARTY_TCL_DIR)
|
||||
|
||||
@@ -279,3 +285,10 @@ OCCT_CHECK_AND_UNSET (TK_LIBRARY)
|
||||
OCCT_CHECK_AND_UNSET (TK_INCLUDE_PATH)
|
||||
OCCT_CHECK_AND_UNSET (TK_WISH)
|
||||
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_LIBRARY)
|
||||
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_LIBRARY_DIR)
|
||||
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_DLL)
|
||||
OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_DLL_DIR)
|
||||
OCCT_CHECK_AND_UNSET (INSTALL_TCL)
|
||||
endif()
|
||||
|
@@ -38,9 +38,6 @@ set (BUILD_ENABLE_FPE_SIGNAL_HANDLER_DESCR
|
||||
Corresponding environment variable (CSF_FPE) can be changed manually
|
||||
in custom.bat/sh scripts without regeneration by CMake.")
|
||||
|
||||
set (BUILD_FORCE_RelWithDebInfo_DESCR
|
||||
"Generate PDB files within normal Release build.")
|
||||
|
||||
set (BUILD_USE_PCH_DESCR
|
||||
"Use precompiled headers to accelerate the build.
|
||||
Precompiled headers are generated automatically by Cotire tool.")
|
||||
@@ -158,18 +155,12 @@ set (3RDPARTY_DIR_DESCR
|
||||
third-party product have been found - corresponding CMake variables will be specified
|
||||
(VTK: 3RDPARTY_VTK_DIR, 3RDPARTY_VTK_INCLUDE_DIR, 3RDPARTY_VTK_LIBRARY_DIR)")
|
||||
|
||||
set (USE_TK_DESCR
|
||||
"Indicates whether Tk product should be used by Draw Harness for user interface")
|
||||
|
||||
set (USE_FREETYPE_DESCR
|
||||
"Indicates whether FreeType product should be used in OCCT for text rendering using external font files")
|
||||
|
||||
set (USE_FFMPEG_DESCR
|
||||
"Indicates whether FFmpeg framework is used or not. FFmpeg stands for
|
||||
multimedia data handling, open-source software libraries used for video encoding and decoding.")
|
||||
|
||||
set (USE_FREEIMAGE_DESCR
|
||||
"Indicates whether FreeImage product should be used in OCCT visualization
|
||||
"Indicates whether Freeimage product should be used in OCCT visualization
|
||||
module for support of popular graphics image formats (PNG, BMP etc)")
|
||||
|
||||
set (USE_OPENVR_DESCR
|
||||
@@ -179,17 +170,13 @@ set (USE_RAPIDJSON_DESCR
|
||||
"Indicates whether RapidJSON product should be used in OCCT DataExchange
|
||||
module for support of JSON-based formats like glTF")
|
||||
|
||||
set (USE_DRACO_DESCR
|
||||
"Indicates whether Draco mesh decoding library should be used by glTF reader")
|
||||
|
||||
set (USE_EGL_DESCR
|
||||
"Indicates whether EGL should be used in OCCT visualization
|
||||
module instead of conventional OpenGL context creation APIs")
|
||||
|
||||
set (USE_OPENGL_DESCR
|
||||
"Indicates whether OpenGL desktop should be used in OCCT visualization module")
|
||||
set (USE_GLES2_DESCR
|
||||
"Indicates whether OpenGL ES 2.0 should be used in OCCT visualization module")
|
||||
"Indicates whether OpenGL ES 2.0 should be used in OCCT visualization
|
||||
module instead of desktop OpenGL")
|
||||
|
||||
set (USE_TBB_DESCR
|
||||
"Indicates whether TBB is used or not. TBB stands for Threading Building Blocks,
|
||||
@@ -202,7 +189,7 @@ ToolKit, the technology of Kitware Inc intended for general-purpose scientific
|
||||
visualization. OCCT comes with a bridge between CAD data representation and
|
||||
VTK by means of its dedicated VIS component (VTK Integration Services).")
|
||||
|
||||
set (USE_XLIB_DESCR "Indicates whether X11 is used or not")
|
||||
set (USE_GLX_DESCR "Indicates whether X11 OpenGl on OSX is used or not")
|
||||
|
||||
set (USE_D3D_DESCR "Indicates whether optional Direct3D wrapper in OCCT visualization module should be build or not")
|
||||
|
||||
|
455
adm/genconf.tcl
@@ -56,52 +56,36 @@ lappend ::SYS_PRJNAME_LIST "Qt Creator (.pro)"
|
||||
|
||||
set aPrjIndex [lsearch $::SYS_PRJFMT_LIST $::PRJFMT]
|
||||
set ::PRJNAME [lindex $::SYS_PRJNAME_LIST $aPrjIndex]
|
||||
set ::CONFIG "Release"
|
||||
|
||||
set SYS_VS_LIST {}
|
||||
set SYS_VC_LIST {}
|
||||
set SYS_VCVARS_LIST {}
|
||||
|
||||
# detect installed Visual Studio 2017+ instances by running vswhere.exe
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] && "$res" != "" } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2017 (15, toolset v141)"
|
||||
lappend ::SYS_VC_LIST "vc141"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] && "$res" != "" } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2017 (15, toolset v141) UWP"
|
||||
lappend ::SYS_VC_LIST "vc141-uwp"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] && "$res" != "" } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2019 (16, toolset v142)"
|
||||
lappend ::SYS_VC_LIST "vc142"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] && "$res" != "" } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2019 (16, toolset v142) UWP"
|
||||
lappend ::SYS_VC_LIST "vc142-uwp"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Component.VC.ClangCL -property installationPath} res] && "$res" != "" } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Component.VC.ClangCL -property installationPath} res] } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2019 (16, toolset ClangCL)"
|
||||
lappend ::SYS_VC_LIST "vclang"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[17.0,17.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2022 (17, toolset v143)"
|
||||
lappend ::SYS_VC_LIST "vc143"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[17.0,17.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2022 (17, toolset v143) UWP"
|
||||
lappend ::SYS_VC_LIST "vc143-uwp"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[17.0,17.99\]" -latest -requires Microsoft.VisualStudio.Component.VC.ClangCL -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2022 (17, toolset ClangCL)"
|
||||
lappend ::SYS_VC_LIST "vclang"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
}
|
||||
|
||||
# detect installed Visual Studio instances from global environment
|
||||
@@ -154,13 +138,6 @@ proc wokdep:gui:Close {} {
|
||||
exit
|
||||
}
|
||||
|
||||
proc wokdep:gui:configSuffix {} {
|
||||
if { "$::CONFIG" == "Debug" } {
|
||||
return "D"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
proc wokdep:gui:SwitchConfig {} {
|
||||
set ::PRJFMT [lindex $::SYS_PRJFMT_LIST [.myFrame.myPrjFrame.myPrjCombo current]]
|
||||
set ::VCVER [lindex $::SYS_VC_LIST [.myFrame.myVsFrame.myVsCombo current]]
|
||||
@@ -171,15 +148,16 @@ proc wokdep:gui:SwitchConfig {} {
|
||||
set ::CSF_OPT_LIB64 {}
|
||||
set ::CSF_OPT_BIN32 {}
|
||||
set ::CSF_OPT_BIN64 {}
|
||||
set ::CSF_OPT_LIB32D {}
|
||||
set ::CSF_OPT_LIB64D {}
|
||||
set ::CSF_OPT_BIN32D {}
|
||||
set ::CSF_OPT_BIN64D {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:SwitchArch {} {
|
||||
wokdep:gui:Show3264Bitness ::aRowIter
|
||||
if { "$::ARCH" == "32" } {
|
||||
wokdep:gui:Show32Bitness ::aRowIter
|
||||
}
|
||||
if { "$::ARCH" == "64" } {
|
||||
wokdep:gui:Show64Bitness ::aRowIter
|
||||
}
|
||||
|
||||
if { [llength [grid info .myFrame.mySave]] != 0 } {
|
||||
grid forget .myFrame.mySave .myFrame.myClose
|
||||
@@ -190,16 +168,6 @@ proc wokdep:gui:SwitchArch {} {
|
||||
grid .myFrame.myClose -row $::aRowIter -column 6 -columnspan 2
|
||||
}
|
||||
|
||||
# update label text and visibility
|
||||
font create wokdep:gui:EmptyFont -size -1
|
||||
proc wokdep:gui:SetLabelText {theLabel theText} {
|
||||
set aFont TkDefaultFont
|
||||
if { $theText == "" } {
|
||||
set aFont wokdep:gui:EmptyFont
|
||||
}
|
||||
$theLabel configure -text $theText -font $aFont
|
||||
}
|
||||
|
||||
proc wokdep:gui:UpdateList {} {
|
||||
set anIncErrs {}
|
||||
set anLib32Errs {}
|
||||
@@ -207,9 +175,7 @@ proc wokdep:gui:UpdateList {} {
|
||||
set anBin32Errs {}
|
||||
set anBin64Errs {}
|
||||
wokdep:SearchTclTk anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
if { "$::HAVE_FREETYPE" == "true" } {
|
||||
wokdep:SearchFreeType anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
}
|
||||
wokdep:SearchFreeType anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
wokdep:SearchX11 anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
if { "$::HAVE_GLES2" == "true" } {
|
||||
wokdep:SearchEGL anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
@@ -259,10 +225,6 @@ proc wokdep:gui:UpdateList {} {
|
||||
if { "$::HAVE_RAPIDJSON" == "true" } {
|
||||
wokdep:SearchRapidJson anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
}
|
||||
if { "$::HAVE_DRACO" == "true" } {
|
||||
set aDummy {}
|
||||
wokdep:SearchStandardLibrary anIncErrs anLib32Errs anLib64Errs aDummy aDummy "draco" "draco/compression/decode.h" "draco" {"draco"}
|
||||
}
|
||||
|
||||
if {"$::BUILD_Inspector" == "true" } {
|
||||
set ::CHECK_QT "true"
|
||||
@@ -276,28 +238,11 @@ proc wokdep:gui:UpdateList {} {
|
||||
wokdep:SearchJDK anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
}
|
||||
|
||||
wokdep:gui:SetLabelText .myFrame.myIncErrLbl [join $anIncErrs "\n"]
|
||||
|
||||
wokdep:gui:SetLabelText .myFrame.myIncErrLbl [join $anIncErrs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myLib32_ErrLbl [join $anLib32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myLib64_ErrLbl [join $anLib64Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin32_ErrLbl [join $anBin32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin64_ErrLbl [join $anBin64Errs "\n"]
|
||||
|
||||
wokdep:gui:SetLabelText .myFrame.myLib32D_ErrLbl [join $anLib32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myLib64D_ErrLbl [join $anLib64Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin32D_ErrLbl [join $anBin32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin64D_ErrLbl [join $anBin64Errs "\n"]
|
||||
|
||||
# merge duplicates
|
||||
set ::CSF_OPT_LIB32 [lsort -unique $::CSF_OPT_LIB32]
|
||||
set ::CSF_OPT_LIB64 [lsort -unique $::CSF_OPT_LIB64]
|
||||
set ::CSF_OPT_BIN32 [lsort -unique $::CSF_OPT_BIN32]
|
||||
set ::CSF_OPT_BIN64 [lsort -unique $::CSF_OPT_BIN64]
|
||||
set ::CSF_OPT_LIB32D [lsort -unique $::CSF_OPT_LIB32D]
|
||||
set ::CSF_OPT_LIB64D [lsort -unique $::CSF_OPT_LIB64D]
|
||||
set ::CSF_OPT_BIN32D [lsort -unique $::CSF_OPT_BIN32D]
|
||||
set ::CSF_OPT_BIN64D [lsort -unique $::CSF_OPT_BIN64D]
|
||||
.myFrame.myIncErrLbl configure -text [join $anIncErrs "\n"]
|
||||
.myFrame.myLib32ErrLbl configure -text [join $anLib32Errs "\n"]
|
||||
.myFrame.myLib64ErrLbl configure -text [join $anLib64Errs "\n"]
|
||||
.myFrame.myBin32ErrLbl configure -text [join $anBin32Errs "\n"]
|
||||
.myFrame.myBin64ErrLbl configure -text [join $anBin64Errs "\n"]
|
||||
}
|
||||
|
||||
proc wokdep:gui:BrowseVcVars {} {
|
||||
@@ -323,20 +268,34 @@ proc wokdep:gui:AddIncPath {} {
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddLibPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
proc wokdep:gui:AddLib32Path {} {
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_LIB${::ARCH}${aCfg} "$aResult"
|
||||
lappend ::CSF_OPT_LIB32 "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddBinPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
proc wokdep:gui:AddLib64Path {} {
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_BIN${::ARCH}${aCfg} "$aResult"
|
||||
lappend ::CSF_OPT_LIB64 "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddBin32Path {} {
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_BIN32 "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddBin64Path {} {
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_BIN64 "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
@@ -349,20 +308,34 @@ proc wokdep:gui:RemoveIncPath {} {
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveLibPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
set aSelIndices [.myFrame.myLib${::ARCH}${aCfg}_List curselection]
|
||||
proc wokdep:gui:RemoveLib32Path {} {
|
||||
set aSelIndices [.myFrame.myLib32List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myLib${::ARCH}${aCfg}_List delete [lindex $aSelIndices 0]
|
||||
.myFrame.myLib32List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveBinPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
set aSelIndices [.myFrame.myBin${::ARCH}${aCfg}_List curselection]
|
||||
proc wokdep:gui:RemoveLib64Path {} {
|
||||
set aSelIndices [.myFrame.myLib64List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myBin${::ARCH}${aCfg}_List delete [lindex $aSelIndices 0]
|
||||
.myFrame.myLib64List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveBin32Path {} {
|
||||
set aSelIndices [.myFrame.myBin32List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myBin32List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveBin64Path {} {
|
||||
set aSelIndices [.myFrame.myBin64List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myBin64List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
@@ -372,73 +345,109 @@ proc wokdep:gui:ResetIncPath {} {
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetLibPath {} {
|
||||
set ::CSF_OPT_LIB${::ARCH} {}
|
||||
set ::CSF_OPT_LIB${::ARCH}D {}
|
||||
set ::CSF_OPT_BIN${::ARCH} {}
|
||||
set ::CSF_OPT_BIN${::ARCH}D {}
|
||||
proc wokdep:gui:ResetLib32Path {} {
|
||||
set ::CSF_OPT_LIB32 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:Show3264Bitness { theRowIter } {
|
||||
proc wokdep:gui:ResetLib64Path {} {
|
||||
set ::CSF_OPT_LIB64 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetBin32Path {} {
|
||||
set ::CSF_OPT_BIN32 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetBin64Path {} {
|
||||
set ::CSF_OPT_BIN64 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:Show32Bitness { theRowIter } {
|
||||
upvar $theRowIter aRowIter
|
||||
|
||||
set aArchOld ""
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
if { "$::ARCH" == "32" } {
|
||||
set aArchOld "64"
|
||||
} else {
|
||||
set aArchOld "32"
|
||||
if { [llength [grid info .myFrame.myLib64Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib64Lbl .myFrame.myLib64List .myFrame.myLib64Scrl
|
||||
grid forget .myFrame.myLib64Add .myFrame.myLib64Remove .myFrame.myLib64Clear .myFrame.myLib64ErrLbl
|
||||
grid forget .myFrame.myBin64Lbl .myFrame.myBin64List .myFrame.myBin64Scrl
|
||||
grid forget .myFrame.myBin64Add .myFrame.myBin64Remove .myFrame.myBin64Clear .myFrame.myBin64ErrLbl
|
||||
}
|
||||
|
||||
set aCfgOld "D"
|
||||
if { "$::CONFIG" == "Debug" } { set aCfgOld "" }
|
||||
set aDelArch ${aArchOld}${aCfg}
|
||||
if { [llength [grid info .myFrame.myLib${aDelArch}_Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib${aDelArch}_Lbl .myFrame.myLib${aDelArch}_List .myFrame.myLib${aDelArch}_Scrl
|
||||
grid forget .myFrame.myLib${aDelArch}_Add .myFrame.myLib${aDelArch}_Remove .myFrame.myLib${aDelArch}_Clear .myFrame.myLib${aDelArch}_ErrLbl
|
||||
grid forget .myFrame.myBin${aDelArch}_Lbl .myFrame.myBin${aDelArch}_List .myFrame.myBin${aDelArch}_Scrl
|
||||
grid forget .myFrame.myBin${aDelArch}_Add .myFrame.myBin${aDelArch}_Remove .myFrame.myBin${aDelArch}_Clear .myFrame.myBin${aDelArch}_ErrLbl
|
||||
}
|
||||
set aDelCfg ${::ARCH}${aCfgOld}
|
||||
if { [llength [grid info .myFrame.myLib${aDelCfg}_Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib${aDelCfg}_Lbl .myFrame.myLib${aDelCfg}_List .myFrame.myLib${aDelCfg}_Scrl
|
||||
grid forget .myFrame.myLib${aDelCfg}_Add .myFrame.myLib${aDelCfg}_Remove .myFrame.myLib${aDelCfg}_Clear .myFrame.myLib${aDelCfg}_ErrLbl
|
||||
grid forget .myFrame.myBin${aDelCfg}_Lbl .myFrame.myBin${aDelCfg}_List .myFrame.myBin${aDelCfg}_Scrl
|
||||
grid forget .myFrame.myBin${aDelCfg}_Add .myFrame.myBin${aDelCfg}_Remove .myFrame.myBin${aDelCfg}_Clear .myFrame.myBin${aDelCfg}_ErrLbl
|
||||
}
|
||||
|
||||
set aNewCfg ${::ARCH}${aCfg}
|
||||
# Additional libraries search paths
|
||||
grid .myFrame.myLib${aNewCfg}_Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
# Additional libraries (32-bit) search paths
|
||||
grid .myFrame.myLib32Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib${aNewCfg}_List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myLib${aNewCfg}_Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myLib${aNewCfg}_Add -row $aRowIter -column 6
|
||||
grid .myFrame.myLib32List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myLib32Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myLib32Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myLib${aNewCfg}_Edit -row $aRowIter -column 6
|
||||
#grid .myFrame.myLib32Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib${aNewCfg}_Remove -row $aRowIter -column 6
|
||||
grid .myFrame.myLib32Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib${aNewCfg}_Clear -row $aRowIter -column 6
|
||||
grid .myFrame.myLib32Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib${aNewCfg}_ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myLib32ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
|
||||
# Additional executables search paths
|
||||
grid .myFrame.myBin${aNewCfg}_Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
# Additional executables (32-bit) search paths
|
||||
grid .myFrame.myBin32Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin${aNewCfg}_List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myBin${aNewCfg}_Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myBin${aNewCfg}_Add -row $aRowIter -column 6
|
||||
grid .myFrame.myBin32List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myBin32Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myBin32Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myBin${aNewCfg}_Edit -row $aRowIter -column 6
|
||||
#grid .myFrame.myBin32Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin${aNewCfg}_Remove -row $aRowIter -column 6
|
||||
grid .myFrame.myBin32Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin${aNewCfg}_Clear -row $aRowIter -column 6
|
||||
grid .myFrame.myBin32Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin${aNewCfg}_ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myBin32ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
}
|
||||
|
||||
proc wokdep:gui:Show64Bitness { theRowIter } {
|
||||
upvar $theRowIter aRowIter
|
||||
|
||||
if { [llength [grid info .myFrame.myLib32Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib32Lbl .myFrame.myLib32List .myFrame.myLib32Scrl
|
||||
grid forget .myFrame.myLib32Add .myFrame.myLib32Remove .myFrame.myLib32Clear .myFrame.myLib32ErrLbl
|
||||
grid forget .myFrame.myBin32Lbl .myFrame.myBin32List .myFrame.myBin32Scrl
|
||||
grid forget .myFrame.myBin32Add .myFrame.myBin32Remove .myFrame.myBin32Clear .myFrame.myBin32ErrLbl
|
||||
}
|
||||
|
||||
# Additional libraries (64-bit) search paths
|
||||
grid .myFrame.myLib64Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myLib64Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myLib64Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myLib64Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
|
||||
# Additional executables (64-bit) search paths
|
||||
grid .myFrame.myBin64Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myBin64Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myBin64Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myBin64Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
}
|
||||
|
||||
@@ -448,7 +457,6 @@ ttk::combobox .myFrame.myPrjFrame.myPrjCombo -values $SYS_PRJNAME_LIST -state
|
||||
ttk::label .myFrame.myVsFrame.myVsLbl -text "Visual Studio configuration:" -padding {5 5 20 5}
|
||||
ttk::combobox .myFrame.myVsFrame.myVsCombo -values $SYS_VS_LIST -state readonly -textvariable VSVER -width 40
|
||||
ttk::combobox .myFrame.myVsFrame.myArchCombo -values { {32} {64} } -textvariable ARCH -state readonly -width 6
|
||||
ttk::combobox .myFrame.myVsFrame.myConfigCombo -values { {Release} {Debug} } -textvariable CONFIG -state readonly -width 6
|
||||
entry .myFrame.myVcEntry -textvariable VCVER -width 10
|
||||
entry .myFrame.myVcVarsEntry -textvariable VCVARS -width 70
|
||||
ttk::button .myFrame.myVcBrowseBtn -text "Browse" -command wokdep:gui:BrowseVcVars
|
||||
@@ -463,8 +471,6 @@ ttk::label .myFrame.myHxxChecks.myScutsLbl -text "Strategy for filling he
|
||||
ttk::label .myFrame.mySrchLbl -text "3rd-parties search path:" -padding {5 5 80 5}
|
||||
entry .myFrame.mySrchEntry -textvariable PRODUCTS_PATH_INPUT -width 80
|
||||
ttk::button .myFrame.mySrchBrowseBtn -text "Browse" -command wokdep:gui:BrowsePartiesRoot
|
||||
checkbutton .myFrame.myChecks.myFreeTypeCheck -offvalue "false" -onvalue "true" -variable HAVE_FREETYPE -command wokdep:gui:UpdateList
|
||||
ttk::label .myFrame.myChecks.myFreeTypeLbl -text "Use FreeType"
|
||||
checkbutton .myFrame.myChecks.myFImageCheck -offvalue "false" -onvalue "true" -variable HAVE_FREEIMAGE -command wokdep:gui:UpdateList
|
||||
ttk::label .myFrame.myChecks.myFImageLbl -text "Use FreeImage"
|
||||
checkbutton .myFrame.myChecks.myTbbCheck -offvalue "false" -onvalue "true" -variable HAVE_TBB -command wokdep:gui:UpdateList
|
||||
@@ -485,11 +491,9 @@ ttk::label .myFrame.myChecks.myFFmpegLbl -text "Use FFmpeg"
|
||||
#ttk::label .myFrame.myChecks.myOpenClLbl -text "Use OpenCL"
|
||||
checkbutton .myFrame.myChecks.myRapidJsonCheck -offvalue "false" -onvalue "true" -variable HAVE_RAPIDJSON -command wokdep:gui:UpdateList
|
||||
ttk::label .myFrame.myChecks.myRapidJsonLbl -text "Use RapidJSON"
|
||||
checkbutton .myFrame.myChecks.myDracoCheck -offvalue "false" -onvalue "true" -variable HAVE_DRACO -command wokdep:gui:UpdateList
|
||||
ttk::label .myFrame.myChecks.myDracoLbl -text "Use Draco"
|
||||
|
||||
checkbutton .myFrame.myChecks.myXLibCheck -offvalue "false" -onvalue "true" -variable HAVE_XLIB
|
||||
ttk::label .myFrame.myChecks.myXLibLbl -text "Use X11 for windows drawing"
|
||||
checkbutton .myFrame.myChecks.myMacGLXCheck -offvalue "false" -onvalue "true" -variable MACOSX_USE_GLX
|
||||
ttk::label .myFrame.myChecks.myMacGLXLbl -text "Use X11 for windows drawing"
|
||||
ttk::label .myFrame.myChecks.myVtkLbl -text "Use VTK"
|
||||
checkbutton .myFrame.myChecks.myVtkCheck -offvalue "false" -onvalue "true" -variable HAVE_VTK -command wokdep:gui:UpdateList
|
||||
|
||||
@@ -521,84 +525,44 @@ ttk::button .myFrame.myIncClear -text "Reset" -command wokdep:gui:ResetIncP
|
||||
ttk::label .myFrame.myIncErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional libraries (32-bit) search paths
|
||||
ttk::label .myFrame.myLib32_Lbl -text "Additional libraries (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib32_Scrl -command ".myFrame.myLib32_List yview"
|
||||
listbox .myFrame.myLib32_List -listvariable CSF_OPT_LIB32 -width 80 -height 5 -yscrollcommand ".myFrame.myLib32_Scrl set"
|
||||
ttk::button .myFrame.myLib32_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib32_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib32_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib32_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib32_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug libraries (32-bit) search paths
|
||||
ttk::label .myFrame.myLib32D_Lbl -text "Additional debug libraries (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib32D_Scrl -command ".myFrame.myLib32D_List yview"
|
||||
listbox .myFrame.myLib32D_List -listvariable CSF_OPT_LIB32D -width 80 -height 5 -yscrollcommand ".myFrame.myLib32D_Scrl set"
|
||||
ttk::button .myFrame.myLib32D_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib32D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib32D_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib32D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib32D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myLib32Lbl -text "Additional libraries (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib32Scrl -command ".myFrame.myLib32List yview"
|
||||
listbox .myFrame.myLib32List -listvariable CSF_OPT_LIB32 -width 80 -height 5 -yscrollcommand ".myFrame.myLib32Scrl set"
|
||||
ttk::button .myFrame.myLib32Add -text "Add" -command wokdep:gui:AddLib32Path
|
||||
ttk::button .myFrame.myLib32Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib32Remove -text "Remove" -command wokdep:gui:RemoveLib32Path
|
||||
ttk::button .myFrame.myLib32Clear -text "Reset" -command wokdep:gui:ResetLib32Path
|
||||
ttk::label .myFrame.myLib32ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional libraries (64-bit) search paths
|
||||
ttk::label .myFrame.myLib64_Lbl -text "Additional libraries (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib64_Scrl -command ".myFrame.myLib64_List yview"
|
||||
listbox .myFrame.myLib64_List -listvariable CSF_OPT_LIB64 -width 80 -height 5 -yscrollcommand ".myFrame.myLib64_Scrl set"
|
||||
ttk::button .myFrame.myLib64_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib64_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib64_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib64_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib64_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug libraries (64-bit) search paths
|
||||
ttk::label .myFrame.myLib64D_Lbl -text "Additional debug libraries (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib64D_Scrl -command ".myFrame.myLib64D_List yview"
|
||||
listbox .myFrame.myLib64D_List -listvariable CSF_OPT_LIB64D -width 80 -height 5 -yscrollcommand ".myFrame.myLib64D_Scrl set"
|
||||
ttk::button .myFrame.myLib64D_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib64D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib64D_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib64D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib64D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myLib64Lbl -text "Additional libraries (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib64Scrl -command ".myFrame.myLib64List yview"
|
||||
listbox .myFrame.myLib64List -listvariable CSF_OPT_LIB64 -width 80 -height 5 -yscrollcommand ".myFrame.myLib64Scrl set"
|
||||
ttk::button .myFrame.myLib64Add -text "Add" -command wokdep:gui:AddLib64Path
|
||||
ttk::button .myFrame.myLib64Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib64Remove -text "Remove" -command wokdep:gui:RemoveLib64Path
|
||||
ttk::button .myFrame.myLib64Clear -text "Reset" -command wokdep:gui:ResetLib64Path
|
||||
ttk::label .myFrame.myLib64ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional executables (32-bit) search paths
|
||||
ttk::label .myFrame.myBin32_Lbl -text "Additional executables (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin32_Scrl -command ".myFrame.myBin32_List yview"
|
||||
listbox .myFrame.myBin32_List -listvariable CSF_OPT_BIN32 -width 80 -height 5 -yscrollcommand ".myFrame.myBin32_Scrl set"
|
||||
ttk::button .myFrame.myBin32_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin32_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin32_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin32_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin32_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug executables (32-bit) search paths
|
||||
ttk::label .myFrame.myBin32D_Lbl -text "Additional debug executables (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin32D_Scrl -command ".myFrame.myBin32D_List yview"
|
||||
listbox .myFrame.myBin32D_List -listvariable CSF_OPT_BIN32D -width 80 -height 5 -yscrollcommand ".myFrame.myBin32D_Scrl set"
|
||||
ttk::button .myFrame.myBin32D_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin32D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin32D_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin32D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin32D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myBin32Lbl -text "Additional executables (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin32Scrl -command ".myFrame.myBin32List yview"
|
||||
listbox .myFrame.myBin32List -listvariable CSF_OPT_BIN32 -width 80 -height 5 -yscrollcommand ".myFrame.myBin32Scrl set"
|
||||
ttk::button .myFrame.myBin32Add -text "Add" -command wokdep:gui:AddBin32Path
|
||||
ttk::button .myFrame.myBin32Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin32Remove -text "Remove" -command wokdep:gui:RemoveBin32Path
|
||||
ttk::button .myFrame.myBin32Clear -text "Reset" -command wokdep:gui:ResetBin32Path
|
||||
ttk::label .myFrame.myBin32ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional executables (64-bit) search paths
|
||||
ttk::label .myFrame.myBin64_Lbl -text "Additional executables (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin64_Scrl -command ".myFrame.myBin64_List yview"
|
||||
listbox .myFrame.myBin64_List -listvariable CSF_OPT_BIN64 -width 80 -height 5 -yscrollcommand ".myFrame.myBin64_Scrl set"
|
||||
ttk::button .myFrame.myBin64_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin64_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin64_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin64_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin64_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug executables (64-bit) search paths
|
||||
ttk::label .myFrame.myBin64D_Lbl -text "Additional debug executables (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin64D_Scrl -command ".myFrame.myBin64D_List yview"
|
||||
listbox .myFrame.myBin64D_List -listvariable CSF_OPT_BIN64D -width 80 -height 5 -yscrollcommand ".myFrame.myBin64D_Scrl set"
|
||||
ttk::button .myFrame.myBin64D_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin64D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin64D_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin64D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin64D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myBin64Lbl -text "Additional executables (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin64Scrl -command ".myFrame.myBin64List yview"
|
||||
listbox .myFrame.myBin64List -listvariable CSF_OPT_BIN64 -width 80 -height 5 -yscrollcommand ".myFrame.myBin64Scrl set"
|
||||
ttk::button .myFrame.myBin64Add -text "Add" -command wokdep:gui:AddBin64Path
|
||||
ttk::button .myFrame.myBin64Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin64Remove -text "Remove" -command wokdep:gui:RemoveBin64Path
|
||||
ttk::button .myFrame.myBin64Clear -text "Reset" -command wokdep:gui:ResetBin64Path
|
||||
ttk::label .myFrame.myBin64ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Bottom
|
||||
ttk::button .myFrame.mySave -text "Save" -command wokdep:SaveCustom
|
||||
@@ -609,22 +573,17 @@ ttk::button .myFrame.myClose -text "Close" -command wokdep:gui:Close
|
||||
grid .myFrame.myPrjFrame -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myPrjFrame.myPrjLbl -row 0 -column 0
|
||||
grid .myFrame.myPrjFrame.myPrjCombo -row 0 -column 1
|
||||
incr aRowIter
|
||||
if { "$tcl_platform(platform)" == "windows" } {
|
||||
incr aRowIter
|
||||
grid .myFrame.myVsFrame -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myVsFrame.myVsLbl -row 0 -column 0
|
||||
grid .myFrame.myVsFrame.myVsCombo -row 0 -column 1 -padx 5
|
||||
grid .myFrame.myVsFrame.myArchCombo -row 0 -column 2
|
||||
grid .myFrame.myVsFrame.myConfigCombo -row 0 -column 3
|
||||
incr aRowIter
|
||||
grid .myFrame.myVcEntry -row $aRowIter -column 0
|
||||
grid .myFrame.myVcVarsEntry -row $aRowIter -column 1 -columnspan 4 -sticky w
|
||||
grid .myFrame.myVcBrowseBtn -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
} else {
|
||||
grid .myFrame.myVsFrame -row $aRowIter -column 4 -sticky w
|
||||
grid .myFrame.myVsFrame.myConfigCombo -row 0 -column 0
|
||||
incr aRowIter
|
||||
}
|
||||
|
||||
#
|
||||
@@ -645,10 +604,10 @@ incr aRowIter
|
||||
|
||||
grid .myFrame.myChecks -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myChecks.myFreeTypeCheck -row $aCheckRowIter -column 0 -sticky e
|
||||
grid .myFrame.myChecks.myFreeTypeLbl -row $aCheckRowIter -column 1 -sticky w
|
||||
grid .myFrame.myChecks.myRapidJsonCheck -row $aCheckRowIter -column 2 -sticky e
|
||||
grid .myFrame.myChecks.myRapidJsonLbl -row $aCheckRowIter -column 3 -sticky w
|
||||
grid .myFrame.myChecks.myFImageCheck -row $aCheckRowIter -column 0 -sticky e
|
||||
grid .myFrame.myChecks.myFImageLbl -row $aCheckRowIter -column 1 -sticky w
|
||||
grid .myFrame.myChecks.myTbbCheck -row $aCheckRowIter -column 2 -sticky e
|
||||
grid .myFrame.myChecks.myTbbLbl -row $aCheckRowIter -column 3 -sticky w
|
||||
if { "$::tcl_platform(os)" != "Darwin" } {
|
||||
grid .myFrame.myChecks.myGlesCheck -row $aCheckRowIter -column 4 -sticky e
|
||||
grid .myFrame.myChecks.myGlesLbl -row $aCheckRowIter -column 5 -sticky w
|
||||
@@ -662,17 +621,16 @@ grid .myFrame.myChecks.myQtCheck -row $aCheckRowIter -column 12 -sticky e
|
||||
grid .myFrame.myChecks.myQtLbl -row $aCheckRowIter -column 13 -sticky w
|
||||
|
||||
incr aCheckRowIter
|
||||
grid .myFrame.myChecks.myFImageCheck -row $aCheckRowIter -column 0 -sticky e
|
||||
grid .myFrame.myChecks.myFImageLbl -row $aCheckRowIter -column 1 -sticky w
|
||||
grid .myFrame.myChecks.myDracoCheck -row $aCheckRowIter -column 2 -sticky e
|
||||
grid .myFrame.myChecks.myDracoLbl -row $aCheckRowIter -column 3 -sticky w
|
||||
|
||||
grid .myFrame.myChecks.myFFmpegCheck -row $aCheckRowIter -column 0 -sticky e
|
||||
grid .myFrame.myChecks.myFFmpegLbl -row $aCheckRowIter -column 1 -sticky w
|
||||
grid .myFrame.myChecks.myVtkCheck -row $aCheckRowIter -column 2 -sticky e
|
||||
grid .myFrame.myChecks.myVtkLbl -row $aCheckRowIter -column 3 -sticky w
|
||||
if { "$::tcl_platform(platform)" == "windows" } {
|
||||
grid .myFrame.myChecks.myD3dCheck -row $aCheckRowIter -column 4 -sticky e
|
||||
grid .myFrame.myChecks.myD3dLbl -row $aCheckRowIter -column 5 -sticky w
|
||||
} else {
|
||||
grid .myFrame.myChecks.myXLibCheck -row $aCheckRowIter -column 4 -sticky e
|
||||
grid .myFrame.myChecks.myXLibLbl -row $aCheckRowIter -column 5 -sticky w
|
||||
} elseif { "$::tcl_platform(os)" == "Darwin" } {
|
||||
grid .myFrame.myChecks.myMacGLXCheck -row $aCheckRowIter -column 4 -sticky e
|
||||
grid .myFrame.myChecks.myMacGLXLbl -row $aCheckRowIter -column 5 -sticky w
|
||||
}
|
||||
grid .myFrame.myChecks.myLzmaCheck -row $aCheckRowIter -column 6 -sticky e
|
||||
grid .myFrame.myChecks.myLzmaLbl -row $aCheckRowIter -column 7 -sticky w
|
||||
@@ -680,10 +638,8 @@ grid .myFrame.myChecks.myJDKCheck -row $aCheckRowIter -column 12 -sticky e
|
||||
grid .myFrame.myChecks.myJDKLbl -row $aCheckRowIter -column 13 -sticky w
|
||||
|
||||
incr aCheckRowIter
|
||||
grid .myFrame.myChecks.myFFmpegCheck -row $aCheckRowIter -column 0 -sticky e
|
||||
grid .myFrame.myChecks.myFFmpegLbl -row $aCheckRowIter -column 1 -sticky w
|
||||
grid .myFrame.myChecks.myVtkCheck -row $aCheckRowIter -column 2 -sticky e
|
||||
grid .myFrame.myChecks.myVtkLbl -row $aCheckRowIter -column 3 -sticky w
|
||||
grid .myFrame.myChecks.myRapidJsonCheck -row $aCheckRowIter -column 0 -sticky e
|
||||
grid .myFrame.myChecks.myRapidJsonLbl -row $aCheckRowIter -column 1 -sticky w
|
||||
grid .myFrame.myChecks.myOpenVrCheck -row $aCheckRowIter -column 4 -sticky e
|
||||
grid .myFrame.myChecks.myOpenVrLbl -row $aCheckRowIter -column 5 -sticky w
|
||||
grid .myFrame.myChecks.myE57Check -row $aCheckRowIter -column 6 -sticky e
|
||||
@@ -696,11 +652,6 @@ if { "$::tcl_platform(platform)" == "windows" } {
|
||||
|
||||
incr aCheckRowIter
|
||||
|
||||
grid .myFrame.myChecks.myTbbCheck -row $aCheckRowIter -column 12 -sticky e
|
||||
grid .myFrame.myChecks.myTbbLbl -row $aCheckRowIter -column 13 -sticky w
|
||||
|
||||
incr aCheckRowIter
|
||||
|
||||
# Additional headers search paths
|
||||
grid .myFrame.myIncLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
@@ -717,8 +668,15 @@ incr aRowIter
|
||||
grid .myFrame.myIncErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
|
||||
# Additional search paths
|
||||
wokdep:gui:Show3264Bitness aRowIter
|
||||
# Additional 32-bit search paths
|
||||
if { "$ARCH" == "32" } {
|
||||
wokdep:gui:Show32Bitness aRowIter
|
||||
}
|
||||
|
||||
# Additional 64-bit search paths
|
||||
if { "$ARCH" == "64" } {
|
||||
wokdep:gui:Show64Bitness aRowIter
|
||||
}
|
||||
|
||||
# Bottom section
|
||||
grid .myFrame.mySave -row $aRowIter -column 4 -columnspan 2
|
||||
@@ -734,9 +692,6 @@ bind .myFrame.myVsFrame.myVsCombo <<ComboboxSelected>> {
|
||||
bind .myFrame.myVsFrame.myArchCombo <<ComboboxSelected>> {
|
||||
wokdep:gui:SwitchArch
|
||||
}
|
||||
bind .myFrame.myVsFrame.myConfigCombo <<ComboboxSelected>> {
|
||||
wokdep:gui:SwitchArch
|
||||
}
|
||||
|
||||
.myFrame.mySrchEntry configure -validate all -validatecommand {
|
||||
set ::PRODUCTS_PATH [file normalize "$::PRODUCTS_PATH_INPUT"]
|
||||
|
@@ -52,10 +52,6 @@ set CSF_OPT_LIB32 [list]
|
||||
set CSF_OPT_LIB64 [list]
|
||||
set CSF_OPT_BIN32 [list]
|
||||
set CSF_OPT_BIN64 [list]
|
||||
set CSF_OPT_LIB32D [list]
|
||||
set CSF_OPT_LIB64D [list]
|
||||
set CSF_OPT_BIN32D [list]
|
||||
set CSF_OPT_BIN64D [list]
|
||||
|
||||
if { "$tcl_platform(pointerSize)" == "4" } {
|
||||
set ARCH "32"
|
||||
@@ -72,15 +68,9 @@ if { [info exists ::env(SHORTCUT_HEADERS)] } {
|
||||
}
|
||||
|
||||
# fetch environment variables (e.g. set by custom.sh or custom.bat) and set them as tcl variables with the same name
|
||||
set THE_ENV_VARIABLES { HAVE_TK HAVE_FREETYPE HAVE_FREEIMAGE HAVE_FFMPEG HAVE_TBB HAVE_GLES2 HAVE_D3D HAVE_VTK \
|
||||
HAVE_ZLIB HAVE_LIBLZMA HAVE_E57 HAVE_RAPIDJSON HAVE_DRACO HAVE_OPENVR HAVE_OPENCL \
|
||||
CHECK_QT4 CHECK_JDK HAVE_XLIB \
|
||||
HAVE_RelWithDebInfo BUILD_Inspector }
|
||||
foreach anEnvIter $THE_ENV_VARIABLES { set ${anEnvIter} "false" }
|
||||
set HAVE_TK "true"
|
||||
set HAVE_FREETYPE "true"
|
||||
if { "$tcl_platform(os)" != "Darwin" } { set HAVE_XLIB "true" }
|
||||
set THE_ENV_VARIABLES {HAVE_FREEIMAGE HAVE_FFMPEG HAVE_TBB HAVE_GLES2 HAVE_D3D HAVE_VTK HAVE_ZLIB HAVE_LIBLZMA HAVE_E57 HAVE_RAPIDJSON HAVE_OPENVR HAVE_OPENCL CHECK_QT4 CHECK_JDK MACOSX_USE_GLX HAVE_RelWithDebInfo BUILD_Inspector}
|
||||
foreach anEnvIter $THE_ENV_VARIABLES {
|
||||
set ${anEnvIter} "false"
|
||||
if { [info exists ::env(${anEnvIter})] } {
|
||||
set ${anEnvIter} "$::env(${anEnvIter})"
|
||||
}
|
||||
@@ -88,12 +78,12 @@ foreach anEnvIter $THE_ENV_VARIABLES {
|
||||
# do not export platform-specific variables
|
||||
if { "$::tcl_platform(os)" == "Darwin" } {
|
||||
set HAVE_GLES2 ""
|
||||
} else {
|
||||
set MACOSX_USE_GLX ""
|
||||
}
|
||||
if { "$tcl_platform(platform)" != "windows" } {
|
||||
set HAVE_D3D ""
|
||||
set HAVE_RelWithDebInfo ""
|
||||
} else {
|
||||
set HAVE_XLIB ""
|
||||
}
|
||||
foreach anEnvIter {ARCH VCVER VCVARS PRJFMT } {
|
||||
if { [info exists ::env(${anEnvIter})] } {
|
||||
@@ -120,35 +110,6 @@ if { [info exists ::env(CSF_OPT_BIN64)] } {
|
||||
set CSF_OPT_BIN64 [split "$::env(CSF_OPT_BIN64)" $::SYS_PATH_SPLITTER]
|
||||
}
|
||||
|
||||
if { [info exists ::env(CSF_OPT_LIB32D)] } {
|
||||
set CSF_OPT_LIB32D [split "$::env(CSF_OPT_LIB32D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_LIB32 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_LIB32D $aLibIter]
|
||||
set ::CSF_OPT_LIB32D [lreplace $::CSF_OPT_LIB32D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
if { [info exists ::env(CSF_OPT_LIB64D)] } {
|
||||
set CSF_OPT_LIB64D [split "$::env(CSF_OPT_LIB64D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_LIB64 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_LIB64D $aLibIter]
|
||||
set ::CSF_OPT_LIB64D [lreplace $::CSF_OPT_LIB64D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
if { [info exists ::env(CSF_OPT_BIN32D)] } {
|
||||
set CSF_OPT_BIN32D [split "$::env(CSF_OPT_BIN32D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_BIN32 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_BIN32D $aLibIter]
|
||||
set ::CSF_OPT_BIN32D [lreplace $::CSF_OPT_BIN32D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
if { [info exists ::env(CSF_OPT_BIN64D)] } {
|
||||
set CSF_OPT_BIN64D [split "$::env(CSF_OPT_BIN64D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_BIN64 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_BIN64D $aLibIter]
|
||||
set ::CSF_OPT_BIN64D [lreplace $::CSF_OPT_BIN64D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
|
||||
# Search header file in $::CSF_OPT_INC and standard paths
|
||||
proc wokdep:SearchHeader {theHeader} {
|
||||
# search in custom paths
|
||||
@@ -349,12 +310,6 @@ proc wokdep:SearchStandardLibrary {theErrInc theErrLib32 theErrLib64 theErrBin32
|
||||
lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib"
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin"
|
||||
set hasLib true
|
||||
|
||||
set aLibDPath [wokdep:SearchLib "$theCheckLib" "$anArchIter" "$aPath/libd"]
|
||||
if { "$aLibDPath" != "" } {
|
||||
lappend ::CSF_OPT_LIB${anArchIter}D "$aPath/libd"
|
||||
lappend ::CSF_OPT_BIN${anArchIter}D "$aPath/bind"
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -1086,45 +1041,36 @@ proc wokdep:SearchVTK {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Search binary path
|
||||
if { "$::tcl_platform(platform)" == "windows" } {
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter"]
|
||||
if { "$aVtkBinPath" == "" } {
|
||||
set aPathList [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{VTK}*]
|
||||
set aPath [wokdep:Preferred $aPathList "$::VCVER" "$anArchIter" ]
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aPath/bin"]
|
||||
if { "$aVtkBinPath" != "" } {
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin"
|
||||
} else {
|
||||
# Try to find in lib path
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aPath/lib"]
|
||||
if { "$aVtkBinPath" != "" } {
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$aPath/lib"
|
||||
foreach anArchIter {64 32} {
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter"]
|
||||
if { "$aVtkBinPath" == "" } {
|
||||
set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{VTK}*] "$::VCVER" "$anArchIter" ]
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aPath/bin"]
|
||||
if { "$aVtkBinPath" != "" } { lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin"
|
||||
} else {
|
||||
# We didn't find preferred binary path => search through all available VTK directories
|
||||
foreach anIt $aPathList {
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$anIt/bin"]
|
||||
if { "$aVtkBinPath" != "" } {
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$anIt/bin"
|
||||
break
|
||||
} else {
|
||||
# Try to find in lib path
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$anIt/lib"]
|
||||
if { "$aVtkBinPath" != "" } {
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$anIt/lib"
|
||||
}
|
||||
}
|
||||
}
|
||||
if { "$aVtkBinPath" == "" } {
|
||||
lappend anErrBin$anArchIter "Error: 'vtkCommonCore-${aVtkVer}.dll' not found (VTK)"
|
||||
set isFound "false"
|
||||
}
|
||||
set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aPath/lib"]
|
||||
if { "$aVtkBinPath" != "" } { lappend ::CSF_OPT_BIN$anArchIter "$aPath/lib" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# We didn't find preferred binary path => search through inc path or among all available VTK directories
|
||||
if { "$aVtkBinPath" == "" } {
|
||||
# Try to find in lib path
|
||||
set aPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aVtkLibPath/bin"]
|
||||
if { "$aPath" != "" } { lappend ::CSF_OPT_BIN$anArchIter "$aVtkLibPath/bin"
|
||||
} elseif { [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aVtkLibPath/lib"] != "" } {
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$aVtkLibPath/lib"
|
||||
} else {
|
||||
lappend anErrBin$anArchIter "Error: 'vtkCommonCore-${aVtkVer}.dll' not found (VTK)"
|
||||
set isFound "false"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "$isFound"
|
||||
}
|
||||
@@ -1247,7 +1193,7 @@ proc wokdep:SearchX11 {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64
|
||||
upvar $theErrBin64 anErrBin64
|
||||
|
||||
set isFound "true"
|
||||
if { "$::tcl_platform(platform)" == "windows" || ( "$::tcl_platform(os)" == "Darwin" && "$::HAVE_XLIB" != "true" ) } {
|
||||
if { "$::tcl_platform(platform)" == "windows" || ( "$::tcl_platform(os)" == "Darwin" && "$::MACOSX_USE_GLX" != "true" ) } {
|
||||
return "$isFound"
|
||||
}
|
||||
|
||||
@@ -1326,18 +1272,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional libraries (32-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_LIB32=$aStringLib32\""
|
||||
|
||||
set aStringLib32d [join $::CSF_OPT_LIB32D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib32d [regsub -all "$::PRODUCTS_PATH" $aStringLib32d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug libraries (32-bit) search paths"
|
||||
if { "$aStringLib32d" != "" && "$aStringLib32" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_LIB32D=$aStringLib32d;%CSF_OPT_LIB32%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_LIB32D=$aStringLib32d\""
|
||||
}
|
||||
|
||||
set aStringLib64 [join $::CSF_OPT_LIB64 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib64 [regsub -all "$::PRODUCTS_PATH" $aStringLib64 "%PRODUCTS_PATH%"]
|
||||
@@ -1346,18 +1280,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional libraries (64-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_LIB64=$aStringLib64\""
|
||||
|
||||
set aStringLib64d [join $::CSF_OPT_LIB64D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib64d [regsub -all "$::PRODUCTS_PATH" $aStringLib64d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug libraries (64-bit) search paths"
|
||||
if { "$aStringLib64d" != "" && "$aStringLib64" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_LIB64D=$aStringLib64d;%CSF_OPT_LIB64%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_LIB64D=$aStringLib64d\""
|
||||
}
|
||||
|
||||
set aStringBin32 [join $::CSF_OPT_BIN32 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin32 [regsub -all "$::PRODUCTS_PATH" $aStringBin32 "%PRODUCTS_PATH%"]
|
||||
@@ -1366,18 +1288,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional (32-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_BIN32=$aStringBin32\""
|
||||
|
||||
set aStringBin32d [join $::CSF_OPT_BIN32D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin32d [regsub -all "$::PRODUCTS_PATH" $aStringBin32d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug (32-bit) search paths"
|
||||
if { "$aStringBin32d" != "" && "$aStringBin32" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_BIN32D=$aStringBin32d;%CSF_OPT_BIN32%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_BIN32D=$aStringBin32d\""
|
||||
}
|
||||
|
||||
set aStringBin64 [join $::CSF_OPT_BIN64 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin64 [regsub -all "$::PRODUCTS_PATH" $aStringBin64 "%PRODUCTS_PATH%"]
|
||||
@@ -1386,18 +1296,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional (64-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_BIN64=$aStringBin64\""
|
||||
|
||||
set aStringBin64d [join $::CSF_OPT_BIN64D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin64d [regsub -all "$::PRODUCTS_PATH" $aStringBin64d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug (64-bit) search paths"
|
||||
if { "$aStringBin64d" != "" && "$aStringBin64" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_BIN64D=$aStringBin64d;%CSF_OPT_BIN64%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_BIN64D=$aStringBin64d\""
|
||||
}
|
||||
|
||||
close $aFile
|
||||
} else {
|
||||
set aCustomFilePath "./custom.sh"
|
||||
@@ -1439,18 +1337,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "# Additional libraries ($::ARCH-bit) search paths"
|
||||
puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib]\""
|
||||
|
||||
set aStringLibD [join [set ::CSF_OPT_LIB${::ARCH}D] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLibD [regsub -all "$::PRODUCTS_PATH" $aStringLibD "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional debug libraries ($::ARCH-bit) search paths"
|
||||
if { "$aStringLibD" != "" && "$aStringLib" != "" } {
|
||||
puts $aFile "export CSF_OPT_LIB${::ARCH}D=\"[set aStringLibD]:\$CSF_OPT_LIB${::ARCH}\""
|
||||
} else {
|
||||
puts $aFile "export CSF_OPT_LIB${::ARCH}D=\"[set aStringLibD]\""
|
||||
}
|
||||
|
||||
set aStringBin [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin [regsub -all "$::PRODUCTS_PATH" $aStringBin "\${PRODUCTS_PATH}"]
|
||||
@@ -1459,18 +1345,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "# Additional ($::ARCH-bit) search paths"
|
||||
puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin]\""
|
||||
|
||||
set aStringBinD [join [set ::CSF_OPT_BIN${::ARCH}D] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBinD [regsub -all "$::PRODUCTS_PATH" $aStringBinD "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional debug ($::ARCH-bit) search paths"
|
||||
if { "$aStringBinD" != "" && "$aStringBin" != "" } {
|
||||
puts $aFile "export CSF_OPT_BIN${::ARCH}D=\"[set aStringBinD]:\$CSF_OPT_BIN${::ARCH}\""
|
||||
} else {
|
||||
puts $aFile "export CSF_OPT_BIN${::ARCH}D=\"[set aStringBinD]\""
|
||||
}
|
||||
|
||||
close $aFile
|
||||
}
|
||||
puts "Configuration saved to file '$aCustomFilePath'"
|
||||
@@ -1508,27 +1382,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "INCLUDEPATH += \"${anIncPath}\""
|
||||
}
|
||||
|
||||
puts $aFile ""
|
||||
puts $aFile "CONFIG(debug, debug|release) {"
|
||||
puts $aFile " # Additional debug libraries search paths"
|
||||
foreach aLibPath [set ::CSF_OPT_LIB${::ARCH}D] {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aLibPath [regsub -all "$::PRODUCTS_PATH" $aLibPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile " LIBS += -L\"${aLibPath}\""
|
||||
}
|
||||
if { "$::tcl_platform(platform)" == "windows" } {
|
||||
puts $aFile ""
|
||||
puts $aFile " # Additional debug DLLs search paths"
|
||||
foreach aDllPath [set ::CSF_OPT_BIN${::ARCH}D] {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aDllPath [regsub -all "$::PRODUCTS_PATH" $aDllPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile " LIBS += -L\"${aDllPath}\""
|
||||
}
|
||||
}
|
||||
puts $aFile "}"
|
||||
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional libraries search paths"
|
||||
foreach aLibPath [set ::CSF_OPT_LIB$::ARCH] {
|
||||
|
@@ -236,7 +236,7 @@ proc gendoc {args} {
|
||||
return -1
|
||||
}
|
||||
} elseif {$arg_n == "s"} {
|
||||
if { [ lsearch $args_names "pdf" ] == -1 } {
|
||||
if { [ lsearch $args_names "pdf" ] != -1 } {
|
||||
continue
|
||||
}
|
||||
if {$args_values(s) != "NULL"} {
|
||||
@@ -686,17 +686,6 @@ proc OCCDoc_MakeDoxyfile {docType outDir tagFileDir {doxyFileName} {generatorMod
|
||||
# Write specific options
|
||||
if { $docType == "REFMAN" } {
|
||||
|
||||
# always include optional components
|
||||
set aHaveD3dBack ""
|
||||
set aHaveGlesBack ""
|
||||
set aHaveVtkBack ""
|
||||
if { [info exists ::env(HAVE_D3D)] } { set aHaveD3dBack "$::env(HAVE_D3D)" }
|
||||
if { [info exists ::env(HAVE_GLES2)] } { set aHaveGlesBack "$::env(HAVE_GLES2)" }
|
||||
if { [info exists ::env(HAVE_VTK)] } { set aHaveVtkBack "$::env(HAVE_VTK)" }
|
||||
set ::env(HAVE_D3D) "true"
|
||||
set ::env(HAVE_GLES2) "true"
|
||||
set ::env(HAVE_VTK) "true"
|
||||
|
||||
# Load lists of modules scripts
|
||||
if { $productsPath == "" } {
|
||||
set modules_scripts [glob -nocomplain -type f -directory "[OCCDoc_GetSourceDir $productsPath]/OS/" *.tcl]
|
||||
@@ -822,11 +811,6 @@ proc OCCDoc_MakeDoxyfile {docType outDir tagFileDir {doxyFileName} {generatorMod
|
||||
|
||||
puts $doxyFile ""
|
||||
|
||||
# restore environment variables
|
||||
set ::env(HAVE_D3D) "$aHaveD3dBack"
|
||||
set ::env(HAVE_GLES2) "$aHaveGlesBack"
|
||||
set ::env(HAVE_VTK) "$aHaveVtkBack"
|
||||
|
||||
} elseif { $docType == "OVERVIEW" } {
|
||||
|
||||
# Add common options for generation of Overview and User Guides
|
||||
|
128
adm/genproj.tcl
@@ -129,7 +129,7 @@ proc osutils:isEqualContent { theContent1 theContent2 } {
|
||||
# Auxiliary function for writing new file content only if it has been actually changed
|
||||
# (e.g. to preserve file timestamp on no change).
|
||||
# Useful for automatically (re)generated files.
|
||||
proc osutils:writeTextFile { theFile theContent {theEol lf} {theToBackup false} } {
|
||||
proc osutils:writeTextFile { theFile theContent {theEol lf} } {
|
||||
if {[file exists "${theFile}"]} {
|
||||
set aFileOld [open "${theFile}" rb]
|
||||
fconfigure $aFileOld -translation crlf
|
||||
@@ -143,10 +143,6 @@ proc osutils:writeTextFile { theFile theContent {theEol lf} {theToBackup false}
|
||||
return false
|
||||
}
|
||||
|
||||
if { $theToBackup == true } {
|
||||
puts "Warning: file ${theFile} is updated. Old content is saved to ${theFile}.bak"
|
||||
file copy -force -- "${theFile}" "${theFile}.bak"
|
||||
}
|
||||
file delete -force "${theFile}"
|
||||
}
|
||||
|
||||
@@ -260,7 +256,7 @@ proc genAllResources { theSrcDir } {
|
||||
|
||||
# Wrapper-function to generate VS project files
|
||||
proc genproj {theFormat args} {
|
||||
set aSupportedFormats { "vc7" "vc8" "vc9" "vc10" "vc11" "vc12" "vc14" "vc141" "vc142" "vc143" "vclang" "cbp" "xcd" "pro"}
|
||||
set aSupportedFormats { "vc7" "vc8" "vc9" "vc10" "vc11" "vc12" "vc14" "vc141" "vc142" "vclang" "cbp" "xcd" "pro"}
|
||||
set aSupportedPlatforms { "wnt" "uwp" "lin" "mac" "ios" "qnx" }
|
||||
set isHelpRequire false
|
||||
|
||||
@@ -324,7 +320,6 @@ proc genproj {theFormat args} {
|
||||
vc14 - Visual Studio 2015
|
||||
vc141 - Visual Studio 2017
|
||||
vc142 - Visual Studio 2019
|
||||
vc143 - Visual Studio 2022
|
||||
vclang - Visual Studio with ClangCL toolset
|
||||
cbp - CodeBlocks
|
||||
xcd - XCode
|
||||
@@ -378,28 +373,29 @@ proc copy_with_warning {from to} {
|
||||
# Generate auxiliary scripts for launching IDE.
|
||||
proc genprojbat {theFormat thePlatform theSolution} {
|
||||
set aTargetPlatformExt sh
|
||||
set aTargetEol lf
|
||||
if { $thePlatform == "wnt" || $thePlatform == "uwp" } {
|
||||
set aTargetPlatformExt bat
|
||||
set aTargetEol crlf
|
||||
}
|
||||
|
||||
if { [file exists "$::path/src/OS/FoundationClasses.tcl"] || ![file exists "$::path/env.${aTargetPlatformExt}"] } {
|
||||
# generate env.bat/sh
|
||||
set anEnvTmplFilePath "$::THE_CASROOT/adm/templates/env.${aTargetPlatformExt}"
|
||||
set anEnvTmplFile [open "$anEnvTmplFilePath" "r"]
|
||||
set anEnvTmpl [read $anEnvTmplFile]
|
||||
close $anEnvTmplFile
|
||||
if {"$theFormat" != "cmake"} {
|
||||
# copy env.bat/sh only if not yet present
|
||||
if { ! [file exists "$::path/env.${aTargetPlatformExt}"] } {
|
||||
set anEnvTmplFile [open "$::THE_CASROOT/adm/templates/env.${aTargetPlatformExt}" "r"]
|
||||
set anEnvTmpl [read $anEnvTmplFile]
|
||||
close $anEnvTmplFile
|
||||
|
||||
set aCasRoot ""
|
||||
if { [file normalize "$::path"] != [file normalize "$::THE_CASROOT"] } {
|
||||
set aCasRoot [relativePath "$::path" "$::THE_CASROOT"]
|
||||
set aCasRoot ""
|
||||
if { [file normalize "$::path"] != [file normalize "$::THE_CASROOT"] } {
|
||||
set aCasRoot [relativePath "$::path" "$::THE_CASROOT"]
|
||||
}
|
||||
|
||||
regsub -all -- {__CASROOT__} $anEnvTmpl "$aCasRoot" anEnvTmpl
|
||||
|
||||
set anEnvFile [open "$::path/env.${aTargetPlatformExt}" "w"]
|
||||
puts $anEnvFile $anEnvTmpl
|
||||
close $anEnvFile
|
||||
}
|
||||
|
||||
regsub -all -- {__CASROOT__} $anEnvTmpl "$aCasRoot" anEnvTmpl
|
||||
set aLineList [split $anEnvTmpl "\n"]
|
||||
osutils:writeTextFile "$::path/env.${aTargetPlatformExt}" $aLineList $aTargetEol true
|
||||
|
||||
copy_with_warning "$::THE_CASROOT/adm/templates/draw.${aTargetPlatformExt}" "$::path/draw.${aTargetPlatformExt}"
|
||||
|
||||
if { "$::BUILD_Inspector" == "true" } {
|
||||
@@ -561,7 +557,6 @@ proc OS:MKPRC { theOutDir theFormat theLibType thePlatform theCmpl theSolution }
|
||||
"vc14" -
|
||||
"vc141" -
|
||||
"vc142" -
|
||||
"vc143" -
|
||||
"vclang" { OS:MKVC $anOutDir $aModules $aTools $theSolution $theFormat $isUWP}
|
||||
"cbp" { OS:MKCBP $anOutDir $aModules $theSolution $thePlatform $theCmpl }
|
||||
"xcd" {
|
||||
@@ -764,7 +759,7 @@ proc osutils:tk:sort { tklm theSrcDir theSourceDirOther } {
|
||||
return $lret
|
||||
}
|
||||
|
||||
# close dependencies of ltk. (full work paths of toolkits)
|
||||
# close dependencies of ltk. (full wok pathes of toolkits)
|
||||
# The CURRENT WOK LOCATION MUST contains ALL TOOLKITS required.
|
||||
# (locate not performed.)
|
||||
proc osutils:tk:close { ltk theSrcDir theSourceDirOther } {
|
||||
@@ -911,7 +906,7 @@ proc osutils:collectinc {theModules theSrcDir theIncPath} {
|
||||
# relative anIncPath in connection with aCasRoot/$theSrcDir
|
||||
set aFromBuildIncToSrcPath [relativePath "$anIncPath" "$aCasRoot/$theSrcDir"]
|
||||
|
||||
# create and copy shortcut header files
|
||||
# create and copy short-cut header files
|
||||
foreach anUnit $anUnits {
|
||||
osutils:checksrcfiles ${anUnit} $theSrcDir
|
||||
|
||||
@@ -1016,8 +1011,8 @@ proc osutils:vcsolution:header { vcversion } {
|
||||
append var \
|
||||
"Microsoft Visual Studio Solution File, Format Version 12.00\n" \
|
||||
"# Visual Studio 2013\n"
|
||||
} elseif { "$vcversion" == "vc14" || "$vcversion" == "vc141" ||
|
||||
"$vcversion" == "vc142" || "$vcversion" == "vc143" || "$vcversion" == "vclang" } {
|
||||
} elseif { "$vcversion" == "vc14" || "$vcversion" == "vc141" ||
|
||||
"$vcversion" == "vc142" || "$vcversion" == "vclang" } {
|
||||
append var \
|
||||
"Microsoft Visual Studio Solution File, Format Version 12.00\n" \
|
||||
"# Visual Studio 14\n"
|
||||
@@ -1292,9 +1287,6 @@ proc osutils:vcproj:readtemplate {theVcVer isUWP isExec} {
|
||||
} elseif { $theVcVer == "vc142" } {
|
||||
set aVCRTVer "vc14"
|
||||
set aToolset "v142"
|
||||
} elseif { $theVcVer == "vc143" } {
|
||||
set aVCRTVer "vc14"
|
||||
set aToolset "v143"
|
||||
} elseif { $theVcVer == "vclang" } {
|
||||
set aVCRTVer "vc14"
|
||||
set aToolset "ClangCL"
|
||||
@@ -1417,13 +1409,9 @@ proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap theRelease} {
|
||||
unset theCsfLibsMap
|
||||
unset theCsfFrmsMap
|
||||
|
||||
if { "$::HAVE_FREETYPE" == "true" } {
|
||||
set aLibsMap(CSF_FREETYPE) "freetype"
|
||||
}
|
||||
set aLibsMap(CSF_FREETYPE) "freetype"
|
||||
set aLibsMap(CSF_TclLibs) "tcl8.6"
|
||||
if { "$::HAVE_TK" == "true" } {
|
||||
set aLibsMap(CSF_TclTkLibs) "tk8.6"
|
||||
}
|
||||
set aLibsMap(CSF_TclTkLibs) "tk8.6"
|
||||
if { "$::HAVE_FREEIMAGE" == "true" } {
|
||||
if { "$theOS" == "wnt" } {
|
||||
set aLibsMap(CSF_FreeImagePlus) "FreeImage"
|
||||
@@ -1452,9 +1440,6 @@ proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap theRelease} {
|
||||
if { "$::HAVE_LIBLZMA" == "true" } {
|
||||
set aLibsMap(CSF_LIBLZMA) "liblzma"
|
||||
}
|
||||
if { "$::HAVE_DRACO" == "true" } {
|
||||
set aLibsMap(CSF_Draco) "draco"
|
||||
}
|
||||
if { "$::HAVE_OPENVR" == "true" } {
|
||||
set aLibsMap(CSF_OpenVR) "openvr_api"
|
||||
}
|
||||
@@ -1476,15 +1461,15 @@ proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap theRelease} {
|
||||
set aLibsMap(CSF_netapi32) "netapi32"
|
||||
set aLibsMap(CSF_winmm) "winmm"
|
||||
set aLibsMap(CSF_OpenGlLibs) "opengl32"
|
||||
set aLibsMap(CSF_OpenGlesLibs) "libEGL libGLESv2"
|
||||
if { "$::HAVE_GLES2" == "true" } {
|
||||
set aLibsMap(CSF_OpenGlLibs) "libEGL libGLESv2"
|
||||
}
|
||||
set aLibsMap(CSF_psapi) "Psapi"
|
||||
set aLibsMap(CSF_d3d9) "d3d9"
|
||||
|
||||
# the naming is different on Windows
|
||||
set aLibsMap(CSF_TclLibs) "tcl86"
|
||||
if { "$::HAVE_TK" == "true" } {
|
||||
set aLibsMap(CSF_TclTkLibs) "tk86"
|
||||
}
|
||||
set aLibsMap(CSF_TclTkLibs) "tk86"
|
||||
if { "$theRelease" == "true" } {
|
||||
set aLibsMap(CSF_QT) "Qt5Gui Qt5Widgets Qt5Xml Qt5Core"
|
||||
} else {
|
||||
@@ -1499,47 +1484,39 @@ proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap theRelease} {
|
||||
}
|
||||
} else {
|
||||
set aLibsMap(CSF_dl) "dl"
|
||||
if { "$::HAVE_XLIB" == "true" } {
|
||||
set aLibsMap(CSF_OpenGlLibs) "GL"
|
||||
} else {
|
||||
set aLibsMap(CSF_OpenGlLibs) "GL EGL"
|
||||
}
|
||||
set aLibsMap(CSF_OpenGlesLibs) "EGL GLESv2"
|
||||
if { "$theOS" == "mac" || "$theOS" == "ios" } {
|
||||
set aLibsMap(CSF_objc) "objc"
|
||||
set aLibsMap(CSF_OpenGlLibs) ""
|
||||
set aLibsMap(CSF_OpenGlesLibs) ""
|
||||
set aFrmsMap(CSF_OpenGlLibs) "OpenGL"
|
||||
set aFrmsMap(CSF_OpenGlesLibs) "OpenGLES"
|
||||
set aLibsMap(CSF_objc) "objc"
|
||||
if { "$theOS" == "ios" } {
|
||||
set aFrmsMap(CSF_Appkit) "UIKit"
|
||||
set aFrmsMap(CSF_Appkit) "UIKit"
|
||||
set aFrmsMap(CSF_OpenGlLibs) "OpenGLES"
|
||||
} else {
|
||||
set aFrmsMap(CSF_Appkit) "AppKit"
|
||||
set aFrmsMap(CSF_Appkit) "AppKit"
|
||||
set aFrmsMap(CSF_OpenGlLibs) "OpenGL"
|
||||
}
|
||||
set aFrmsMap(CSF_IOKit) "IOKit"
|
||||
set aLibsMap(CSF_TclLibs) ""
|
||||
set aLibsMap(CSF_TclTkLibs) ""
|
||||
set aFrmsMap(CSF_TclLibs) "Tcl"
|
||||
if { "$::HAVE_TK" == "true" } {
|
||||
set aFrmsMap(CSF_TclTkLibs) "Tk"
|
||||
}
|
||||
set aLibsMap(CSF_TclLibs) ""
|
||||
set aFrmsMap(CSF_TclTkLibs) "Tk"
|
||||
set aLibsMap(CSF_TclTkLibs) ""
|
||||
set aLibsMap(CSF_QT) "QtCore QtGui"
|
||||
} elseif { "$theOS" == "android" } {
|
||||
set aLibsMap(CSF_OpenGlLibs) "EGL GLESv2"
|
||||
set aLibsMap(CSF_androidlog) "log"
|
||||
} else {
|
||||
if { "$::HAVE_FREETYPE" == "true" } {
|
||||
set aLibsMap(CSF_fontconfig) "fontconfig"
|
||||
}
|
||||
set aLibsMap(CSF_fontconfig) "fontconfig"
|
||||
if { "$theOS" == "qnx" } {
|
||||
# CSF_ThreadLibs - pthread API is part of libc on QNX
|
||||
set aLibsMap(CSF_OpenGlLibs) "EGL GLESv2"
|
||||
} else {
|
||||
set aLibsMap(CSF_ThreadLibs) "pthread rt"
|
||||
if { "$::HAVE_TK" == "true" } {
|
||||
set aLibsMap(CSF_TclTkLibs) "tk8.6"
|
||||
}
|
||||
if { "$::HAVE_XLIB" == "true" } {
|
||||
set aLibsMap(CSF_XwLibs) "X11"
|
||||
}
|
||||
set aLibsMap(CSF_OpenGlLibs) "GL"
|
||||
set aLibsMap(CSF_TclTkLibs) "X11 tk8.6"
|
||||
set aLibsMap(CSF_XwLibs) "X11 Xext Xmu Xi"
|
||||
set aLibsMap(CSF_MotifLibs) "X11"
|
||||
}
|
||||
|
||||
if { "$::HAVE_GLES2" == "true" } {
|
||||
set aLibsMap(CSF_OpenGlLibs) "EGL GLESv2"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1694,7 +1671,7 @@ proc wokUtils:EASY:bs1 { s } {
|
||||
return $r
|
||||
}
|
||||
|
||||
# Returns for a full path the liste of n last directory part
|
||||
# Returs for a full path the liste of n last directory part
|
||||
# n = 1 => tail
|
||||
# n = 2 => dir/file.c
|
||||
# n = 3 => sdir/dir/file.c
|
||||
@@ -1808,14 +1785,9 @@ proc osutils:vcproj { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
|
||||
global path
|
||||
|
||||
set aHasQtDep "false"
|
||||
set aTkDefines ""
|
||||
foreach aCsfElem [osutils:tk:csfInExternlib "$path/$theSrcDir/${theToolKit}/EXTERNLIB"] {
|
||||
if { "$aCsfElem" == "CSF_QT" } {
|
||||
set aHasQtDep "true"
|
||||
} elseif { "$aCsfElem" == "CSF_OpenGlLibs" } {
|
||||
set aTkDefines "$aTkDefines;HAVE_OPENGL"
|
||||
} elseif { "$aCsfElem" == "CSF_OpenGlesLibs" } {
|
||||
set aTkDefines "$aTkDefines;HAVE_GLES2"
|
||||
}
|
||||
}
|
||||
set theProjTmpl [osutils:vcproj:readtemplate $theVcVer $isUWP 0]
|
||||
@@ -1850,9 +1822,9 @@ proc osutils:vcproj { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
|
||||
# depending on VC version
|
||||
regsub -all -- {__TKDEP__} $theProjTmpl [osutils:depLibraries $aUsedLibs $anOsReleaseLibs $theVcVer] theProjTmpl
|
||||
regsub -all -- {__TKDEP_DEBUG__} $theProjTmpl [osutils:depLibraries $aUsedLibs $anOsDebugLibs $theVcVer] theProjTmpl
|
||||
regsub -all -- {__TKDEFINES__} $theProjTmpl $aTkDefines theProjTmpl
|
||||
|
||||
set anIncPaths "..\\..\\..\\inc"
|
||||
# set aTKDefines ""
|
||||
set aFilesSection ""
|
||||
set aVcFilesCxx(units) ""
|
||||
set aVcFilesHxx(units) ""
|
||||
@@ -2136,7 +2108,6 @@ proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
|
||||
set aVCRTVer [string range $theVcVer 0 3]
|
||||
regsub -all -- {__TKDEP__} $aProjTmpl [osutils:depLibraries $aUsedLibs $anOsReleaseLibs $theVcVer] aProjTmpl
|
||||
regsub -all -- {__TKDEP_DEBUG__} $aProjTmpl [osutils:depLibraries $aUsedLibs $anOsDebugLibs $theVcVer] aProjTmpl
|
||||
regsub -all -- {__TKDEFINES__} $aProjTmpl "" aProjTmpl
|
||||
|
||||
set aFilesSection ""
|
||||
set aVcFilesCxx(units) ""
|
||||
@@ -2544,7 +2515,6 @@ proc osutils:cbp { theCmpl theOutDir theProjName thePlatform theSrcFiles theLibs
|
||||
lappend aCmplFlags "-DOCC_CONVERT_SIGNALS"
|
||||
}
|
||||
lappend aCmplFlags "-Wall"
|
||||
lappend aCmplFlags "-Wextra"
|
||||
lappend aCmplFlags "-fexceptions"
|
||||
}
|
||||
lappend aCmplFlagsRelease "-DNDEBUG"
|
||||
|
@@ -16,7 +16,7 @@
|
||||
# commercial license or contractual agreement.
|
||||
|
||||
# =======================================================================
|
||||
# This script contains auxiliary functions which can be used
|
||||
# This script contains auxilary functions which can be used
|
||||
# in documentation generation process
|
||||
# =======================================================================
|
||||
|
||||
|
@@ -13,8 +13,8 @@ OccGitRoot = $$_PRO_FILE_PWD_/../../../..
|
||||
|
||||
# Define compilation flags
|
||||
CONFIG += warn_on
|
||||
QMAKE_CFLAGS_WARN_ON = -Wall -Wextra
|
||||
QMAKE_CXXFLAGS_WARN_ON = -Wall -Wextra
|
||||
QMAKE_CFLAGS_WARN_ON = -Wall
|
||||
QMAKE_CXXFLAGS_WARN_ON = -Wall
|
||||
win32 {
|
||||
QMAKE_CFLAGS_WARN_ON = -W4
|
||||
QMAKE_CXXFLAGS_WARN_ON = -W4
|
||||
@@ -49,9 +49,6 @@ win32 {
|
||||
} else {
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.14
|
||||
}
|
||||
} else:gcc {
|
||||
# ask linker to report missing library dependencies
|
||||
QMAKE_LFLAGS += -Wl,-z,defs
|
||||
}
|
||||
}
|
||||
!CONFIG(debug, debug|release) {
|
||||
@@ -156,4 +153,5 @@ win32 {
|
||||
}
|
||||
}
|
||||
|
||||
OBJECTS_DIR = $$DESTDIR/../obj$${MY_BUILDTYPE}/$${TARGET}
|
||||
#OBJECTS_DIR = $$DESTDIR/../obj$${MY_BUILDTYPE}/$${TARGET}
|
||||
OBJECTS_DIR = $$DESTDIR/../obj$${MY_BUILDTYPE}
|
||||
|
@@ -15,14 +15,8 @@ for (aModuleIter, aModuleList) {
|
||||
equals (aToolKit, $$OCC_MODULE_NAME) { toSkipToolkit = 1 }
|
||||
!HAVE_VTK:equals (aToolKit, "TKIVtk") { toSkipToolkit = 1 }
|
||||
!HAVE_VTK:equals (aToolKit, "TKIVtkDraw") { toSkipToolkit = 1 }
|
||||
#!HAVE_OPENGL: equals (aToolKit, "TKOpenGl") { toSkipToolkit = 1 }
|
||||
#!HAVE_OPENGL: equals (aToolKit, "TKOpenGlTest") { toSkipToolkit = 1 }
|
||||
!HAVE_GLES2: equals (aToolKit, "TKOpenGles") { toSkipToolkit = 1 }
|
||||
!HAVE_GLES2: equals (aToolKit, "TKOpenGlesTest") { toSkipToolkit = 1 }
|
||||
!win32: equals (aToolKit, "TKD3DHost") { toSkipToolkit = 1 }
|
||||
!win32: equals (aToolKit, "TKD3DHostTest") { toSkipToolkit = 1 }
|
||||
equals (toSkipToolkit, 0) {
|
||||
|
||||
#warning(aToolKit($$OCC_MODULE_NAME)=$$aToolKit)
|
||||
eval(occtkgen_$${aToolKit}.input = $$_PRO_FILE_PWD_/../OccToolkit.pro.in)
|
||||
eval(occtkgen_$${aToolKit}.output = $$_PRO_FILE_PWD_/$${aToolKit}/$${aToolKit}.pro)
|
||||
|
@@ -18,7 +18,7 @@ aHxxRoot = $$OccGitRoot/inc
|
||||
INCLUDEPATH += $$aHxxRoot
|
||||
|
||||
# CSF variables
|
||||
HAVE_FREETYPE { CSF_FREETYPE = -lfreetype }
|
||||
CSF_FREETYPE = -lfreetype
|
||||
CSF_TclLibs = -ltcl8.6
|
||||
CSF_TclTkLibs = -ltk8.6
|
||||
HAVE_FREEIMAGE { CSF_FreeImagePlus = -lfreeimage } else:win32 { CSF_FreeImagePlus = -lwindowscodecs -lole32 }
|
||||
@@ -36,7 +36,7 @@ win32 {
|
||||
CSF_wsock32 = -lwsock32
|
||||
CSF_netapi32 = -lnetapi32
|
||||
CSF_OpenGlLibs = -lopengl32
|
||||
CSF_OpenGlesLibs = -llibEGL -llibGLESv2
|
||||
HAVE_GLES2 { CSF_OpenGlLibs = -llibEGL -llibGLESv2 }
|
||||
CSF_psapi = -lPsapi
|
||||
CSF_winmm = -lwinmm
|
||||
CSF_d3d9 = -ld3d9
|
||||
@@ -46,12 +46,12 @@ win32 {
|
||||
} else:mac {
|
||||
CSF_dl = -ldl
|
||||
CSF_objc = -lobjc
|
||||
CSF_OpenGlLibs = -framework OpenGL
|
||||
CSF_OpenGlesLibs = -framework OpenGLES
|
||||
iphoneos {
|
||||
CSF_Appkit = -framework UIKit
|
||||
CSF_OpenGlLibs = -framework OpenGLES
|
||||
} else {
|
||||
CSF_Appkit = -framework AppKit
|
||||
CSF_OpenGlLibs = -framework OpenGL
|
||||
}
|
||||
CSF_IOKit = -framework IOKit
|
||||
CSF_TclLibs = -framework Tcl
|
||||
@@ -59,23 +59,18 @@ win32 {
|
||||
} else {
|
||||
CSF_dl = -ldl
|
||||
CSF_ThreadLibs = -lpthread -lrt
|
||||
CSF_OpenGlesLibs = -lEGL -lGLESv2
|
||||
CSF_TclTkLibs = -ltk8.6
|
||||
HAVE_XLIB {
|
||||
CSF_OpenGlLibs = -lGL
|
||||
CSF_XwLibs = -lX11
|
||||
} else {
|
||||
CSF_OpenGlLibs = -lGL -lEGL
|
||||
}
|
||||
HAVE_FREETYPE { CSF_fontconfig = -lfontconfig }
|
||||
CSF_OpenGlLibs = -lGL
|
||||
CSF_TclTkLibs = -lX11 -ltk8.6
|
||||
CSF_XwLibs = -lX11 -lXext -lXmu -lXi
|
||||
CSF_MotifLibs = -lX11
|
||||
CSF_fontconfig = -lfontconfig
|
||||
HAVE_GLES2 { CSF_OpenGlLibs = -lEGL -lGLESv2 }
|
||||
}
|
||||
|
||||
for (aCfgIter, CONFIG) {
|
||||
aRes = $$find(aCfgIter, "^HAVE_")
|
||||
!equals(aCfgIter, "HAVE_GLES2") {
|
||||
count(aRes, 1) {
|
||||
DEFINES += $$aCfgIter
|
||||
}
|
||||
count(aRes, 1) {
|
||||
DEFINES += $$aCfgIter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,12 +103,6 @@ for (anExternLib, anExternLibs) {
|
||||
count(hasCsf, 1) {
|
||||
aList = $$split($$anExternLib, "\n")
|
||||
LIBS += $$aList
|
||||
equals(anExternLib, "CSF_OpenGlLibs") {
|
||||
DEFINES += "HAVE_OPENGL"
|
||||
}
|
||||
equals(anExternLib, "CSF_OpenGlesLibs") {
|
||||
DEFINES += "HAVE_GLES2"
|
||||
}
|
||||
} else {
|
||||
LIBS += -l$$anExternLib
|
||||
}
|
||||
|
@@ -9,10 +9,6 @@
|
||||
# - Open project in Qt Creator, and call "Run qmake".
|
||||
# - Close the project in Qt Creator, open it again so that you should see the sub-modules in Project tree; call "Run qmake" again.
|
||||
# - "Run qmake" and perform Build.
|
||||
#
|
||||
# Within Debian-based Linux repository Qt Creator can be installed like this:
|
||||
# > sudo apt-get install qtcreator qtbase5-dev
|
||||
|
||||
TEMPLATE = subdirs
|
||||
exists(custom.auto.pri) { include(custom.auto.pri) }
|
||||
exists(custom.pri) { include(custom.pri) }
|
||||
|
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorCodeStyle>
|
||||
<!-- Written by QtCreator 3.6.1, 2016-05-19T14:46:43. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>CodeStyleData</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="AlignAssignments">true</value>
|
||||
<value type="bool" key="AutoSpacesForTabs">false</value>
|
||||
<value type="bool" key="BindStarToIdentifier">false</value>
|
||||
<value type="bool" key="BindStarToLeftSpecifier">true</value>
|
||||
<value type="bool" key="BindStarToRightSpecifier">false</value>
|
||||
<value type="bool" key="BindStarToTypeName">true</value>
|
||||
<value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
|
||||
<value type="bool" key="IndentAccessSpecifiers">false</value>
|
||||
<value type="bool" key="IndentBlockBody">true</value>
|
||||
<value type="bool" key="IndentBlockBraces">false</value>
|
||||
<value type="bool" key="IndentBlocksRelativeToSwitchLabels">true</value>
|
||||
<value type="bool" key="IndentClassBraces">false</value>
|
||||
<value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
|
||||
<value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
|
||||
<value type="bool" key="IndentEnumBraces">false</value>
|
||||
<value type="bool" key="IndentFunctionBody">true</value>
|
||||
<value type="bool" key="IndentFunctionBraces">false</value>
|
||||
<value type="bool" key="IndentNamespaceBody">true</value>
|
||||
<value type="bool" key="IndentNamespaceBraces">false</value>
|
||||
<value type="int" key="IndentSize">2</value>
|
||||
<value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
|
||||
<value type="bool" key="IndentSwitchLabels">true</value>
|
||||
<value type="int" key="PaddingMode">2</value>
|
||||
<value type="bool" key="SpacesForTabs">true</value>
|
||||
<value type="int" key="TabSize">2</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>DisplayName</variable>
|
||||
<value type="QString">occt</value>
|
||||
</data>
|
||||
</qtcreator>
|
@@ -13,7 +13,6 @@ rem Paths to 3rd-party tools and libraries
|
||||
set "anNdkPath="
|
||||
set "aFreeType="
|
||||
set "aRapidJson="
|
||||
set "aDraco="
|
||||
|
||||
rem Build stages to perform
|
||||
set "toCMake=1"
|
||||
@@ -35,9 +34,7 @@ set "BUILD_ApplicationFramework=ON"
|
||||
set "BUILD_DataExchange=ON"
|
||||
|
||||
rem Optional 3rd-party libraries to enable
|
||||
set "USE_FREETYPE=ON"
|
||||
set "USE_RAPIDJSON=OFF"
|
||||
set "USE_DRACO=OFF"
|
||||
set USE_RAPIDJSON=OFF
|
||||
|
||||
rem Archive tool
|
||||
set "THE_7Z_PARAMS=-t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on"
|
||||
@@ -57,11 +54,6 @@ if not exist "%anNdkPath%/sources/cxx-stl/gnu-libstdc++" (
|
||||
set "aLibType=Shared"
|
||||
if ["%isStatic%"] == ["1"] set "aLibType=Static"
|
||||
set "aDestDir=%aBuildRoot%\android-%aCompiler%"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
if ["%toClean%"] == ["1"] (
|
||||
rmdir /S /Q %aDestDir%"
|
||||
)
|
||||
)
|
||||
|
||||
set "anOcctVerSuffix="
|
||||
set "anOcctVersion=0.0.0"
|
||||
@@ -72,13 +64,6 @@ for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
|
||||
|
||||
for %%s in (%anNdkAbiList%) do (
|
||||
call :cmakeGenerate "%anNdkApiLevel%" "%%s"
|
||||
if errorlevel 1 (
|
||||
if not ["%1"] == ["-nopause"] (
|
||||
pause
|
||||
)
|
||||
exit /B 1
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
|
||||
for /F "skip=1 delims=" %%F in ('
|
||||
@@ -114,19 +99,9 @@ goto :eof
|
||||
:cmakeGenerate
|
||||
set "anApi=%~1"
|
||||
set "anAbi=%~2"
|
||||
if ["%anApi%"] == [""] (
|
||||
set "anApi=21"
|
||||
if ["%anAbi%"] == ["armeabi-v7a"] ( set "anApi=16" )
|
||||
if ["%anAbi%"] == ["x86"] ( set "anApi=16" )
|
||||
)
|
||||
set "aPlatformAndCompiler=android-%anAbi%-%aCompiler%"
|
||||
set "aWorkDir=%aBuildRoot%\%aPlatformAndCompiler%-make"
|
||||
set "aLogFile=%aBuildRoot%\build-%aPlatformAndCompiler%.log"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
if ["%toClean%"] == ["1"] (
|
||||
rmdir /S /Q %aWorkDir%"
|
||||
)
|
||||
)
|
||||
if not exist "%aWorkDir%" ( mkdir "%aWorkDir%" )
|
||||
if exist "%aLogFile%" ( del "%aLogFile%" )
|
||||
|
||||
@@ -137,13 +112,10 @@ git log -n 100 >> "%aWorkDir%\VERSION.html"
|
||||
echo ^</pre^>>> "%aWorkDir%\VERSION.html"
|
||||
|
||||
echo Start building OCCT for %aPlatformAndCompiler%
|
||||
echo Start building OCCT for %aPlatformAndCompiler%, API level %anApi%>> %aLogFile%
|
||||
echo Start building OCCT for %aPlatformAndCompiler%>> %aLogFile%
|
||||
|
||||
pushd "%aWorkDir%"
|
||||
|
||||
set "aFreeTypeLibName=libfreetype.so"
|
||||
if exist "%aFreeType%/libs/%anAbi%/libfreetype.a" ( set "aFreeTypeLibName=libfreetype.a" )
|
||||
|
||||
set "aTimeZERO=%TIME%"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
echo Configuring OCCT for Android %anAbi%, API level %anApi%...
|
||||
@@ -168,19 +140,14 @@ if ["%toCMake%"] == ["1"] (
|
||||
-D BUILD_MODULE_DataExchange:BOOL="%BUILD_DataExchange%" ^
|
||||
-D BUILD_MODULE_Draw:BOOL="OFF" ^
|
||||
-D BUILD_DOC_Overview:BOOL="OFF" ^
|
||||
-D USE_FREETYPE:BOOL="%USE_FREETYPE%" ^
|
||||
-D 3RDPARTY_FREETYPE_DIR:PATH="%aFreeType%" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="%aFreeType%/include" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="%aFreeType%/include" ^
|
||||
-D 3RDPARTY_FREETYPE_LIBRARY_DIR:PATH="%aFreeType%/libs/%anAbi%" ^
|
||||
-D 3RDPARTY_FREETYPE_LIBRARY:FILEPATH="%aFreeType%/libs/%anAbi%/%aFreeTypeLibName%" ^
|
||||
-D 3RDPARTY_FREETYPE_LIBRARY:FILEPATH="%aFreeType%/libs/%anAbi%/libfreetype.so" ^
|
||||
-D USE_RAPIDJSON:BOOL="%USE_RAPIDJSON%" ^
|
||||
-D 3RDPARTY_RAPIDJSON_DIR:PATH="%aRapidJson%" ^
|
||||
-D 3RDPARTY_RAPIDJSON_INCLUDE_DIR:PATH="%aRapidJson%/include" ^
|
||||
-D USE_DRACO:BOOL="%USE_DRACO%" ^
|
||||
-D 3RDPARTY_DRACO_DIR:PATH="%aDraco%" ^
|
||||
-D 3RDPARTY_DRACO_INCLUDE_DIR:FILEPATH="%aDraco%/include" ^
|
||||
-D 3RDPARTY_DRACO_LIBRARY_DIR_draco:PATH="%aDraco%/libs/%anAbi%" ^
|
||||
"%aCasSrc%"
|
||||
|
||||
if errorlevel 1 (
|
||||
@@ -189,7 +156,7 @@ if ["%toCMake%"] == ["1"] (
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
set "aTimeGEN=%TIME%"
|
||||
set aTimeGEN=%TIME%
|
||||
call :computeDuration %aTimeZERO% %aTimeGEN%
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
echo Generation time: %DURATION%
|
||||
@@ -211,7 +178,7 @@ if ["%toMake%"] == ["1"] (
|
||||
)
|
||||
type "%aLogFile%"
|
||||
)
|
||||
set "aTimeBUILD=%TIME%"
|
||||
set aTimeBUILD=%TIME%
|
||||
call :computeDuration %aTimeGEN% %aTimeBUILD%
|
||||
if ["%toMake%"] == ["1"] (
|
||||
echo Building time: %DURATION%
|
||||
|
@@ -6,7 +6,6 @@ rem set "PATH=c:\CMake\bin;%PATH%"
|
||||
rem set "anNdkPath=c:/android-ndk-r12"
|
||||
rem set "aFreeType=c:/freetype-2.7.1-android"
|
||||
rem set "aRapidJson=c:/rapidjson-1.1.0"
|
||||
rem set "aDraco=c:/draco-1.4.1-android"
|
||||
|
||||
rem Uncomment to customize building steps
|
||||
rem set "aBuildRoot=%~dp0..\..\work"
|
||||
@@ -29,5 +28,4 @@ rem set "BUILD_ApplicationFramework=ON"
|
||||
rem set "BUILD_DataExchange=ON"
|
||||
|
||||
rem Optional 3rd-party libraries to enable
|
||||
rem set "USE_RAPIDJSON=ON"
|
||||
rem set "USE_DRACO=ON"
|
||||
rem set USE_RAPIDJSON=ON
|
||||
|
@@ -22,7 +22,6 @@ rem set BUILD_RELEASE_DISABLE_EXCEPTIONS=ON
|
||||
rem set BUILD_WITH_DEBUG=OFF
|
||||
rem set BUILD_ENABLE_FPE_SIGNAL_HANDLER=ON
|
||||
rem set BUILD_USE_PCH=OFF
|
||||
rem set BUILD_FORCE_RelWithDebInfo=OFF
|
||||
|
||||
rem Use semicolon-separated list of toolkits if you want to disable all modules
|
||||
rem and build only some toolkits.
|
||||
@@ -43,6 +42,5 @@ rem set USE_FFMPEG=OFF
|
||||
rem set USE_FREEIMAGE=OFF
|
||||
rem set USE_GLES2=OFF
|
||||
rem set USE_RAPIDJSON=OFF
|
||||
rem set USE_DRACO=OFF
|
||||
rem set USE_TBB=OFF
|
||||
rem set USE_VTK=OFF
|
||||
|
@@ -35,7 +35,6 @@ FREETYPE_DIR="$OCCT3RDPARTY/freetype-2.7.1"
|
||||
#USE_FREEIMAGE=OFF
|
||||
#USE_GLES2=OFF
|
||||
#USE_RAPIDJSON=OFF
|
||||
#USE_DRACO=OFF
|
||||
#USE_TBB=OFF
|
||||
#USE_VTK=OFF
|
||||
|
||||
|
@@ -12,7 +12,6 @@ set VS=14
|
||||
set VSDATA=2015
|
||||
set VSPLATFORM=Win64
|
||||
set "BUILD_DIR=build-vs%VS%-%VSPLATFORM%"
|
||||
set "OCCT3RDPARTY="
|
||||
set "INSTALL_DIR=%SrcRoot%\install"
|
||||
|
||||
set BUILD_ADDITIONAL_TOOLKITS=
|
||||
@@ -24,7 +23,6 @@ set BUILD_RELEASE_DISABLE_EXCEPTIONS=ON
|
||||
set BUILD_WITH_DEBUG=OFF
|
||||
set BUILD_ENABLE_FPE_SIGNAL_HANDLER=ON
|
||||
set BUILD_USE_PCH=OFF
|
||||
set BUILD_FORCE_RelWithDebInfo=OFF
|
||||
|
||||
set BUILD_MODULE_ApplicationFramework=ON
|
||||
set BUILD_MODULE_DataExchange=ON
|
||||
@@ -38,7 +36,6 @@ set USE_FFMPEG=OFF
|
||||
set USE_FREEIMAGE=OFF
|
||||
set USE_GLES2=OFF
|
||||
set USE_RAPIDJSON=OFF
|
||||
set USE_DRACO=OFF
|
||||
set USE_TBB=OFF
|
||||
set USE_VTK=OFF
|
||||
|
||||
@@ -72,14 +69,12 @@ cmake -G "%arch_compile%" ^
|
||||
-D BUILD_WITH_DEBUG:BOOL=%BUILD_WITH_DEBUG% ^
|
||||
-D BUILD_ENABLE_FPE_SIGNAL_HANDLER:BOOL=%BUILD_ENABLE_FPE_SIGNAL_HANDLER% ^
|
||||
-D BUILD_USE_PCH:BOOL=%BUILD_USE_PCH% ^
|
||||
-D BUILD_FORCE_RelWithDebInfo:BOOL=%BUILD_FORCE_RelWithDebInfo% ^
|
||||
-D INSTALL_DIR:PATH="%INSTALL_DIR%" ^
|
||||
-D USE_D3D:BOOL=%USE_D3D% ^
|
||||
-D USE_FFMPEG:BOOL=%USE_FFMPEG% ^
|
||||
-D USE_FREEIMAGE:BOOL=%USE_FREEIMAGE% ^
|
||||
-D USE_GLES2:BOOL=%USE_GLES2% ^
|
||||
-D USE_RAPIDJSON:BOOL=%USE_RAPIDJSON% ^
|
||||
-D USE_DRACO:BOOL=%USE_DRACO% ^
|
||||
-D USE_TBB:BOOL=%USE_TBB% ^
|
||||
-D USE_VTK:BOOL=%USE_VTK% ^
|
||||
"%SrcRoot%"
|
||||
|
@@ -40,7 +40,6 @@ USE_FFMPEG=OFF
|
||||
USE_FREEIMAGE=OFF
|
||||
USE_GLES2=OFF
|
||||
USE_RAPIDJSON=OFF
|
||||
USE_DRACO=OFF
|
||||
USE_TBB=OFF
|
||||
USE_VTK=OFF
|
||||
AUX_ARGS=
|
||||
@@ -80,7 +79,6 @@ cmake -G "Unix Makefiles" \
|
||||
-D USE_FREEIMAGE:BOOL=$USE_FREEIMAGE \
|
||||
-D USE_GLES2:BOOL=$USE_GLES2 \
|
||||
-D USE_RAPIDJSON:BOOL=$USE_RAPIDJSON \
|
||||
-D USE_DRACO:BOOL=$USE_DRACO \
|
||||
-D USE_TBB:BOOL=$USE_TBB \
|
||||
-D USE_VTK:BOOL=$USE_VTK \
|
||||
$AUX_ARGS "$SrcRoot"
|
||||
|
@@ -17,7 +17,6 @@ export aBuildRoot=work
|
||||
export aFreeType=
|
||||
export aFreeImage=
|
||||
export aRapidJson=
|
||||
export aDraco=
|
||||
|
||||
# build stages to perform
|
||||
export toSimulator=0
|
||||
@@ -35,10 +34,8 @@ export BUILD_Visualization=ON
|
||||
export BUILD_ApplicationFramework=ON
|
||||
export BUILD_DataExchange=ON
|
||||
|
||||
export USE_FREETYPE=ON
|
||||
export USE_FREEIMAGE=OFF
|
||||
export USE_RAPIDJSON=OFF
|
||||
export USE_DRACO=OFF
|
||||
|
||||
export IPHONEOS_DEPLOYMENT_TARGET=8.0
|
||||
export anAbi=arm64
|
||||
@@ -113,25 +110,20 @@ if [[ $toCMake == 1 ]]; then
|
||||
-D ENABLE_VISIBILITY:BOOL="TRUE" \
|
||||
-D CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL="OFF" \
|
||||
-D CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL="OFF" \
|
||||
-D CMAKE_BUILD_TYPE:STRING="$aBuildType" \
|
||||
-D CMAKE_BUILD_TYPE:STRING="Release" \
|
||||
-D BUILD_LIBRARY_TYPE:STRING="$aLibType" \
|
||||
-D INSTALL_DIR:PATH="$aDestDir" \
|
||||
-D INSTALL_DIR_INCLUDE:STRING="inc" \
|
||||
-D INSTALL_DIR_LIB:STRING="lib" \
|
||||
-D INSTALL_DIR_RESOURCE:STRING="src" \
|
||||
-D INSTALL_NAME_DIR:STRING="@executable_path/../Frameworks" \
|
||||
-D USE_FREETYPE:BOOL="$USE_FREETYPE" \
|
||||
-D 3RDPARTY_FREETYPE_DIR:PATH="$aFreeType" \
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="$aFreeType/include" \
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="$aFreeType/include" \
|
||||
-D 3RDPARTY_FREETYPE_LIBRARY_DIR:PATH="$aFreeType/lib" \
|
||||
-D USE_RAPIDJSON:BOOL="$USE_RAPIDJSON" \
|
||||
-D USE_RAPIDJSON:BOOL="ON" \
|
||||
-D 3RDPARTY_RAPIDJSON_DIR:PATH="$aRapidJson" \
|
||||
-D 3RDPARTY_RAPIDJSON_INCLUDE_DIR:PATH="$aRapidJson/include" \
|
||||
-D USE_DRACO:BOOL="$USE_DRACO" \
|
||||
-D 3RDPARTY_DRACO_DIR:PATH="$aDraco" \
|
||||
-D 3RDPARTY_DRACO_INCLUDE_DIR:FILEPATH="$aDraco/include" \
|
||||
-D 3RDPARTY_DRACO_LIBRARY_DIR:PATH="$aDraco/lib" \
|
||||
-D USE_FREEIMAGE:BOOL="$USE_FREEIMAGE" \
|
||||
-D 3RDPARTY_FREEIMAGE_DIR:PATH="$aFreeImage" \
|
||||
-D 3RDPARTY_FREEIMAGE_INCLUDE_DIR:FILEPATH="$aFreeImage/include" \
|
||||
|
@@ -3,7 +3,6 @@ export PATH=/Applications/CMake.app/Contents/bin:$PATH
|
||||
export aFreeType="$aSrcRoot/../3rdparty/freetype-2.10.4-ios"
|
||||
export aFreeImage="$aSrcRoot/../3rdparty/freeimage-3.18-ios"
|
||||
export aRapidJson="$aSrcRoot/../3rdparty/rapidjson-1.1.0"
|
||||
export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-ios"
|
||||
|
||||
# Uncomment to customize building steps
|
||||
#export toSimulator=0
|
||||
@@ -22,7 +21,6 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-ios"
|
||||
#export BUILD_DataExchange=ON
|
||||
|
||||
#export USE_RAPIDJSON=ON
|
||||
#export USE_DRACO=ON
|
||||
#export USE_FREEIMAGE=ON
|
||||
|
||||
#export IPHONEOS_DEPLOYMENT_TARGET=8.0
|
||||
|
@@ -17,7 +17,6 @@ export aBuildRoot=work
|
||||
export aFreeType=
|
||||
export aFreeImage=
|
||||
export aRapidJson=
|
||||
export aDraco=
|
||||
|
||||
# build stages to perform
|
||||
export toCMake=1
|
||||
@@ -36,7 +35,6 @@ export BUILD_Draw=ON
|
||||
|
||||
export USE_FREEIMAGE=ON
|
||||
export USE_RAPIDJSON=OFF
|
||||
export USE_DRACO=OFF
|
||||
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.10
|
||||
#export anAbi=arm64
|
||||
@@ -108,10 +106,6 @@ if [[ $toCMake == 1 ]]; then
|
||||
-D USE_RAPIDJSON:BOOL="$USE_RAPIDJSON" \
|
||||
-D 3RDPARTY_RAPIDJSON_DIR:PATH="$aRapidJson" \
|
||||
-D 3RDPARTY_RAPIDJSON_INCLUDE_DIR:PATH="$aRapidJson/include" \
|
||||
-D USE_DRACO:BOOL="$USE_DRACO" \
|
||||
-D 3RDPARTY_DRACO_DIR:PATH="$aDraco" \
|
||||
-D 3RDPARTY_DRACO_INCLUDE_DIR:FILEPATH="$aDraco/include" \
|
||||
-D 3RDPARTY_DRACO_LIBRARY_DIR:PATH="$aDraco/lib" \
|
||||
-D USE_FREEIMAGE:BOOL="$USE_FREEIMAGE" \
|
||||
-D 3RDPARTY_FREEIMAGE_DIR:PATH="$aFreeImage" \
|
||||
-D 3RDPARTY_FREEIMAGE_INCLUDE_DIR:FILEPATH="$aFreeImage/include" \
|
||||
|
@@ -3,7 +3,6 @@ export PATH=/Applications/CMake.app/Contents/bin:$PATH
|
||||
export aFreeType="$aSrcRoot/../3rdparty/freetype-2.10.4-macos"
|
||||
export aFreeImage="$aSrcRoot/../3rdparty/freeimage-3.18-macos"
|
||||
export aRapidJson="$aSrcRoot/../3rdparty/rapidjson-1.1.0"
|
||||
export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-macos"
|
||||
|
||||
# Uncomment to customize building steps
|
||||
#export aBuildRoot=work
|
||||
@@ -21,7 +20,6 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-macos"
|
||||
#export BUILD_Draw=ON
|
||||
|
||||
#export USE_RAPIDJSON=ON
|
||||
#export USE_DRACO=ON
|
||||
#export USE_FREEIMAGE=ON
|
||||
|
||||
#export MACOSX_DEPLOYMENT_TARGET=10.10
|
||||
|
@@ -1,267 +0,0 @@
|
||||
@echo OFF
|
||||
|
||||
rem Auxiliary script for semi-automated building of OCCT for Mingw-w64 platform.
|
||||
rem mingw_custom.bat should be configured with paths to CMake, 3rd-parties and MinGW.
|
||||
|
||||
set "aCasSrc=%~dp0..\.."
|
||||
set "aBuildRoot=%aCasSrc%\work"
|
||||
|
||||
set aNbJobs=%NUMBER_OF_PROCESSORS%
|
||||
|
||||
rem Paths to 3rd-party tools and libraries
|
||||
set "aCmakeBin="
|
||||
set "aMingwVars="
|
||||
set "aFreeType="
|
||||
set "aFreeImage="
|
||||
set "aRapidJson="
|
||||
set "aDraco="
|
||||
set "aTclTk="
|
||||
|
||||
rem Build stages to perform
|
||||
set "toCMake=1"
|
||||
set "toClean=0"
|
||||
set "toMake=1"
|
||||
set "toInstall=1"
|
||||
set "toPack=0"
|
||||
set "toDebug=0"
|
||||
set "isStatic=0"
|
||||
|
||||
rem OCCT Modules to build
|
||||
set "BUILD_ModelingData=ON"
|
||||
set "BUILD_ModelingAlgorithms=ON"
|
||||
set "BUILD_Visualization=ON"
|
||||
set "BUILD_ApplicationFramework=ON"
|
||||
set "BUILD_DataExchange=ON"
|
||||
set "BUILD_Draw=ON"
|
||||
|
||||
rem Optional 3rd-party libraries to enable
|
||||
set "USE_FREETYPE=ON"
|
||||
set "USE_RAPIDJSON=OFF"
|
||||
set "USE_DRACO=OFF"
|
||||
set "USE_FREEIMAGE=ON"
|
||||
|
||||
rem Archive tool
|
||||
set "THE_7Z_PARAMS=-t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on"
|
||||
set "THE_7Z_PATH=%ProgramW6432%\7-Zip\7z.exe"
|
||||
|
||||
rem Configuration file
|
||||
if exist "%~dp0mingw_custom.bat" call "%~dp0mingw_custom.bat"
|
||||
|
||||
if not ["%aMingwVars%"] == [""] ( call "%aMingwVars%" )
|
||||
if not ["%aCmakeBin%"] == [""] ( set "PATH=%aCmakeBin%;%PATH%" )
|
||||
|
||||
set "anOcctVerSuffix="
|
||||
set "anOcctVersion=0.0.0"
|
||||
set "aGitBranch="
|
||||
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_DEVELOPMENT" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVerSuffix=%%i" )
|
||||
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_COMPLETE" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVersion=%%i" )
|
||||
for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
|
||||
|
||||
set "aBuildType=Release"
|
||||
set "aBuildTypePrefix="
|
||||
set "aLibType=Shared"
|
||||
if ["%isStatic%"] == ["1"] set "aLibType=Static"
|
||||
if ["%toDebug%"] == ["1"] (
|
||||
set "aBuildType=Debug"
|
||||
set "aBuildTypePrefix=-debug"
|
||||
)
|
||||
|
||||
call :cmakeGenerate
|
||||
if errorlevel 1 (
|
||||
if not ["%1"] == ["-nopause"] (
|
||||
pause
|
||||
)
|
||||
exit /B 1
|
||||
goto :eof
|
||||
)
|
||||
|
||||
for /F "skip=1 delims=" %%F in ('
|
||||
wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE
|
||||
') do (
|
||||
for /F "tokens=1-3" %%L in ("%%F") do (
|
||||
set DAY00=0%%L
|
||||
set MONTH00=0%%M
|
||||
set YEAR=%%N
|
||||
)
|
||||
)
|
||||
set DAY00=%DAY00:~-2%
|
||||
set MONTH00=%MONTH00:~-2%
|
||||
set "aRevision=-%YEAR%-%MONTH00%-%DAY00%"
|
||||
rem set "aRevision=-%aGitBranch%"
|
||||
set "anArchName=occt-%anOcctVersion%%anOcctVerSuffix%%aRevision%-mingw64%aBuildTypePrefix%"
|
||||
set "aTarget=%aBuildRoot%\%anArchName%"
|
||||
if ["%toPack%"] == ["1"] (
|
||||
echo Creating archive %anArchName%.7z
|
||||
rmdir /S /Q "%aTarget%"
|
||||
if not exist "%aTarget%" ( mkdir "%aTarget%" )
|
||||
if exist "%aBuildRoot%/%anArchName%.7z" del "%aBuildRoot%/%anArchName%.7z"
|
||||
xcopy /S /Y "%aDestDir%\*" "%aTarget%\"
|
||||
|
||||
echo Copying dependencies...
|
||||
for %%i in (libstdc++-6.dll libwinpthread-1.dll libgcc_s_seh-1.dll) do (
|
||||
if "%%~$PATH:i" == "" (
|
||||
echo "Error: could not find %%i"
|
||||
) else (
|
||||
xcopy /Y "%%~$PATH:i" "%aTarget%\win64\gcc\bin"
|
||||
)
|
||||
)
|
||||
|
||||
"%THE_7Z_PATH%" a -r %THE_7Z_PARAMS% "%aBuildRoot%/%anArchName%.7z" "%aTarget%"
|
||||
)
|
||||
if not ["%1"] == ["-nopause"] (
|
||||
pause
|
||||
)
|
||||
|
||||
goto :eof
|
||||
|
||||
:cmakeGenerate
|
||||
set "aPlatformAndCompiler=mingw64%aBuildTypePrefix%"
|
||||
set "aWorkDir=%aBuildRoot%\occt-%aPlatformAndCompiler%-make"
|
||||
set "aDestDir=%aBuildRoot%\occt-%aPlatformAndCompiler%"
|
||||
set "aLogFile=%aBuildRoot%\occt-%aPlatformAndCompiler%-build.log"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
if ["%toClean%"] == ["1"] (
|
||||
rmdir /S /Q %aWorkDir%"
|
||||
rmdir /S /Q %aDestDir%"
|
||||
)
|
||||
)
|
||||
if not exist "%aWorkDir%" ( mkdir "%aWorkDir%" )
|
||||
if exist "%aLogFile%" ( del "%aLogFile%" )
|
||||
|
||||
rem include some information about OCCT into archive
|
||||
echo ^<pre^>> "%aWorkDir%\VERSION.html"
|
||||
git status >> "%aWorkDir%\VERSION.html"
|
||||
git log -n 100 >> "%aWorkDir%\VERSION.html"
|
||||
echo ^</pre^>>> "%aWorkDir%\VERSION.html"
|
||||
|
||||
echo Start building OCCT for %aPlatformAndCompiler%
|
||||
echo Start building OCCT for %aPlatformAndCompiler%>> %aLogFile%
|
||||
|
||||
pushd "%aWorkDir%"
|
||||
|
||||
set "aTimeZERO=%TIME%"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
echo Configuring OCCT for MinGW-w64...
|
||||
cmake -G "MinGW Makefiles" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D BUILD_LIBRARY_TYPE:STRING="%aLibType%" ^
|
||||
-D INSTALL_DIR:PATH="%aDestDir%" ^
|
||||
-D INSTALL_DIR_INCLUDE:STRING="inc" ^
|
||||
-D INSTALL_DIR_RESOURCE:STRING="src" ^
|
||||
-D BUILD_DOC_Overview:BOOL="OFF" ^
|
||||
-D BUILD_MODULE_FoundationClasses:BOOL="ON" ^
|
||||
-D BUILD_MODULE_ModelingData:BOOL="%BUILD_ModelingData%" ^
|
||||
-D BUILD_MODULE_ModelingAlgorithms:BOOL="%BUILD_ModelingAlgorithms%" ^
|
||||
-D BUILD_MODULE_Visualization:BOOL="%BUILD_Visualization%" ^
|
||||
-D BUILD_MODULE_ApplicationFramework:BOOL="%BUILD_ApplicationFramework%" ^
|
||||
-D BUILD_MODULE_DataExchange:BOOL="%BUILD_DataExchange%" ^
|
||||
-D BUILD_MODULE_Draw:BOOL="%BUILD_Draw%" ^
|
||||
-D 3RDPARTY_TCL_DIR:PATH="%aTclTk%" ^
|
||||
-D 3RDPARTY_TCL_INCLUDE_DIR:FILEPATH="%aTclTk%/include" ^
|
||||
-D 3RDPARTY_TCL_LIBRARY_DIR:PATH="%aTclTk%/lib" ^
|
||||
-D 3RDPARTY_TCL_DLL_DIR:PATH="%aTclTk%/bin" ^
|
||||
-D 3RDPARTY_TK_DIR:PATH="%aTclTk%" ^
|
||||
-D 3RDPARTY_TK_INCLUDE_DIR:FILEPATH="%aTclTk%/include" ^
|
||||
-D 3RDPARTY_TK_LIBRARY_DIR:PATH="%aTclTk%/lib" ^
|
||||
-D 3RDPARTY_TK_DLL_DIR:PATH="%aTclTk%/bin" ^
|
||||
-D USE_D3D:BOOL="ON" ^
|
||||
-D USE_FREETYPE:BOOL="%USE_FREETYPE%" ^
|
||||
-D 3RDPARTY_FREETYPE_DIR:PATH="%aFreeType%" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="%aFreeType%/include" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="%aFreeType%/include" ^
|
||||
-D 3RDPARTY_FREETYPE_LIBRARY_DIR:PATH="%aFreeType%/lib" ^
|
||||
-D USE_FREEIMAGE:BOOL="%USE_FREEIMAGE%" ^
|
||||
-D 3RDPARTY_FREEIMAGE_DIR:PATH="%aFreeImage%" ^
|
||||
-D 3RDPARTY_FREEIMAGE_INCLUDE_DIR:FILEPATH="%aFreeImage%/include" ^
|
||||
-D 3RDPARTY_FREEIMAGE_LIBRARY_DIR:PATH="%aFreeImage%/lib" ^
|
||||
-D USE_RAPIDJSON:BOOL="%USE_RAPIDJSON%" ^
|
||||
-D 3RDPARTY_RAPIDJSON_DIR:PATH="%aRapidJson%" ^
|
||||
-D 3RDPARTY_RAPIDJSON_INCLUDE_DIR:PATH="%aRapidJson%/include" ^
|
||||
-D USE_DRACO:BOOL="%USE_DRACO%" ^
|
||||
-D 3RDPARTY_DRACO_DIR:PATH="%aDraco%" ^
|
||||
-D 3RDPARTY_DRACO_INCLUDE_DIR:FILEPATH="%aDraco%/include" ^
|
||||
-D 3RDPARTY_DRACO_LIBRARY_DIR:PATH="%aDraco%/lib" ^
|
||||
"%aCasSrc%"
|
||||
|
||||
if errorlevel 1 (
|
||||
popd
|
||||
exit /B 1
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
set "aTimeGEN=%TIME%"
|
||||
call :computeDuration %aTimeZERO% %aTimeGEN%
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
echo Generation time: %DURATION%
|
||||
echo Generation time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
|
||||
if ["%toClean%"] == ["1"] (
|
||||
mingw32-make clean
|
||||
)
|
||||
|
||||
if ["%toMake%"] == ["1"] (
|
||||
echo Building...
|
||||
mingw32-make -j %aNbJobs% 2>> "%aLogFile%"
|
||||
if errorlevel 1 (
|
||||
type "%aLogFile%"
|
||||
popd
|
||||
exit /B 1
|
||||
goto :eof
|
||||
)
|
||||
type "%aLogFile%"
|
||||
)
|
||||
set "aTimeBUILD=%TIME%"
|
||||
call :computeDuration %aTimeGEN% %aTimeBUILD%
|
||||
if ["%toMake%"] == ["1"] (
|
||||
echo Building time: %DURATION%
|
||||
echo Building time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
call :computeDuration %aTimeZERO% %aTimeBUILD%
|
||||
if ["%toMake%"] == ["1"] (
|
||||
echo Total building time: %DURATION%
|
||||
echo Total building time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
|
||||
if ["%toInstall%"] == ["1"] (
|
||||
echo Installing into %aDestDir%...
|
||||
mingw32-make install 2>> "%aLogFile%"
|
||||
copy /Y "%aWorkDir%\VERSION.html" "%aDestDir%\VERSION.html"
|
||||
)
|
||||
set "aTimeINSTALL=%TIME%"
|
||||
call :computeDuration "%aTimeBUILD%" "%aTimeINSTALL%"
|
||||
if ["%toInstall%"] == ["1"] (
|
||||
echo Install time: %DURATION%
|
||||
echo Install time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
|
||||
call :computeDuration "%aTimeZERO%" "%aTimeINSTALL%"
|
||||
echo Total time: %DURATION%
|
||||
echo Total time: %DURATION%>> "%aLogFile%"
|
||||
|
||||
popd
|
||||
goto :eof
|
||||
|
||||
:computeDuration
|
||||
set "aTimeFrom=%~1"
|
||||
set "aTimeEnd=%~2"
|
||||
rem handle time before 10AM (win10 - remove empty space at the beginning)
|
||||
if "%aTimeFrom:~0,1%"==" " set "aTimeFrom=%aTimeFrom:~1%"
|
||||
if "%aTimeEnd:~0,1%"==" " set "aTimeEnd=%aTimeEnd:~1%"
|
||||
rem handle time before 10AM (win7 - add 0 at the beginning)
|
||||
if "%aTimeFrom:~1,1%"==":" set "aTimeFrom=0%aTimeFrom%"
|
||||
if "%aTimeEnd:~1,1%"==":" set "aTimeEnd=0%aTimeEnd%"
|
||||
rem convert hours:minutes:seconds:ms into duration
|
||||
set /A aTimeFrom=(1%aTimeFrom:~0,2%-100)*360000 + (1%aTimeFrom:~3,2%-100)*6000 + (1%aTimeFrom:~6,2%-100)*100 + (1%aTimeFrom:~9,2%-100)
|
||||
set /A aTimeEnd= (1%aTimeEnd:~0,2%-100)*360000 + (1%aTimeEnd:~3,2%-100)*6000 + (1%aTimeEnd:~6,2%-100)*100 + (1%aTimeEnd:~9,2%-100)
|
||||
set /A aDurTotalSec=%aTimeEnd%-%aTimeFrom%
|
||||
if %aTimeEnd% LSS %aTimeFrom% set set /A aDurTotalSec=%aTimeFrom%-%aTimeEnd%
|
||||
set /A aDurHH=%aDurTotalSec% / 360000
|
||||
set /A aDurMM=(%aDurTotalSec% - %aDurHH%*360000) / 6000
|
||||
set /A aDurSS=(%aDurTotalSec% - %aDurHH%*360000 - %aDurMM%*6000) / 100
|
||||
if %aDurHH% LSS 10 set aDurHH=0%aDurHH%
|
||||
if %aDurMM% LSS 10 set aDurMM=0%aDurMM%
|
||||
if %aDurSS% LSS 10 set aDurSS=0%aDurSS%
|
||||
|
||||
set "DURATION=%aDurHH%:%aDurMM%:%aDurSS%"
|
||||
goto :eof
|
@@ -1,29 +0,0 @@
|
||||
rem Environment configuration template for mingw_build.bat (to be renamed as mingw_custom.bat)
|
||||
set "aCmakeBin=%ProgramW6432%\CMake\bin"
|
||||
set "aFreeType=%aCasSrc%/../3rdparty/freetype-2.6.3-mingw-64"
|
||||
set "aTclTk=%aCasSrc%/../3rdparty/tcltk-8.6.4-mingw-64"
|
||||
set "aFreeImage=%aCasSrc%/../3rdparty/freeimage-3.17-0-mingw-64"
|
||||
set "aRapidJson=%aCasSrc%/../3rdparty/rapidjson-1.1.0"
|
||||
set "aDraco=%aCasSrc%/../3rdparty/draco-1.4-1-mingw-64"
|
||||
|
||||
set "aMingwVars=c:\mingw-8.3.0-msys2\mingwvars.bat"
|
||||
|
||||
rem Uncomment to customize building steps
|
||||
rem set "aBuildRoot=work"
|
||||
rem set "toCMake=1"
|
||||
rem set "toClean=1"
|
||||
rem set "toMake=1"
|
||||
rem set "toInstall=1"
|
||||
rem set "toPack=1"
|
||||
rem set "toDebug=0"
|
||||
|
||||
rem set "BUILD_ModelingData=ON"
|
||||
rem set "BUILD_ModelingAlgorithms=ON"
|
||||
rem set "BUILD_Visualization=ON"
|
||||
rem set "BUILD_ApplicationFramework=ON"
|
||||
rem set "BUILD_DataExchange=ON"
|
||||
rem set "BUILD_Draw=ON"
|
||||
|
||||
rem set "USE_RAPIDJSON=ON"
|
||||
rem set "USE_DRACO=ON"
|
||||
rem set "USE_FREEIMAGE=ON"
|
@@ -4,110 +4,36 @@ rem Auxiliary script for semi-automated building of OCCT for WASM platform.
|
||||
rem wasm_custom.bat should be configured with paths to CMake, 3rd-parties and Emscripten SDK.
|
||||
rem FreeType should be specified as mandatory dependency.
|
||||
|
||||
set "aCasSrc=%~dp0..\.."
|
||||
set "aBuildRoot=%aCasSrc%\work"
|
||||
set "aSrcRoot=%~dp0..\.."
|
||||
set "aBuildRoot=work"
|
||||
|
||||
set aNbJobs=%NUMBER_OF_PROCESSORS%
|
||||
|
||||
rem Paths to 3rd-party tools and libraries
|
||||
set "aCmakeBin="
|
||||
set "aFreeType="
|
||||
set "aRapidJson="
|
||||
set "aDraco="
|
||||
set "aTcl="
|
||||
|
||||
rem Build stages to perform
|
||||
set "toCMake=1"
|
||||
set "toClean=0"
|
||||
set "toMake=1"
|
||||
set "toInstall=1"
|
||||
set "toPack=0"
|
||||
set "toDebug=0"
|
||||
set "toBuildSample=0"
|
||||
set "sourceMapBase="
|
||||
|
||||
rem OCCT Modules to build
|
||||
set "BUILD_ModelingData=ON"
|
||||
set "BUILD_ModelingAlgorithms=ON"
|
||||
set "BUILD_Visualization=ON"
|
||||
set "BUILD_ApplicationFramework=ON"
|
||||
set "BUILD_DataExchange=ON"
|
||||
set "BUILD_Draw=OFF"
|
||||
|
||||
rem Optional 3rd-party libraries to enable
|
||||
set "USE_FREETYPE=ON"
|
||||
set "USE_RAPIDJSON=OFF"
|
||||
set "USE_DRACO=OFF"
|
||||
set "USE_PTHREADS=OFF"
|
||||
|
||||
rem Archive tool
|
||||
set "THE_7Z_PARAMS=-t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on"
|
||||
set "THE_7Z_PATH=%ProgramW6432%\7-Zip\7z.exe"
|
||||
|
||||
rem Configuration file
|
||||
if exist "%~dp0wasm_custom.bat" call "%~dp0wasm_custom.bat"
|
||||
|
||||
call "%EMSDK_ROOT%\emsdk_env.bat"
|
||||
set "aToolchain=%EMSDK%/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
||||
if not ["%aCmakeBin%"] == [""] ( set "PATH=%aCmakeBin%;%PATH%" )
|
||||
|
||||
set "anOcctVerSuffix="
|
||||
set "anOcctVersion=0.0.0"
|
||||
set "aGitBranch="
|
||||
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_DEVELOPMENT" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVerSuffix=%%i" )
|
||||
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_COMPLETE" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVersion=%%i" )
|
||||
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_DEVELOPMENT" "%aSrcRoot%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVerSuffix=%%i" )
|
||||
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_COMPLETE" "%aSrcRoot%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVersion=%%i" )
|
||||
for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
|
||||
|
||||
set "aBuildType=Release"
|
||||
set "aBuildTypePrefix="
|
||||
set "anExtraCxxFlags="
|
||||
if /I ["%USE_PTHREADS%"] == ["ON"] (
|
||||
set "anExtraCxxFlags=-pthread"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-pthread"
|
||||
)
|
||||
if ["%toDebug%"] == ["1"] (
|
||||
set "aBuildType=Debug"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-debug"
|
||||
)
|
||||
|
||||
call :cmakeGenerate
|
||||
if errorlevel 1 (
|
||||
if not ["%1"] == ["-nopause"] (
|
||||
pause
|
||||
)
|
||||
exit /B 1
|
||||
goto :eof
|
||||
)
|
||||
|
||||
for /F "skip=1 delims=" %%F in ('
|
||||
wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE
|
||||
') do (
|
||||
for /F "tokens=1-3" %%L in ("%%F") do (
|
||||
set DAY00=0%%L
|
||||
set MONTH00=0%%M
|
||||
set YEAR=%%N
|
||||
)
|
||||
)
|
||||
set DAY00=%DAY00:~-2%
|
||||
set MONTH00=%MONTH00:~-2%
|
||||
set "aRevision=-%YEAR%-%MONTH00%-%DAY00%"
|
||||
rem set "aRevision=-%aGitBranch%"
|
||||
set "anArchName=occt-%anOcctVersion%%anOcctVerSuffix%%aRevision%-wasm32%aBuildTypePrefix%"
|
||||
set "aTarget=%aBuildRoot%\%anArchName%"
|
||||
if ["%toPack%"] == ["1"] (
|
||||
echo Creating archive %anArchName%.7z
|
||||
rmdir /S /Q "%aTarget%"
|
||||
if not exist "%aTarget%" ( mkdir "%aTarget%" )
|
||||
if exist "%aBuildRoot%/%anArchName%.7z" del "%aBuildRoot%/%anArchName%.7z"
|
||||
xcopy /S /Y "%aDestDir%\*" "%aTarget%\"
|
||||
|
||||
if ["%toBuildSample%"] == ["1"] (
|
||||
if not exist "%aTarget%\sample" ( mkdir "%aTarget%\sample" )
|
||||
xcopy /S /Y "%aDestDirSmpl%\*" "%aTarget%\sample\"
|
||||
)
|
||||
|
||||
"%THE_7Z_PATH%" a -r %THE_7Z_PARAMS% "%aBuildRoot%/%anArchName%.7z" "%aTarget%"
|
||||
)
|
||||
if not ["%1"] == ["-nopause"] (
|
||||
pause
|
||||
)
|
||||
@@ -115,34 +41,13 @@ if not ["%1"] == ["-nopause"] (
|
||||
goto :eof
|
||||
|
||||
:cmakeGenerate
|
||||
set "aPlatformAndCompiler=wasm32%aBuildTypePrefix%"
|
||||
set "aWorkDir=%aBuildRoot%\occt-%aPlatformAndCompiler%-make"
|
||||
set "aDestDir=%aBuildRoot%\occt-%aPlatformAndCompiler%"
|
||||
set "aLogFile=%aBuildRoot%\occt-%aPlatformAndCompiler%-build.log"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
if ["%toClean%"] == ["1"] (
|
||||
rmdir /S /Q %aWorkDir%"
|
||||
rmdir /S /Q %aDestDir%"
|
||||
)
|
||||
)
|
||||
set "aPlatformAndCompiler=wasm"
|
||||
set "aWorkDir=%aSrcRoot%\%aBuildRoot%\%aPlatformAndCompiler%-make"
|
||||
set "aDestDir=%aSrcRoot%\%aBuildRoot%\%aPlatformAndCompiler%"
|
||||
set "aLogFile=%aSrcRoot%\%aBuildRoot%\build-%aPlatformAndCompiler%.log"
|
||||
if not exist "%aWorkDir%" ( mkdir "%aWorkDir%" )
|
||||
if exist "%aLogFile%" ( del "%aLogFile%" )
|
||||
|
||||
set "aSrcRootSmpl=%aCasSrc%\samples\webgl"
|
||||
set "aWorkDirSmpl=%aBuildRoot%\sample-%aPlatformAndCompiler%-make"
|
||||
set "aDestDirSmpl=%aBuildRoot%\sample-%aPlatformAndCompiler%"
|
||||
set "aLogFileSmpl=%aBuildRoot%\sample-%aPlatformAndCompiler%-build.log"
|
||||
if ["%toBuildSample%"] == ["1"] (
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
if ["%toClean%"] == ["1"] (
|
||||
rmdir /S /Q %aWorkDirSmpl%"
|
||||
rmdir /S /Q %aDestDirSmpl%"
|
||||
)
|
||||
)
|
||||
if not exist "%aWorkDirSmpl%" ( mkdir "%aWorkDirSmpl%" )
|
||||
if exist "%aLogFileSmpl%" ( del "%aLogFileSmpl%" )
|
||||
)
|
||||
|
||||
rem include some information about OCCT into archive
|
||||
echo ^<pre^>> "%aWorkDir%\VERSION.html"
|
||||
git status >> "%aWorkDir%\VERSION.html"
|
||||
@@ -152,49 +57,30 @@ echo ^</pre^>>> "%aWorkDir%\VERSION.html"
|
||||
echo Start building OCCT for %aPlatformAndCompiler%
|
||||
echo Start building OCCT for %aPlatformAndCompiler%>> %aLogFile%
|
||||
|
||||
echo --->> %aLogFile%
|
||||
call emcc --version >> %aLogFile%
|
||||
echo --->> %aLogFile%
|
||||
|
||||
pushd "%aWorkDir%"
|
||||
|
||||
set "aTimeZERO=%TIME%"
|
||||
set aTimeZERO=%TIME%
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
echo Configuring OCCT for WASM...
|
||||
echo "Configuring OCCT for WASM..."
|
||||
cmake -G "MinGW Makefiles" ^
|
||||
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="%aToolchain%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="Release" ^
|
||||
-D BUILD_LIBRARY_TYPE:STRING="Static" ^
|
||||
-D CMAKE_CXX_FLAGS="%anExtraCxxFlags%" ^
|
||||
-D INSTALL_DIR:PATH="%aDestDir%" ^
|
||||
-D INSTALL_DIR_INCLUDE:STRING="inc" ^
|
||||
-D INSTALL_DIR_RESOURCE:STRING="src" ^
|
||||
-D 3RDPARTY_FREETYPE_DIR:PATH="%aFreeType%" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="%aFreeType%/include" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="%aFreeType%/include" ^
|
||||
-D BUILD_MODULE_FoundationClasses:BOOL="ON" ^
|
||||
-D BUILD_MODULE_ModelingData:BOOL="%BUILD_ModelingData%" ^
|
||||
-D BUILD_MODULE_ModelingAlgorithms:BOOL="%BUILD_ModelingAlgorithms%" ^
|
||||
-D BUILD_MODULE_Visualization:BOOL="%BUILD_Visualization%" ^
|
||||
-D BUILD_MODULE_ApplicationFramework:BOOL="%BUILD_ApplicationFramework%" ^
|
||||
-D BUILD_MODULE_DataExchange:BOOL="%BUILD_DataExchange%" ^
|
||||
-D BUILD_MODULE_Draw:BOOL="%BUILD_Draw%" ^
|
||||
-D BUILD_MODULE_Draw:BOOL="OFF" ^
|
||||
-D BUILD_DOC_Overview:BOOL="OFF" ^
|
||||
-D USE_FREETYPE:BOOL="%USE_FREETYPE%" ^
|
||||
-D 3RDPARTY_FREETYPE_DIR:PATH="%aFreeType%" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="%aFreeType%/include" ^
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="%aFreeType%/include" ^
|
||||
-D USE_RAPIDJSON:BOOL="%USE_RAPIDJSON%" ^
|
||||
-D 3RDPARTY_RAPIDJSON_DIR:PATH="%aRapidJson%" ^
|
||||
-D 3RDPARTY_RAPIDJSON_INCLUDE_DIR:PATH="%aRapidJson%/include" ^
|
||||
-D USE_DRACO:BOOL="%USE_DRACO%" ^
|
||||
-D 3RDPARTY_DRACO_DIR:PATH="%aDraco%" ^
|
||||
-D 3RDPARTY_DRACO_INCLUDE_DIR:FILEPATH="%aDraco%/include" ^
|
||||
-D 3RDPARTY_DRACO_LIBRARY_DIR:PATH="%aDraco%/lib" ^
|
||||
-D 3RDPARTY_DRACO_LIBRARY:FILEPATH="%aDraco%/lib/libdraco.a" ^
|
||||
-D USE_TK:BOOL="OFF" ^
|
||||
-D 3RDPARTY_TCL_DIR:PATH="%aTcl%" ^
|
||||
-D 3RDPARTY_TCL_INCLUDE_DIR:PATH="%aTcl%/include" ^
|
||||
-D 3RDPARTY_TCL_LIBRARY_DIR:PATH="%aTcl%/lib" ^
|
||||
-D 3RDPARTY_TCL_LIBRARY:FILEPATH="%aTcl%/lib/libtcl.a" ^
|
||||
"%aCasSrc%"
|
||||
"%aSrcRoot%"
|
||||
|
||||
if errorlevel 1 (
|
||||
popd
|
||||
@@ -202,115 +88,61 @@ if ["%toCMake%"] == ["1"] (
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
set "aTimeGEN=%TIME%"
|
||||
set aTimeGEN=%TIME%
|
||||
call :computeDuration %aTimeZERO% %aTimeGEN%
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
echo Generation time: %DURATION%
|
||||
echo Generation time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
|
||||
if ["%toClean%"] == ["1"] (
|
||||
if "%toClean%"=="1" (
|
||||
mingw32-make clean
|
||||
)
|
||||
|
||||
if ["%toMake%"] == ["1"] (
|
||||
if "%toMake%"=="1" (
|
||||
echo Building...
|
||||
mingw32-make -j %aNbJobs% 2>> "%aLogFile%"
|
||||
if errorlevel 1 (
|
||||
type "%aLogFile%"
|
||||
popd
|
||||
exit /B 1
|
||||
goto :eof
|
||||
)
|
||||
type "%aLogFile%"
|
||||
)
|
||||
set "aTimeBUILD=%TIME%"
|
||||
set aTimeBUILD=%TIME%
|
||||
call :computeDuration %aTimeGEN% %aTimeBUILD%
|
||||
if ["%toMake%"] == ["1"] (
|
||||
if "%toMake%"=="1" (
|
||||
echo Building time: %DURATION%
|
||||
echo Building time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
call :computeDuration %aTimeZERO% %aTimeBUILD%
|
||||
if ["%toMake%"] == ["1"] (
|
||||
if "%toMake%"=="1" (
|
||||
echo Total building time: %DURATION%
|
||||
echo Total building time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
|
||||
if ["%toInstall%"] == ["1"] (
|
||||
if "%toInstall%"=="1" (
|
||||
echo Installing into %aDestDir%...
|
||||
mingw32-make install 2>> "%aLogFile%"
|
||||
copy /Y "%aWorkDir%\VERSION.html" "%aDestDir%\VERSION.html"
|
||||
)
|
||||
set "aTimeINSTALL=%TIME%"
|
||||
call :computeDuration "%aTimeBUILD%" "%aTimeINSTALL%"
|
||||
if ["%toInstall%"] == ["1"] (
|
||||
set aTimeINSTALL=%TIME%
|
||||
call :computeDuration %aTimeBUILD% %aTimeINSTALL%
|
||||
if "%toInstall%"=="1" (
|
||||
echo Install time: %DURATION%
|
||||
echo Install time: %DURATION%>> "%aLogFile%"
|
||||
)
|
||||
|
||||
call :computeDuration "%aTimeZERO%" "%aTimeINSTALL%"
|
||||
call :computeDuration %aTimeZERO% %aTimeINSTALL%
|
||||
echo Total time: %DURATION%
|
||||
echo Total time: %DURATION%>> "%aLogFile%"
|
||||
|
||||
popd
|
||||
if ["%toBuildSample%"] == ["0"] (
|
||||
goto :eof
|
||||
)
|
||||
|
||||
pushd "%aWorkDirSmpl%"
|
||||
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
cmake -G "MinGW Makefiles" ^
|
||||
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="%aToolchain%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D CMAKE_CXX_FLAGS="%anExtraCxxFlags%" ^
|
||||
-D CMAKE_INSTALL_PREFIX:PATH="%aDestDirSmpl%" ^
|
||||
-D SOURCE_MAP_BASE:STRING="%sourceMapBase%" ^
|
||||
-D OpenCASCADE_DIR:PATH="%aDestDir%/lib/cmake/opencascade" ^
|
||||
-D freetype_DIR:PATH="%aFreeType%/lib/cmake/freetype" ^
|
||||
"%aSrcRootSmpl%"
|
||||
|
||||
if errorlevel 1 (
|
||||
popd
|
||||
pause
|
||||
exit /B
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
if ["%toClean%"] == ["1"] (
|
||||
mingw32-make clean
|
||||
)
|
||||
|
||||
if ["%toMake%"] == ["1"] (
|
||||
echo Building...
|
||||
mingw32-make -j %aNbJobs% 2>> "%aLogFileSmpl%"
|
||||
if errorlevel 1 (
|
||||
type "%aLogFileSmpl%"
|
||||
popd
|
||||
pause
|
||||
exit /B
|
||||
goto :eof
|
||||
)
|
||||
type "%aLogFileSmpl%"
|
||||
)
|
||||
|
||||
if ["%toInstall%"] == ["1"] (
|
||||
mingw32-make install 2>> "%aLogFileSmpl%"
|
||||
if errorlevel 1 (
|
||||
type "%aLogFileSmpl%"
|
||||
popd
|
||||
pause
|
||||
exit /B
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
popd
|
||||
|
||||
goto :eof
|
||||
|
||||
:computeDuration
|
||||
set "aTimeFrom=%~1"
|
||||
set "aTimeEnd=%~2"
|
||||
set aTimeFrom=%1
|
||||
set aTimeEnd=%2
|
||||
rem handle time before 10AM (win10 - remove empty space at the beginning)
|
||||
if "%aTimeFrom:~0,1%"==" " set "aTimeFrom=%aTimeFrom:~1%"
|
||||
if "%aTimeEnd:~0,1%"==" " set "aTimeEnd=%aTimeEnd:~1%"
|
||||
|
@@ -1,29 +1,16 @@
|
||||
rem Environment configuration template for wasm_build.bat (to be renamed as wasm_custom.bat)
|
||||
set "EMSDK_ROOT=%aCasSrc%\..\emsdk"
|
||||
set "aFreeType=%aCasSrc%\..\3rdparty\freetype-2.7.1-wasm32"
|
||||
rem set "aRapidJson=%aCasSrc%\..\3rdparty\rapidjson-1.1.0"
|
||||
rem set "aDraco=%aCasSrc%\..\3rdparty\draco-1.4.1-wasm32"
|
||||
rem set "aCmakeBin=%ProgramW6432%\CMake\bin"
|
||||
rem Environment configuration template for occ_build_wasm.bat (to be renamed as wasm_custom_env.bat)
|
||||
set "aFreeType=%aSrcRoot%\..\3rdparty\freetype-2.7.1-wasm"
|
||||
set "EMSDK_ROOT=%aSrcRoot%\..\emsdk"
|
||||
|
||||
rem Uncomment to customize building steps
|
||||
rem set "aBuildRoot=work"
|
||||
rem set "toCMake=1"
|
||||
rem set "toClean=1"
|
||||
rem set "toClean=0"
|
||||
rem set "toMake=1"
|
||||
rem set "toInstall=1"
|
||||
rem set "toPack=1"
|
||||
rem set "toDebug=1"
|
||||
rem set "toBuildSample=1"
|
||||
rem Source map base (should point to server where C++ sources will be copied)
|
||||
rem enables -g4 debug building option for WebGL sample and allows navigating C++ source code within JavaScript debugger.
|
||||
rem set "sourceMapBase=http://localhost:9090/"
|
||||
|
||||
rem set "BUILD_ModelingData=ON"
|
||||
rem set "BUILD_ModelingAlgorithms=ON"
|
||||
rem set "BUILD_Visualization=ON"
|
||||
rem set "BUILD_ApplicationFramework=ON"
|
||||
rem set "BUILD_DataExchange=ON"
|
||||
|
||||
rem set "USE_RAPIDJSON=ON"
|
||||
rem set "USE_DRACO=ON"
|
||||
rem set "USE_PTHREADS=ON"
|
||||
|
@@ -1,117 +0,0 @@
|
||||
@echo OFF
|
||||
|
||||
rem Auxiliary script for semi-automated building of WebGL sample.
|
||||
rem wasm_custom.bat should be configured with paths to CMake, 3rd-parties and Emscripten SDK.
|
||||
rem FreeType should be specified as mandatory dependency.
|
||||
|
||||
set "aCasSrc=%~dp0..\.."
|
||||
set "aBuildRoot=%aCasSrc%\work"
|
||||
|
||||
set aNbJobs=%NUMBER_OF_PROCESSORS%
|
||||
|
||||
rem Paths to 3rd-party tools and libraries
|
||||
set "aCmakeBin="
|
||||
set "aFreeType="
|
||||
|
||||
rem Build stages to perform
|
||||
set "toCMake=1"
|
||||
set "toClean=0"
|
||||
set "toMake=1"
|
||||
set "toInstall=1"
|
||||
set "toDebug=0"
|
||||
set "sourceMapBase="
|
||||
|
||||
set "USE_PTHREADS=OFF"
|
||||
|
||||
rem Configuration file
|
||||
if exist "%~dp0wasm_custom.bat" call "%~dp0wasm_custom.bat"
|
||||
|
||||
call "%EMSDK_ROOT%\emsdk_env.bat"
|
||||
set "aToolchain=%EMSDK%/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
|
||||
if not ["%aCmakeBin%"] == [""] ( set "PATH=%aCmakeBin%;%PATH%" )
|
||||
|
||||
set "aBuildType=Release"
|
||||
set "aBuildTypePrefix="
|
||||
set "anExtraCxxFlags="
|
||||
if /I ["%USE_PTHREADS%"] == ["ON"] (
|
||||
set "anExtraCxxFlags=-pthread"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-pthread"
|
||||
)
|
||||
if ["%toDebug%"] == ["1"] (
|
||||
set "aBuildType=Debug"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-debug"
|
||||
)
|
||||
|
||||
call :cmakeGenerate
|
||||
if not ["%1"] == ["-nopause"] (
|
||||
pause
|
||||
)
|
||||
|
||||
goto :eof
|
||||
|
||||
:cmakeGenerate
|
||||
set "aPlatformAndCompiler=wasm32%aBuildTypePrefix%"
|
||||
set "aDestDirOcct=%aBuildRoot%\occt-%aPlatformAndCompiler%"
|
||||
set "aSrcRootSmpl=%aCasSrc%\samples\webgl"
|
||||
set "aWorkDirSmpl=%aBuildRoot%\sample-%aPlatformAndCompiler%-make"
|
||||
set "aDestDirSmpl=%aBuildRoot%\sample-%aPlatformAndCompiler%"
|
||||
set "aLogFileSmpl=%aBuildRoot%\sample-%aPlatformAndCompiler%-build.log"
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
if ["%toClean%"] == ["1"] (
|
||||
rmdir /S /Q %aWorkDirSmpl%"
|
||||
rmdir /S /Q %aDestDirSmpl%"
|
||||
)
|
||||
)
|
||||
if not exist "%aWorkDirSmpl%" ( mkdir "%aWorkDirSmpl%" )
|
||||
if exist "%aLogFileSmpl%" ( del "%aLogFileSmpl%" )
|
||||
|
||||
pushd "%aWorkDirSmpl%"
|
||||
|
||||
if ["%toCMake%"] == ["1"] (
|
||||
cmake -G "MinGW Makefiles" ^
|
||||
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="%aToolchain%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D CMAKE_CXX_FLAGS="%anExtraCxxFlags%" ^
|
||||
-D CMAKE_INSTALL_PREFIX:PATH="%aDestDirSmpl%" ^
|
||||
-D SOURCE_MAP_BASE:STRING="%sourceMapBase%" ^
|
||||
-D OpenCASCADE_DIR:PATH="%aDestDirOcct%/lib/cmake/opencascade" ^
|
||||
-D freetype_DIR:PATH="%aFreeType%/lib/cmake/freetype" ^
|
||||
"%aSrcRootSmpl%"
|
||||
|
||||
if errorlevel 1 (
|
||||
popd
|
||||
pause
|
||||
exit /B
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
if ["%toClean%"] == ["1"] (
|
||||
mingw32-make clean
|
||||
)
|
||||
|
||||
if ["%toMake%"] == ["1"] (
|
||||
echo Building...
|
||||
mingw32-make -j %aNbJobs% 2>> "%aLogFileSmpl%"
|
||||
if errorlevel 1 (
|
||||
type "%aLogFileSmpl%"
|
||||
popd
|
||||
pause
|
||||
exit /B
|
||||
goto :eof
|
||||
)
|
||||
type "%aLogFileSmpl%"
|
||||
)
|
||||
|
||||
if ["%toInstall%"] == ["1"] (
|
||||
mingw32-make install 2>> "%aLogFileSmpl%"
|
||||
if errorlevel 1 (
|
||||
type "%aLogFileSmpl%"
|
||||
popd
|
||||
pause
|
||||
exit /B
|
||||
goto :eof
|
||||
)
|
||||
)
|
||||
popd
|
||||
|
||||
goto :eof
|
@@ -17,8 +17,6 @@ set "ARCH=64"
|
||||
set "VCVARS="
|
||||
set "HAVE_TBB=false"
|
||||
set "HAVE_OPENCL=false"
|
||||
set "HAVE_TK=true"
|
||||
set "HAVE_FREETYPE=true"
|
||||
set "HAVE_FREEIMAGE=false"
|
||||
set "HAVE_FFMPEG=false"
|
||||
set "HAVE_VTK=false"
|
||||
@@ -27,7 +25,6 @@ set "HAVE_D3D=false"
|
||||
set "HAVE_ZLIB=false"
|
||||
set "HAVE_LIBLZMA=false"
|
||||
set "HAVE_RAPIDJSON=false"
|
||||
set "HAVE_DRACO=false"
|
||||
set "HAVE_OPENVR=false"
|
||||
set "HAVE_E57=false"
|
||||
set "CSF_OPT_INC="
|
||||
@@ -35,14 +32,6 @@ set "CSF_OPT_LIB32="
|
||||
set "CSF_OPT_LIB64="
|
||||
set "CSF_OPT_BIN32="
|
||||
set "CSF_OPT_BIN64="
|
||||
set "CSF_OPT_LIB32D="
|
||||
set "CSF_OPT_LIB64D="
|
||||
set "CSF_OPT_BIN32D="
|
||||
set "CSF_OPT_BIN64D="
|
||||
set "CSF_OPT_LIB32I="
|
||||
set "CSF_OPT_LIB64I="
|
||||
set "CSF_OPT_BIN32I="
|
||||
set "CSF_OPT_BIN64I="
|
||||
set "CSF_DEFINES=%CSF_DEFINES_EXTRA%"
|
||||
|
||||
if not ["%CASROOT%"] == [""] if exist "%SCRIPTROOT%\%CASROOT%" set "CASROOT=%SCRIPTROOT%\%CASROOT%"
|
||||
@@ -67,9 +56,9 @@ rem Decode VCVER variable and define related ones:
|
||||
rem
|
||||
rem VCFMT - "vc" followed by full version number of Visual Studio toolset
|
||||
rem (same as VCVER without optional suffix "-uwp")
|
||||
rem VCLIB - name of folder containing binaries
|
||||
rem VCLIB - name of folder contining binaries
|
||||
rem (same as VCVER except without third version in number)
|
||||
rem VCPROP - name of required Visual Studio Workload (starting with VS 2017)
|
||||
rem VCPROP - name of required Visual Studion Workload (starting with VS 2017)
|
||||
rem
|
||||
rem Note that for VS before 2015 (vc14) always
|
||||
rem VCFMT=VCLIB=VCVER and VCPROP=NativeDesktop
|
||||
@@ -121,12 +110,8 @@ if not "%DevEnvDir%" == "" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "DevEnvDir=%%i\Common7\IDE\"
|
||||
)
|
||||
) else if /I "%VCFMT%" == "vc143" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[17.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "DevEnvDir=%%i\Common7\IDE\"
|
||||
)
|
||||
) else if /I "%VCFMT%" == "vclang" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "DevEnvDir=%%i\Common7\IDE\"
|
||||
)
|
||||
) else if /I "%VCFMT%" == "gcc" (
|
||||
@@ -141,7 +126,6 @@ if not "%DevEnvDir%" == "" (
|
||||
echo vc14 = VS 2015
|
||||
echo vc141 = VS 2017
|
||||
echo vc142 = VS 2019
|
||||
echo vc143 = VS 2022
|
||||
echo vclang = VS 2019 with ClangCL toolset
|
||||
exit /B
|
||||
)
|
||||
@@ -172,15 +156,10 @@ if /I "%VCFMT%" == "vc9" (
|
||||
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
set "VCPlatformToolSet=v142"
|
||||
) else if /I "%VCFMT%" == "vc143" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[17.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
) else if /I "%VCFMT%" == "vclang" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
set "VCPlatformToolSet=v143"
|
||||
) else if /I "%VCFMT%" == "vclang" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
set "VCPlatformToolSet=ClangCL"
|
||||
) else if /I "%VCFMT%" == "gcc" (
|
||||
rem MinGW
|
||||
@@ -189,31 +168,28 @@ if /I "%VCFMT%" == "vc9" (
|
||||
exit /B
|
||||
)
|
||||
|
||||
if ["%CSF_OPT_LIB32D%"] == [""] set "CSF_OPT_LIB32D=%CSF_OPT_LIB32%"
|
||||
if ["%CSF_OPT_LIB64D%"] == [""] set "CSF_OPT_LIB64D=%CSF_OPT_LIB64%"
|
||||
if ["%CSF_OPT_BIN32D%"] == [""] set "CSF_OPT_BIN32D=%CSF_OPT_BIN32%"
|
||||
if ["%CSF_OPT_BIN64D%"] == [""] set "CSF_OPT_BIN64D=%CSF_OPT_BIN64%"
|
||||
if ["%CSF_OPT_LIB32I%"] == [""] set "CSF_OPT_LIB32I=%CSF_OPT_LIB32%"
|
||||
if ["%CSF_OPT_LIB64I%"] == [""] set "CSF_OPT_LIB64I=%CSF_OPT_LIB64%"
|
||||
if ["%CSF_OPT_BIN32I%"] == [""] set "CSF_OPT_BIN32I=%CSF_OPT_BIN32%"
|
||||
if ["%CSF_OPT_BIN64I%"] == [""] set "CSF_OPT_BIN64I=%CSF_OPT_BIN64%"
|
||||
set "CSF_OPT_LIB32D=%CSF_OPT_LIB32%"
|
||||
set "CSF_OPT_LIB64D=%CSF_OPT_LIB64%"
|
||||
set "CSF_OPT_BIN32D=%CSF_OPT_BIN32%"
|
||||
set "CSF_OPT_BIN64D=%CSF_OPT_BIN64%"
|
||||
set "CSF_OPT_LIB32I=%CSF_OPT_LIB32%"
|
||||
set "CSF_OPT_LIB64I=%CSF_OPT_LIB64%"
|
||||
set "CSF_OPT_BIN32I=%CSF_OPT_BIN32%"
|
||||
set "CSF_OPT_BIN64I=%CSF_OPT_BIN64%"
|
||||
|
||||
rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
|
||||
set "CSF_OPT_CMPL="
|
||||
set "PRODUCTS_DEFINES="
|
||||
if ["%HAVE_TBB%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_TBB" & set "CSF_DEFINES=HAVE_TBB;%CSF_DEFINES%"
|
||||
if ["%HAVE_OPENCL%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_OPENCL" & set "CSF_DEFINES=HAVE_OPENCL;%CSF_DEFINES%"
|
||||
if ["%HAVE_TK%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_TK" & set "CSF_DEFINES=HAVE_TK;%CSF_DEFINES%"
|
||||
if ["%HAVE_FREETYPE%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FREEIMAGE" & set "CSF_DEFINES=HAVE_FREETYPE;%CSF_DEFINES%"
|
||||
if ["%HAVE_FREEIMAGE%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FREEIMAGE" & set "CSF_DEFINES=HAVE_FREEIMAGE;%CSF_DEFINES%"
|
||||
if ["%HAVE_FFMPEG%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_FFMPEG" & set "CSF_DEFINES=HAVE_FFMPEG;%CSF_DEFINES%"
|
||||
if ["%HAVE_VTK%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_VTK" & set "CSF_DEFINES=HAVE_VTK;%CSF_DEFINES%"
|
||||
if ["%HAVE_GLES2%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_GLES2_EXT" & set "CSF_DEFINES=HAVE_GLES2_EXT;%CSF_DEFINES%"
|
||||
if ["%HAVE_GLES2%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_GLES2" & set "CSF_DEFINES=HAVE_GLES2;%CSF_DEFINES%"
|
||||
if ["%HAVE_D3D%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_D3D" & set "CSF_DEFINES=HAVE_D3D;%CSF_DEFINES%"
|
||||
if ["%HAVE_ZLIB%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_ZLIB" & set "CSF_DEFINES=HAVE_ZLIB;%CSF_DEFINES%"
|
||||
if ["%HAVE_LIBLZMA%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_LIBLZMA" & set "CSF_DEFINES=HAVE_LIBLZMA;%CSF_DEFINES%"
|
||||
if ["%HAVE_RAPIDJSON%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_RAPIDJSON" & set "CSF_DEFINES=HAVE_RAPIDJSON;%CSF_DEFINES%"
|
||||
if ["%HAVE_DRACO%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_DRACO" & set "CSF_DEFINES=HAVE_DRACO;%CSF_DEFINES%"
|
||||
if ["%HAVE_OPENVR%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_OPENVR" & set "CSF_DEFINES=HAVE_OPENVR;%CSF_DEFINES%"
|
||||
if ["%HAVE_E57%"] == ["true"] set "PRODUCTS_DEFINES=%PRODUCTS_DEFINES% -DHAVE_E57" & set "CSF_DEFINES=HAVE_E57;%CSF_DEFINES%"
|
||||
|
||||
@@ -223,20 +199,20 @@ if ["%CSF_DEFINES%"] == [""] set "CSF_DEFINES=;"
|
||||
rem ----- Optional 3rd-parties should be enabled by HAVE macros -----
|
||||
if not ["%PRODUCTS_DEFINES%"] == [""] set "CSF_OPT_CMPL=%CSF_OPT_CMPL% %PRODUCTS_DEFINES%"
|
||||
|
||||
rem ----- Collect 3rd-parties additional include paths into compiler options -----
|
||||
rem ----- Colect 3rd-parties additional include paths into compiler options -----
|
||||
for %%a in ("%CSF_OPT_INC:;=";"%") do (
|
||||
set "anItem=%%~a"
|
||||
if not ["%%~a"] == [""] call :concatCmplInc %%~a
|
||||
)
|
||||
|
||||
rem ----- Collect 3rd-parties additional library paths (32-bit) into linker options -----
|
||||
rem ----- Colect 3rd-parties additional library paths (32-bit) into linker options -----
|
||||
set "OPT_LIB32="
|
||||
for %%a in ("%CSF_OPT_LIB32:;=";"%") do (
|
||||
set "anItem=%%~a"
|
||||
if not ["%%~a"] == [""] call :concatLib32 %%~a
|
||||
)
|
||||
|
||||
rem ----- Collect 3rd-parties additional library paths (64-bit) into linker options -----
|
||||
rem ----- Colect 3rd-parties additional library paths (64-bit) into linker options -----
|
||||
set "OPT_LIB64="
|
||||
for %%a in ("%CSF_OPT_LIB64:;=";"%") do (
|
||||
set "anItem=%%~a"
|
||||
@@ -268,7 +244,7 @@ if ["%CASDEB%"] == ["d"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64D%;%PAT
|
||||
if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["32"] set "PATH=%CSF_OPT_BIN32I%;%PATH%"
|
||||
if ["%CASDEB%"] == ["i"] if ["%ARCH%"] == ["64"] set "PATH=%CSF_OPT_BIN64I%;%PATH%"
|
||||
|
||||
rem ----- Set environment variables used by OCCT -----
|
||||
rem ----- Set envoronment variables used by OCCT -----
|
||||
set CSF_LANGUAGE=us
|
||||
set MMGT_CLEAR=1
|
||||
set "CSF_SHMessage=%CSF_OCCTResourcePath%\SHMessage"
|
||||
|
@@ -3,16 +3,12 @@
|
||||
# go to the script directory
|
||||
aScriptPath=${BASH_SOURCE%/*}; if [ -d "${aScriptPath}" ]; then cd "$aScriptPath"; fi; aScriptPath="$PWD";
|
||||
|
||||
aSystem=`uname -s`
|
||||
|
||||
# Reset values
|
||||
export CASROOT="__CASROOT__"
|
||||
export CASDEB=""
|
||||
export PRJFMT="";
|
||||
export HAVE_TBB="false";
|
||||
export HAVE_OPENCL="false";
|
||||
export HAVE_TK="true";
|
||||
export HAVE_FREETYPE="true";
|
||||
export HAVE_FREEIMAGE="false";
|
||||
export HAVE_FFMPEG="false";
|
||||
export HAVE_VTK="false";
|
||||
@@ -20,13 +16,9 @@ export HAVE_GLES2="false";
|
||||
export HAVE_ZLIB="false";
|
||||
export HAVE_LIBLZMA="false";
|
||||
export HAVE_RAPIDJSON="false";
|
||||
export HAVE_DRACO="false";
|
||||
export HAVE_OPENVR="false";
|
||||
export HAVE_E57="false";
|
||||
export HAVE_XLIB="true";
|
||||
if [ "$aSystem" == "Darwin" ]; then
|
||||
export HAVE_XLIB="false";
|
||||
fi
|
||||
export MACOSX_USE_GLX="false";
|
||||
export CSF_OPT_INC=""
|
||||
export CSF_OPT_LIB32=""
|
||||
export CSF_OPT_LIB64=""
|
||||
@@ -66,6 +58,7 @@ else
|
||||
export ARCH="64";
|
||||
fi
|
||||
|
||||
aSystem=`uname -s`
|
||||
if [ "$aSystem" == "Darwin" ]; then
|
||||
export WOKSTATION="mac";
|
||||
export ARCH="64";
|
||||
@@ -107,19 +100,17 @@ export CSF_OPT_CMPL=""
|
||||
# Optiona 3rd-parties should be enabled by HAVE macros
|
||||
if [ "$HAVE_TBB" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_TBB"; fi
|
||||
if [ "$HAVE_OPENCL" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_OPENCL"; fi
|
||||
if [ "$HAVE_TK" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_TK"; fi
|
||||
if [ "$HAVE_FREETYPE" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_FREETYPE"; fi
|
||||
if [ "$HAVE_FREEIMAGE" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_FREEIMAGE"; fi
|
||||
if [ "$HAVE_FFMPEG" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_FFMPEG"; fi
|
||||
if [ "$HAVE_GLES2" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_GLES2_EXT"; fi
|
||||
if [ "$HAVE_GLES2" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_GLES2"; fi
|
||||
if [ "$HAVE_VTK" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_VTK"; fi
|
||||
if [ "$HAVE_ZLIB" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_ZLIB"; fi
|
||||
if [ "$HAVE_LIBLZMA" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_LIBLZMA"; fi
|
||||
if [ "$HAVE_RAPIDJSON" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_RAPIDJSON"; fi
|
||||
if [ "$HAVE_DRACO" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_DRACO"; fi
|
||||
if [ "$HAVE_OPENVR" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_OPENVR"; fi
|
||||
if [ "$HAVE_E57" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_E57"; fi
|
||||
if [ "$HAVE_XLIB" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DHAVE_XLIB"; fi
|
||||
# Option to compile OCCT with X11 libs on Mac OS X
|
||||
if [ "$MACOSX_USE_GLX" == "true" ]; then export CSF_OPT_CMPL="${CSF_OPT_CMPL} -DMACOSX_USE_GLX"; fi
|
||||
|
||||
# To split string into array
|
||||
aDelimBack=$IFS
|
||||
|
@@ -90,7 +90,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
@@ -107,7 +107,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP__</AdditionalDependencies>
|
||||
@@ -138,7 +138,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<AssemblerListingLocation>.\..\..\..\win32\__VCVER__\objd\__TKNAM__/</AssemblerListingLocation>
|
||||
@@ -156,7 +156,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP_DEBUG__</AdditionalDependencies>
|
||||
@@ -186,7 +186,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
@@ -203,7 +203,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP__</AdditionalDependencies>
|
||||
@@ -234,7 +234,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<AssemblerListingLocation>.\..\..\..\win64\__VCVER__\objd\__TKNAM__/</AssemblerListingLocation>
|
||||
@@ -252,7 +252,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP_DEBUG__</AdditionalDependencies>
|
||||
|
@@ -85,7 +85,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
@@ -100,7 +100,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP__</AdditionalDependencies>
|
||||
@@ -130,7 +130,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<AssemblerListingLocation>.\..\..\..\win32\__VCVER__\objd\__XQTNAM__/</AssemblerListingLocation>
|
||||
@@ -146,7 +146,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP_DEBUG__</AdditionalDependencies>
|
||||
@@ -175,7 +175,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
@@ -190,7 +190,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;No_Exception;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP__</AdditionalDependencies>
|
||||
@@ -219,7 +219,7 @@
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ExceptionHandling>Async</ExceptionHandling>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<AssemblerListingLocation>.\..\..\..\win64\__VCVER__\objd\__XQTNAM__/</AssemblerListingLocation>
|
||||
@@ -235,7 +235,7 @@
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\inc;$(CSF_OPT_INC);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;__TKDEFINES__;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;$(CSF_DEFINES);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>__TKDEP_DEBUG__</AdditionalDependencies>
|
||||
|
@@ -94,7 +94,6 @@ GeomAdaptor_HCurve GeomAdaptor_Curve
|
||||
GeomAdaptor_HSurface GeomAdaptor_Surface
|
||||
GeomAdaptor_HSurfaceOfLinearExtrusion GeomAdaptor_SurfaceOfLinearExtrusion
|
||||
GeomAdaptor_HSurfaceOfRevolution GeomAdaptor_SurfaceOfRevolution
|
||||
PrsMgr_PresentationManager3d PrsMgr_PresentationManager
|
||||
|
||||
[tcollection]
|
||||
AdvApp2Var_SequenceOfNode
|
||||
|
@@ -370,7 +370,7 @@ proc upgrade {args} {
|
||||
}
|
||||
}
|
||||
|
||||
# search and rename the indices (old names) of @theNewNames with their values (new ones)
|
||||
# search and rename the indeces (old names) of @theNewNames with their values (new ones)
|
||||
# processes files that have @theExtensions only in @thePath folder
|
||||
proc Rename {thePath theExtensions theNewNames theCheckMode} {
|
||||
upvar $theNewNames aNewNames
|
||||
|
32
dox/build/build_3rdparty/building_3rdparty.md
vendored
@@ -265,18 +265,6 @@ There are two types of third-party products, which are necessary to build OCCT:
|
||||
* FreeImage 3.14.1 - 3.16.0;
|
||||
* VTK 6.1.0.
|
||||
|
||||
@subsection dev_guides__building_3rdparty_linux_4 Installation From Official Repositories
|
||||
|
||||
**Debian-based distributives**
|
||||
|
||||
All 3rd-party products required for building of OCCT could be installed
|
||||
from official repositories. You may install them from console using apt-get utility:
|
||||
|
||||
sudo apt-get install tcllib tklib tcl-dev tk-dev libfreetype-dev libx11-dev libgl1-mesa-dev libfreeimage-dev rapidjson-dev
|
||||
|
||||
Building is possible with C++ compliant compiler:
|
||||
|
||||
sudo apt-get install g++
|
||||
|
||||
@subsection dev_guides__building_3rdparty_linux_2_1 Tcl/Tk
|
||||
|
||||
@@ -451,6 +439,24 @@ Download the necessary archive from https://www.vtk.org/VTK/resources/software.h
|
||||
|
||||
make install
|
||||
|
||||
@subsection dev_guides__building_3rdparty_linux_4 Installation From Official Repositories
|
||||
|
||||
**Debian-based distributives**
|
||||
|
||||
All 3rd-party products required for building of OCCT could be installed
|
||||
from official repositories. You may install them from console using apt-get utility:
|
||||
|
||||
sudo apt-get install tcllib tklib tcl-dev tk-dev libfreetype-dev libxt-dev libxmu-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libfreeimage-dev libtbb-dev
|
||||
|
||||
To launch binaries built with WOK you need to install C shell and 32-bit libraries on x86_64 distributives:
|
||||
|
||||
# you may need to add i386 if not done already by command "dpkg --add-architecture i386"
|
||||
sudo apt-get install csh libstdc++6:i386 libxt6:i386 libxext6:i386 libxmu6:i386
|
||||
|
||||
Building is possible with C++ compliant compiler:
|
||||
|
||||
sudo apt-get install g++
|
||||
|
||||
@section build_3rdparty_macos Mac OS X
|
||||
|
||||
This document presents additional guidelines for building third-party products
|
||||
@@ -624,4 +630,4 @@ in *FREEIMAGE_SRC_DIR* by the corrected file, which you can find in attachment t
|
||||
|
||||
5. Clean temporary files
|
||||
|
||||
make clean
|
||||
make clean
|
@@ -3,25 +3,31 @@ Build OCCT {#build_upgrade__building_occt}
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Before building OCCT, make sure to have all required third-party libraries installed.
|
||||
@note Before building OCCT, make sure to have all required third-party libraries installed.
|
||||
The list of required libraries depends on what OCCT modules will be used, and your preferences.
|
||||
The typical minimum is **FreeType** (necessary for Visualization) and **Tcl/Tk** (for DRAW).
|
||||
The typical minimum is **Freetype** (necessary for Visualization) and **Tcl/Tk** (for DRAW).
|
||||
See @ref intro_req "requirements on 3rdparty libraries" for a full list.
|
||||
On OS X we recommend to use native libraries.
|
||||
|
||||
The easiest way to install third-party libraries is to download archive with pre-built binaries, corresponding to your target configuration,
|
||||
from [Development Portal](https://dev.opencascade.org/resources/download/3rd-party-components).
|
||||
You can also build third-party libraries from their sources, see @ref build_upgrade_building_3rdparty for instructions.
|
||||
@section build_occt_windows Windows
|
||||
|
||||
On Linux and macOS we recommend to use libraries maintained by distributive developers, when possible.
|
||||
@subsection build_occt_win_cmake Building with CMake tool
|
||||
|
||||
@section build_occt_win_cmake Building with CMake tool
|
||||
This article describes the **CMake**-based build process, which is now suggested as a standard way to produce the binaries of Open CASCADE Technology from sources. *OCCT requires CMake version 2.8.12 or later*.
|
||||
|
||||
This chapter describes the [CMake](https://cmake.org/download/)-based build process, which is now suggested as a standard way to produce the binaries of Open CASCADE Technology from sources.
|
||||
OCCT requires CMake version 2.8.12 or later.
|
||||
@note Compared to the previous (6.x) releases of Open CASCADE Technology, OCCT 7.x has a complete set of CMake scripts and projects, so that there is no need to use WOK anymore. Moreover, CMake gives you a powerful configuration tool, which allows to control many aspects of OCCT deployment. At the same time this tool is quite intuitive, which is a significant advantage over the legacy WOK utilities.
|
||||
|
||||
Here we describe the build procedure on the example of Windows platform with Visual Studio 2010.
|
||||
However, CMake is cross-platform and can be used to build OCCT on Linux and OS X in essentially the same way.
|
||||
|
||||
@note Before you start, make sure to have installed all 3-rd party products that you are going to use with OCCT; see @ref build_upgrade.
|
||||
|
||||
@subsubsection build_cmake_start Start CMake
|
||||
|
||||
CMake is a tool that generates the actual project files for the selected target build system (e.g. Unix makefiles) or IDE (e.g. Visual Studio 2010).
|
||||
Here we describe the build procedure on the example of Windows platform with Visual Studio 2010.
|
||||
However, CMake is cross-platform and can be used to build OCCT on Linux and macOS in essentially the same way.
|
||||
|
||||
For unexperienced users we recommend to start with *cmake-gui* -- a cross-platform GUI tool provided by CMake on Windows, Mac and Linux.
|
||||
A command-line alternative, *ccmake* can also be used.
|
||||
|
||||
CMake deals with three directories: source, build or binary and installation.
|
||||
|
||||
@@ -32,286 +38,272 @@ CMake deals with three directories: source, build or binary and installation.
|
||||
The good practice is not to use the source directory as a build one.
|
||||
Different configurations should be built in different build directories to avoid conflicts.
|
||||
It is however possible to choose one installation directory for several configurations of OCCT (differentiated by platform, bitness, compiler and build type), for example:
|
||||
|
||||
d:/occt/ -- the source directory
|
||||
d:/tmp/occt-build-vc10-x64 -- the build directory with the generated
|
||||
solution and other intermediate files created during a CMake tool working
|
||||
d:/occt-install -- the installation directory that is
|
||||
able to contain several OCCT configurations
|
||||
|
||||
d:/occt/ - the source directory
|
||||
d:/tmp/occt-build-vc10-x64 - the build directory with the generated
|
||||
solution and other intermediate files created during a CMake tool working
|
||||
d:/occt-install - the installation directory that is
|
||||
able to contain several OCCT configurations
|
||||
@subsubsection build_cmake_conf Configuration process
|
||||
|
||||
@subsection build_cmake_conf Configuration process
|
||||
|
||||
For unexperienced users we recommend to start with *cmake-gui* -- a cross-platform GUI tool provided by CMake on Windows, Mac and Linux.
|
||||
A command-line alternative, *ccmake* can also be used.
|
||||
|
||||
If the command-line tool is used, run the tool from the build directory with a single argument indicating the source (relative or absolute path) directory, and press *c* to configure:
|
||||
If the command-line tool is used, run the tool from the build directory with a single argument indicating the source (relative or absolute path) directory:
|
||||
|
||||
cd d:/tmp/occt-build-vc10-x64
|
||||
ccmake d:/occt
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image000.png}
|
||||
|
||||
If the GUI tool is used, run this tool without additional arguments and after that specify the source directory by clicking **Browse Source** and the build (binary) one by clicking **Browse Build**:
|
||||
Press *c* to configure.
|
||||
|
||||
All actions required in the configuration process with the GUI tool will be described below.
|
||||
|
||||
If the GUI tool is used, run this tool without additional arguments and after that specify the source directory by clicking **Browse Source** and the build (binary) one by clicking **Browse Build**.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image001.png}
|
||||
|
||||
@note Each configuration of the project should be built in its own directory.
|
||||
When building multiple configurations it is suggested to indicate in the name of build directories the system, bitness and compiler (e.g., <i>d:/occt/build/win32-vc10</i>).
|
||||
**Note**: Each configuration of the project should be built in its own directory. When building multiple configurations it is recommended to indicate in the name of build directories the system, bitness and compiler (e.g., <i>d:/occt/build/win32-vc10</i> ).
|
||||
|
||||
Once the source and build directories are selected, "Configure" button should be pressed in order to start manual configuration process.
|
||||
It begins with selection of a target configurator. It is "Visual Studio 10 2010 Win64" in our example.
|
||||
Once the source and build directories are selected, "Configure" button should be pressed in order to start manual configuration process. It begins with selection of a target configurator. It is "Visual Studio 10 2010 Win64" in our example.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image002.png}
|
||||
|
||||
@note To build OCCT for **Universal Windows Platform (UWP)** specify the path to toolchain file for cross-compiling <i>d:/occt/adm/templates/uwp.toolchain.config.cmake</i>.
|
||||
Alternatively, if you are using CMake from the command line add options `-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0`.
|
||||
Universal Windows Platform (UWP) is supported only on "Visual Studio 14 2015".
|
||||
File `CASROOT/samples/xaml/ReadMe.md` describes the building procedure of XAML (UWP) sample.
|
||||
To build OCCT for **Universal Windows Platform (UWP)** specify the path to toolchain file for cross-compiling <i>d:/occt/adm/templates/uwp.toolchain.config.cmake</i>.
|
||||
|
||||
Once "Finish" button is pressed, the first pass of the configuration process is executed.
|
||||
At the end of the process, CMake outputs the list of environment variables, which have to be properly specified for successful configuration.
|
||||
Alternatively, if you are using CMake from the command line add options -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 .
|
||||
|
||||
**Note**: Universal Windows Platform (UWP) is supported only on "Visual Studio 14 2015". File <i>d:/occt/samples/xaml/ReadMe.md</i> describes the building procedure of XAML (UWP) sample.
|
||||
|
||||
Once "Finish" button is pressed, the first pass of the configuration process is executed. At the end of the process, CMake outputs the list of environment variables, which have to be properly specified for successful configuration.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image003.png}
|
||||
|
||||
The error message provides some information about these variables.
|
||||
This message will appear after each pass of the process until all required variables are specified correctly.
|
||||
The error message provides some information about these variables. This message will appear after each pass of the process until all required variables are specified correctly.
|
||||
|
||||
The change of the state of some variables can lead to the appearance of new variables.
|
||||
The new variables appeared after the pass of the configuration process are highlighted with red color by CMake GUI tool.
|
||||
The change of the state of some variables can lead to the appearance of new variables. The new variables appeared after the pass of the configuration process are highlighted with red color by CMake GUI tool.
|
||||
|
||||
@note There is "grouped" option, which groups variables with a common prefix.
|
||||
Note: There is "grouped" option, which groups variables with a common prefix.
|
||||
|
||||
The following table gives the full list of environment variables used at the configuration stage:
|
||||
|
||||
| Variable | Type | Purpose |
|
||||
|----------|------|---------|
|
||||
| CMAKE_BUILD_TYPE | String | Specifies the build type on single-configuration generators (such as make). Possible values are Debug, Release and RelWithDebInfo |
|
||||
| USE_FREETYPE | Boolean | Indicates whether FreeType product should be used in OCCT for text rendering |
|
||||
| USE_FREEIMAGE | Boolean | Indicates whether FreeImage product should be used in OCCT visualization module for support of popular graphics image formats (PNG, BMP, etc.) |
|
||||
| USE_OPENVR | Boolean | Indicates whether OpenVR product should be used in OCCT visualization module for support of Virtual Reality |
|
||||
| USE_OPENGL | Boolean | Indicates whether TKOpenGl graphic driver using OpenGL library (desktop) should be built within OCCT visualization module |
|
||||
| USE_GLES2 | Boolean | Indicates whether TKOpenGles graphic driver using OpenGL ES library (embedded OpenGL) should be built within OCCT visualization module |
|
||||
| USE_RAPIDJSON | Boolean | Indicates whether RapidJSON product should be used in OCCT Data Exchange module for support of glTF mesh file format |
|
||||
| USE_DRACO | Boolean | Indicates whether Draco product should be used in OCCT Data Exchange module for support of Draco compression in glTF mesh file format |
|
||||
| USE_TK | Boolean | Indicates whether Tcl/Tk product should be used in OCCT Draw Harness module for user interface (in addition to Tcl, which is mandatory for Draw Harness) |
|
||||
| USE_TBB | Boolean | Indicates whether TBB (Threading Building Blocks) 3rd party is used or not. Note that OCCT remains parallel even without TBB product |
|
||||
| USE_VTK | Boolean | Indicates whether VTK 3rd party is used or not. OCCT comes with a bridge between CAD data representation and VTK by means of its dedicated VIS component (VTK Integration Services). You may skip this 3rd party unless you are planning to use VTK visualization for OCCT geometry. See the official documentation @ref occt_user_guides__vis for the details on VIS |
|
||||
| CMAKE_BUILD_TYPE | String | Specifies the build type on single-configuration generators (such as make). Possible values are Debug, Release and RelWithDebInfo |
|
||||
| USE_FREEIMAGE | Boolean flag | Indicates whether FreeImage product should be used in OCCT visualization module for support of popular graphics image formats (PNG, BMP, etc.) |
|
||||
| USE_RAPIDJSON | Boolean flag | Indicates whether RapidJSON product should be used in OCCT Data Exchange module for support of glTF mesh file format |
|
||||
| USE_TBB | Boolean flag | Indicates whether TBB 3rd party is used or not. TBB stands for Threading Building Blocks, the technology of Intel Corp, which comes with different mechanisms and patterns for injecting parallelism into your application. OCCT remains parallel even without TBB product |
|
||||
| USE_VTK | Boolean flag | Indicates whether VTK 3rd party is used or not. VTK stands for Visualization ToolKit, the technology of Kitware Inc intended for general-purpose scientific visualization. OCCT comes with a bridge between CAD data representation and VTK by means of its dedicated VIS component (VTK Integration Services). You may skip this 3rd party unless you are planning to use VTK visualization for OCCT geometry. See the official documentation @ref occt_user_guides__vis for the details on VIS |
|
||||
| 3RDPARTY_DIR | Path | Defines the root directory where all required 3rd party products will be searched. Once you define this path it is very convenient to click "Configure" button in order to let CMake automatically detect all necessary products|
|
||||
| 3RDPARTY_FREETYPE_* | Path | Path to FreeType binaries |
|
||||
| 3RDPARTY_FREETYPE_* | Path | Path to Freetype binaries |
|
||||
| 3RDPARTY_TCL_* 3RDPARTY_TK_* | Path | Path to Tcl/Tk binaries |
|
||||
| 3RDPARTY_FREEIMAGE* | Path | Path to FreeImage binaries |
|
||||
| 3RDPARTY_TBB* | Path | Path to TBB binaries |
|
||||
| 3RDPARTY_FREEIMAGE* | Path | Path to Freeimage binaries |
|
||||
| 3RDPARTY_TBB* | Path | Path to TBB binaries |
|
||||
| 3RDPARTY_VTK_* | Path | Path to VTK binaries |
|
||||
| BUILD_MODULE_<MODULE>| Boolean | Indicates whether the corresponding OCCT module should be built or not. It should be noted that some toolkits of a module can be built even if this module is not checked (this happens if some other modules depend on these toolkits). The main modules and their descriptions can be found in @ref user_guides |
|
||||
| BUILD_MODULE_<MODULE>| Boolean flag | Indicates whether the corresponding OCCT module should be built or not. It should be noted that some toolkits of a module can be built even if this module is not checked (this happens if some other modules depend on these toolkits). The main modules and their descriptions can be found in @ref user_guides |
|
||||
| BUILD_LIBRARY_TYPE | String | Specifies the type of library to be created. "Shared" libraries are linked dynamically and loaded at runtime. "Static" libraries are archives of object files used when linking other targets. Note that Draw Harness plugin system is incompatible with "Static" builds, and therefore it is disabled for these builds.|
|
||||
| BUILD_ADDITIONAL_TOOLKITS | String | Semicolon-separated individual toolkits to include into build process. If you want to build some particular libraries (toolkits) only, then you may uncheck all modules in the corresponding *BUILD_MODUE_\<MODULE\>* options and provide the list of necessary libraries here. Of course, all dependencies will be resolved automatically |
|
||||
| BUILD_YACCLEX | Boolean | Enables Flex/Bison lexical analyzers. OCCT source files relating to STEP reader and ExprIntrp functionality are generated automatically with Flex/Bison. Checking this option leads to automatic search of Flex/Bison binaries and regeneration of the mentioned files |
|
||||
| BUILD_SAMPLES_MFC | Boolean | Indicates whether MFC samples should be built together with OCCT. This option is only relevant to Windows platforms |
|
||||
| BUILD_SAMPLES_QT | Boolean | Indicates whether QT samples should be built together with OCCT. |
|
||||
| BUILD_Inspector | Boolean | Indicates whether Inspector should be built together with OCCT. |
|
||||
| BUILD_DOC_Overview | Boolean | Indicates whether OCCT overview documentation project should be created together with OCCT. It is not built together with OCCT. Checking this option leads to automatic search of Doxygen binaries. Its building calls Doxygen command to generate the documentation in HTML format |
|
||||
| BUILD_YACCLEX | Boolean flag | Enables Flex/Bison lexical analyzers. OCCT source files relating to STEP reader and ExprIntrp functionality are generated automatically with Flex/Bison. Checking this option leads to automatic search of Flex/Bison binaries and regeneration of the mentioned files |
|
||||
| BUILD_SAMPLES_MFC | Boolean flag | Indicates whether MFC samples should be built together with OCCT. This option is only relevant to Windows platforms |
|
||||
| BUILD_SAMPLES_QT | Boolean flag | Indicates whether QT samples should be built together with OCCT. |
|
||||
| BUILD_Inspector | Boolean flag | Indicates whether Inspector should be built together with OCCT. |
|
||||
| BUILD_DOC_Overview | Boolean flag | Indicates whether OCCT overview documentation project should be created together with OCCT. It is not built together with OCCT. Checking this option leads to automatic search of Doxygen binaries. Its building calls Doxygen command to generate the documentation in HTML format |
|
||||
| BUILD_PATCH | Path | Points to the directory recognized as a "patch" for OCCT. If specified, the files from this directory take precedence over the corresponding native OCCT sources. This way you are able to introduce patches to Open CASCADE Technology not affecting the original source distribution |
|
||||
| BUILD_WITH_DEBUG | Boolean | Enables extended messages of many OCCT algorithms, usually printed to cout. These include messages on internal errors and special cases encountered, timing, etc. |
|
||||
| BUILD_ENABLE_FPE_SIGNAL_HANDLER | Boolean | Enable/Disable the floating point exceptions (FPE) during DRAW execution only. Corresponding environment variable (CSF_FPE) can be changed manually in custom.bat/sh scripts without regeneration by CMake. |
|
||||
| BUILD_WITH_DEBUG | Boolean flag | Enables extended messages of many OCCT algorithms, usually printed to cout. These include messages on internal errors and special cases encountered, timing, etc. |
|
||||
| BUILD_ENABLE_FPE_SIGNAL_HANDLER | Boolean flag | Enable/Disable the floating point exceptions (FPE) during DRAW execution only. Corresponding environment variable (CSF_FPE) can be changed manually in custom.bat/sh scripts without regeneration by CMake. |
|
||||
| CMAKE_CONFIGURATION_TYPES | String | Semicolon-separated CMake configurations |
|
||||
| INSTALL_DIR | Path | Points to the installation directory. *INSTALL_DIR* is a synonym of *CMAKE_INSTALL_PREFIX*. The user can specify both *INSTALL_DIR* or *CMAKE_INSTALL_PREFIX* |
|
||||
| INSTALL_DIR_BIN | Path | Relative path to the binaries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_BIN}) |
|
||||
| INSTALL_DIR_SCRIPT | Path | Relative path to the scripts installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SCRIPT}) |
|
||||
| INSTALL_DIR_LIB | Path | Relative path to the libraries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_LIB}) |
|
||||
| INSTALL_DIR_INCLUDE | Path | Relative path to the includes installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_INCLUDE}) |
|
||||
| INSTALL_DIR | Path | Points to the installation directory. *INSTALL_DIR* is a synonym of *CMAKE_INSTALL_PREFIX*. The user can specify both *INSTALL_DIR* or *CMAKE_INSTALL_PREFIX* |
|
||||
| INSTALL_DIR_BIN | Path | Relative path to the binaries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_BIN}) |
|
||||
| INSTALL_DIR_SCRIPT | Path | Relative path to the scripts installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SCRIPT}) |
|
||||
| INSTALL_DIR_LIB | Path | Relative path to the libraries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_LIB}) |
|
||||
| INSTALL_DIR_INCLUDE | Path | Relative path to the includes installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_INCLUDE}) |
|
||||
| INSTALL_DIR_RESOURCE | Path | Relative path to the resources installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_RESOURCE}) |
|
||||
| INSTALL_DIR_LAYOUT | String | Defines the structure of OCCT files (binaries, resources, headers, etc.) for the install directory. Two variants are predefined: for Windows (standard OCCT layout) and for Unix operating systems (standard Linux layout). If needed, the layout can be customized with INSTALL_DIR_* variables |
|
||||
| INSTALL_DIR_DATA | Path | Relative path to the data files installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DATA}) |
|
||||
| INSTALL_DIR_SAMPLES | Path | Relative path to the samples installation directory. Note that only "samples/tcl" folder will be installed. (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SAMPLES}) |
|
||||
| INSTALL_DIR_TESTS | Path | Relative path to the tests installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_TESTS}) |
|
||||
| INSTALL_DIR_DOC | Path | Relative path to the documentation installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DOC}) |
|
||||
| INSTALL_FREETYPE | Boolean | Indicates whether FreeType binaries should be installed into the installation directory |
|
||||
| INSTALL_FREEIMAGE | Boolean | Indicates whether FreeImage binaries should be installed into the installation directory |
|
||||
| INSTALL_TBB | Boolean | Indicates whether TBB binaries should be installed into the installation directory |
|
||||
| INSTALL_VTK | Boolean | Indicates whether VTK binaries should be installed into the installation directory |
|
||||
| INSTALL_TCL | Boolean | Indicates whether TCL binaries should be installed into the installation directory |
|
||||
| INSTALL_TEST_CASES | Boolean | Indicates whether non-regression OCCT test scripts should be installed into the installation directory |
|
||||
| INSTALL_DOC_Overview | Boolean | Indicates whether OCCT overview documentation should be installed into the installation directory |
|
||||
| INSTALL_DIR_LAYOUT | String | Defines the structure of OCCT files (binaries, resources, headers, etc.) for the install directory. Two variants are predefined: for Windows (standard OCCT layout) and for Unix operating systems (standard Linux layout). If needed, the layout can be customized with INSTALL_DIR_* variables |
|
||||
| INSTALL_DIR_DATA | Path | Relative path to the data files installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DATA}) |
|
||||
| INSTALL_DIR_SAMPLES | Path | Relative path to the samples installation directory. Note that only "samples/tcl" folder will be installed. (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SAMPLES}) |
|
||||
| INSTALL_DIR_TESTS | Path | Relative path to the tests installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_TESTS}) |
|
||||
| INSTALL_DIR_DOC | Path | Relative path to the documentation installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DOC}) |
|
||||
| INSTALL_FREETYPE | Boolean flag | Indicates whether Freetype binaries should be installed into the installation directory |
|
||||
| INSTALL_FREEIMAGE* | Boolean flag | Indicates whether Freeimage binaries should be installed into the installation directory |
|
||||
| INSTALL_TBB | Boolean flag | Indicates whether TBB binaries should be installed into the installation directory |
|
||||
| INSTALL_VTK | Boolean flag | Indicates whether VTK binaries should be installed into the installation directory |
|
||||
| INSTALL_TCL | Boolean flag | Indicates whether TCL binaries should be installed into the installation directory |
|
||||
| INSTALL_TEST_CASES | Boolean flag | Indicates whether non-regression OCCT test scripts should be installed into the installation directory |
|
||||
| INSTALL_DOC_Overview | Boolean flag | Indicates whether OCCT overview documentation should be installed into the installation directory |
|
||||
|
||||
@note Only the forward slashes ("/") are acceptable in the CMake options defining paths.
|
||||
**Note:** Only the forward slashes ("/") are acceptable in the CMake options defining paths.
|
||||
|
||||
@subsubsection build_cmake_3rdparty 3rd party search mechanism
|
||||
|
||||
If `3RDPARTY_DIR` directory is defined, then required 3rd party binaries are sought in it, and default system folders are ignored.
|
||||
If *3RDPARTY_DIR* directory is defined, then required 3rd party binaries are sought in it, and default system folders are ignored.
|
||||
|
||||
The procedure expects to find binary and header files of each 3rd party product in its own sub-directory: *bin*, *lib* and *include*.
|
||||
|
||||
The results of the search (achieved on the next pass of the configuration process) are recorded in the corresponding variables:
|
||||
|
||||
* `3RDPARTY_<PRODUCT>_DIR` -- path to the 3rdparty directory (with directory name) (e.g. <i>D:/3rdparty/tcltk-86-32</i>);
|
||||
* `3RDPARTY_<PRODUCT>_LIBRARY_DIR` -- path to the directory containing a library (e.g. <i>D:/3rdparty/tcltk-86-32/lib</i>);
|
||||
* `3RDPARTY_<PRODUCT>_INCLUDE_DIR` -- path to the directory containing a header file (e.g., <i>D:/3rdparty/tcltk-86-32/include</i>);
|
||||
* `3RDPARTY_<PRODUCT>_DLL_DIR` -- path to the directory containing a shared library (e.g., <i>D:/3rdparty/tcltk-86-32/bin</i>) This variable is only relevant to Windows platforms.
|
||||
* *3RDPARTY_\<PRODUCT\>_DIR* -- path to the 3rdparty directory (with directory name) (e.g. <i>D:/3rdparty/tcltk-86-32</i>)
|
||||
* *3RDPARTY_\<PRODUCT\>_LIBRARY_DIR* -- path to the directory containing a library (e.g. <i>D:/3rdparty/tcltk-86-32/lib</i>).
|
||||
* *3RDPARTY_\<PRODUCT\>_INCLUDE_DIR* -- path to the directory containing a header file (e.g., <i>D:/3rdparty/tcltk-86-32/include</i>)
|
||||
* *3RDPARTY_\<PRODUCT\>_DLL_DIR* -- path to the directory containing a shared library (e.g., <i>D:/3rdparty/tcltk-86-32/bin</i>) This variable is only relevant to Windows platforms.
|
||||
|
||||
@note Each library and include directory should be children of the product directory if the last one is defined.
|
||||
Note: each library and include directory should be children of the product directory if the last one is defined.
|
||||
|
||||
The search process is as follows:
|
||||
|
||||
1. Common path: `3RDPARTY_DIR`
|
||||
2. Path to a particular 3rd-party library: `3RDPARTY_<PRODUCT>_DIR`
|
||||
1. Common path: *3RDPARTY_DIR*
|
||||
2. Path to a particular 3rd-party library: *3RDPARTY_\<PRODUCT\>_DIR*
|
||||
3. Paths to headers and binaries:
|
||||
1. `3RDPARTY_<PRODUCT>_INCLUDE_DIR`
|
||||
2. `3RDPARTY_<PRODUCT>_LIBRARY_DIR`
|
||||
3. `3RDPARTY_<PRODUCT>_DLL_DIR`
|
||||
1. *3RDPARTY_\<PRODUCT\>_INCLUDE_DIR*
|
||||
2. *3RDPARTY_\<PRODUCT\>_LIBRARY_DIR*
|
||||
3. *3RDPARTY_\<PRODUCT\>_DLL_DIR*
|
||||
|
||||
If a variable of any level is not defined (empty or `<variable name>-NOTFOUND`) and the upper level variable is defined, the content of the non-defined variable will be sought at the next configuration step.
|
||||
If the search process at level 3 does not find the required files, it seeks in default places.
|
||||
If a variable of any level is not defined (empty or <i> \<variable name\>-NOTFOUND </i>) and the upper level variable is defined, the content of the non-defined variable will be sought at the next configuration step. If the search process at level 3 does not find the required files, it seeks in default places.
|
||||
|
||||
If a search result (include path, or library path, or dll path) does not meet your expectations, you can change `3RDPARTY_<PRODUCT>_*_DIR` variable,
|
||||
clear (if they are not empty) `3RDPARTY_<PRODUCT>_DLL_DIR`, `3RDPARTY_<PRODUCT>_INCLUDE_DIR` and `3RDPARTY_<PRODUCT>_LIBRARY_DIR` variables (or clear one of them) and run the configuration process again.
|
||||
If a search result (include path, or library path, or dll path) does not meet your expectations, you can change *3RDPARTY_\<PRODUCT\>_*_DIR variable*, clear (if they are not empty) *3RDPARTY_\<PRODUCT\>_DLL_DIR, 3RDPARTY_\<PRODUCT\>_INCLUDE_DIR* and 3RDPARTY_\<PRODUCT\>_LIBRARY_DIR variables (or clear one of them) and run the configuration process again.
|
||||
|
||||
At this time the search will be performed in the newly identified directory and the result will be recorded to corresponding variables (replace old value if it is necessary).
|
||||
For example, `3RDPARTY_FREETYPE_DIR` variable
|
||||
At this time the search will be performed in the newly identified directory
|
||||
and the result will be recorded to corresponding variables (replace old value if it is necessary).
|
||||
|
||||
For example, *3RDPARTY_FREETYPE_DIR* variable
|
||||
|
||||
d:/3rdparty/freetype-2.4.10
|
||||
|
||||
can be changed to
|
||||
can be changed to
|
||||
|
||||
d:/3rdparty/freetype-2.5.3
|
||||
|
||||
During the configuration process the related variables (`3RDPARTY_FREETYPE_DLL_DIR`, `3RDPARTY_FREETYPE_INCLUDE_DIR` and `3RDPARTY_FREETYPE_LIBRARY_DIR`) will be filled with new found values.
|
||||
During the configuration process the related variables (*3RDPARTY_FREETYPE_DLL_DIR*, *3RDPARTY_FREETYPE_INCLUDE_DIR* and *3RDPARTY_FREETYPE_LIBRARY_DIR*) will be filled with new found values.
|
||||
|
||||
@note The names of searched libraries and header files are hard-coded.
|
||||
If there is the need to change their names, change appropriate CMake variables (edit CMakeCache.txt file or edit in cmake-gui in advance mode) without reconfiguration:
|
||||
`3RDPARTY_<PRODUCT>_INCLUDE` for include, `3RDPARTY_<PRODUCT>_LIB` for library and `3RDPARTY_<PRODUCT>_DLL` for shared library.
|
||||
**Note**: The names of searched libraries and header files are hard-coded. If there is the need to change their names, change appropriate cmake variables (edit CMakeCache.txt file or edit in cmake-gui in advance mode) without reconfiguration: *3RDPARTY_\<PRODUCT\>_INCLUDE* for include, *3RDPARTY_\<PRODUCT\>_LIB* for library and *3RDPARTY_\<PRODUCT\>_DLL* for shared library.
|
||||
|
||||
@subsection build_cmake_gen Projects generation
|
||||
@subsubsection build_cmake_gen Projects generation
|
||||
|
||||
Once the configuration process is done, the "Generate" button is used to prepare project files for the target IDE.
|
||||
In our exercise the Visual Studio solution will be automatically created in the build directory.
|
||||
|
||||
@subsection build_cmake_build Building
|
||||
@subsubsection build_cmake_build Building
|
||||
|
||||
Go to the build folder, start the Visual Studio solution *OCCT.sln* and build it by clicking **Build -> Build Solution**.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image004.png}
|
||||
|
||||
By default, the build solution process skips the building of the INSTALL and Overview projects.
|
||||
By default the build solution process skips the building of the INSTALL and Overview project.
|
||||
|
||||
When the building process is finished build:
|
||||
* *Overview* project to generate OCCT overview documentation (if `BUILD_DOC_Overview` variable is checked)
|
||||
* the *INSTALL* project to run the **installation process**
|
||||
* Overview project to generate OCCT overview documentation (if BUILD_DOC_Overview variable is checked)
|
||||
* the *INSTALL* project to run **the installation process**
|
||||
|
||||
For this, right-click on the *Overview/INSTALL* project and select **Project Only -> Build Only** -> *Overview/INSTALL* in the solution explorer.
|
||||
For this, right-click on the *Overview/INSTALL* project and select **Project Only -> Build Only** -> *Overview/INSTALL* in the solution explorer.
|
||||
|
||||
@subsection build_cmake_install Installation
|
||||
@subsubsection build_cmake_install Installation
|
||||
|
||||
Installation is a process of extracting redistributable resources (binaries, include files etc) from the build directory into the installation one.
|
||||
The installation directory will be free of project files, intermediate object files and any other information related to the build routines.
|
||||
Installation is a process of extracting redistributable resources (binaries, include files etc) from the build directory into the installation one. The installation directory will be free of project files, intermediate object files and any other information related to the build routines.
|
||||
|
||||
Normally you use the installation directory of OCCT to link against your specific application.
|
||||
|
||||
Normally you use the installation directory of OCCT to link against your specific application.
|
||||
The directory structure is as follows:
|
||||
|
||||
data -- data files for OCCT (brep, iges, stp)
|
||||
doc -- OCCT overview documentation in HTML format
|
||||
inc -- header files
|
||||
samples -- samples
|
||||
src -- all required source files for OCCT
|
||||
tests -- OCCT test suite
|
||||
win32\vc10\bind -- binary files (installed 3rdparties and occt)
|
||||
\libd -- libraries (installed 3rdparties and occt)
|
||||
|
||||
data - data files for OCCT (brep, iges, stp)
|
||||
doc - OCCT overview documentation in HTML format
|
||||
inc - header files
|
||||
samples - samples
|
||||
src - all required source files for OCCT
|
||||
tests - OCCT test suite
|
||||
win32\vc10\bind - binary files (installed 3rdparties and occt)
|
||||
\libd - libraries (installed 3rdparties and occt)
|
||||
|
||||
@note The above example is given for debug configuration.
|
||||
However, it is generally safe to use the same installation directory for the release build.
|
||||
In the latter case the contents of install directory will be enriched with subdirectories and files related to the release configuration.
|
||||
In particular, the binaries directory win64 will be expanded as follows:
|
||||
**Note:** The above example is given for debug configuration. However, it is generally safe to use the same installation directory for the release build. In the latter case the contents of install directory will be enriched with subdirectories and files related to the release configuration. In particular, the binaries directory win64 will be expanded as
|
||||
follows:
|
||||
|
||||
\win32\vc10\bind
|
||||
\libd
|
||||
\bin
|
||||
\lib
|
||||
|
||||
If CMake installation flags are enabled for the 3rd party products (e.g. `INSTALL_FREETYPE`), then the corresponding binaries will be copied to the same bin(d) and lib(d) directories together with the native binaries of OCCT.
|
||||
Such organization of libraries can be especially helpful if your OCCT-based software does not use itself the 3rd parties of Open CASCADE Technology (thus, there is no sense to pack them into dedicated directories).
|
||||
If CMake installation flags are enabled for the 3rd party products (e.g. INSTALL_FREETYPE), then the corresponding binaries will be copied to the same bin(d) and lib(d) directories together with the native binaries of OCCT. Such organization of libraries can be especially helpful if your OCCT-based software does not use itself the 3rd parties of Open CASCADE Technology (thus, there is no sense to pack them into dedicated directories).
|
||||
|
||||
The installation folder contains the scripts to run *DRAWEXE* (*draw.bat* or *draw.sh*), samples (if they were installed) and overview.html (short-cut for installed OCCT overview documentation).
|
||||
|
||||
@subsection build_occt_crossplatform_cmake Cross-compiling (Android)
|
||||
@subsection build_occt_win_codeblocks Building with Code::Blocks
|
||||
|
||||
This section describes the steps to build OCCT libraries for Android from a complete source package with GNU make (makefiles).
|
||||
The steps on Windows 7 and Ubuntu 15.10 are similar. There is the only one difference: makefiles are built with mingw32-make on Windows and native GNU make on Ubuntu.
|
||||
This file describes steps to build OCCT libraries from sources using **Code::Blocks**, a cross-platform IDE, using project files generated by OCCT legacy tool **genproj**.
|
||||
It can be used as an alternative to CMake build system (see @ref build_occt_win_cmake) for all supported platforms.
|
||||
|
||||
Required tools (download and install if it is required):
|
||||
- CMake 3.0+
|
||||
- [Cross-compilation toolchain for CMake](https://github.com/taka-no-me/android-cmake)
|
||||
- [Android NDK r12+](https://developer.android.com/ndk/downloads)
|
||||
- GNU Make: MinGW v4.82+ for [Windows](https://www.mingw-w64.org/), GNU Make 4.0 for Ubuntu.
|
||||
@subsubsection build_codeblocks_3rdparty Third-party libraries
|
||||
|
||||
Run GUI tool provided by CMake and:
|
||||
- Specify the root folder of OCCT (`$CASROOT`, which contains *CMakelists.txt* file) by clicking **Browse Source**.
|
||||
- Specify the location (build folder) for CMake generated project files by clicking **Browse Build**.
|
||||
Before building OCCT, make sure to have all the needed third-party libraries installed, see @ref build_upgrade.
|
||||
|
||||
@figure{/build/build_occt/images/android_image001.png}
|
||||
@subsubsection build_codeblocks_conf Configuration
|
||||
|
||||
Click **Configure** button. It opens the window with a drop-down list of generators supported by CMake project.
|
||||
Select "MinGW MakeFiles" item from the list
|
||||
- Choose "Specify toolchain file for cross-compiling", and click "Next".
|
||||
@figure{/build/build_occt/images/android_image002.png}
|
||||
Before building it is necessary to set up build environment.
|
||||
|
||||
- Specify a toolchain file at the next dialog to `android.toolchain.cmake`, and click "Finish".
|
||||
@figure{/build/build_occt/images/android_image003.png}
|
||||
The environment is defined in the file *custom.sh* (on Linux and OS X) or *custom.bat* (on Windows) which can be edited directly:
|
||||
|
||||
If `ANDROID_NDK` environment variable is not defined in current OS, add cache entry `ANDROID_NDK` (entry type is `PATH`) -- path to the NDK folder ("Add Entry" button):
|
||||
@figure{/build/build_occt/images/android_image004.png}
|
||||
|
||||
If on Windows the message is appeared:
|
||||
"CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles" CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.",
|
||||
specify `CMAKE_MAKE_PROGRAM` to mingw32-make executable.
|
||||
@figure{/build/build_occt/images/android_image005.png}
|
||||
|
||||
How to configure OCCT, see @ref build_cmake_conf "Configure" section taking into account the specific configuration variables for Android:
|
||||
- `ANDROID_ABI` = `armeabi-v7a`
|
||||
- `ANDROID_NATIVE_API_LEVEL` = `15`
|
||||
- `ANDROID_NDK_LAYOUT` is equal to `CMAKE_BUILD_TYPE` variable
|
||||
- `BUILD_MODULE_Draw` = `OFF`
|
||||
|
||||
@figure{/build/build_occt/images/android_image006.png}
|
||||
|
||||
Click **Generate** button and wait until the generation process is finished.
|
||||
Then makefiles will appear in the build folder (e.g. <i> D:/tmp/occt-android </i>).
|
||||
|
||||
Open console and go to the build folder. Type "mingw32-make" (Windows) or "make" (Ubuntu) to start build process:
|
||||
> mingw32-make
|
||||
or
|
||||
> make
|
||||
|
||||
Parallel building can be started with using `-jN` argument of "mingw32-make/make", where `N` is the number of building threads:
|
||||
> mingw32-make -j4
|
||||
or
|
||||
> make -j4
|
||||
|
||||
Type "mingw32-make/make" with argument "install" to place the libraries to the install folder:
|
||||
> mingw32-make install
|
||||
or
|
||||
> make install
|
||||
|
||||
@section build_occt_genproj Building with Genproj tool
|
||||
|
||||
**genproj** is a legacy tool (originated from command "wgenproj" in WOK) for generation of Visual Studio, Code::Blocks, Qt Creator (qmake), and XCode project files for building Open CASCADE Technology.
|
||||
These project files are placed inside OCCT directory (in *adm* subfolder) and use relative paths, thus can be moved together with sources.
|
||||
The project files included in official distribution of OCCT are generated by this tool.
|
||||
|
||||
@note If you have official distribution with project files included, you can use them directly without a need to call **genproj**.
|
||||
|
||||
**genproj** is a less flexible alternative to use of CMake build system (see @ref build_occt_win_cmake), but still has some small features useful for OCCT development.
|
||||
|
||||
@subsection build_genproj Configuration process
|
||||
|
||||
The environment is defined in the file *custom.sh* (on Linux and macOS) or *custom.bat* (on Windows) which can be edited directly:
|
||||
|
||||
* `ARCH` -- architecture (32 or 64), affects only `PATH` variable for execution
|
||||
* `HAVE_*` -- flags to enable or disable use of optional third-party products
|
||||
* `CSF_OPT_*` -- paths to search for includes and binaries of all used third-party products
|
||||
* `SHORTCUT_HEADERS` -- defines method for population of folder *inc* by header files. Supported methods are:
|
||||
* Add paths to includes of used third-party libraries in variable *CSF_OPT_INC*.
|
||||
* Add paths to their binary libraries in variable *CSF_OPT_LIB64*.
|
||||
* Set variable *SHORTCUT_HEADERS* to specify a method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* *HardLink* - hard links to headers located in *src* will be created.
|
||||
* `VCVER` -- specification of format of project files, defining also version of Visual Studio to be used, and default name of the sub-folder for binaries:
|
||||
* Add paths to includes of used third-party libraries in variable `CSF_OPT_INC`.
|
||||
* Add paths to their binary libraries in variable `CSF_OPT_LIB64`.
|
||||
* For optional third-party libraries, set corresponding environment variable `HAVE_<LIBRARY_NAME>` to either *false*, e.g. `export HAVE_FREEIMAGE=false`.
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
* For optional third-party libraries, set corresponding environment variable <i>HAVE_<LIBRARY_NAME></i> to either *false*, e.g.:
|
||||
~~~~~
|
||||
export HAVE_FREEIMAGE=false
|
||||
~~~~~
|
||||
|
||||
Alternatively, or when *custom.sh* or *custom.bat* does not exist, you can launch **genconf** tool to configure environment interactively:
|
||||
|
||||
@figure{/build/build_occt/images/genconf_linux.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.sh* or *custom.bat* file.
|
||||
|
||||
@subsubsection build_codeblocks_gen Projects generation
|
||||
|
||||
Launch **genproj** tool with option *cbp* to update content of *inc* folder and generate project files after changes in OCCT code affecting layout or composition of source files:
|
||||
|
||||
~~~~~
|
||||
$ cd /dev/OCCT/opencascade-7.0.0
|
||||
$ ./genproj cbp
|
||||
~~~~~
|
||||
|
||||
The generated Code::Blocks project are placed into subfolder *adm/<OS>/cbp*.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
|
||||
@subsubsection build_codeblocks_build Building
|
||||
|
||||
To start **Code::Blocks**, launch script *codeblocks.sh*.
|
||||
|
||||
To build all toolkits, click **Build->Build workspace** in the menu bar.
|
||||
|
||||
To start *DRAWEXE*, which has been built with **Code::Blocks** on Mac OS X, run the script
|
||||
~~~~~
|
||||
./draw.sh cbp [d]
|
||||
~~~~~
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
||||
@subsection build_occt_genproj Building with Genproj tool
|
||||
|
||||
This page describes steps to build OCCT libraries from a complete source archive on Windows with <b>MS Visual C++</b> using projects generated by **genproj** tool.
|
||||
It is an alternative to use of CMake build system (see @ref build_occt_win_cmake).
|
||||
|
||||
**genproj** is a legacy tool (originated from command "wgenproj" in WOK) for generation of Visual Studio, Code.Blocks, and XCode project files used for building Open CASCADE Technology.
|
||||
These project files are placed inside OCCT directory (in *adm* subfolder) and use relative paths, thus can be moved together with sources.
|
||||
|
||||
The project files included in official distribution of OCCT are generated by this tool.
|
||||
If you have official distribution with project files included, you can use them directly without a need to call **genproj**.
|
||||
|
||||
@subsubsection build_msvc_3rdparty Third-party libraries
|
||||
|
||||
Before building OCCT, make sure to have all the required third-party libraries installed.
|
||||
|
||||
The easiest way to install third-party libraries is to download archive with pre-built binaries, corresponding to version of Visual Studio you are using, from https://opencascade.com/content/3rd-party-components.
|
||||
|
||||
You can also build third-party libraries from their sources, see @ref build_upgrade_building_3rdparty for instructions.
|
||||
|
||||
@subsubsection build_msvc_conf Configuration
|
||||
|
||||
If you have Visual Studio projects already available (pre-installed or generated), you can edit file *custom.bat* manually to adjust the environment:
|
||||
|
||||
* *VCVER* -- specification of format of project files, defining also version of Visual Studio to be used, and default name of the sub-folder for binaries:
|
||||
|
||||
| VCVER | Visual Studio version | Windows Platform | Binaries folder name |
|
||||
|-----------|-----------------------|----------------------------------|----------------------|
|
||||
@@ -325,85 +317,267 @@ The environment is defined in the file *custom.sh* (on Linux and macOS) or *cust
|
||||
| vc142 | 2019 (16) | Desktop (Windows API) | vc14 |
|
||||
| vc142-uwp | 2019 (16) | UWP (Universal Windows Platform) | vc14-uwp |
|
||||
|
||||
* *ARCH* -- architecture (32 or 64), affects only *PATH* variable for execution
|
||||
* <i>HAVE_*</i> -- flags to enable or disable use of optional third-party products
|
||||
* <i>CSF_OPT_*</i> -- paths to search for includes and binaries of all used third-party products
|
||||
* *SHORTCUT_HEADERS* -- defines method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
|
||||
Alternatively, you can launch **genconf**, a GUI tool allowing to configure build options interactively.
|
||||
That tool will analyze your environment and propose you to choose available options:
|
||||
|
||||
* Type and version of project files to generate (from the list of installed ones, detected by presence of environment variables like `VS100COMNTOOLS` on Windows platform).
|
||||
* Version of Visual Studio to be used (from the list of installed ones, detected by presence of environment variables like *VS100COMNTOOLS*).
|
||||
* Method to populate folder *inc* (short-cuts by default).
|
||||
* Location of third-party libraries (usually downloaded from OCCT web site, see above).
|
||||
* Path to common directory where third-party libraries are located (optional).
|
||||
* Paths to headers and binaries of the third-party libraries (found automatically basing on previous options; click button "Reset" to update).
|
||||
* Generation of PDB files within Release build ("Release with Debug info", false by default).
|
||||
|
||||
Below are screenshots of **genconf** tool on various platforms (Windows and Linux):
|
||||
@figure{/build/build_occt/images/genconf_windows.png}
|
||||
@figure{/build/build_occt/images/genconf_linux.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.bat* (Windows) or *custom.sh* (other systems) file.
|
||||
|
||||
@subsection build_genproj_generate Projects generation
|
||||
Click "Save" to store the specified configuration in *custom.bat* file.
|
||||
|
||||
@subsubsection build_msvc_generate Projects generation
|
||||
|
||||
Launch **genproj** to update content of *inc* folder and generate project files after changes in OCCT code affecting layout or composition of source files.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by `PATH`.
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
If Tcl is not found, the tool may prompt you to enter the path to directory where Tcl can be found.
|
||||
|
||||
~~~~
|
||||
|
||||
~~~~~
|
||||
$ genproj.bat
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Note that if *custom.bat* is not present, **genproj** will start **genconf** to configure environment.
|
||||
|
||||
@subsection build_genproj_build Building
|
||||
|
||||
@subsubsection build_msvc_build Visual Studio
|
||||
@subsubsection build_msvc_build Building
|
||||
|
||||
Launch *msvc.bat* to start Visual Studio with all necessary environment variables defined, and build the whole solution or required toolkits.
|
||||
|
||||
The MSVC project files are located in folders <i>adm\\msvc\\vc...</i>.
|
||||
Note: the MSVC project files are located in folders <i>adm\\msvc\\vc...</i>.
|
||||
Binaries are produced in *win32* or *win64* folders.
|
||||
|
||||
To start DRAW, launch *draw.bat*.
|
||||
|
||||
@subsubsection build_codeblocks_build Code::Blocks
|
||||
@section build_occt_linux Linux
|
||||
|
||||
Code::Blocks is a cross-platform IDE which can be used for building OCCT on Linux, macOS and Windows platforms.
|
||||
The generated Code::Blocks project could be found within subfolder *adm/<OS>/cbp*.
|
||||
You may choose one of the following ways to generate, configure and build OCCT sources on Linux just keeping in mind
|
||||
this platform specific:
|
||||
|
||||
To start **Code::Blocks**, launch script *codeblocks.sh*.
|
||||
To build all toolkits, click **Build->Build workspace** in the menu bar.
|
||||
* @ref build_occt_win_cmake "Configuration, generation and building OCCT on Windows using CMake tool"
|
||||
* @ref build_occt_code_blocks "Building on Mac OS X with Code::Blocks IDE"
|
||||
|
||||
To start *DRAWEXE*, which has been built with **Code::Blocks** on Mac OS X, run the script
|
||||
~~~~
|
||||
./draw.sh cbp [d]
|
||||
~~~~
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
@section build_occt_crossplatform_cmake Android (cross-compiling)
|
||||
|
||||
@subsubsection build_occt_macos_xcode XCode
|
||||
This article describes the steps to build OCCT libraries for Android from a complete source package
|
||||
with GNU make (makefiles). The steps on Windows 7 and Ubuntu 15.10 are similar. There is the only one difference:
|
||||
makefiles are built with mingw32-make
|
||||
on Windows and native GNU make on Ubuntu.
|
||||
|
||||
XCode is an IDE for development on macOS platform and targeting macOS and iOS platforms.
|
||||
**genproj** tool comes with a legacy XCode project files generator, but CMake is a preferred way for building OCCT on macOS platform.
|
||||
Required tools (download and install if it is required):
|
||||
- CMake v3.0+ http://www.cmake.org/cmake/resources/software.html
|
||||
- Cross-compilation toolchain for CMake https://github.com/taka-no-me/android-cmake
|
||||
- Android NDK rev.10+ https://developer.android.com/tools/sdk/ndk/index.html
|
||||
- GNU Make: MinGW v4.82+ for Windows (http://sourceforge.net/projects/mingw/files/), GNU Make 4.0 for Ubuntu.
|
||||
|
||||
To start **XCode**, launch script *xcode.sh*.
|
||||
To build a certain toolkit, select it in **Scheme** drop-down list in XCode toolbar, press **Product** in the menu and click **Build** button.
|
||||
Run GUI tool provided by CMake.
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_config Configuration
|
||||
|
||||
**Configure Tools**
|
||||
- Specify the root folder of OCCT (<i>$CASROOT</i>, which contains *CMakelists.txt* file) by clicking **Browse Source**.
|
||||
- Specify the location (build folder) for Cmake generated project files by clicking **Browse Build**.
|
||||
|
||||
@figure{/build/build_occt/images/android_image001.png}
|
||||
|
||||
Click **Configure** button. It opens the window with a drop-down list of generators supported by CMake project.
|
||||
|
||||
Select "MinGW MakeFiles" item from the list
|
||||
- Choose "Specify toolchain file for cross-compiling"
|
||||
- Click "Next"
|
||||
@figure{/build/build_occt/images/android_image002.png}
|
||||
|
||||
- Specify a toolchain file at the next dialog by android.toolchain.cmake . It is contained by cross-compilation
|
||||
toolchain for CMake
|
||||
- Click "Finish"
|
||||
@figure{/build/build_occt/images/android_image003.png}
|
||||
|
||||
If ANDROID_NDK environment variable is not defined in current OS, add cache entry ANDROID_NDK (entry type is PATH) --
|
||||
path to the NDK folder ("Add Entry" button)
|
||||
@figure{/build/build_occt/images/android_image004.png}
|
||||
|
||||
If on Windows the message is appeared: "CMake Error: CMake was unable to find a build program corresponding
|
||||
to "MinGW Makefiles"
|
||||
CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.",
|
||||
specify **CMAKE_MAKE_PROGRAM** to mingw32-make executable.
|
||||
@figure{/build/build_occt/images/android_image005.png}
|
||||
|
||||
**Configure OCCT**
|
||||
|
||||
How to configure OCCT, see "OCCT Configuration" section of @ref build_occt_win_cmake
|
||||
"Configure, Generate, Build using CMake tool" taking into account the specific configuration variables for android:
|
||||
- ANDROID_ABI = armeabi-v7a
|
||||
- ANDROID_NATIVE_API_LEVEL = 15
|
||||
- ANDROID_NDK_LAYOUT is equal to CMAKE_BUILD_TYPE variable
|
||||
- **BUILD_MODULE_Draw = OFF**
|
||||
|
||||
@figure{/build/build_occt/images/android_image006.png}
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_generation Generate Makefiles
|
||||
|
||||
Click **Generate** button and wait until the generation process is finished.
|
||||
Then makefiles will appear in the build folder (e.g. <i> D:/tmp/occt-android </i>).
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_building Build Makefiles
|
||||
|
||||
Open console and go to the build folder. Type "mingw32-make" (Windows) or "make" (Ubuntu) to start build process.
|
||||
|
||||
> mingw32-make
|
||||
or
|
||||
> make
|
||||
|
||||
Parallel building can be started with using **"-jN"** argument of "mingw32-make/make", where N is the number of
|
||||
building threads.
|
||||
|
||||
> mingw32-make -j4
|
||||
or
|
||||
> make -j4
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_install Install OCCT Libraries
|
||||
|
||||
Type "mingw32-make/make" with argument "install" to place the libraries to the install folder
|
||||
|
||||
> mingw32-make install
|
||||
or
|
||||
> make install
|
||||
|
||||
@section build_occt_macos Mac OS X
|
||||
|
||||
@subsection build_occt_macos_xcode Building with Xcode
|
||||
|
||||
This file describes steps to build OCCT libraries from sources on Mac OS X with **Xcode** projects, generated by OCCT legacy tool **genproj**.
|
||||
|
||||
<h2>Configuration</h2>
|
||||
|
||||
Before building it is necessary to set up build environment.
|
||||
|
||||
The environment is defined in the file *custom.sh* which can be edited directly:
|
||||
|
||||
* Add paths to includes of used third-party libraries in variable *CSF_OPT_INC* (use colon ":" as path separator).
|
||||
* Add paths to their binary libraries in variable *CSF_OPT_LIB64*.
|
||||
* Set variable *SHORTCUT_HEADERS* to specify a method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
* For optional third-party libraries, set corresponding environment variable <i>HAVE_<LIBRARY_NAME></i> to either *false*, e.g.:
|
||||
~~~~~
|
||||
export HAVE_GL2PS=false
|
||||
~~~~~
|
||||
|
||||
Alternatively, or when *custom.sh* does not exist, you can launch *genconf.sh* to configure environment interactively:
|
||||
|
||||
@figure{/build/build_occt/images/genconf_osx.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.sh* file.
|
||||
|
||||
<h2>Projects generation</h2>
|
||||
|
||||
Launch **genproj** tool to update content of *inc* folder and generate project files after changes in OCCT code affecting layout or composition of source files.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
|
||||
For instance, in Terminal application:
|
||||
|
||||
~~~~~
|
||||
$ cd /dev/OCCT/opencascade-7.0.0
|
||||
$ ./genproj
|
||||
~~~~~
|
||||
|
||||
<h2>Building</h2>
|
||||
|
||||
To start **Xcode**, launch script *xcode.sh*.
|
||||
|
||||
To build a certain toolkit, select it in **Scheme** drop-down list in Xcode toolbar, press **Product** in the menu and click **Build** button.
|
||||
|
||||
To build the entire OCCT:
|
||||
* Create a new empty project (select **File -> New -> Project -> Empty project** in the menu; input the project name, e.g. *OCCT*; then click **Next** and **Create**).
|
||||
* Drag and drop the *OCCT* folder in the created *OCCT* project in the Project navigator.
|
||||
* Select **File -> New -> Target -> Aggregate** in the menu.
|
||||
* Enter the project name (e.g. *OCCT*) and click **Finish**. The **Build Phases** tab will open.
|
||||
* Click "+" button to add the necessary toolkits to the target project. It is possible to select all toolkits by pressing **Command+A** combination.
|
||||
* Enter the project name (e.g. *OCCT*) and click **Finish**. The **Build Phases** tab will open.
|
||||
* Click "+" button to add the necessary toolkits to the target project. It is possible to select all toolkits by pressing **Command+A** combination.
|
||||
|
||||
To start *DRAWEXE*, which has been built with XCode on Mac OS X, perform the following steps:
|
||||
<h2>Launching DRAW</h2>
|
||||
|
||||
To start *DRAWEXE*, which has been built with Xcode on Mac OS X, perform the following steps:
|
||||
|
||||
1.Open Terminal application
|
||||
2.Enter `<OCCT_ROOT_DIR>`:
|
||||
~~~~
|
||||
|
||||
2.Enter <i>\<OCCT_ROOT_DIR\></i>:
|
||||
~~~~~
|
||||
cd \<OCCT_ROOT_DIR\>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
3.Run the script
|
||||
~~~~
|
||||
./draw.sh xcd [d]
|
||||
~~~~
|
||||
~~~~~
|
||||
./draw_cbp.sh xcd [d]
|
||||
~~~~~
|
||||
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
||||
@subsection build_occt_code_blocks Building with Code::Blocks
|
||||
|
||||
This file describes steps to build OCCT libraries from sources using **Code::Blocks**, a cross-platform IDE, using
|
||||
project files generated by OCCT legacy tool **genproj**.
|
||||
|
||||
<h2>Configure</h2>
|
||||
|
||||
Before building it is necessary to set up build environment.
|
||||
|
||||
The environment is defined in the file *custom.sh* (on Linux and OS X) or *custom.bat* (on Windows) which can be edited
|
||||
directly:
|
||||
|
||||
* Add paths to includes of used third-party libraries in variable *CSF_OPT_INC*.
|
||||
* Add paths to their binary libraries in variable *CSF_OPT_LIB64*.
|
||||
* Set variable *SHORTCUT_HEADERS* to specify a method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
* For optional third-party libraries, set corresponding environment variable <i>HAVE_<LIBRARY_NAME></i> to either *false*, e.g.:
|
||||
~~~~~
|
||||
export HAVE_GL2PS=false
|
||||
~~~~~
|
||||
|
||||
Alternatively, or when *custom.sh* or *custom.bat* does not exist, you can launch **genconf** tool to configure
|
||||
environment interactively:
|
||||
|
||||
@figure{/build/build_occt/images/genconf_linux.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.sh* or *custom.bat* file.
|
||||
|
||||
<h2>Generate Projects</h2>
|
||||
|
||||
Launch **genproj** tool with option *cbp* to update content of *inc* folder and generate project files after changes in
|
||||
OCCT code affecting layout or composition of source files:
|
||||
|
||||
~~~~~
|
||||
$ cd /dev/OCCT/opencascade-7.0.0
|
||||
$ ./genproj cbp
|
||||
~~~~~
|
||||
|
||||
The generated Code::Blocks project are placed into subfolder *adm/<OS>/cbp*.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
|
||||
<h2>Build</h2>
|
||||
|
||||
To start **Code::Blocks**, launch script *codeblocks.sh*.
|
||||
|
||||
To build all toolkits, click **Build->Build workspace** in the menu bar.
|
||||
|
||||
To start *DRAWEXE*, which has been built with **Code::Blocks** on Mac OS X, run the script
|
||||
~~~~~
|
||||
./draw_cbp.sh cbp [d]
|
||||
~~~~~
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
BIN
dox/build/build_occt/images/genconf_osx.png
Normal file
After Width: | Height: | Size: 194 KiB |
@@ -48,11 +48,11 @@ For example, method *GetCoord* returns a triple of real values and is defined fo
|
||||
Camel Case style is preferred for names.
|
||||
For example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer awidthofbox; // this is bad
|
||||
Standard_Integer width_of_box; // this is bad
|
||||
Standard_Integer aWidthOfBox; // this is OK
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection occt_coding_rules_2_2 Names of development units
|
||||
|
||||
@@ -80,9 +80,9 @@ Toolkit names are prefixed by *TK*, followed by a meaningful part of the name ex
|
||||
|
||||
Names of public classes and other types (structures, enums, typedefs) should match the common pattern: name of the package followed by underscore and suffix (the own name of the type):
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
<package-name>_<class-name>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Static methods related to the whole package are defined in the class with the same name as package (without suffix).
|
||||
|
||||
@@ -95,9 +95,9 @@ This rule also applies to complex types constructed by instantiation of template
|
||||
Such types should be given own names using *typedef* statement, located in same-named header file.
|
||||
|
||||
For example, see definition in the file *TColStd_IndexedDataMapOfStringString.hxx*:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
typedef NCollection_IndexedDataMap<TCollection_AsciiString,TCollection_AsciiString,TCollection_AsciiString> TColStd_IndexedDataMapOfStringString;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Names of functions
|
||||
|
||||
@@ -109,7 +109,7 @@ The term **function** here is defined as:
|
||||
It is preferred to start names of public methods from an upper case character and to start names of protected and private methods from a lower case character.
|
||||
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
class MyPackage_MyClass
|
||||
{
|
||||
|
||||
@@ -123,7 +123,7 @@ private:
|
||||
void setIntegerValue (const Standard_Integer theValue);
|
||||
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection occt_coding_rules_2_3 Names of variables
|
||||
|
||||
@@ -137,13 +137,13 @@ The name of a variable should not start with an underscore.
|
||||
|
||||
See the following examples:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer Elapsed_Time = 0; // this is bad - possible class name
|
||||
Standard_Integer gp = 0; // this is bad - existing package name
|
||||
Standard_Integer aGp = 0; // this is OK
|
||||
Standard_Integer _KERNEL = 0; // this is bad
|
||||
Standard_Integer THE_KERNEL = 0; // this is OK
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Names of function parameters
|
||||
|
||||
@@ -151,11 +151,11 @@ The name of a function (procedure, class method) parameter should start with pre
|
||||
|
||||
See the following examples:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
void Package_MyClass::MyFunction (const gp_Pnt& p); // this is bad
|
||||
void Package_MyClass::MyFunction (const gp_Pnt& theP); // this is OK
|
||||
void Package_MyClass::MyFunction (const gp_Pnt& thePoint); // this is preferred
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Names of class member variables
|
||||
|
||||
@@ -163,11 +163,11 @@ The name of a class member variable should start with prefix *my* followed by th
|
||||
|
||||
See the following examples:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer counter; // This is bad
|
||||
Standard_Integer myC; // This is OK
|
||||
Standard_Integer myCounter; // This is preferred
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Names of global variables
|
||||
|
||||
@@ -176,18 +176,18 @@ However, as soon as a global variable is necessary, its name should be prefixed
|
||||
|
||||
See the following examples:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer MyPackage_myGlobalVariable = 0;
|
||||
Standard_Integer MyPackage_MyClass_myGlobalVariable = 0;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Static constants within the file should be written in upper-case and begin with prefix *THE_*:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
namespace
|
||||
{
|
||||
static const Standard_Real THE_CONSTANT_COEF = 3.14;
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Names of local variables
|
||||
|
||||
@@ -197,12 +197,12 @@ It is preferred to prefix local variable names with *a* and *an* (or *is*, *to*
|
||||
|
||||
See the following example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer theI; // this is bad
|
||||
Standard_Integer i; // this is bad
|
||||
Standard_Integer index; // this is bad
|
||||
Standard_Integer anIndex; // this is OK
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Avoid dummy names
|
||||
Avoid dummy names, such as <i>i, j, k</i>. Such names are meaningless and easy to mix up.
|
||||
@@ -211,7 +211,7 @@ The code becomes more and more complicated when such dummy names are used there
|
||||
|
||||
See the following examples for preferred style:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
void Average (const Standard_Real** theArray,
|
||||
Standard_Integer theRowsNb,
|
||||
Standard_Integer theRowLen,
|
||||
@@ -227,7 +227,7 @@ void Average (const Standard_Real** theArray,
|
||||
theResult /= Standard_Real(aRowsNb * aRowLen);
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_coding_rules_3 Formatting rules
|
||||
|
||||
@@ -262,7 +262,7 @@ Punctuation rules follow the rules of the English language.
|
||||
* For better readability it is also recommended to surround conventional operators by a space character.
|
||||
Examples:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
while (true) // NOT: while( true ) ...
|
||||
{
|
||||
DoSomething (theA, theB, theC, theD); // NOT: DoSomething(theA,theB,theC,theD);
|
||||
@@ -271,7 +271,7 @@ for (anIter = 0; anIter < 10; ++anIter) // NOT: for (anIter=0;anIter<10;++anIter
|
||||
{
|
||||
theA = (theB + theC) * theD; // NOT: theA=(theB+theC)*theD
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Declaration of pointers and references
|
||||
|
||||
@@ -281,7 +281,7 @@ Since declaration of several variables with mixed pointer types contrudicts this
|
||||
|
||||
Examples:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer *theVariable; // not recommended
|
||||
Standard_Integer * theVariable; // not recommended
|
||||
Standard_Integer* theVariable; // this is OK
|
||||
@@ -295,7 +295,7 @@ Standard_Integer ** theVariable; // not recommended
|
||||
Standard_Integer** theVariable; // this is OK
|
||||
|
||||
Standard_Integer *theA, theB, **theC; // not recommended (declare each variable independently)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Separate logical blocks
|
||||
|
||||
@@ -303,7 +303,7 @@ Separate logical blocks of code with one blank line and comments.
|
||||
|
||||
See the following example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
// check arguments
|
||||
Standard_Integer anArgsNb = argCount();
|
||||
if (anArgsNb < 3 || isSmthInvalid)
|
||||
@@ -318,7 +318,7 @@ if (anArgsNb < 3 || isSmthInvalid)
|
||||
// do our job
|
||||
...
|
||||
...
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Notice that multiple blank lines should be avoided.
|
||||
|
||||
@@ -329,7 +329,7 @@ Each descriptive block should contain at least a function name and purpose descr
|
||||
|
||||
See the following example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
// =======================================================================
|
||||
// function : TellMeSmthGood
|
||||
// purpose : Gives me good news
|
||||
@@ -347,19 +347,19 @@ void TellMeSmthBad()
|
||||
{
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Block layout [MANDATORY]
|
||||
Figure brackets <i>{ }</i> and each operator <i>(for, if, else, try, catch)</i> should be written on a dedicated line.
|
||||
|
||||
In general, the layout should be as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
while (expression)
|
||||
{
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Entering a block increases and leaving a block decreases the indentation by one tabulation.
|
||||
|
||||
@@ -367,7 +367,7 @@ Entering a block increases and leaving a block decreases the indentation by one
|
||||
|
||||
Single-line conditional operators <i>(if, while, for,</i> etc.) can be written without brackets on the following line.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
if (!myIsInit) return Standard_False; // bad
|
||||
|
||||
if (thePtr == NULL) // OK
|
||||
@@ -377,7 +377,7 @@ if (!theAlgo.IsNull()) // preferred
|
||||
{
|
||||
DoSomething();
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Having all code in the same line is less convenient for debugging.
|
||||
|
||||
@@ -386,7 +386,7 @@ Having all code in the same line is less convenient for debugging.
|
||||
In comparisons, put the variable (in the current context) on the left side and constant on the right side of expression.
|
||||
That is, the so called "Yoda style" is to be avoided.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
if (NULL != thePointer) // Yoda style, not recommended
|
||||
if (thePointer != NULL) // OK
|
||||
|
||||
@@ -398,13 +398,13 @@ if (anIter <= theNbValues) // OK
|
||||
|
||||
if (THE_LIMIT == theValue) // bad style (global constant vs. variable)
|
||||
if (theValue == THE_LIMIT) // OK
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Alignment
|
||||
|
||||
Use alignment wherever it enhances the readability. See the following example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
MyPackage_MyClass anObject;
|
||||
Standard_Real aMinimum = 0.0;
|
||||
Standard_Integer aVal = theVal;
|
||||
@@ -415,7 +415,7 @@ switch (aVal)
|
||||
case 3:
|
||||
default: computeSomethingElseYet(); break;
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Indentation of comments
|
||||
|
||||
@@ -425,7 +425,7 @@ The text of the comment should be separated from the slash character by a single
|
||||
|
||||
See the following example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
while (expression) //bad comment
|
||||
{
|
||||
// this is a long multi-line comment
|
||||
@@ -433,7 +433,7 @@ while (expression) //bad comment
|
||||
DoSomething(); // maybe, enough
|
||||
DoSomethingMore(); // again
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Early return statement
|
||||
|
||||
@@ -441,7 +441,7 @@ Use an early return condition rather than collect indentations.
|
||||
|
||||
Write like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer ComputeSumm (const Standard_Integer* theArray,
|
||||
const Standard_Size theSize)
|
||||
{
|
||||
@@ -454,11 +454,11 @@ Standard_Integer ComputeSumm (const Standard_Integer* theArray,
|
||||
... computing summ ...
|
||||
return aSumm;
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Rather than:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer ComputeSumm (const Standard_Integer* theArray,
|
||||
const Standard_Size theSize)
|
||||
{
|
||||
@@ -469,7 +469,7 @@ Standard_Integer ComputeSumm (const Standard_Integer* theArray,
|
||||
}
|
||||
return aSumm;
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
This helps to improve readability and reduce the unnecessary indentation depth.
|
||||
|
||||
@@ -490,7 +490,7 @@ An exception to the rule is ordering system headers generating a macros declarat
|
||||
|
||||
The source or header file should include only minimal set of headers necessary for compilation, without duplicates (considering nested includes).
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
// the header file of implemented class
|
||||
#include <PackageName_ClassName.hxx>
|
||||
|
||||
@@ -506,7 +506,7 @@ The source or header file should include only minimal set of headers necessary f
|
||||
// system headers
|
||||
#include <iostream>
|
||||
#include <windows.h>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_coding_rules_4 Documentation rules
|
||||
|
||||
@@ -623,7 +623,7 @@ A class with virtual function(s) ought to have a virtual destructor.
|
||||
Declaration of overriding method should contains specifiers "virtual" and "override"
|
||||
(using Standard_OVERRIDE alias for compatibility with old compilers).
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
class MyPackage_BaseClass
|
||||
{
|
||||
|
||||
@@ -641,7 +641,7 @@ public:
|
||||
Standard_EXPORT virtual Standard_Boolean Perform() Standard_OVERRIDE;
|
||||
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
This makes class definition more clear (virtual methods become highlighted).
|
||||
|
||||
@@ -667,20 +667,20 @@ Avoid *goto* statement unless it is really needed.
|
||||
|
||||
Declare a cycle variable in the header of the *for()* statement if not used out of cycle.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Real aMinDist = Precision::Infinite();
|
||||
for (NCollection_Sequence<gp_Pnt>::Iterator aPntIter (theSequence);
|
||||
aPntIter.More(); aPntIter.Next())
|
||||
{
|
||||
aMinDist = Min (aMinDist, theOrigin.Distance (aPntIter.Value()));
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Condition statements within zero
|
||||
|
||||
Avoid usage of C-style comparison for non-boolean variables:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
void Function (Standard_Integer theValue,
|
||||
Standard_Real* thePointer)
|
||||
{
|
||||
@@ -699,7 +699,7 @@ void Function (Standard_Integer theValue,
|
||||
DoSome2();
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_coding_rules_7 Portability issues
|
||||
|
||||
@@ -791,11 +791,11 @@ In C++ use *new* and *delete* operators instead of *malloc()* and *free()*. Try
|
||||
|
||||
Use the same form of new and delete.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
aPtr1 = new TypeA[n]; ... ; delete[] aPtr1;
|
||||
aPtr2 = new TypeB(); ... ; delete aPtr2;
|
||||
aPtr3 = Standard::Allocate (4096); ... ; Standard::Free (aPtr3);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Methods managing dynamical allocation [MANDATORY]
|
||||
|
||||
@@ -805,10 +805,10 @@ Define a destructor, a copy constructor and an assignment operator for classes w
|
||||
|
||||
Every variable should be initialized.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Integer aTmpVar1; // bad
|
||||
Standard_Integer aTmpVar2 = 0; // OK
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Uninitialized variables might be kept only within performance-sensitive code blocks and only when their initialization is guaranteed by subsequent code.
|
||||
|
||||
@@ -824,12 +824,12 @@ In *operator=()* assign to all data members and check for assignment to self.
|
||||
|
||||
Don't check floats for equality or non-equality; check for GT, GE, LT or LE.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
if (Abs (theFloat1 - theFloat2) < theTolerance)
|
||||
{
|
||||
DoSome();
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Package *Precision* provides standard values for SI units and widely adopted by existing modeling algorithms:
|
||||
|
||||
@@ -872,7 +872,7 @@ Generally, try to reduce misaligned accesses since they impact the performance (
|
||||
|
||||
List class data members in the constructor's initialization list in the order they are declared.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
class MyPackage_MyClass
|
||||
{
|
||||
|
||||
@@ -892,19 +892,19 @@ private:
|
||||
Standard_Integer myPropertyB;
|
||||
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Initialization over assignment
|
||||
|
||||
Prefer initialization over assignment in class constructors.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
MyPackage_MyClass()
|
||||
: myPropertyA (1) // preferred
|
||||
{
|
||||
myPropertyB = 2; // not recommended
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Optimize caching
|
||||
|
||||
@@ -912,23 +912,23 @@ When programming procedures with extensive memory access, try to optimize them i
|
||||
|
||||
On x86 this code
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Real anArray[4096][2];
|
||||
for (Standard_Integer anIter = 0; anIter < 4096; ++anIter)
|
||||
{
|
||||
anArray[anIter][0] = anArray[anIter][1];
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
is more efficient then
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Real anArray[2][4096];
|
||||
for (Standard_Integer anIter = 0; anIter < 4096; ++anIter)
|
||||
{
|
||||
anArray[0][anIter] = anArray[1][anIter];
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
since linear access does not invalidate cache too often.
|
||||
|
||||
@@ -952,7 +952,7 @@ Command arguments should be validated before usage. The user should see a human-
|
||||
|
||||
Command should warn the user about unknown arguments, including cases when extra parameters have been pushed for the command with a fixed number of arguments.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
if (theArgsNb != 3)
|
||||
{
|
||||
std::cout << "Syntax error - wrong number of arguments!\n";
|
||||
@@ -971,7 +971,7 @@ Command should warn the user about unknown arguments, including cases when extra
|
||||
}
|
||||
DBRep::Set (aResName, aFaceShape);
|
||||
return 0;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Message printing
|
||||
|
||||
@@ -984,9 +984,9 @@ Information printed into Draw Interpreter should be well-structured to allow usa
|
||||
Any command with a long list of obligatory parameters should be considered as ill-formed by design.
|
||||
Optional parameters should start with flag name (with '-' prefix) and followed by its values:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~{.tcl}
|
||||
myCommand -flag1 value1 value2 -flag2 value3
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Arguments parser
|
||||
|
||||
@@ -996,7 +996,7 @@ myCommand -flag1 value1 value2 -flag2 value3
|
||||
|
||||
Functions *Draw::Atof()* and *Draw::Atoi()* support expressions and read values in C-locale.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Standard_Real aPosition[3] = {0.0, 0.0, 0.0};
|
||||
for (Standard_Integer anArgIter = 1; anArgIter < theArgsNb; ++anArgIter)
|
||||
{
|
||||
@@ -1020,7 +1020,7 @@ Functions *Draw::Atof()* and *Draw::Atoi()* support expressions and read values
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_coding_rules_11 Examples
|
||||
|
||||
@@ -1051,7 +1051,7 @@ private: //! \@name private fields
|
||||
|
||||
@endverbatim
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include <Package_Class.hxx>
|
||||
// ==========================================================
|
||||
// function : Square
|
||||
@@ -1071,11 +1071,11 @@ void Package_Class::increment()
|
||||
{
|
||||
++myCounter;
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### TCL script for Draw Harness
|
||||
|
||||
~~~~{.tcl}
|
||||
~~~~~{.tcl}
|
||||
# show fragments (solids) in shading with different colors
|
||||
proc DisplayColored {theShape} {
|
||||
set aSolids [uplevel #0 explode $theShape so]
|
||||
@@ -1106,10 +1106,10 @@ vzbufftrihedron
|
||||
DisplayColored c
|
||||
vfit
|
||||
vdump $imagedir/${casename}.png 512 512
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### GLSL program:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.fs}
|
||||
vec3 Ambient; //!< Ambient contribution of light sources
|
||||
vec3 Diffuse; //!< Diffuse contribution of light sources
|
||||
vec3 Specular; //!< Specular contribution of light sources
|
||||
@@ -1149,4 +1149,4 @@ void main()
|
||||
normalize (View),
|
||||
Position);
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
@@ -152,11 +152,11 @@ The official repository contains:
|
||||
Make sure to configure Git so that the user name is equal to your username
|
||||
on the OCCT development portal, and set SafeCrLf option to true:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git config --global user.name "Your User Name"
|
||||
> git config --global user.email your@mail.address
|
||||
> git config --global your@mail.address
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_gitguide_3 Getting access to the repository
|
||||
|
||||
@@ -213,9 +213,9 @@ The official repository contains:
|
||||
On Windows, you might need to start **Git Bash** command prompt window.
|
||||
|
||||
Use the following command to generate SSH keys:
|
||||
~~~~
|
||||
~~~~~
|
||||
> ssh-keygen -t rsa -C "your@mail.address"
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The last argument is an optional comment, which can be included with the public key and used to distinguish between different keys (if you have many). The common practice is to put here your mail address or workstation name.
|
||||
|
||||
@@ -290,9 +290,9 @@ Click **Save** to input the key to the system.
|
||||
|
||||
* From command line by command:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git clone gitolite@git.dev.opencascade.org:occt <path>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
where <i>\<path\></i> is the path to the new folder which will be created for the repository.
|
||||
|
||||
@@ -314,9 +314,9 @@ Click **Save** to input the key to the system.
|
||||
|
||||
In the console:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git checkout -b CR12345 origin/master
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
In TortoiseGit:
|
||||
* Go to the local copy of the repository.
|
||||
@@ -332,9 +332,9 @@ In TortoiseGit:
|
||||
If you need to switch to another branch, use Git command checkout for that.
|
||||
In the console:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git checkout CR12345
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Switch/Checkout**.
|
||||
|
||||
@@ -351,11 +351,11 @@ In TortoiseGit:
|
||||
|
||||
* In the console:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git diff
|
||||
…
|
||||
> git commit -a -m "Write meaningful commit message here"
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Option -a tells the command to automatically include (stage) files
|
||||
that have been modified or deleted, but it will omit the new files that might have been added by you.
|
||||
@@ -363,12 +363,12 @@ In TortoiseGit:
|
||||
|
||||
To find new unstaged files and them to commit, use commands:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git status -s
|
||||
?? file1.hxx
|
||||
?? file2.cxx
|
||||
> git add file1.hxx file2.cxx
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
* In TortoiseGit: right-click in the explorer window and select in the context menu <b>Git Commit -> CR…</b>:
|
||||
|
||||
@@ -384,9 +384,9 @@ In TortoiseGit:
|
||||
|
||||
* In the console:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
> git push "origin" CR12345:CR12345
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
* In TortoiseGit: right-click in the explorer window and select in the context menu, TortoiseGit -> **Push**
|
||||
|
||||
@@ -410,9 +410,9 @@ Note that Git forbids pushing a branch if the corresponding remote branch alread
|
||||
Use Git command *fetch* with option *prune* to get the update of all branches from the remote repository and to clean your local repository from the remote branches that have been deleted.
|
||||
|
||||
* In the console:
|
||||
~~~~
|
||||
~~~~~
|
||||
> git fetch --prune
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
* In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Fetch**. Check in **Prune** check-box.
|
||||
|
||||
@@ -423,9 +423,9 @@ Note that Git forbids pushing a branch if the corresponding remote branch alread
|
||||
This operation is required in particular to update your local master branch when the remote master changes.
|
||||
|
||||
* In console:
|
||||
~~~~
|
||||
~~~~~
|
||||
> git pull
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
* In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Pull**.
|
||||
|
||||
@@ -436,9 +436,9 @@ Note that the local branches of your repository are the primary place, where you
|
||||
Remove the local branches that you do not need any more. Note that you cannot delete the current branch. It means that you need to switch to another one (e.g. master) if the branch you are going to delete is the current one.
|
||||
|
||||
* In the console:
|
||||
~~~~
|
||||
~~~~~
|
||||
> git branch -d CR12345
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
* In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Git Show Log**.
|
||||
|
||||
|
@@ -49,34 +49,34 @@ Open CASCADE Test Harness or @ref occt_user_guides__test_harness "DRAW" provides
|
||||
|
||||
In some cases the objects to be inspected are available in DRAW as results of DRAW commands. In other cases, however, it is necessary to inspect intermediate objects created by the debugged algorithm. To support this, DRAW provides a set of commands allowing the developer to store intermediate objects directly from the debugger stopped at some point during the program execution (usually at a breakpoint).
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* Draw_Eval (const char *theCommandStr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Evaluates a DRAW command or script.
|
||||
A command is passed as a string parameter.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* DBRep_Set (const char* theNameStr, void* theShapePtr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Sets the specified shape as a value of DRAW interpreter variable with the given name.
|
||||
- *theNameStr* -- the DRAW interpreter variable name to set.
|
||||
- *theShapePtr* -- a pointer to *TopoDS_Shape* variable.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* DBRep_SetComp (const char* theNameStr, void* theListPtr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Makes a compound from the specified list of shapes and sets it as a value of DRAW interpreter variable with the given name.
|
||||
- *theNameStr* -- the DRAW interpreter variable name to set.
|
||||
- *theListPtr* -- a pointer to *TopTools_ListOfShape* variable.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* DrawTrSurf_Set (const char* theNameStr, void* theHandlePtr)
|
||||
const char* DrawTrSurf_SetPnt (const char* theNameStr, void* thePntPtr)
|
||||
const char* DrawTrSurf_SetPnt2d (const char* theNameStr, void* thePnt2dPtr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Sets the specified geometric object as a value of DRAW interpreter variable with the given name.
|
||||
- *theNameStr* -- the DRAW interpreter variable name to set.
|
||||
@@ -90,27 +90,27 @@ All these functions are defined in *TKDraw* toolkit and return a string indicati
|
||||
|
||||
The following functions are provided by *TKBRep* toolkit and can be used from debugger prompt:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* BRepTools_Write (const char* theFileNameStr, void* theShapePtr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Saves the specified shape to a file with the given name.
|
||||
- *theFileNameStr* -- the name of the file where the shape is saved.
|
||||
- *theShapePtr* -- a pointer to *TopoDS_Shape* variable.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* BRepTools_Dump (void* theShapePtr)
|
||||
const char* BRepTools_DumpLoc (void* theShapePtr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Dumps shape or its location to cout.
|
||||
- *theShapePtr* -- a pointer to *TopoDS_Shape* variable.
|
||||
|
||||
The following function is provided by *TKMesh* toolkit:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* BRepMesh_Dump (void* theMeshHandlePtr, const char* theFileNameStr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Stores mesh produced in parametric space to BREP file.
|
||||
- *theMeshHandlePtr* -- a pointer to *Handle(BRepMesh_DataStructureOfDelaun)* variable.
|
||||
@@ -118,10 +118,10 @@ Stores mesh produced in parametric space to BREP file.
|
||||
|
||||
The following functions are provided by *TKTopTest* toolkit:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* MeshTest_DrawLinks(const char* theNameStr, void* theFaceAttr)
|
||||
const char* MeshTest_DrawTriangles(const char* theNameStr, void* theFaceAttr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Sets the edges or triangles from mesh data structure of type *Handle(BRepMesh_FaceAttribute)* as DRAW interpreter variables, assigning a unique name in the form "<theNameStr>_<index>" to each object.
|
||||
- *theNameStr* -- the prefix to use in names of objects.
|
||||
@@ -129,9 +129,9 @@ Sets the edges or triangles from mesh data structure of type *Handle(BRepMesh_Fa
|
||||
|
||||
The following additional function is provided by *TKGeomBase* toolkit:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
const char* GeomTools_Dump (void* theHandlePtr)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Dump geometric object to cout.
|
||||
- *theHandlePtr* -- a pointer to the geometric variable (<i>Handle</i> to *Geom_Geometry* or *Geom2d_Curve* or descendant) to be set.
|
||||
@@ -174,7 +174,7 @@ It is implemented in 'vaspect' and 'boundingbox' commands.
|
||||
|
||||
Json output for Bnd_OBB (using command 'bounding v -obb -dumpJson'):
|
||||
|
||||
~~~~{.java}
|
||||
~~~~~
|
||||
"Bnd_OBB": {
|
||||
"Center": {
|
||||
"gp_XYZ": [1, 2, 3]
|
||||
@@ -193,7 +193,7 @@ Json output for Bnd_OBB (using command 'bounding v -obb -dumpJson'):
|
||||
"HDims[2]": 0,
|
||||
"IsAABox": 1,
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_debug_vstudio Using Visual Studio debugger
|
||||
|
||||
@@ -206,18 +206,18 @@ When the execution is interrupted by a breakpoint, you can use this window to ca
|
||||
For example, assume that you are debugging a function, where local variable *TopoDS_Edge* *anEdge1* is of interest.
|
||||
The following set of commands in the Command window will save this edge to file *edge1.brep*, then put it to DRAW variable *e1* and show it maximized in the axonometric DRAW view:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
>? ({,,TKBRep.dll}BRepTools_Write)("d:/edge1.brep",(void*)&anEdge1)
|
||||
0x04a2f234 "d:/edge1.brep"
|
||||
>? ({,,TKDraw.dll}DBRep_Set)("e1",(void*)&anEdge1)
|
||||
0x0369eba8 "e1"
|
||||
>? ({,,TKDraw.dll}Draw_Eval)("donly e1; axo; fit")
|
||||
0x029a48f0 ""
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
For convenience it is possible to define aliases to commands in this window, for instance (here ">" is prompt provided by the command window; in the Immediate window this symbol should be entered manually):
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
>alias deval ? ({,,TKDraw}Draw_Eval)
|
||||
>alias dsetshape ? ({,,TKDraw}DBRep_Set)
|
||||
>alias dsetcomp ? ({,,TKDraw}DBRep_SetComp)
|
||||
@@ -229,18 +229,18 @@ For convenience it is possible to define aliases to commands in this window, for
|
||||
>alias dumploc ? ({,,TKBRep}BRepTools_DumpLoc)
|
||||
>alias dumpmesh ? ({,,TKMesh}BRepMesh_Dump)
|
||||
>alias dumpgeom ? ({,,TKGeomBase}GeomTools_Dump)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Note that aliases are stored in the Visual Studio user's preferences and it is sufficient to define them once on a workstation. With these aliases, the above example can be reproduced easier (note the space symbol after alias name!):
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
>saveshape ("d:/edge1.brep",(void*)&anEdge1)
|
||||
0x04a2f234 "d:/edge1.brep"
|
||||
>dsetshape ("e1",(void*)&anEdge1)
|
||||
0x0369eba8 "e1"
|
||||
>deval ("donly e1; axo; fit")
|
||||
0x029a48f0 ""
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Note that there is no guarantee that the call will succeed and will not affect the program execution, thus use this feature at your own risk. In particular, the commands interacting with window system (such as *axo*, *vinit*, etc.) are known to cause application crash when the program is built in 64-bit mode. To avoid this, it is recommended to prepare all necessary view windows in advance, and arrange these windows to avoid overlapping with the Visual Studio window, to ensure that they are visible during debug.
|
||||
|
||||
@@ -252,7 +252,7 @@ In Visual Studio 2005-2010 the rules for this display are defined in file *autoe
|
||||
|
||||
### \[AutoExpand\] section
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
; Open CASCADE classes
|
||||
Standard_Transient=<,t> count=<count,d>
|
||||
Handle_Standard_Transient=<entity,x> count=<entity->count,d> <,t>
|
||||
@@ -274,11 +274,11 @@ gp_Dir2d=<coord.x,g>, <coord.y,g>
|
||||
gp_Vec2d=<coord.x,g>, <coord.y,g>
|
||||
gp_Mat2d={<matrix[0][0],g>,<matrix[0][1],g>}, {<matrix[1][0],g>,<matrix[1][1],g>}
|
||||
gp_Ax1=loc={<loc.coord.x,g>, <loc.coord.y,g>, <loc.coord.z,g>} vdir={<vdir.coord.x,g>, <vdir.coord.y,g>, <vdir.coord.z,g>}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### \[Visualizer\] section
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
; Open CASCADE classes
|
||||
|
||||
NCollection_Handle<*> {
|
||||
@@ -342,7 +342,7 @@ Handle_TCollection_HAsciiString {
|
||||
#array( expr: ((TCollection_HAsciiString*)$e.entity)->myString.mystring[$i],
|
||||
size: ((TCollection_HAsciiString*)$e.entity)->myString.mylength) ) )
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
In Visual Studio 2012 and later, visualizers can be put in a separate file in subdirectory *Visualizers*. See file *occt.natvis* for example.
|
||||
|
||||
@@ -403,10 +403,7 @@ Example of configuration steps for Ubuntu:
|
||||
|
||||
7. Run DRAW and perform tests as usual, keeping in mind that running with sanitizer is much heavier than normal build:
|
||||
> ./draw.sh relwithdeb <br>
|
||||
|
||||
~~~~{.php}
|
||||
Draw[]> testgrid -parallel 0
|
||||
~~~~
|
||||
> Draw[]> testgrid -parallel 0
|
||||
|
||||
Note that when running tests under sanitizers, behavior may be different.
|
||||
Known problems (as of CLang 6.0) are:
|
||||
|
@@ -332,19 +332,23 @@ For more details, see @ref occt_user_guides__test_harness "Draw Test Harness Man
|
||||
|
||||
@section intro_req Requirements
|
||||
|
||||
Open CASCADE Technology is designed to be highly portable and is known to work on wide range of platforms.
|
||||
Current version is officially certified on Windows (x86-64), Linux (x86-64), OS X / macOS (x86-64, arm64), Android (arm64), and iOS (arm64) platforms.
|
||||
Open CASCADE Technology is designed to be highly portable and is known to
|
||||
work on wide range of platforms.
|
||||
Current version is officially certified on Windows (IA-32 and x86-64),
|
||||
Linux (x86-64), OS X / macOS (x86-64), Android (armv7 and x86), and
|
||||
iOS (armv7, arm64) platforms.
|
||||
|
||||
The tables below describe the recommended software configurations for which OCCT is certified to work.
|
||||
The tables below describe the recommended software configurations
|
||||
for which OCCT is certified to work.
|
||||
|
||||
@subsection intro_req_cpp C++ Compiler / IDE
|
||||
|
||||
| OS | Compiler |
|
||||
| --------- | ----------- |
|
||||
| Windows | Microsoft Visual Studio: 2010 SP1, 2012 Update 4, 2013 Update 5, 2015 Update 3, 2017 <sup>1</sup>, 2019 <br>, LLVM (ClangCL), GCC 4.3+ (Mingw-w64)|
|
||||
| Windows | Microsoft Visual Studio: 2008 SP1, 2010 SP1, 2012 Update 4, 2013 Update 5, 2015 Update 3, 2017 <sup>1</sup>, 2019 <br>, LLVM (ClangCL), GCC 4.3+ (Mingw-w64)|
|
||||
| Linux | GNU gcc 4.3+ <br> LLVM CLang 3.6+ |
|
||||
| OS X / macOS | XCode 6 or newer |
|
||||
| Android | NDK r12, GNU gcc 4.9 or newer |
|
||||
| Android | NDK r10, GNU gcc 4.8 or newer |
|
||||
| Web | Emscripten SDK 1.39 or newer (CLang) |
|
||||
|
||||
1) VC++ 141 64-bit is used for regular testing and for building binary package of official release of OCCT on Windows.
|
||||
@@ -364,13 +368,12 @@ https://www.opencascade.com/content/3rd-party-components
|
||||
| OpenGL 3.3+, OpenGL ES 2.0+ | System | Visualization | Required |
|
||||
| OpenVR 1.10+ | https://github.com/ValveSoftware/openvr | Visualization | Optional (VR support) |
|
||||
| Direct3D 9 | Windows | Visualization | Optional (integration with GUI using Direct3D) |
|
||||
| FreeType 2.4+ | https://www.freetype.org/download.html | Visualization | Optional (text rendering) |
|
||||
| FreeImage 3.17+ | https://sourceforge.net/projects/freeimage/files | Visualization | Optional (support of common 2D graphic formats) |
|
||||
| FreeType 2.4.11-2.7.1 | https://sourceforge.net/projects/freetype/files/ | Visualization | Required |
|
||||
| FreeImage 3.17.0+ | https://sourceforge.net/projects/freeimage/files | Visualization | Optional (support of common 2D graphic formats) |
|
||||
| FFmpeg 3.1+ | https://www.ffmpeg.org/download.html | Visualization | Optional (video recording) |
|
||||
| VTK 6.1+ | https://www.vtk.org/download/ | Visualization | Optional (VTK integration) |
|
||||
| Flex 2.6.4+ and Bison 3.7.1+ | https://sourceforge.net/projects/winflexbison/ | Data Exchange | Optional (update of STEP and ExprIntrp parsers) |
|
||||
| RapidJSON 1.1+ | https://rapidjson.org/ | Data Exchange | Optional (reading glTF files) |
|
||||
| Draco 1.4.1+ | https://github.com/google/draco | Data Exchange | Optional (reading compressed glTF files) |
|
||||
| Tcl/Tk 8.6.3+ <br> or ActiveTcl 8.6 | https://www.tcl.tk/software/tcltk/download.html <br> https://www.activestate.com/activetcl/downloads | DRAW Test Harness | Required |
|
||||
| Qt Desktop: Qt 4.8.6+ <br> Android: Qt 5.3.2+ | https://www.qt.io/download/ | Samples and demos | Optional (Qt samples) |
|
||||
| Doxygen 1.8.5+ | https://www.doxygen.nl/download.html | Documentation | Required |
|
||||
@@ -381,14 +384,14 @@ https://www.opencascade.com/content/3rd-party-components
|
||||
| Component | Requirement |
|
||||
| --------- | ----------- |
|
||||
| Minimum memory | 512 MB, 1 GB recommended |
|
||||
| Free disk space (complete installation) | 1,5 GB approx. |
|
||||
| Free disk space (complete installation) | 600 MB approx. |
|
||||
|
||||
On desktop, 3D viewer for optimal performance requires graphics processing unit (GPU) supporting OpenGL 3.3 or above.
|
||||
Ray tracing requires OpenGL 4.0+ or OpenGL 3.3+ with *GL_ARB_texture_buffer_object_rgb32* extension.
|
||||
Textures within ray tracing will be available only when *GL_ARB_bindless_texture extension* is provided by driver.
|
||||
|
||||
On mobile platforms, OpenGL ES 2.0+ is required for 3D viewer (OpenGL ES 3.1+ is recommended).
|
||||
Ray tracing requires OpenGL ES 3.2.
|
||||
The ray tracing is not yet available on mobile platforms.
|
||||
Some old hardware might be unable to execute complex GLSL programs (e.g. with high number of light sources, clipping planes).
|
||||
|
||||
OCCT 3D Viewer, in general, supports wide range of graphics hardware - from very old to new.
|
||||
@@ -643,10 +646,6 @@ on this tool.
|
||||
**RapidJSON** is an Open Source JSON parser and generator for C++.
|
||||
RapidJSON is optionally used by OCCT for reading glTF files (https://rapidjson.org/).
|
||||
|
||||
**Draco** is an Open Source JSON parser and generator for C++.
|
||||
Draco is optionally used by OCCT for reading glTF files using KHR_draco_mesh_compression extension (https://github.com/google/draco).
|
||||
Draco is available under Apache 2.0 license.
|
||||
|
||||
**DejaVu** fonts are a font family based on the Vera Fonts under a permissive license (MIT-like, https://dejavu-fonts.github.io/License.html).
|
||||
DejaVu Sans (basic Latin sub-set) is used by OCCT as fallback font when no system font is available.
|
||||
|
||||
|
@@ -21,6 +21,7 @@ FILE_PATTERNS = *.md *.dox
|
||||
RECURSIVE = YES
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = YES
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
GENERATE_DOCSET = NO
|
||||
GENERATE_CHI = NO
|
||||
GENERATE_QHP = NO
|
||||
|
@@ -21,6 +21,7 @@ FILE_PATTERNS = *.md *.dox
|
||||
RECURSIVE = YES
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = YES
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
GENERATE_DOCSET = NO
|
||||
GENERATE_CHI = NO
|
||||
GENERATE_QHP = NO
|
||||
|
@@ -128,7 +128,7 @@ ad696002-5b34-11d1-b5ba-00a0c9064368.Location: PAppStdPlugin
|
||||
|
||||
## Implementation of Attribute Transformation in a HXX file
|
||||
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
\#include <TDF_Attribute.hxx>
|
||||
|
||||
\#include <gp_Ax3.hxx>
|
||||
@@ -223,11 +223,11 @@ private:
|
||||
gp_Pnt myFirstPoint;
|
||||
gp_Pnt mySecondPoint;
|
||||
};
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
## Implementation of Attribute Transformation in a CPP file
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
\#include <MyPackage_Transformation.hxx>
|
||||
|
||||
//=======================================================================
|
||||
@@ -526,7 +526,7 @@ Standard_OStream& MyPackage_Transformation::Dump(Standard_OStream& anOS) const
|
||||
MyPackage_Transformation::MyPackage_Transformation():myType(gp_Identity){
|
||||
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
## Implementation of typical actions with standard OCAF attributes.
|
||||
|
||||
|
@@ -160,7 +160,7 @@ drivers for a function driver table with the help of *TFunction_DriverTable* cl
|
||||
|
||||
This is an example of the code for iteration and execution of functions.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
|
||||
// The scope of functions is defined.
|
||||
Handle(TFunction_Scope) scope = TFunction_Scope::Set( anyLabel );
|
||||
@@ -180,7 +180,7 @@ drivers for a function driver table with the help of *TFunction_DriverTable* cl
|
||||
const TDF_LabelList& currentFunctions = iterator.Current();
|
||||
|
||||
//The list of current functions is iterated.
|
||||
TDF_ListIteratorOfLabelList currentterator( currentFunctions );
|
||||
TDF_ListIteratorOfLabelList currentterator( currentFucntions );
|
||||
for (; currentIterator.More(); currentIterator.Next())
|
||||
{
|
||||
// An interface for the function is created.
|
||||
@@ -200,14 +200,14 @@ drivers for a function driver table with the help of *TFunction_DriverTable* cl
|
||||
} // end of iteration of current functions
|
||||
} // end of iteration of functions.
|
||||
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
### Example 2: Cylinder function driver
|
||||
|
||||
This is an example of the code for a cylinder function driver. To make the things clearer, the methods
|
||||
<i>\::Arguments()</i> and <i>\::Results()</i> from the base class are also mentioned.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
|
||||
// A virtual method ::Arguments() returns a list of arguments of the function.
|
||||
CylinderDriver::Arguments( TDF_LabelList& args )
|
||||
@@ -283,4 +283,4 @@ drivers for a function driver table with the help of *TFunction_DriverTable* cl
|
||||
|
||||
return 0;
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@@ -811,7 +811,7 @@ The following example illustrates how to use the GF algorithm:
|
||||
|
||||
#### Usage of the GF algorithm on C++ level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
BOPAlgo_Builder aBuilder;
|
||||
// Setting arguments
|
||||
TopTools_ListOfShape aLSObjects = …; // Objects
|
||||
@@ -865,7 +865,7 @@ const TopoDS_Shape& aResult = aBuilder.Shape();
|
||||
|
||||
#### Usage of the GF algorithm on Tcl level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
box b1 10 10 10
|
||||
box b2 3 4 5 10 10 10
|
||||
@@ -1199,7 +1199,7 @@ It is based on the General Fuse algorithm, thus all options of the General Fuse
|
||||
@subsubsection specification__boolean_8_3_1 API
|
||||
|
||||
On the low level the Splitter algorithm is implemented in class *BOPAlgo_Splitter*. The usage of this algorithm looks as follows:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
BOPAlgo_Splitter aSplitter;
|
||||
// Setting arguments and tools
|
||||
TopTools_ListOfShape aLSObjects = …; // Objects
|
||||
@@ -1218,12 +1218,12 @@ if (aSplitter.HasErrors()) { //check error status
|
||||
}
|
||||
//
|
||||
const TopoDS_Shape& aResult = aSplitter.Shape(); // result of the operation
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection specification__boolean_8_3_2 DRAW
|
||||
|
||||
The command *bsplit* implements the Splitter algorithm in DRAW. Similarly to the *bbuild* command for the General Fuse algorithm, the *bsplit* command should be used after the Pave Filler is filled.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
# s1 s2 s3 - objects
|
||||
# t1 t2 t3 - tools
|
||||
bclearobjects
|
||||
@@ -1232,7 +1232,7 @@ baddobjects s1 s2 s3
|
||||
baddtools t1 t2 t3
|
||||
bfillds
|
||||
bsplit result
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection specification__boolean_8_4 Examples
|
||||
|
||||
@@ -1240,7 +1240,7 @@ bsplit result
|
||||
|
||||
Splitting a face by the set of edges:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
# draw script for reproducing
|
||||
bclearobjects
|
||||
bcleartools
|
||||
@@ -1286,7 +1286,7 @@ bsplit result
|
||||
|
||||
Splitting a plate by the set of cylinders:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
# draw script for reproducing:
|
||||
bclearobjects
|
||||
bcleartools
|
||||
@@ -1677,7 +1677,7 @@ Let us consider face *F1* and solid *S2* that have an intersection curve:
|
||||
|
||||
@figure{/specification/boolean_operations/images/boolean_image046.png,"",230}
|
||||
|
||||
* The result of *Cut21* operation is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
* The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
|
||||
@subsubsection specification__boolean_9_4_16 Case 16: A Face and a Solid that have overlapping faces.
|
||||
|
||||
@@ -1695,7 +1695,7 @@ Let us consider face *F1* and solid *S2* that have overlapping faces:
|
||||
|
||||
@figure{/specification/boolean_operations/images/boolean_image049.png,"",230}
|
||||
|
||||
* The result of *Cut21* operation is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
* The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
|
||||
|
||||
@subsubsection specification__boolean_9_4_17 Case 17: A Face and a Solid that have overlapping edges.
|
||||
@@ -1712,7 +1712,7 @@ Let us consider face *F1* and solid *S2* that have overlapping edges:
|
||||
|
||||
@figure{/specification/boolean_operations/images/boolean_image051.png,"",230}
|
||||
|
||||
* The result of *Cut21* operation is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
* The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
|
||||
@subsubsection specification__boolean_9_4_18 Case 18: A Face and a Solid that have overlapping vertices.
|
||||
|
||||
@@ -1728,7 +1728,7 @@ Let us consider face *F1* and solid *S2* that have overlapping vertices:
|
||||
|
||||
@figure{/specification/boolean_operations/images/boolean_image053.png,"",230}
|
||||
|
||||
* The result of *Cut21* operation is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
* The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
|
||||
|
||||
@subsubsection specification__boolean_9_4_19 Case 19: Two intersecting Solids.
|
||||
|
||||
@@ -2182,7 +2182,7 @@ This option is useful e.g. for building a solid from the faces of one shell or f
|
||||
|
||||
#### C++ Level
|
||||
The usage of the algorithm on the API level:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
BOPAlgo_MakerVolume aMV;
|
||||
// Set the arguments
|
||||
TopTools_ListOfShape aLS = …; // arguments
|
||||
@@ -2206,7 +2206,7 @@ const TopoDS_Shape& aResult = aMV.Shape(); // result of the operation
|
||||
|
||||
#### Tcl Level
|
||||
To use the algorithm in Draw the command mkvolume has been implemented. The usage of this command is following:
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
Usage: mkvolume r b1 b2 ... [-c] [-ni] [-ai]
|
||||
Options:
|
||||
-c - use this option to have input compounds considered as set of separate arguments (allows passing multiple arguments as one compound);
|
||||
@@ -2309,7 +2309,7 @@ aResult = aCBuilder.Shape(); // the result
|
||||
#### DRAW usage
|
||||
|
||||
The following set of new commands has been implemented to run the algorithm in DRAW Test Harness:
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcbuild : Initialization of the Cells Builder. Use: *bcbuild r*
|
||||
bcadd : Add parts to result. Use: *bcadd r s1 (0,1) s2 (0,1) ... [-m material [-u]]*
|
||||
bcaddall : Add all parts to result. Use: *bcaddall r [-m material [-u]]*
|
||||
@@ -2320,7 +2320,7 @@ bcmakecontainers : Make containers from the parts added to result. Use: *bcmakec
|
||||
~~~~
|
||||
|
||||
Here is the example of the algorithm use on the DRAW level:
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
psphere s1 15
|
||||
psphere s2 15
|
||||
psphere s3 15
|
||||
@@ -2343,7 +2343,7 @@ bcremoveint res
|
||||
@subsection specification__boolean_10c_Cells_2 Examples
|
||||
|
||||
The following simple example illustrates the possibilities of the algorithm working on a cylinder and a sphere intersected by a plane:
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
pcylinder c 10 30
|
||||
psphere s 15
|
||||
ttranslate s 0 0 30
|
||||
@@ -2353,7 +2353,7 @@ mkface f p -25 30 -17 17
|
||||
|
||||
@figure{/specification/boolean_operations/images/cells_algorithm_001.png,"Arguments",160}
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bclearobjects
|
||||
bcleartools
|
||||
baddobjects c s f
|
||||
@@ -2363,7 +2363,7 @@ bcbuild r
|
||||
|
||||
#### 1. Common for all arguments
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res c 1 s 1 f 1
|
||||
~~~~
|
||||
@@ -2372,7 +2372,7 @@ bcadd res c 1 s 1 f 1
|
||||
|
||||
#### 2. Common between cylinder and face
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res f 1 c 1
|
||||
~~~~
|
||||
@@ -2381,7 +2381,7 @@ bcadd res f 1 c 1
|
||||
|
||||
#### 3. Common between cylinder and sphere
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res c 1 s 1
|
||||
~~~~
|
||||
@@ -2390,7 +2390,7 @@ bcadd res c 1 s 1
|
||||
|
||||
#### 4. Fuse of cylinder and sphere
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res c 1 -m 1
|
||||
bcadd res s 1 -m 1
|
||||
@@ -2401,7 +2401,7 @@ bcremoveint res
|
||||
|
||||
#### 5. Parts of the face inside solids - FUSE(COMMON(f, c), COMMON(f, s))
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res f 1 s 1 -m 1
|
||||
bcadd res f 1 c 1 -m 1
|
||||
@@ -2409,7 +2409,7 @@ bcadd res f 1 c 1 -m 1
|
||||
|
||||
@figure{/specification/boolean_operations/images/cells_algorithm_006_1.png,"Parts of the face inside solids",160}
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveint res
|
||||
~~~~
|
||||
|
||||
@@ -2417,7 +2417,7 @@ bcremoveint res
|
||||
|
||||
#### 6. Part of the face outside solids
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res f 1 c 0 s 0
|
||||
~~~~
|
||||
@@ -2426,7 +2426,7 @@ bcadd res f 1 c 0 s 0
|
||||
|
||||
#### 7. Fuse operation (impossible using standard Boolean Fuse operation)
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcremoveall
|
||||
bcadd res c 1 -m 1
|
||||
bcadd res s 1 -m 1
|
||||
@@ -2788,7 +2788,7 @@ For setting the Gluing options in DRAW it is necessary to call the <i>bglue</i>
|
||||
* 1 - for partial coincidence;
|
||||
* 2 - for full coincidence
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bglue 1
|
||||
~~~~
|
||||
|
||||
@@ -2836,7 +2836,7 @@ To enable the safe processing mode for the operation in DRAW, it is necessary to
|
||||
* 0 - default value, the safe mode is switched off;
|
||||
* 1 - the safe mode will be switched on.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bnondestructive 1
|
||||
~~~~
|
||||
|
||||
@@ -2867,7 +2867,7 @@ To enable/disable the classification of the solids in DRAW, it is necessary to c
|
||||
* 0 - disabling the classification;
|
||||
* 1 - default value, enabling the classification.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bcheckinverted 0
|
||||
~~~~
|
||||
|
||||
@@ -2893,7 +2893,7 @@ aGF.SetUseOBB(Standard_True);
|
||||
To enable/disable the usage of OBB in the operation in DRAW it is necessary to call the *buseobb* command with the appropriate value:
|
||||
* 0 - disabling the usage of OBB;
|
||||
* 1 - enabling the usage of OBB.
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
buseobb 1
|
||||
~~~~
|
||||
|
||||
@@ -2919,7 +2919,7 @@ Note that messages corresponding to errors and warnings are defined in resource
|
||||
These messages can be localized; for that put translated version to separate file and load it in the application by call to *Message_MsgFile::Load()* .
|
||||
|
||||
Here is the example of how to use this system:
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
BOPAlgo_PaveFiller aPF;
|
||||
aPF.SetArguments(...);
|
||||
aPF.Perform();
|
||||
@@ -2934,12 +2934,12 @@ if (aPF.HasErrors()) {
|
||||
}
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
DRAW commands executing Boolean operations output errors and warnings generated by these operations in textual form.
|
||||
Additional option allows saving shapes for which warnings have been generated, as DRAW variables.
|
||||
To activate this option, run command *bdrawwarnshapes* with argument 1 (or with 0 to deactivate):
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bdrawwarnshapes 1
|
||||
~~~~
|
||||
|
||||
@@ -2978,7 +2978,7 @@ But if the faces are fully coinciding, the result must be empty, and both faces
|
||||
|
||||
Example of the overlapping faces:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
plane p 0 0 0 0 0 1
|
||||
mkface f1 p -10 10 -10 10
|
||||
mkface f2 p 0 20 -10 10
|
||||
@@ -3005,7 +3005,7 @@ Thus, each of the input edges will be Modified into its two splits.
|
||||
But in the CUT operation on the same edges, the tool edge will be Deleted from the result and, thus, will not have any Modified shapes.
|
||||
|
||||
Example of the intersecting edges:
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
line l1 0 0 0 1 0 0
|
||||
mkedge e1 l1 -10 10
|
||||
|
||||
@@ -3051,7 +3051,7 @@ Two intersecting edges will both have the intersection vertices Generated from t
|
||||
|
||||
As for the operation with intersecting faces, consider the following example:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
plane p1 0 0 0 0 0 1
|
||||
mkface f1 p1 -10 10 -10 10
|
||||
|
||||
@@ -3115,7 +3115,7 @@ For controlling this possibility in DRAW the command **bsimplify** has been impl
|
||||
|
||||
Here is the simple example of simplification of the result of Fuse operation of two boxes:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
bsimplify -f 1
|
||||
|
||||
box b1 10 10 15
|
||||
@@ -3173,7 +3173,7 @@ The following example illustrates how to use General Fuse operator:
|
||||
|
||||
#### C++ Level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include <BRepAlgoAPI_BuilderAlgo.hxx>
|
||||
@@ -3205,7 +3205,7 @@ The following example illustrates how to use General Fuse operator:
|
||||
|
||||
#### Tcl Level
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
box b1 10 10 10
|
||||
box b2 3 4 5 10 10 10
|
||||
@@ -3231,7 +3231,7 @@ The following example illustrates how to use the Splitter operator:
|
||||
|
||||
#### C++ Level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include <BRepAlgoAPI_Splitter.hxx>
|
||||
@@ -3265,7 +3265,7 @@ const TopoDS_Shape& aResult = aSplitter.Shape();
|
||||
|
||||
#### Tcl Level
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
# objects
|
||||
box b1 10 10 10
|
||||
@@ -3297,7 +3297,7 @@ The following example illustrates how to use Common operation:
|
||||
|
||||
#### C++ Level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include < BRepAlgoAPI_Common.hxx>
|
||||
@@ -3336,7 +3336,7 @@ The following example illustrates how to use Common operation:
|
||||
|
||||
#### Tcl Level
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
box b1 10 10 10
|
||||
box b2 7 0 4 10 10 10
|
||||
@@ -3364,7 +3364,7 @@ The following example illustrates how to use Fuse operation:
|
||||
|
||||
#### C++ Level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include < BRepAlgoAPI_Fuse.hxx>
|
||||
@@ -3403,7 +3403,7 @@ The following example illustrates how to use Fuse operation:
|
||||
|
||||
#### Tcl Level
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
box b1 10 10 10
|
||||
box b2 7 0 4 10 10 10
|
||||
@@ -3431,7 +3431,7 @@ The following example illustrates how to use Cut operation:
|
||||
|
||||
#### C++ Level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include < BRepAlgoAPI_Cut.hxx>
|
||||
@@ -3470,7 +3470,7 @@ The following example illustrates how to use Cut operation:
|
||||
|
||||
#### Tcl Level
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
box b1 10 10 10
|
||||
box b2 7 0 4 10 10 10
|
||||
@@ -3499,7 +3499,7 @@ The following example illustrates how to use Section operation:
|
||||
|
||||
#### C++ Level
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include < BRepAlgoAPI_Section.hxx>
|
||||
@@ -3538,7 +3538,7 @@ The following example illustrates how to use Section operation:
|
||||
|
||||
#### Tcl Level
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
# prepare the arguments
|
||||
box b1 10 10 10
|
||||
box b2 3 4 5 10 10 10
|
||||
|
@@ -35,12 +35,12 @@ Each of these methods has two arguments:
|
||||
|
||||
The following sample code reads a shape from ASCII file and writes it to a binary one:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Shape aShape;
|
||||
if (BRepTools::Read (aShape, "source_file.txt")) {
|
||||
BinTools::Write (aShape, "result_file.bin");
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@section specification__brep_format_3 Format Common Structure
|
||||
|
||||
@@ -54,7 +54,6 @@ The following sample code reads a shape from ASCII file and writes it to a binar
|
||||
* \<flag\>: = "0" | "1";
|
||||
* \<int\>: It is an integer number from -2<sup>31</sup> to 2<sup>31</sup>-1 which is written in denary system;
|
||||
* \<real\>: It is a real from -1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> to 1.7976931348623158 @f$\cdot@f$ 10<sup>308</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and fractional parts;
|
||||
* \<short real\>: It is a real from -3.402823 @f$\cdot@f$ 10<sup>38</sup> to 3.402823 @f$\cdot@f$ 10<sup>38</sup> which is written in decimal or E form with base 10.The point is used as a delimiter of the integer and fractional parts;
|
||||
* \<2D point\>: = \<real\>\<_\>\<real\>;
|
||||
* \<3D point\>: = \<real\>(\<_\>\<real)\><sup>2</sup>;
|
||||
* \<2D direction\>: It is a \<2D point\> *x y* so that *x<sup>2</sup> + y<sup>2</sup>* = 1;
|
||||
@@ -72,7 +71,7 @@ The following sample code reads a shape from ASCII file and writes it to a binar
|
||||
\<content type\> = "DBRep_DrawableShape" \<_\\n\>\<_\\n\>;
|
||||
\<content type\> have other values [1].
|
||||
|
||||
\<version\> = ("CASCADE Topology V1, (c) Matra-Datavision" | "CASCADE Topology V2, (c) Matra-Datavision" | "CASCADE Topology V3, (c) Open Cascade")\<_\\n\>;
|
||||
\<version\> = ("CASCADE Topology V1, (c) Matra-Datavision" | "CASCADE Topology V2, (c) Matra-Datavision")\<_\\n\>;
|
||||
The difference of the versions is described in the document.
|
||||
|
||||
Sections \<locations\>, \<geometry\> and \<shapes\> are described below in separate chapters of the document.
|
||||
@@ -250,7 +249,7 @@ The example record is interpreted as a line which passes through a point *P*=(1
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<3D curve record 2> = "2" <_> <3D circle center> <_> <3D circle N> <_> <3D circle Dx> <_> <3D circle Dy> <_> <3D circle radius> <_\n>;
|
||||
|
||||
<3D circle center> = <3D point>;
|
||||
@@ -283,7 +282,7 @@ The example record is interpreted as a circle which has its center *P*=(1, 2, 3
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<3D curve record 3> = "3" <_> <3D ellipse center> <_> <3D ellipse N> <_> <3D ellipse Dmaj> <_> <3D ellipse Dmin> <_> <3D ellipse Rmaj> <_> <3D ellipse Rmin> <_\n>;
|
||||
|
||||
<3D ellipse center> = <3D point>;
|
||||
@@ -318,7 +317,7 @@ The example record is interpreted as an ellipse which has its center *P*=(1, 2,
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<3D curve record 4> = "4" <_> <3D parabola origin> <_> <3D parabola N> <_> <3D parabola Dx> <_> <3D parabola Dy> <_> <3D parabola focal length> <_\n>;
|
||||
|
||||
<3D parabola origin> = <3D point>;
|
||||
@@ -352,7 +351,7 @@ The example record is interpreted as a parabola in plane which passes through a
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<3D curve record 5> = "5" <_> <3D hyperbola origin> <_> <3D hyperbola N> <_> <3D hyperbola Dx> <_> <3D hyperbola Dy> <_> <3D hyperbola Kx> <_> <3D hyperbola Ky> <_\n>;
|
||||
|
||||
<3D hyperbola origin> = <3D point>;
|
||||
@@ -428,7 +427,7 @@ The example record is interpreted as a Bezier curve with a rational flag *r*=1,
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<3D curve record 7> = "7" <_> <3D B-spline rational flag> <_> "0" <_> <3D B-spline degree> <_>
|
||||
<3D B-spline pole count> <_> <3D B-spline multiplicity knot count> <3D B-spline weight poles>
|
||||
<_\n> <3D B-spline multiplicity knots> <_\n>;
|
||||
@@ -492,7 +491,7 @@ The example record is interpreted as a B-spline curve with a rational flag *r*=
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<3D curve record 8> = "8" <_> <3D trimmed curve u min> <_> <3D trimmed curve u max> <_\n> <3D curve record>;
|
||||
|
||||
<3D trimmed curve u min> = <real>;
|
||||
@@ -764,7 +763,7 @@ where @f$ V(v)=(5,2,0)+4 \cdot (cos(v) \cdot (1,0,0)+sin(v) \cdot (0,1,0)), V_{D
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<surface record 8> = "8" <_> <Bezier surface u rational flag> <_> <Bezier surface v rational flag> <_> <Bezier surface u degree> <_> <Bezier surface v degree> <_>
|
||||
<Bezier surface weight poles>;
|
||||
|
||||
@@ -1076,7 +1075,7 @@ The example record is interpreted as a line which passes through a point *P*=(3
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<2D curve record 2> = "2" <_> <2D circle center> <_> <2D circle Dx> <_> <2D circle Dy> <_> <2D circle radius> <_\n>;
|
||||
|
||||
<2D circle center> = <2D point>;
|
||||
@@ -1247,7 +1246,7 @@ The example record is interpreted as a Bezier curve with a rational flag *r*=1,
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<2D curve record 7> = "7" <_> <2D B-spline rational flag> <_> "0" <_> <2D B-spline degree> <_> <2D B-spline pole count> <_> <2D B-spline multiplicity knot count> <2D B-spline weight poles> <_\n> <2D B-spline multiplicity knots> <_\n>;
|
||||
|
||||
<2D B-spline rational flag> = <flag>;
|
||||
@@ -1430,15 +1429,15 @@ The example record describes a polyline from *m*=2 nodes with a parameter prese
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<triangulations> = <triangulation header> <_\n> <triangulation records>;
|
||||
|
||||
<triangulation header> = "Triangulations" <_> <triangulation count>;
|
||||
|
||||
<triangulation records> = <triangulation record> ^ <triangulation count>;
|
||||
|
||||
<triangulation record> = <triangulation node count> <_> <triangulation triangle count> <_> <triangulation parameter presence flag> [<_> <need to write normals flag>] <_> <triangulation deflection> <_\n>
|
||||
<triangulation nodes> [<_> <triangulation u v parameters>] <_> <triangulation triangles> [<_> <triangulation normals>] <_\n>;
|
||||
<triangulation record> = <triangulation node count> <_> <triangulation triangle count> <_> <triangulation parameter presence flag> <_> <triangulation deflection> <_\n>
|
||||
<triangulation nodes> [<_> <triangulation u v parameters>] <_> <triangulation triangles> <_\n>;
|
||||
|
||||
<triangulation node count> = <int>;
|
||||
|
||||
@@ -1446,8 +1445,6 @@ The example record describes a polyline from *m*=2 nodes with a parameter prese
|
||||
|
||||
<triangulation parameter presence flag> = <flag>;
|
||||
|
||||
<need to write normals flag> = <flag>;
|
||||
|
||||
<triangulation deflection> = <real>;
|
||||
|
||||
<triangulation nodes> = (<triangulation node> <_>) ^ <triangulation node count>;
|
||||
@@ -1461,17 +1458,10 @@ The example record describes a polyline from *m*=2 nodes with a parameter prese
|
||||
|
||||
<triangulation triangles> = (<triangulation triangle> <_>) ^ <triangulation triangle count>;
|
||||
|
||||
<triangulation triangle> = <int> <_> <int> <_> <int>;
|
||||
|
||||
<triangulation normals> = (<triangulation normal> <_>) ^ <triangulation node count> ^ 3;
|
||||
|
||||
<triangulation normal> = <short real>.
|
||||
<triangulation triangle> = <int> <_> <int> <_> <int>.
|
||||
~~~~
|
||||
|
||||
**Description**
|
||||
|
||||
\<triangulation u v parameters\> are used in version 2 or later.
|
||||
\<need to write normals flag\> and \<triangulation normals\> are used in version 3.
|
||||
|
||||
\<triangulation record\> describes a triangulation *T* which approximates a surface *S*. The triangulation data consist of a node count @f$ m \geq 3 @f$, a triangle count @f$ k \geq 1 @f$, a parameter presence flag *p*, a deflection @f$ d \geq 0 @f$, nodes @f$ N_{i}\; (1\leq i \leq m) @f$, parameter pairs @f$ u_{i}\; v_{i}\; (1\leq i \leq m) @f$, triangles @f$ n_{j,1}\; n_{j,2}\; n_{j,3}\; (1\leq j \leq k,\; n_{j,l} \in \left \{1,...,m \right \}\; (1\leq l\leq 3)) @f$. The parameters are present only if *p*=1. The deflection describes the triangulation deflection from the surface:
|
||||
|
||||
@@ -1650,7 +1640,7 @@ An example of section shapes and a whole *.brep file are given in chapter 7 @re
|
||||
|
||||
* @f$ f_{1} @f$ -- free;
|
||||
* @f$ f_{2} @f$ -- modified;
|
||||
* @f$ f_{3} @f$ -- IGNORED(version 1 only) \\ checked (version 2 or later);
|
||||
* @f$ f_{3} @f$ -- IGNORED(version 1) \\ checked (version 2);
|
||||
* @f$ f_{4} @f$ -- orientable;
|
||||
* @f$ f_{5} @f$ -- closed;
|
||||
* @f$ f_{6} @f$ -- infinite;
|
||||
@@ -1785,7 +1775,7 @@ The usage of \<vertex data representation u parameter\> *U* is described belo
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<edge data> = <_> <edge data tolerance> <_> <edge data same parameter flag> <_> edge data same range flag> <_> <edge data degenerated flag> <_\n> <edge data representations>;
|
||||
|
||||
<edge data tolerance> = <real>;
|
||||
@@ -1837,10 +1827,10 @@ Flags \<edge data same parameter flag\>, \<edge data same range flag\> and \<edg
|
||||
\<edge data representation data 1\> describes a 3D curve.
|
||||
|
||||
\<edge data representation data 2\> describes a 2D curve on a surface.
|
||||
\<curve values for parameter minimal and maximal values\> are used in version 2 or later.
|
||||
\<curve values for parameter minimal and maximal values\> are used only in version 2.
|
||||
|
||||
\<edge data representation data 3\> describes a 2D curve on a closed surface.
|
||||
\<curve values for parameter minimal and maximal values\> are used in version 2 or later.
|
||||
\<curve values for parameter minimal and maximal values\> are used only in version 2.
|
||||
|
||||
\<edge data representation data 5\> describes a 3D polyline.
|
||||
|
||||
@@ -1855,7 +1845,7 @@ Flags \<edge data same parameter flag\>, \<edge data same range flag\> and \<edg
|
||||
|
||||
**BNF-like Definition**
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
<face data> = <face data natural restriction flag> <_> <face data tolerance> <_> <surface number> <_> <location number> <\n> ["2" <_> <triangulation number>];
|
||||
|
||||
<face data natural restriction flag> = <flag>;
|
||||
|
@@ -192,7 +192,7 @@ It is called **local illumination**. Based on this name there is also a global o
|
||||
\f[L_{indirect} = \int\limits_H f(v, l) L_i^{indirect}(l) \cos\theta_l\, \mathrm{d}l\f]
|
||||
|
||||
It includes influence of light reflected or scattered from other points and environment's contribution.
|
||||
It's impossible to achieve photorealistic results without this component, but it is also very difficult to compute.
|
||||
It's impossible to achieve photorealistic results without this component, but is is also very difficult to compute.
|
||||
While the cross point light interaction cannot be calculated in a simple way (especially in real time rendering), the environment illumination has some options to be realized via precomputational work before visualization.
|
||||
But right now lets summarize the practical application of illumination model.
|
||||
At this moment the output radiance is represented as:
|
||||
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 42 KiB |
@@ -18,7 +18,7 @@ From a programming standpoint, Open CASCADE Technology is designed to enhance yo
|
||||
|
||||
To illustrate the use of classes provided in the 3D geometric modeling toolkits, you will create a bottle as shown:
|
||||
|
||||
@figure{/tutorial/images/tutorial_image001.png,"",240} height=350px
|
||||
@figure{/tutorial/images/tutorial_image001.png,"",240}
|
||||
|
||||
In the tutorial we will create, step-by-step, a function that will model a bottle as shown above. You will find the complete source code of this tutorial, including the very function *MakeBottle* in the distribution of Open CASCADE Technology. The function body is provided in the file samples/qt/Tutorial/src/MakeBottle.cxx.
|
||||
|
||||
@@ -34,7 +34,7 @@ We first define the bottle specifications as follows:
|
||||
|
||||
In addition, we decide that the bottle's profile (base) will be centered on the origin of the global Cartesian coordinate system.
|
||||
|
||||
@figure{/tutorial/images/tutorial_image002.png,"",240} height=350px
|
||||
@figure{/tutorial/images/tutorial_image002.png,"",240}
|
||||
|
||||
This modeling requires four steps:
|
||||
|
||||
@@ -66,19 +66,19 @@ To choose the best class for this application, consider the following:
|
||||
Since all the points you will define are only used to create the profile's curves, an object with a limited lifetime will do. Choose the *gp_Pnt* class.
|
||||
To instantiate a *gp_Pnt* object, just specify the X, Y, and Z coordinates of the points in the global Cartesian coordinate system:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Pnt aPnt1(-myWidth / 2., 0, 0);
|
||||
gp_Pnt aPnt2(-myWidth / 2., -myThickness / 4., 0);
|
||||
gp_Pnt aPnt3(0, -myThickness / 2., 0);
|
||||
gp_Pnt aPnt4(myWidth / 2., -myThickness / 4., 0);
|
||||
gp_Pnt aPnt5(myWidth / 2., 0, 0);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once your objects are instantiated, you can use methods provided by the class to access and modify its data. For example, to get the X coordinate of a point:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Standard_Real xValue1 = aPnt1.X();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB2_2 Profile: Defining the Geometry
|
||||
With the help of the previously defined points, you can compute a part of the bottle's profile geometry. As shown in the figure below, it will consist of two segments and one arc.
|
||||
@@ -95,15 +95,15 @@ This is because the *GC* provides two algorithm classes which are exactly what i
|
||||
|
||||
Both of these classes return a *Geom_TrimmedCurve* manipulated by handle. This entity represents a base curve (line or circle, in our case), limited between two of its parameter values. For example, circle C is parameterized between 0 and 2PI. If you need to create a quarter of a circle, you create a *Geom_TrimmedCurve* on C limited between 0 and M_PI/2.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Handle(Geom_TrimmedCurve) aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3,aPnt4);
|
||||
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1, aPnt2);
|
||||
Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(aPnt4, aPnt5);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All *GC* classes provide a casting method to obtain a result automatically with a function-like call. Note that this method will raise an exception if construction has failed. To handle possible errors more explicitly, you may use the *IsDone* and *Value* methods. For example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
GC_MakeSegment mkSeg (aPnt1, aPnt2);
|
||||
Handle(Geom_TrimmedCurve) aSegment1;
|
||||
if(mkSegment.IsDone()){
|
||||
@@ -112,7 +112,7 @@ All *GC* classes provide a casting method to obtain a result automatically with
|
||||
else {
|
||||
// handle error
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB2_3 Profile: Defining the Topology
|
||||
@@ -144,18 +144,18 @@ Referring to the previous table, to build the profile, you will create:
|
||||
However, the *TopoDS* package provides only the data structure of the topological entities. Algorithm classes available to compute standard topological objects can be found in the *BRepBuilderAPI* package.
|
||||
To create an edge, you use the BRepBuilderAPI_MakeEdge class with the previously computed curves:
|
||||
|
||||
~~~~{.cpp}
|
||||
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
|
||||
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle);
|
||||
TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(aSegment2);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
|
||||
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle);
|
||||
TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment2);
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In Open CASCADE Technology, you can create edges in several ways. One possibility is to create an edge directly from two points, in which case the underlying geometry of this edge is a line, bounded by two vertices being automatically computed from the two input points. For example, anEdge1 and anEdge3 could have been computed in a simpler way:
|
||||
In Open CASCADE Technology, you can create edges in several ways. One possibility is to create an edge directly from two points, in which case the underlying geometry of this edge is a line, bounded by two vertices being automatically computed from the two input points. For example, aEdge1 and aEdge3 could have been computed in a simpler way:
|
||||
|
||||
~~~~{.cpp}
|
||||
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aPnt1, aPnt3);
|
||||
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(aPnt4, aPnt5);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aPnt1, aPnt3);
|
||||
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aPnt4, aPnt5);
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To connect the edges, you need to create a wire with the *BRepBuilderAPI_MakeWire* class. There are two ways of building a wire with this class:
|
||||
|
||||
@@ -164,9 +164,9 @@ To connect the edges, you need to create a wire with the *BRepBuilderAPI_MakeWir
|
||||
|
||||
When building a wire from less than four edges, as in the present case, you can use the constructor directly as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(anEdge1, anEdge2, anEdge3);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1, aEdge2, aEdge3);
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB2_4 Profile: Completing the Profile
|
||||
@@ -186,17 +186,17 @@ The first way is to define it from scratch, using its geometric definition:
|
||||
* X axis is located at (0, 0, 0) - use the *gp_Pnt* class.
|
||||
* X axis direction is (1, 0, 0) - use the *gp_Dir* class. A *gp_Dir* instance is created out of its X, Y and Z coordinates.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Pnt aOrigin(0, 0, 0);
|
||||
gp_Dir xDir(1, 0, 0);
|
||||
gp_Ax1 xAxis(aOrigin, xDir);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The second and simplest way is to use the geometric constants defined in the gp package (origin, main directions and axis of the global coordinate system). To get the X axis, just call the *gp::OX* method:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Ax1 xAxis = gp::OX();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
As previously explained, the 3D geometric transformation is defined with the *gp_Trsf* class. There are two different ways to use this class:
|
||||
|
||||
@@ -205,43 +205,43 @@ As previously explained, the 3D geometric transformation is defined with the *gp
|
||||
|
||||
Since the simplest approach is always the best one, you should use the SetMirror method with the axis as the center of symmetry.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetMirror(xAxis);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You now have all necessary data to apply the transformation with the BRepBuilderAPI_Transform class by specifying:
|
||||
|
||||
* the shape on which the transformation must be applied.
|
||||
* the geometric transformation
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepBuilderAPI_Transform aBRepTrsf(aWire, aTrsf);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
*BRepBuilderAPI_Transform* does not modify the nature of the shape: the result of the reflected wire remains a wire. But the function-like call or the *BRepBuilderAPI_Transform::Shape* method returns a *TopoDS_Shape* object:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Shape aMirroredShape = aBRepTrsf.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
What you need is a method to consider the resulting reflected shape as a wire. The *TopoDS* global functions provide this kind of service by casting a shape into its real type. To cast the transformed wire, use the *TopoDS::Wire* method.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Wire aMirroredWire = TopoDS::Wire(aMirroredShape);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The bottle's profile is almost finished. You have created two wires: *aWire* and *aMirroredWire*. You need to concatenate them to compute a single shape. To do this, you use the *BRepBuilderAPI_MakeWire* class as follows:
|
||||
|
||||
* create an instance of *BRepBuilderAPI_MakeWire*.
|
||||
* add all edges of the two wires by using the *Add* method on this object.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepBuilderAPI_MakeWire mkWire;
|
||||
mkWire.Add(aWire);
|
||||
mkWire.Add(aMirroredWire);
|
||||
TopoDS_Wire myWireProfile = mkWire.Wire();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@section sec3 Building the Body
|
||||
@@ -250,7 +250,7 @@ The bottle's profile is almost finished. You have created two wires: *aWire* and
|
||||
@subsection OCCT_TUTORIAL_SUB3_1 Prism the Profile
|
||||
|
||||
|
||||
To compute the main body of the bottle, you need to create a solid shape. The simplest way is to use the previously created profile and sweep it along a direction. The *Prism* functionality of Open CASCADE Technology is the most appropriate for that task. It accepts a shape and a direction as input and generates a new shape according to the following rules:
|
||||
To compute the main body of the bottle, you need to create a solid shape. The simplest way is to use the previously created profile and to sweep it along a direction. The *Prism* functionality of Open CASCADE Technology is the most appropriate for that task. It accepts a shape and a direction as input and generates a new shape according to the following rules:
|
||||
|
||||
| Shape | Generates |
|
||||
| :----- | :----------------- |
|
||||
@@ -260,15 +260,15 @@ To compute the main body of the bottle, you need to create a solid shape. The si
|
||||
| Face | Solid |
|
||||
| Shell | Compound of Solids |
|
||||
|
||||
@figure{/tutorial/images/tutorial_image007.png,"",240} height=350px
|
||||
@figure{/tutorial/images/tutorial_image007.png,"",240}
|
||||
|
||||
Your current profile is a wire. Referring to the Shape/Generates table, you need to compute a face out of its wire to generate a solid.
|
||||
To create a face, use the *BRepBuilderAPI_MakeFace* class. As previously explained, a face is a part of a surface bounded by a closed wire. Generally, *BRepBuilderAPI_MakeFace* computes a face out of a surface and one or more wires.
|
||||
When the wire lies on a plane, the surface is automatically computed.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Face myFaceProfile = BRepBuilderAPI_MakeFace(myWireProfile);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The *BRepPrimAPI* package provides all the classes to create topological primitive constructions: boxes, cones, cylinders, spheres, etc. Among them is the *BRepPrimAPI_MakePrism* class. As specified above, the prism is defined by:
|
||||
|
||||
@@ -277,15 +277,15 @@ The *BRepPrimAPI* package provides all the classes to create topological primiti
|
||||
|
||||
You want the solid to be finite, swept along the Z axis and to be myHeight height. The vector, defined with the *gp_Vec* class on its X, Y and Z coordinates, is:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Vec aPrismVec(0, 0, myHeight);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All the necessary data to create the main body of your bottle is now available. Just apply the *BRepPrimAPI_MakePrism* class to compute the solid:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile, aPrismVec);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB3_2 Applying Fillets
|
||||
@@ -297,7 +297,7 @@ For our purposes, we will specify that fillets must be:
|
||||
* applied on all edges of the shape
|
||||
* have a radius of *myThickness* / 12
|
||||
|
||||
@figure{/tutorial/images/tutorial_image008.png,"",240} height=350px
|
||||
@figure{/tutorial/images/tutorial_image008.png,"",240}
|
||||
|
||||
To apply fillets on the edges of a shape, you use the *BRepFilletAPI_MakeFillet* class. This class is normally used as follows:
|
||||
|
||||
@@ -305,9 +305,9 @@ To apply fillets on the edges of a shape, you use the *BRepFilletAPI_MakeFillet*
|
||||
* Add the fillet descriptions (an edge and a radius) using the *Add* method (you can add as many edges as you need).
|
||||
* Ask for the resulting filleted shape with the *Shape* method.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepFilletAPI_MakeFillet mkFillet(myBody);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To add the fillet description, you need to know the edges belonging to your shape. The best solution is to explore your solid to retrieve its edges. This kind of functionality is provided with the *TopExp_Explorer* class, which explores the data structure described in a *TopoDS_Shape* and extracts the sub-shapes you specifically need.
|
||||
Generally, this explorer is created by providing the following information:
|
||||
@@ -315,9 +315,9 @@ Generally, this explorer is created by providing the following information:
|
||||
* the shape to explore
|
||||
* the type of sub-shapes to be found. This information is given with the *TopAbs_ShapeEnum* enumeration.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopExp_Explorer anEdgeExplorer(myBody, TopAbs_EDGE);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
An explorer is usually applied in a loop by using its three main methods:
|
||||
|
||||
@@ -326,26 +326,26 @@ An explorer is usually applied in a loop by using its three main methods:
|
||||
* *Next()* to move onto the next sub-shape to explore.
|
||||
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
while(anEdgeExplorer.More()){
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(anEdgeExplorer.Current());
|
||||
//Add edge to fillet algorithm
|
||||
...
|
||||
anEdgeExplorer.Next();
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the explorer loop, you have found all the edges of the bottle shape. Each one must then be added in the *BRepFilletAPI_MakeFillet* instance with the *Add()* method. Do not forget to specify the radius of the fillet along with it.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
mkFillet.Add(myThickness / 12., anEdge);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once this is done, you perform the last step of the procedure by asking for the filleted shape.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
myBody = mkFillet.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB3_3 Adding the Neck
|
||||
@@ -353,36 +353,36 @@ Once this is done, you perform the last step of the procedure by asking for the
|
||||
|
||||
To add a neck to the bottle, you will create a cylinder and fuse it to the body. The cylinder is to be positioned on the top face of the body with a radius of *myThickness* / 4. and a height of *myHeight* / 10.
|
||||
|
||||
@figure{/tutorial/images/tutorial_image009.png,"",240} height=350px
|
||||
@figure{/tutorial/images/tutorial_image009.png,"",240}
|
||||
|
||||
To position the cylinder, you need to define a coordinate system with the *gp_Ax2* class defining a right-handed coordinate system from a point and two directions - the main (Z) axis direction and the X direction (the Y direction is computed from these two).
|
||||
To align the neck with the center of the top face, being in the global coordinate system (0, 0, *myHeight*), with its normal on the global Z axis, your local coordinate system can be defined as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Pnt neckLocation(0, 0, myHeight);
|
||||
gp_Dir neckAxis = gp::DZ();
|
||||
gp_Ax2 neckAx2(neckLocation, neckAxis);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To create a cylinder, use another class from the primitives construction package: the *BRepPrimAPI_MakeCylinder* class. The information you must provide is:
|
||||
|
||||
* the coordinate system where the cylinder will be located;
|
||||
* the radius and height.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Standard_Real myNeckRadius = myThickness / 4.;
|
||||
Standard_Real myNeckHeight = myHeight / 10;
|
||||
BRepPrimAPI_MakeCylinder MKCylinder(neckAx2, myNeckRadius, myNeckHeight);
|
||||
TopoDS_Shape myNeck = MKCylinder.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You now have two separate parts: a main body and a neck that you need to fuse together.
|
||||
The *BRepAlgoAPI* package provides services to perform Boolean operations between shapes, and especially: *common* (Boolean intersection), *cut* (Boolean subtraction) and *fuse* (Boolean union).
|
||||
Use *BRepAlgoAPI_Fuse* to fuse the two shapes:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
myBody = BRepAlgoAPI_Fuse(myBody, myNeck);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB3_4 Creating a Hollowed Solid
|
||||
@@ -395,7 +395,7 @@ In Open CASCADE Technology, a hollowed solid is called a *Thick* *Solid* and is
|
||||
* Create a parallel wall W2 from W1 at a distance D. If D is positive, W2 will be outside the initial solid, otherwise it will be inside.
|
||||
* Compute a solid from the two walls W1 and W2.
|
||||
|
||||
@figure{/tutorial/images/tutorial_image010.png,"",240} height=350px
|
||||
@figure{/tutorial/images/tutorial_image010.png,"",240}
|
||||
|
||||
To compute a thick solid, you create an instance of the *BRepOffsetAPI_MakeThickSolid* class by giving the following information:
|
||||
|
||||
@@ -411,11 +411,11 @@ The challenging part in this procedure is to find the face to remove from your s
|
||||
|
||||
To find the face with such characteristics, you will once again use an explorer to iterate on all the bottle's faces to find the appropriate one.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
for(TopExp_Explorer aFaceExplorer(myBody, TopAbs_FACE) ; aFaceExplorer.More() ; aFaceExplorer.Next()){
|
||||
TopoDS_Face aFace = TopoDS::Face(aFaceExplorer.Current());
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For each detected face, you need to access the geometric properties of the shape: use the *BRep_Tool* class for that. The most commonly used methods of this class are:
|
||||
|
||||
@@ -423,9 +423,9 @@ For each detected face, you need to access the geometric properties of the shape
|
||||
* *Curve* to access the 3D curve of an edge;
|
||||
* *Point* to access the 3D point of a vertex.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
As you can see, the *BRep_Tool::Surface* method returns an instance of the *Geom_Surface* class manipulated by handle. However, the *Geom_Surface* class does not provide information about the real type of the object *aSurface*, which could be an instance of *Geom_Plane*, *Geom_CylindricalSurface*, etc.
|
||||
All objects manipulated by handle, like *Geom_Surface*, inherit from the *Standard_Transient* class which provides two very useful methods concerning types:
|
||||
@@ -436,51 +436,52 @@ All objects manipulated by handle, like *Geom_Surface*, inherit from the *Standa
|
||||
DynamicType returns the real type of the object, but you need to compare it with the existing known types to determine whether *aSurface* is a plane, a cylindrical surface or some other type.
|
||||
To compare a given type with the type you seek, use the *STANDARD_TYPE* macro, which returns the type of a class:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane)){
|
||||
//
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If this comparison is true, you know that the *aSurface* real type is *Geom_Plane*. You can then convert it from *Geom_Surface* to *Geom_Plane* by using the *DownCast()* method provided by each class inheriting *Standard_Transient*. As its name implies, this static method is used to downcast objects to a given type with the following syntax:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Remember that the goal of all these conversions is to find the highest face of the bottle lying on a plane. Suppose that you have these two global variables:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Face faceToRemove;
|
||||
Standard_Real zMax = -1;
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can easily find the plane whose origin is the biggest in Z knowing that the location of the plane is given with the *Geom_Plane::Location* method. For example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Pnt aPnt = aPlane->Location();
|
||||
Standard_Real aZ = aPnt.Z();
|
||||
if(aZ > zMax){
|
||||
zMax = aZ;
|
||||
faceToRemove = aFace;
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You have now found the top face of the neck. Your final step before creating the hollowed solid is to put this face in a list. Since more than one face can be removed from the initial solid, the *BRepOffsetAPI_MakeThickSolid* constructor takes a list of faces as arguments.
|
||||
Open CASCADE Technology provides many collections for different kinds of objects: see *TColGeom* package for collections of objects from *Geom* package, *TColgp* package for collections of objects from gp package, etc.
|
||||
The collection for shapes can be found in the *TopTools* package. As *BRepOffsetAPI_MakeThickSolid* requires a list, use the *TopTools_ListOfShape* class.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopTools_ListOfShape facesToRemove;
|
||||
facesToRemove.Append(faceToRemove);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
All the necessary data are now available so you can create your hollowed solid by calling the *BRepOffsetAPI_MakeThickSolid* MakeThickSolidByJoin method:
|
||||
|
||||
~~~~{.cpp}
|
||||
BRepOffsetAPI_MakeThickSolid aSolidMaker;
|
||||
aSolidMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = aSolidMaker.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepOffsetAPI_MakeThickSolid BodyMaker;
|
||||
BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = BodyMaker.Shape();
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@section sec4 Building the Threading
|
||||
@@ -492,7 +493,7 @@ All the necessary data are now available so you can create your hollowed solid b
|
||||
Up to now, you have learned how to create edges out of 3D curves.
|
||||
You will now learn how to create an edge out of a 2D curve and a surface.
|
||||
To learn this aspect of Open CASCADE Technology, you will build helicoidal profiles out of 2D curves on cylindrical surfaces. The theory is more complex than in previous steps, but applying it is very simple.
|
||||
As a first step, you compute these cylindrical surfaces. You are already familiar with the curves of the *Geom* package. Now you can create a cylindrical surface (*Geom_CylindricalSurface*) using:
|
||||
As a first step, you compute these cylindrical surfaces. You are already familiar with curves of the *Geom* package. Now you can create a cylindrical surface (*Geom_CylindricalSurface*) using:
|
||||
|
||||
* a coordinate system;
|
||||
* a radius.
|
||||
@@ -503,11 +504,11 @@ Using the same coordinate system *neckAx2* used to position the neck, you create
|
||||
|
||||
Notice that one of the cylindrical surfaces is smaller than the neck. There is a good reason for this: after the thread creation, you will fuse it with the neck. So, we must make sure that the two shapes remain in contact.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 0.99);
|
||||
|
||||
Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 1.05);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB4_2 Defining 2D Curves
|
||||
@@ -563,11 +564,11 @@ To use 2D primitive geometry types of Open CASCADE Technology for defining a poi
|
||||
* To define a 2D direction (unit vector) from its X and Y coordinates, use the gp_Dir2d class. The coordinates will automatically be normalized.
|
||||
* To define a 2D right-handed coordinate system, use the *gp_Ax2d* class, which is computed from a point (origin of the coordinate system) and a direction - the X direction of the coordinate system. The Y direction will be automatically computed.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Pnt2d aPnt(2. * M_PI, myNeckHeight / 2.);
|
||||
gp_Dir2d aDir(2. * M_PI, myNeckHeight / 4.);
|
||||
gp_Ax2d anAx2d(aPnt, aDir);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You will now define the curves. As previously mentioned, these thread profiles are computed on two cylindrical surfaces. In the following figure, curves on the left define the base (on *aCyl1* surface) and the curves on the right define the top of the thread's shape (on *aCyl2* surface).
|
||||
|
||||
@@ -587,36 +588,36 @@ Supposing that:
|
||||
|
||||
Your ellipses are defined as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Standard_Real aMajor = 2. * M_PI;
|
||||
Standard_Real aMinor = myNeckHeight / 10;
|
||||
Handle(Geom2d_Ellipse) anEllipse1 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor);
|
||||
Handle(Geom2d_Ellipse) anEllipse2 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor / 4);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To describe portions of curves for the arcs drawn above, you define *Geom2d_TrimmedCurve* trimmed curves out of the created ellipses and two parameters to limit them.
|
||||
As the parametric equation of an ellipse is P(U) = O + (MajorRadius * cos(U) * XDirection) + (MinorRadius * sin(U) * YDirection), the ellipses need to be limited between 0 and M_PI.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Handle(Geom2d_TrimmedCurve) anArc1 = new Geom2d_TrimmedCurve(anEllipse1, 0, M_PI);
|
||||
Handle(Geom2d_TrimmedCurve) anArc2 = new Geom2d_TrimmedCurve(anEllipse2, 0, M_PI);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The last step consists in defining the segment, which is the same for the two profiles: a line limited by the first and the last point of one of the arcs.
|
||||
To access the point corresponding to the parameter of a curve or a surface, you use the Value or D0 method (meaning 0th derivative), D1 method is for the first derivative, D2 for the second one.
|
||||
To access the point corresponding to the parameter of a curve or a surface, you use the Value or D0 method (meaning 0th derivative), D1 method is for first derivative, D2 for the second one.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0);
|
||||
gp_Pnt2d anEllipsePnt2;
|
||||
anEllipse1->D0(M_PI, anEllipsePnt2);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When creating the bottle's profile, you used classes from the *GC* package, providing algorithms to create elementary geometries.
|
||||
In 2D geometry, this kind of algorithms is found in the *GCE2d* package. Class names and behaviors are similar to those in *GC*. For example, to create a 2D segment out of two points:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
Handle(Geom2d_TrimmedCurve) aSegment = GCE2d_MakeSegment(anEllipsePnt1, anEllipsePnt2);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB4_3 Building Edges and Wires
|
||||
@@ -636,28 +637,28 @@ Previously, you have built:
|
||||
|
||||
To compute the edges out of these curves, once again use the *BRepBuilderAPI_MakeEdge* class. One of its constructors allows you to build an edge out of a curve described in the 2D parametric space of a surface.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Edge anEdge1OnSurf1 = BRepBuilderAPI_MakeEdge(anArc1, aCyl1);
|
||||
TopoDS_Edge anEdge2OnSurf1 = BRepBuilderAPI_MakeEdge(aSegment, aCyl1);
|
||||
TopoDS_Edge anEdge1OnSurf2 = BRepBuilderAPI_MakeEdge(anArc2, aCyl2);
|
||||
TopoDS_Edge anEdge2OnSurf2 = BRepBuilderAPI_MakeEdge(aSegment, aCyl2);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Now, you can create the two profiles of the threading, lying on each surface.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Wire threadingWire1 = BRepBuilderAPI_MakeWire(anEdge1OnSurf1, anEdge2OnSurf1);
|
||||
TopoDS_Wire threadingWire2 = BRepBuilderAPI_MakeWire(anEdge1OnSurf2, anEdge2OnSurf2);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Remember that these wires were built out of a surface and 2D curves.
|
||||
One important data item is missing as far as these wires are concerned: there is no information on the 3D curves. Fortunately, you do not need to compute this yourself, which can be a difficult task since the mathematics can be quite complex.
|
||||
When a shape contains all the necessary information except 3D curves, Open CASCADE Technology provides a tool to build them automatically. In the BRepLib tool package, you can use the *BuildCurves3d* method to compute 3D curves for all the edges of a shape.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepLib::BuildCurves3d(threadingWire1);
|
||||
BRepLib::BuildCurves3d(threadingWire2);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@subsection OCCT_TUTORIAL_SUB4_4 Creating Threading
|
||||
@@ -674,12 +675,12 @@ The loft function is implemented in the *BRepOffsetAPI_ThruSections* class, whic
|
||||
* Use the *CheckCompatibility* method to activate (or deactivate) the option that checks whether the wires have the same number of edges. In this case, wires have two edges each, so you can deactivate this option.
|
||||
* Ask for the resulting loft shape with the Shape method.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepOffsetAPI_ThruSections aTool(Standard_True);
|
||||
aTool.AddWire(threadingWire1); aTool.AddWire(threadingWire2);
|
||||
aTool.CheckCompatibility(Standard_False);
|
||||
TopoDS_Shape myThreading = aTool.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@section sec5 Building the Resulting Compound
|
||||
@@ -687,17 +688,17 @@ The loft function is implemented in the *BRepOffsetAPI_ThruSections* class, whic
|
||||
|
||||
You are almost done building the bottle. Use the *TopoDS_Compound* and *BRep_Builder* classes to build single shape from *myBody* and *myThreading*:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Compound aRes;
|
||||
BRep_Builder aBuilder;
|
||||
aBuilder.MakeCompound (aRes);
|
||||
aBuilder.Add (aRes, myBody);
|
||||
aBuilder.Add (aRes, myThreading);
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Congratulations! Your bottle is complete. Here is the result snapshot of the Tutorial application:
|
||||
|
||||
@figure{/tutorial/images/tutorial_image019.png,"",320} height=450px
|
||||
@figure{/tutorial/images/tutorial_image019.png,"",320}
|
||||
|
||||
We hope that this tutorial has provided you with a feel for the industrial strength power of Open CASCADE Technology.
|
||||
If you want to know more and develop major projects using Open CASCADE Technology, we invite you to study our training, support, and consulting services on our site at https://www.opencascade.com/content/technology-support. Our professional services can maximize the power of your Open CASCADE Technology applications.
|
||||
@@ -708,7 +709,7 @@ If you want to know more and develop major projects using Open CASCADE Technolog
|
||||
|
||||
Complete definition of MakeBottle function (defined in the file src/MakeBottle.cxx of the Tutorial):
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
TopoDS_Shape MakeBottle(const Standard_Real myWidth, const Standard_Real myHeight,
|
||||
const Standard_Real myThickness)
|
||||
{
|
||||
@@ -795,9 +796,9 @@ Complete definition of MakeBottle function (defined in the file src/MakeBottle.c
|
||||
|
||||
TopTools_ListOfShape facesToRemove;
|
||||
facesToRemove.Append(faceToRemove);
|
||||
BRepOffsetAPI_MakeThickSolid aSolidMaker;
|
||||
aSolidMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = aSolidMaker.Shape();
|
||||
BRepOffsetAPI_MakeThickSolid BodyMaker;
|
||||
BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = BodyMaker.Shape();
|
||||
// Threading : Create Surfaces
|
||||
Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 0.99);
|
||||
Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 1.05);
|
||||
@@ -845,5 +846,5 @@ Complete definition of MakeBottle function (defined in the file src/MakeBottle.c
|
||||
|
||||
return aRes;
|
||||
}
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@@ -39,7 +39,7 @@ Porting of user applications from an earlier OCCT version to version 6.5 require
|
||||
Porting of user applications from an earlier OCCT version to version 6.5.1 requires taking into account the following major changes:
|
||||
|
||||
* Method *Graphic3d_Structure::Groups()* now returns *Graphic3d_SequenceOfGroup*. If this method has been used, the application code should be updated to iterate another collection type or, if *Graphic3d_HSetOfGroup* is required, to fill its own collection:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
const Graphic3d_SequenceOfGroup& aGroupsSeq = theStructure.Groups();
|
||||
Handle(Graphic3d_HSetOfGroup) aGroupSet = new Graphic3d_HSetOfGroup();
|
||||
Standard_Integer aLen = aGroupsSeq.Length();
|
||||
@@ -62,7 +62,7 @@ Porting of user applications from an earlier OCCT version to version 6.5.2 requi
|
||||
* If the callback mechanism in call_togl_redraw function was used in the application code, it is necessary to revise it to take into account the new callback execution and provide a check of reason value of Aspect_GraphicCallbackStruct in callback methods to confirm that the callback code is executed at the right moment. Now the callbacks are executed before redrawing the underlayer, before redrawing the overlayer and at the end of redrawing. The information about the moment when the callback is invoked is provided with the reason value in form of an additional bit flag <i>(OCC_PRE_REDRAW, OCC_PRE_OVERLAY)</i>. The state of OpenGl changed in callback methods will not be restored automatically, which might lead to unwanted behavior in redrawing procedure.
|
||||
* The print method used in the application code might need to be revised to take into account the ability to choose between print algorithms: tile and stretch. The stretch algorithm will be selected by default during porting.
|
||||
* It is recommended to *BRepMesh_DiscretFactory* users, to check *BRepMesh_DiscretFactory::SetDefault()* return value to determine plugin availability / validity. *BRepMesh_DiscretFactory::Discret()* method now returns handle instead of pointer. The code should be updated in the following manner:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Handle(BRepMesh_DiscretRoot) aMeshAlgo = BRepMesh_DiscretFactory::Get().Discret (theShape, theDeflection, theAngularToler);
|
||||
if (!aMeshAlgo.IsNull()) {}
|
||||
~~~~
|
||||
@@ -88,7 +88,7 @@ Porting of user applications from an earlier OCCT version to version 6.5.3 requi
|
||||
|
||||
Porting of user applications from an earlier OCCT version to version 6.5.4 requires taking into account the following major changes:
|
||||
* The code using obsolete classes *Aspect_PixMap, Xw_PixMap* and *WNT_PixMap* should be rewritten implementing class *Image_PixMap*, which is now retrieved by *ToPixMap* methods as argument. A sample code using *ToPixMap* is given below:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <Image_AlienPixMap.hxx>
|
||||
void dump (Handle(V3d_View)& theView3D)
|
||||
{
|
||||
@@ -121,7 +121,7 @@ Correspondingly, the code using methods *SetAnimationModeOn(), SetAnimationModeO
|
||||
* Interactive selection of 2D presentations should be set up inside *ComputeSelection()* virtual method of a custom interactive object class, using standard sensitive entities from *Select3D* package and standard or custom entity owners derived from *SelectMgr_EntityOwner* base.
|
||||
Refer to the Visualization User's Guide for further details concerning OCCT 3D visualization and selection classes. See also *Viewer2D* OCCT sample application, which shows how 2D drawing can be implemented using TKV3d API.
|
||||
* Run-time graphic driver library loading mechanism based on *CSF_GraphicShr* environment variable usage has been replaced by explicit linking against *TKOpenGl* library. The code sample below shows how the graphic driver should be created and initialized in the application code:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
// initialize a new viewer with OpenGl graphic driver
|
||||
Handle(Graphic3d_GraphicDriver) aGraphicDriver =
|
||||
new OpenGl_GraphicDriver ("TKOpenGl");
|
||||
@@ -264,7 +264,7 @@ Custom Interactive Objects should implement new virtual method *SelectMgr_Select
|
||||
|
||||
Now the method *SelectMgr_Selection::Sensitive()* does not return *SelectBasics_SensitiveEntity*. It returns an instance of *SelectMgr_SensitiveEntity*, which belongs to a different class hierarchy (thus *DownCast()* will fail). To access base sensitive it is necessary to use method *SelectMgr_SensitiveEntity::BaseSensitive()*. For example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Handle(SelectMgr_Selection) aSelection = anInteractiveObject->Selection (aMode);
|
||||
for (aSelection->Init(); aSelection->More(); aSelection->Next())
|
||||
{
|
||||
@@ -286,7 +286,7 @@ The depth and distance to the center of geometry must be calculated for the 3D p
|
||||
|
||||
Here is an example of overlap/inclusion test for a box:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
if (!theMgr.IsOverlapAllowed()) // check for inclusion
|
||||
{
|
||||
Standard_Boolean isInside = Standard_True;
|
||||
@@ -396,7 +396,7 @@ However, due to redesign of basic mechanisms (CDL generic classes, Handles and R
|
||||
|
||||
WOK is not necessary anymore for building OCCT from sources, though it still can be used in a traditional way -- auxiliary files required for that are preserved.
|
||||
The recommended method for building OCCT 7.x is CMake, see @ref build_occt_win_cmake.
|
||||
The alternative solution is to use project files generated by OCCT legacy tool **genproj**, see @ref build_occt_genproj.
|
||||
The alternative solution is to use project files generated by OCCT legacy tool **genproj**, see @ref build_occt_genproj, @ref build_occt_win_codeblocks, and @ref build_occt_macos_xcode.
|
||||
|
||||
@subsubsection upgrade_occt700_cdl_auto Automatic upgrade
|
||||
|
||||
@@ -404,26 +404,26 @@ Most of typical changes required for upgrading code for OCCT 7.0 can be done aut
|
||||
This tool is a Tcl script, thus Tcl should be available on your workstation to run it.
|
||||
|
||||
Example:
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
$ tclsh
|
||||
% source <path_to_occt>/adm/upgrade.tcl
|
||||
% upgrade -recurse -all -src=<path_to_your_sources>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
On Windows, the helper batch script *upgrade.bat* can be used, provided that Tcl is either available in *PATH*, or configured via *custom.bat* script (for instance, if you use OCCT installed from Windows installer package). Start it from the command prompt:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
cmd> <path_to_occt>\upgrade.bat -recurse -all -inc=<path_to_occt>\inc -src=<path_to_your_sources> [options]
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Run the upgrade tool without arguments to see the list of available options.
|
||||
|
||||
The upgrade tool performs the following changes in the code.
|
||||
|
||||
1. Replaces macro *DEFINE_STANDARD_RTTI* by *DEFINE_STANDARD_RTTIEXT*, with second argument indicating base class for the main argument class (if inheritance is recognized by the script):
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
DEFINE_STANDARD_RTTI(Class) -> DEFINE_STANDARD_RTTIEXT(Class, Base)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@note If macro *DEFINE_STANDARD_RTTI* with two arguments (used in intermediate development versions of OCCT 7.0) is found, the script will convert it to either *DEFINE_STANDARD_RTTIEXT* or *DEFINE_STANDARD_RTTI_INLINE*.
|
||||
The former case is used if current file is header and source file with the same name is found in the same folder.
|
||||
@@ -431,50 +431,50 @@ DEFINE_STANDARD_RTTI(Class) -> DEFINE_STANDARD_RTTIEXT(Class, Base)
|
||||
The latter variant defines all methods for RTTI as inline, and does not require *IMPLEMENT_STANDARD_RTTIEXT* macro.
|
||||
|
||||
2. Replaces forward declarations of collection classes previously generated from CDL generics (defined in *TCollection* package) by inclusion of the corresponding header:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
class TColStd_Array1OfReal; -> #include <TColStd_Array1OfReal.hxx>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
3. Replaces underscored names of *Handle* classes by usage of a macro:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle_Class -> Handle(Class)
|
||||
~~~~
|
||||
~~~~~
|
||||
This change is not applied if the source or header file is recognized as containing the definition of Qt class with signals or slots, to avoid possible compilation errors of MOC files caused by inability of MOC to recognize macros (see https://doc.qt.io/qt-4.8/signalsandslots.html).
|
||||
The file is considered as defining a Qt object if it contains strings *Q_OBJECT* and either *slots:* or *signals:*.
|
||||
|
||||
4. Removes forward declarations of classes with names <i>Handle(C)</i> or *Handle_C*, replacing them either by forward declaration of its argument class, or (for files defining Qt objects) <i>\#include</i> statement for a header with the name of the argument class and extension .hxx:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
class Handle(TColStd_HArray1OfReal); -> #include <TColStd_HArray1OfReal.hxx>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
5. Removes <i> \#includes </i> of files <i>Handle_...hxx</i> that have disappeared in OCCT 7.0:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include <Handle_Geom_Curve.hxx> ->
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
6. Removes *typedef* statements that use *Handle* macro to generate the name:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
typedef NCollection_Handle<Message_Msg> Handle(Message_Msg); ->
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
7. Converts C-style casts applied to Handles into calls to <i>DownCast()</i> method:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
((Handle(A)&)b) -> Handle(A)::DownCast(b)
|
||||
(Handle(A)&)b -> Handle(A)::DownCast(b)
|
||||
(*((Handle(A)*)&b)) -> Handle(A)::DownCast(b)
|
||||
*((Handle(A)*)&b) -> Handle(A)::DownCast(b)
|
||||
(*(Handle(A)*)&b) -> Handle(A)::DownCast(b)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
8. Moves <i>Handle()</i> macro out of namespace scope:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Namespace::Handle(Class) -> Handle(Namespace::Class)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
9. Converts local variables of reference type, which are initialized by a temporary object returned by call to <i>DownCast()</i>, to the variables of non-reference type (to avoid using references to destroyed memory):
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
const Handle(A)& a = Handle(B)::DownCast (b); -> Handle(A) a (Handle(B)::DownCast (b));
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
10. Adds <i>\#include</i> for all classes used as argument to macro <i>STANDARD_TYPE()</i>, except for already included ones;
|
||||
|
||||
@@ -487,9 +487,9 @@ Namespace::Handle(Class) -> Handle(Namespace::Class)
|
||||
As long as the upgrade routine runs, some information messages are sent to the standard output.
|
||||
In some cases the warnings or errors like the following may appear:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
Error in {HEADER_FILE}: Macro DEFINE_STANDARD_RTTI used for class {CLASS_NAME} whose declaration is not found in this file, cannot fix
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Be sure to check carefully all reported errors and warnings, as the corresponding code will likely require manual corrections.
|
||||
In some cases these messages may help you to detect errors in your code, for instance, cases where *DEFINE_STANDARD_RTTI* macro is used with incorrect class name as an argument.
|
||||
@@ -506,12 +506,12 @@ The use of handle objects (construction, comparison using operators == or !=, us
|
||||
|
||||
For example, the following lines will fail to compile if *Geom_Line.hxx* is not included:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Line) aLine = 0;
|
||||
if (aLine != aCurve) {...}
|
||||
if (aCurve->IsKind(STANDARD_TYPE(Geom_Line)) {...}
|
||||
aLine = Handle(Geom_Line)::DownCast (aCurve);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Note that it is not necessary to include header of the class to declare Handle to it.
|
||||
However, if you define a class *B* that uses Handle(*A*) in its fields, or contains a method returning Handle(*A*), it is advisable to have header defining *A* included in the header of *B*.
|
||||
@@ -523,31 +523,31 @@ This issue appears in the compilers that do not support default arguments in tem
|
||||
The problem is that operator <i> const handle<T2>& </i> is defined for any type *T2*, thus the compiler cannot make the right choice.
|
||||
|
||||
Example:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
void func (const Handle(Geom_Curve)&);
|
||||
void func (const Handle(Geom_Surface)&);
|
||||
|
||||
Handle(Geom_TrimmedCurve) aCurve = new Geom_TrimmedCurve (...);
|
||||
func (aCurve); // ambiguity error in VC++ 10
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Note that this problem can be avoided in many cases if macro *OCCT_HANDLE_NOCAST* is used, see @ref upgrade_occt700_cdl_nocast "below".
|
||||
|
||||
To resolve this ambiguity, change your code so that argument type should correspond exactly to the function signature.
|
||||
In some cases this can be done by using the relevant type for the corresponding variable, like in the example above:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Curve) aCurve = new Geom_TrimmedCurve (...);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Other variants consist in assigning the argument to a local variable of the correct type and using the direct cast or constructor:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
const Handle(Geom_Curve)& aGCurve (aTrimmedCurve);
|
||||
func (aGCurve); // OK - argument has exact type
|
||||
func (static_cast(aCurve)); // OK - direct cast
|
||||
func (Handle(Geom_Curve)(aCurve)); // OK - temporary handle is constructed
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Another possibility consists in defining additional template variant of the overloaded function causing ambiguity, and using *SFINAE* to resolve the ambiguity.
|
||||
This technique can be illustrated by the definition of the template variant of method <i>IGESData_IGESWriter::Send()</i>.
|
||||
@@ -558,31 +558,31 @@ As the cast of a handle to the reference to another handle to the base type has
|
||||
|
||||
For example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Geometry) aC = GC_MakeLine (p, v); // compiler error
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The problem is that the class *GC_MakeLine* has a user-defined conversion to <i>const Handle(Geom_TrimmedCurve)&,</i> which is not the same as the type of the local variable *aC*.
|
||||
|
||||
To resolve this, use method <i>Value()</i>:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Geometry) aC = GC_MakeLine (p, v).Value(); // ok
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
or use variable of the appropriate type:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_TrimmedCurve) aC = GC_MakeLine (p, v); // ok
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
A similar problem appears with GCC compiler, when *const* handle to derived type is used to construct handle to base type via assignment (and in some cases in return statement), for instance:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
const Handle(Geom_Line) aLine;
|
||||
Handle(Geom_Curve) c1 = aLine; // GCC error
|
||||
Handle(Geom_Curve) c2 (aLine); // ok
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
This problem is specific to GCC and it does not appear if macro *OCCT_HANDLE_NOCAST* is used, see @ref upgrade_occt700_cdl_nocast "below".
|
||||
|
||||
@@ -593,20 +593,20 @@ You might need to clean your code from incorrect use of macros *STANDARD_TYPE*()
|
||||
1. Explicit definitions of static functions with names generated by macro *STANDARD_TYPE()*, which are artifacts of old implementation of RTTI, should be removed.
|
||||
|
||||
Example:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
const Handle(Standard_Type)& STANDARD_TYPE(math_GlobOptMin)
|
||||
{
|
||||
static Handle(Standard_Type) _atype = new Standard_Type ("math_GlobOptMin", sizeof (math_GlobOptMin));
|
||||
return _atype;
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
2. Incorrect location of closing parenthesis of *Handle()* macro that was not detectable in OCCT 6.x will cause a compiler error and must be corrected.
|
||||
|
||||
Example (note misplaced closing parenthesis):
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
aBSpline = Handle( Geom2d_BSplineCurve::DownCast(BS->Copy()) );
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
#### Use of class Standard_AncestorIterator
|
||||
|
||||
@@ -617,20 +617,20 @@ Class *Standard_AncestorIterator* has been removed; use method *Parent()* of *St
|
||||
Handles in OCCT 7.0 do not have the operator of conversion to <i>Standard_Transient*,</i> which was present in earlier versions.
|
||||
This is done to prevent possible unintended errors like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Line) aLine = ...;
|
||||
Handle(Geom_Surface) aSurf = ...;
|
||||
...
|
||||
if (aLine == aSurf) {...} // will cause a compiler error in OCCT 7.0, but not OCCT 6.x
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The places where this implicit cast has been used should be corrected manually.
|
||||
The typical situation is when Handle is passed to stream:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Line) aLine = ...;
|
||||
os << aLine; // in OCCT 6.9.0, resolves to operator << (void*)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Call method <i>get()</i> explicitly to output the address of the Handle.
|
||||
|
||||
@@ -639,24 +639,24 @@ Call method <i>get()</i> explicitly to output the address of the Handle.
|
||||
Method *DownCast()* in OCCT 7.0 is made templated; if its argument is not a base class, "deprecated" compiler warning is generated.
|
||||
This is done to prevent possible unintended errors like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Surface) aSurf = ;
|
||||
Handle(Geom_Line) aLine =
|
||||
Handle(Geom_Line)::DownCast (aSurf); // will cause a compiler warning in OCCT 7.0, but not OCCT 6.x
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The places where this cast has been used should be corrected manually.
|
||||
|
||||
If down casting is used in a template context where the argument can have the same or unrelated type so that *DownCast()* may be not available in all cases, use C++ *dynamic_cast<>* instead, e.g.:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
template <class T>
|
||||
bool CheckLine (const Handle(T) theArg)
|
||||
{
|
||||
Handle(Geom_Line) aLine = dynamic_cast<Geom_Line> (theArg.get());
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection upgrade_occt700_cdl_runtime Possible runtime problems
|
||||
|
||||
@@ -671,19 +671,19 @@ This problem does not appear if macro *OCCT_HANDLE_NOCAST* is used during compil
|
||||
|
||||
Example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
// note that DownCast() returns new temporary object!
|
||||
const Handle(Geom_BoundedCurve)& aBC =
|
||||
Handle(Geom_TrimmedCurve)::DownCast(aCurve);
|
||||
aBC->Transform (T); // access violation in OCCT 7.0
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection upgrade_occt700_cdl_nocast Option to avoid cast of handle to reference to base type
|
||||
|
||||
In OCCT 6.x and earlier versions the handle classes formed a hierarchy echoing the hierarchy of the corresponding object classes .
|
||||
This automatically enabled the possibility to use the handle to a derived class in all contexts where the handle to a base class was needed, e.g. to pass it in a function by reference without copying:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Standard_Boolean GetCurve (Handle(Geom_Curve)& theCurve);
|
||||
....
|
||||
Handle(Geom_Line) aLine;
|
||||
@@ -705,13 +705,13 @@ This implies creation of temporary objects and hence may be more expensive at ru
|
||||
The code that relies on the possibility of casting to base should be amended to always use the handle of argument type in function call and to use *DownCast()* to safely convert the result to the desired type.
|
||||
For instance, the code from the example below can be changed as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Line) aLine;
|
||||
Handle(Geom_Curve) aCurve;
|
||||
if (GetCurve (aCure) && !(aLine = Handle(Geom_Line)::DownCast (aCurve)).IsNull()) {
|
||||
// use aLine safely
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection upgrade_occt700_cdl_compat Preserving compatibility with OCCT 6.x
|
||||
|
||||
@@ -724,12 +724,12 @@ If you like to preserve the compatibility of your application code with OCCT ver
|
||||
3. Define macros *DEFINE_STANDARD_RTTIEXT* and *DEFINE_STANDARD_RTTI_INLINE* when building with previous versions of OCCT, resolving to *DEFINE_STANDARD_RTTI* with single argument
|
||||
|
||||
Example:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#if OCC_VERSION_HEX < 0x070000
|
||||
#define DEFINE_STANDARD_RTTIEXT(C1,C2) DEFINE_STANDARD_RTTI(C1)
|
||||
#define DEFINE_STANDARD_RTTI_INLINE(C1,C2) DEFINE_STANDARD_RTTI(C1)
|
||||
#endif
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection upgrade_occt700_cdl_wok Applications based on CDL and WOK
|
||||
|
||||
@@ -768,7 +768,7 @@ The code that used the tools provided by that package should be corrected manual
|
||||
The recommended approach is to use sorting algorithms provided by STL.
|
||||
|
||||
For instance:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include <SortTools_StraightInsertionSortOfReal.hxx>
|
||||
#include <SortTools_ShellSortOfReal.hxx>
|
||||
#include <TCollection_CompareOfReal.hxx>
|
||||
@@ -777,15 +777,15 @@ TCollection_Array1OfReal aValues = ...;
|
||||
...
|
||||
TCollection_CompareOfReal aCompReal;
|
||||
SortTools_StraightInsertionSortOfReal::Sort(aValues, aCompReal);
|
||||
~~~~
|
||||
~~~~~
|
||||
can be replaced by:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include <algorithm>
|
||||
...
|
||||
TCollection_Array1OfReal aValues = ...;
|
||||
...
|
||||
std::stable_sort (aValues.begin(), aValues.end());
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection upgrade_occt700_2dlayers On-screen objects and ColorScale
|
||||
|
||||
@@ -802,7 +802,7 @@ Predefined Z-layers *Graphic3d_ZLayerId_TopOSD* and *Graphic3d_ZLayerId_BotOSD*
|
||||
The property of *V3d_View* storing the global *ColorScale* object has been removed with associated methods *V3d_View::ColorScaleDisplay(), V3d_View::ColorScaleErase(), V3d_View::ColorScaleIsDisplayed()* and *V3d_View::ColorScale()* as well as the classes *V3d_ColorScale, V3d_ColorScaleLayerItem* and *Aspect_ColorScale*.
|
||||
Here is an example of creating *ColorScale* using the updated API:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(AIS_ColorScale) aCS = new AIS_ColorScale();
|
||||
// configuring
|
||||
Standard_Integer aWidth, aHeight;
|
||||
@@ -815,13 +815,13 @@ aCS->SetZLayer (Graphic3d_ZLayerId_TopOSD);
|
||||
aCS->SetTransformPersistence (Graphic3d_TMF_2d, gp_Pnt (-1,-1,0));
|
||||
aCS->SetToUpdate();
|
||||
theContextAIS->Display (aCS);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
To see how 2d objects are implemented in OCCT you can call Draw commands *vcolorscale, vlayerline* or *vdrawtext* (with <i>-2d</i> option).
|
||||
Draw command *vcolorscale* now requires the name of *ColorScale* object as argument.
|
||||
To display this object use command *vdisplay*. For example:
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
pload VISUALIZATION
|
||||
vinit
|
||||
vcolorscale cs -demo
|
||||
@@ -832,16 +832,16 @@ vsetdispmode 1
|
||||
vfit
|
||||
vlayerline 0 300 300 300 10
|
||||
vdrawtext t "2D-TEXT" -2d -pos 0 150 0 -color red
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Here is a small example in C++ illustrating how to display a custom AIS object in 2d:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(AIS_InteractiveContext) aContext = ...;
|
||||
Handle(AIS_InteractiveObject) anObj =...; // create an AIS object
|
||||
anObj->SetZLayer(Graphic3d_ZLayerId_TopOSD); // display object in overlay
|
||||
anObj->SetTransformPersistence (Graphic3d_TMF_2d, gp_Pnt (-1,-1,0)); // set 2d flag, coordinate origin is set to down-left corner
|
||||
aContext->Display (anObj); // display the object
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection upgrade_occt700_userdraw UserDraw and Visual3d
|
||||
|
||||
@@ -879,12 +879,12 @@ The functionality previously provided by *Visual3d* package has been redesigned
|
||||
Old APIs based on global callback functions for creating *UserDraw* objects and for performing custom OpenGL rendering within the view have been dropped.
|
||||
*UserDraw* callbacks are no more required since *OpenGl_Group* now inherits *Graphic3d_Group* and thus can be accessed directly from *AIS_InteractiveObject*:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
//! Class implementing custom OpenGL element.
|
||||
class UserDrawElement : public OpenGl_Element {};
|
||||
|
||||
//! Implementation of virtual method AIS_InteractiveObject::Compute().
|
||||
void UserDrawObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
void UserDrawObject::Compute (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
@@ -901,12 +901,12 @@ void UserDrawObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMg
|
||||
// invalidate bounding box of the scene
|
||||
thePrsMgr->StructureManager()->Update();
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
To perform a custom OpenGL code within the view, it is necessary to inherit from class *OpenGl_View*.
|
||||
See the following code sample:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
//! Custom view.
|
||||
class UserView : public OpenGl_View
|
||||
{
|
||||
@@ -953,7 +953,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection upgrade_occt700_localcontext Deprecation of Local Context
|
||||
|
||||
@@ -1046,7 +1046,7 @@ Release 7.1.0 disables this functionality by default in favor of Programmable Pi
|
||||
|
||||
Method *V3d_View::Export()*, based on *gl2ps* library, requires fixed pipeline and will return error if used with default settings.
|
||||
Applications should explicitly enable fixed pipeline by setting *OpenGl_Caps::ffpEnable* flag to TRUE within *OpenGl_GraphicDriver::ChangeOptions()* before creating the viewer to use *V3d_View::Export()*.
|
||||
This method is declared as deprecated and will be removed in one of the next OCCT releases.
|
||||
This method is declared as deprecated and will be removed in one of the the next OCCT releases.
|
||||
The recommended way to generate a vector image of a 3D model or scene is to use an application-level solution independent from OpenGL.
|
||||
|
||||
@subsection upgrade_710_trsfpers Transformation persistence
|
||||
@@ -1172,22 +1172,22 @@ Class *BRepOffsetAPI_MakeOffsetShape*:
|
||||
* *BRepOffsetAPI_MakeOffsetShape::PerformByJoin()* - method has been added. This method is old algorithm behaviour.
|
||||
|
||||
The code below shows new calling procedure:
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepOffsetAPI_MakeOffsetShape OffsetMaker;
|
||||
OffsetMaker.PerformByJoin(Shape, OffsetValue, Tolerance);
|
||||
NewShape = OffsetMaker.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Class *BRepOffsetAPI_MakeThickSolid*:
|
||||
* *BRepOffsetAPI_MakeThickSolid::BRepOffsetAPI_MakeThickSolid()* - constructor with parameters has been deleted.
|
||||
* *BRepOffsetAPI_MakeThickSolid::MakeThickSolidByJoin()* - method has been added. This method is old algorithm behaviour.
|
||||
|
||||
The code below shows new calling procedure:
|
||||
~~~~{.cpp}
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
|
||||
BRepOffsetAPI_MakeThickSolid BodyMaker;
|
||||
BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = BodyMaker.Shape();
|
||||
~~~~
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@subsection upgrade_720_highlight Highlight style
|
||||
|
||||
@@ -1317,7 +1317,7 @@ One can use this functionality in two ways:
|
||||
|
||||
The code example below demonstrates how to read shapes from a storage driver using *StdStorage* class.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
// aDriver should be created and opened for reading
|
||||
Handle(StdStorage_Data) aData;
|
||||
|
||||
@@ -1355,7 +1355,7 @@ if (!aRoots.IsNull())
|
||||
|
||||
The following code demonstrates how to write shapes in OCCT 7.2.0 using *StdStorage* class.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
// Create a file driver
|
||||
NCollection_Handle<Storage_BaseDriver> aFileDriver(new FSD_File());
|
||||
|
||||
@@ -1640,7 +1640,7 @@ The following changes have been introduced in the API of *BRepMesh_IncrementalMe
|
||||
|
||||
Example of usage:
|
||||
Case 1 (explicit parameters):
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
#include <IMeshData_Status.hxx>
|
||||
#include <IMeshTools_Parameters.hxx>
|
||||
#include <BRepMesh_IncrementalMesh.hxx>
|
||||
@@ -1688,7 +1688,7 @@ In fact, drawing points or lines with lighting applied is a valid use case, but
|
||||
As aspects for different primitive types have been merged, Graphic3d_Group does no more provide per-type aspect properties.
|
||||
Existing code relying on old behavior and putting interleaved per-type aspects into single Graphic3d_Group should be updated.
|
||||
For example, the following pseudo-code will not work anymore, because all *SetGroupPrimitivesAspect* calls will setup the same property:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->LineAspect()->Aspect()); //!< overrides previous aspect
|
||||
@@ -1700,7 +1700,7 @@ aGroup->AddPrimitiveArray (aTris);
|
||||
~~~~
|
||||
|
||||
To solve the problem, the code should be modified to either put primitives into dedicated groups (preferred approach), or using *SetPrimitivesAspect* in proper order:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
|
||||
aGroup->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
@@ -1718,7 +1718,7 @@ Decomposition of Ambient, Diffuse, Specular and Emissive properties has been eli
|
||||
As result, the following methods of *Graphic3d_MaterialAspect* class have been removed: SetReflectionMode(), SetReflectionModeOn(), Ambient(), Diffuse(), Emissive(), Specular(), SetAmbient(), SetDiffuse(), SetSpecular(), SetEmissive().
|
||||
|
||||
Previously, computation of final value required the following code:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Graphic3d_MaterialAspect theMaterial; Quantity_Color theInteriorColor;
|
||||
Graphic3d_Vec3 anAmbient (0.0f);
|
||||
if (theMaterial.ReflectionMode (Graphic3d_TOR_AMBIENT))
|
||||
@@ -1730,7 +1730,7 @@ if (theMaterial.ReflectionMode (Graphic3d_TOR_AMBIENT))
|
||||
~~~~
|
||||
|
||||
New code looks like this:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Graphic3d_MaterialAspect theMaterial; Quantity_Color theInteriorColor;
|
||||
Graphic3d_Vec3 anAmbient = theMaterial.AmbientColor();
|
||||
if (theMaterial.MaterialType (Graphic3d_MATERIAL_ASPECT)) { anAmbient *= (Graphic3d_Vec3 )theInteriorColor; }
|
||||
@@ -1751,7 +1751,7 @@ Existing code should be updated to:
|
||||
Parameters of *Text* in *Graphic3d_Group* are moved into a new *Graphic3d_Text* class. *AddText* of *Graphic3d_Group* should be used instead of the previous *Text*.
|
||||
|
||||
The previous code:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Standard_Real x, y, z;
|
||||
theAttachmentPoint.Coord(x,y,z);
|
||||
theGroup->Text (theText,
|
||||
@@ -1763,7 +1763,7 @@ theGroup->Text (theText,
|
||||
theAspect->VerticalJustification());
|
||||
~~~~
|
||||
should be replaced by the new code:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
Handle(Graphic3d_Text) aText = new Graphic3d_Text (theAspect->Height());
|
||||
aText->SetText (theText.ToExtString());
|
||||
aText->SetPosition (theAttachmentPoint);
|
||||
@@ -1927,7 +1927,7 @@ The method Select3D_SensitiveEntity::NbSubElements() has been changed to be cons
|
||||
@subsection upgrade_750_Booleans Changes in Boolean operations algorithm
|
||||
|
||||
* TreatCompound method has been moved from *BOPAlgo_Tools* to *BOPTools_AlgoTools*. Additionally, the map parameter became optional:
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
void BOPTools_AlgoTools::TreatCompound (const TopoDS_Shape& theS,
|
||||
TopTools_ListOfShape& theLS,
|
||||
TopTools_MapOfShape* theMap = NULL);
|
||||
@@ -2094,25 +2094,25 @@ corresponding type of the message.
|
||||
The code that used operator << for messenger, should be ported as follows.
|
||||
|
||||
Before the change:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Message_Messenger) theMessenger = ...;
|
||||
theMessenger << "Value = " << anInteger << Message_EndLine;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
After the change, single-line variant:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Message_Messenger) theMessenger = ...;
|
||||
theMessenger->SendInfo() << "Value = " << anInteger << std::endl;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
After the change, extended variant:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Message_Messenger) theMessenger = ...;
|
||||
Message_Messenger::StreamBuffer aSender = theMessenger->SendInfo();
|
||||
aSender << "Array: [ ";
|
||||
for (int i = 0; i < aNb; ++i) { aSender << anArray[i] << " "; }
|
||||
aSender << "]" << std::endl; // aSender can be used further for other messages
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection upgrade_750_message_printer Message_Printer interface change
|
||||
|
||||
@@ -2136,13 +2136,13 @@ provided that each thread deals with its own instance of *TDataStd_Application*
|
||||
Note that neither *TDataStd_Application* nor *TDocStd_Document* is protected from concurrent access from several threads.
|
||||
Such protection, if necessary, shall be implemented on the application level.
|
||||
For an example, access to labels and attributes could be protected by mutex if there is a probability that different threads access the same labels / attributes:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
{
|
||||
Standard_Mutex::Sentry aSentry (myMainLabelAccess);
|
||||
TDF_Label aChildLab = aDocument->Main().NewChild();
|
||||
TDataStd_Integer::Set(aChildLab, 0);
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection upgrade_750_draw_hotkeys Draw Harness hotkeys
|
||||
|
||||
@@ -2179,10 +2179,10 @@ Existing code relying on old behavior, if any, shall be rewritten.
|
||||
|
||||
Geom_RectangularTrimmedSurface sequentially trimming in U and V directions already no longer loses the first trim.
|
||||
For example:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_RectangularTrimmedSurface) ST = new Geom_RectangularTrimmedSurface (Sbase, u1, u2, Standard_True); // trim along U
|
||||
Handle(Geom_RectangularTrimmedSurface) ST1 = new Geom_RectangularTrimmedSurface (ST, v1, v2, Standard_False); // trim along V
|
||||
~~~~
|
||||
~~~~~
|
||||
gives different result.
|
||||
In current version ST1 - surface trimmed only along V, U trim is removed;
|
||||
After modification ST1 - surface trimmed along U and V, U trim is kept.
|
||||
@@ -2202,94 +2202,3 @@ This way an application based on an old version of Open CASCADE Technology may r
|
||||
@subsection upgrade_760_createdocument New OCAF document
|
||||
|
||||
A new OCAF document may be created only by means of the method *NewDocument()* from CDF_Application (redefined in TDocStd_Application). The methods *CreateDocument()* are deleted in all retrieval drivers.
|
||||
|
||||
@subsection upgrade_760_changesInStorageOfShapes Changes in storage of shapes
|
||||
|
||||
Information about per-vertex triangulations normals is now stored in BinOCAF and XmlOCAF document,
|
||||
BRep and Binary BRep Shape formats (only in case of triangulation-only Faces, with no analytical geometry to restore normals).
|
||||
|
||||
Versions of formats have been changed (11 for BinOCAF, 10 for XmlOCAF, 4 for BRep Shape and 3 for Binary BRep Shape).
|
||||
Files written with the new version will not be readable by applications of old versions.
|
||||
|
||||
@subsection upgrade_760_changesBinaryFormat Changes in storage of binary document format
|
||||
|
||||
All kinds of binary document formats since the new version 12 saved with support of partial reading (sub-set of labels and sub-set of attributes).
|
||||
For that the shapes data structures are stored with the related NamedShape attributes in the file, not in the particular section in the start of the document.
|
||||
Also, size allocated for each label is stored in the file. This allows to skip big parts of document in partial reading mode if needed.
|
||||
|
||||
As a result, the new binary files become some smaller, but default reading and writing of documents may take some more time (depenging on the environment), up to 15 percents slower in the worse cases.
|
||||
Backward compatibility (loading of old documents in the newer version) is still fully supported, as well as writing the older versions of the document.
|
||||
|
||||
@subsection upgrade_occt760_poly Changes in *Poly* package and *Poly_Triangulation* class
|
||||
|
||||
*Poly_Triangulation* does no more provide access to internal array structures: methods Nodes(), ChangeNode(), Triangles(), ChangeTriangle(), UVNodes(), ChangeUVNode(), Normals() have been removed.
|
||||
Methods of *Poly_Triangulation* for accessing individual nodal properties / triangles by index and implementing copy semantics should be used instead.
|
||||
The same is applicable to *Poly_PolygonOnTriangulation* interface.
|
||||
|
||||
@subsection upgrade_occt760_glsl Custom GLSL programs
|
||||
|
||||
Accessors to standard materials have been modified within *Declarations.glsl* (*occFrontMaterial_Diffuse()* -> *occMaterial_Diffuse(bool)* and similar).
|
||||
Applications defining custom GLSL programs should take into account syntax changes.
|
||||
|
||||
@subsection upgrade_occt760_noral_colors Nodal color modulation
|
||||
|
||||
Nodal color vertex attribute is now modulated in the same way as a color texture - color is multiplied by material coefficients (diffuse/ambient/specular in case of a common material definition).
|
||||
Existing code defining nodal colors should be updated to:
|
||||
- Use *Graphic3d_TOSM_UNLIT* shading model when lighting is not needed.
|
||||
- Adjust diffuse/ambient material coefficients, which have been previously ignored.
|
||||
- Remove code multiplying nodal colors, intended to compensate over-brightness due to addition of specular color from material definition, as specular component is now also modulated by a vertex color.
|
||||
|
||||
@subsection upgrade_occt760_tkopengles TKOpenGles library
|
||||
|
||||
OCCT now provides two separate toolkits - *TKOpenGl* depending on desktop OpenGL and *TKOpenGles* depending on OpenGL ES.
|
||||
Both libraries can be now built simultaneously on systems providing both APIs (like desktop Linux).
|
||||
|
||||
Existing applications depending on OpenGL ES (mobile projects first of all) should be adjusted to link against *TKOpenGles*.
|
||||
Note that both *TKOpenGl* and *TKOpenGles* keep exporting classes with the same name, so applications should not attempt to link both libraries simultaneously.
|
||||
|
||||
@subsection upgrade_occt760_fast_access_to_labels Fast access to OCAF label
|
||||
|
||||
Access to an OCAF label via its entry is accelerated. In order to activate it, call *TDF_Data::SetAccessByEntries()*.
|
||||
The method *TDF_Tool::Label()*, which returns a label by an entry, becomes faster for about 10 .. 20 times.
|
||||
It has sense for applications, which use an entry as a unique key to access the data in OCAF tree.
|
||||
Also, the method *TDF_Tool::Entry()*, which returns an entry for a label, is accelerated as well.
|
||||
|
||||
@subsection upgrade_occt760_bop_progress_indicator Progress indicator in Boolean operations
|
||||
|
||||
Method SetProgressIndicator() has been removed due to Progress indicator mechanism refactoring.
|
||||
To enable progress indicator and user break in Boolean operations user has to pass progress range as a parameter to Perform or Build method.
|
||||
For example:
|
||||
~~~~
|
||||
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator(di, 1);
|
||||
BRepAlgoApi_Cut(S1, S2, aProgress->Start()); // method Start() creates range for usage in cut algorithm
|
||||
~~~~
|
||||
|
||||
@subsection upgrade_occt760_change_check_to_adaptors Changes in BRepLib_CheckCurveOnSurface & GeomLib_CheckCurveOnSurface interfaces
|
||||
|
||||
Now the classes accept adaptors instead objects as input parameters.
|
||||
*BRepLib_CheckCurveOnSurface* does no more provide access to curves, surface and parameters: methods PCurve(), PCurve2(), Surface() and Range() have been removed.
|
||||
*BRepLib_CheckCurveOnSurface*: the default value of the *isMultiThread* parameter of the *Perform()* function has been changed from *true* to *false*
|
||||
*GeomLib_CheckCurveOnSurface* does no more provide access to curve, surface and parameters: methods Curve(), Surface() and Range() have been removed.
|
||||
*GeomLib_CheckCurveOnSurface*: the default value of the *isMultiThread* parameter of the *Perform()* function has been changed from *true* to *false*
|
||||
|
||||
The following functions in *GeomLib_CheckCurveOnSurface* have been modified:
|
||||
~~~~{.cpp}
|
||||
GeomLib_CheckCurveOnSurface(const Handle(Adaptor3d_Curve)& theCurve,
|
||||
const Standard_Real theTolRange);
|
||||
|
||||
void Init (const Handle(Adaptor3d_Curve)& theCurve, const Standard_Real theTolRange);
|
||||
|
||||
void Perform(const Handle(Adaptor3d_CurveOnSurface)& theCurveOnSurface,
|
||||
const Standard_Boolean isMultiThread);
|
||||
~~~~
|
||||
|
||||
@subsection upgrade_occt760_old_bop_removed Removal of old Boolean operations algorithm (BRepAlgo_BooleanOperation)
|
||||
|
||||
* The method *BRepAlgo_Tool::Deboucle3D* has been removed as duplicating. The corresponding method from *BRepOffset_Tool* class has to be used instead.
|
||||
* The API classes from *BRepAlgo* package performing old Boolean operations algorithm have been removed:
|
||||
- *BRepAlgo_BooleanOperation*
|
||||
- *BRepAlgo_Fuse*
|
||||
- *BRepAlgo_Common*
|
||||
- *BRepAlgo_Cut*
|
||||
- *BRepAlgo_Section*
|
||||
The corresponding classes from the *BRepAlgoAPI* package have to be used instead.
|
||||
|
@@ -183,9 +183,9 @@ A variable of a type manipulated by handle which is not attached to an object is
|
||||
To reference an object, we instantiate the class with one of its constructors.
|
||||
For example, in C++:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(MyClass) anObject = new MyClass();
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
In Open CASCADE Technology, the Handles are specific classes that are used to safely manipulate objects allocated in the dynamic memory by reference,
|
||||
providing reference counting mechanism and automatic destruction of the object when it is not referenced.
|
||||
@@ -302,15 +302,15 @@ It provides a reference counter field, inherited by all its descendant classes,
|
||||
Objects of classes derived (directly or indirectly) from *Transient*, are normally allocated in dynamic memory using operator **new**, and manipulated by handle.
|
||||
Handle is defined as template class *opencascade::handle<>*.
|
||||
Open CASCADE Technology provides preprocessor macro *Handle()* that is historically used throughout OCCT code to name a handle:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Handle(Geom_Line) aLine; // "Handle(Geom_Line)" is expanded to "opencascade::handle<Geom_Line>"
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
In addition, for most OCCT classes additional *typedef* is defined for a handle, as the name of a class prefixed by *Handle_*.
|
||||
For instance, the above example can be also coded as:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Handle_Geom_Line aLine; // "Handle_Geom_Line" is typedef to "opencascade::handle<Geom_Line>"
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
#### Using a Handle
|
||||
|
||||
@@ -318,9 +318,9 @@ A handle is characterized by the object it references.
|
||||
|
||||
Before performing any operation on a transient object, you must declare the handle.
|
||||
For example, if Point and Line are two transient classes from the Geom package, you would write:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Point) p1, p2;
|
||||
~~~~
|
||||
~~~~~
|
||||
Declaring a handle creates a null handle that does not refer to any object.
|
||||
The handle may be checked to be null by its method *IsNull()*.
|
||||
To nullify a handle, use method *Nullify()*.
|
||||
@@ -338,7 +338,7 @@ To enable this feature, a class declaration should include the declaration of OC
|
||||
Header *Standard_Type.hxx* provides two variants of preprocessor macros facilitating this:
|
||||
|
||||
* Inline variant, which declares and defines RTTI methods by a single line of code:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <Geom_Surface.hxx>
|
||||
class Appli_ExtSurface : public Geom_Surface
|
||||
{
|
||||
@@ -346,12 +346,12 @@ class Appli_ExtSurface : public Geom_Surface
|
||||
public:
|
||||
DEFINE_STANDARD_RTTIEXT(Appli_ExtSurface,Geom_Surface)
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
* Out-of line variant, which uses one macro in the declaration (normally in the header file), and another in the implementation (in C++ source):
|
||||
|
||||
In *Appli_ExtSurface.hxx* file:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <Geom_Surface.hxx>
|
||||
class Appli_ExtSurface : public Geom_Surface
|
||||
{
|
||||
@@ -359,13 +359,13 @@ class Appli_ExtSurface : public Geom_Surface
|
||||
public:
|
||||
DEFINE_STANDARD_RTTIEXT(Appli_ExtSurface,Geom_Surface)
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
In *Appli_ExtSurface.cxx* file:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <Appli_ExtSurface.hxx>
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Appli_ExtSurface,Geom_Surface)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
These macros define method *DynamicType()* that returns a type descriptor - handle to singleton instance of the class *Standard_Type* describing the class.
|
||||
The type descriptor stores the name of the class and the descriptor of its parent class.
|
||||
@@ -375,12 +375,12 @@ Note that while inline version is easier to use, for widely used classes this me
|
||||
To get the type descriptor for a given class type, use macro *STANDARD_TYPE()* with the name of the class as argument.
|
||||
|
||||
Example of usage:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
if (aCurve->IsKind(STANDARD_TYPE(Geom_Line))) // equivalent to "if (dynamic_cast<Geom_Line>(aCurve.get()) != 0)"
|
||||
{
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
#### Type Conformity
|
||||
|
||||
@@ -390,12 +390,12 @@ Thus, the dynamic type of an object (also called the actual type of an object) c
|
||||
|
||||
Consider the class *Geom_CartesianPoint*, a sub-class of *Geom_Point*; the rule of type conformity can be illustrated as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_Point) aPnt1;
|
||||
Handle(Geom_CartesianPoint) aPnt2;
|
||||
aPnt2 = new Geom_CartesianPoint();
|
||||
aPnt1 = aPnt2; // OK, the types are compatible
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The compiler sees *aPnt1* as a handle to *Geom_Point* though the actual object referenced by *aPnt1* is of the *Geom_CartesianPoint* type.
|
||||
|
||||
@@ -409,19 +409,19 @@ A handle can be converted explicitly into one of its sub-types if the actual typ
|
||||
If this is not the case, the handle is nullified (explicit type conversion is sometimes called a "safe cast").
|
||||
Consider the example below.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~
|
||||
Handle(Geom_Point) aPnt1;
|
||||
Handle(Geom_CartesianPoint) aPnt2, aPnt3;
|
||||
aPnt2 = new Geom_CartesianPoint();
|
||||
aPnt1 = aPnt2; // OK, standard assignment
|
||||
aPnt3 = Handle(Geom_CartesianPoint)::DownCast (aPnt1);
|
||||
// OK, the actual type of aPnt1 is Geom_CartesianPoint, although the static type of the handle is Geom_Point
|
||||
~~~~
|
||||
~~~~~~
|
||||
|
||||
If conversion is not compatible with the actual type of the referenced object, the handle which was "cast" becomes null (and no exception is raised).
|
||||
So, if you require reliable services defined in a sub-class of the type seen by the handle (static type), write as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~
|
||||
void MyFunction (const Handle(A) & a)
|
||||
{
|
||||
Handle(B) b = Handle(B)::DownCast(a);
|
||||
@@ -432,12 +432,12 @@ void MyFunction (const Handle(A) & a)
|
||||
// the types are incompatible
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~~
|
||||
Downcasting is used particularly with collections of objects of different types; however, these objects should inherit from the same root class.
|
||||
|
||||
For example, with a sequence of transient objects *TColStd_SequenceOfTransient* and two classes A and B that both inherit from *Standard_Transient*, you get the following syntax:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(A) a;
|
||||
Handle(B) b;
|
||||
Handle(Standard_Transient) t;
|
||||
@@ -459,17 +459,17 @@ else
|
||||
{
|
||||
// the types are incompatible
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_fcug_2_2_3 Using Handles to Create Objects
|
||||
|
||||
To create an object which is manipulated by handle, declare the handle and initialize it with the standard C++ **new** operator, immediately followed by a call to the constructor.
|
||||
The constructor can be any of those specified in the source of the class from which the object is instanced.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_CartesianPoint) aPnt;
|
||||
aPnt = new Geom_CartesianPoint (0, 0, 0);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Unlike for a pointer, the **delete** operator does not work on a handle; the referenced object is automatically destroyed when no longer in use.
|
||||
|
||||
@@ -480,7 +480,7 @@ To invoke a method which acts on the referenced object, you translate this metho
|
||||
To test or to modify the state of the handle, the method is translated by the *dot* operator.
|
||||
The example below illustrates how to access the coordinates of an (optionally initialized) point object:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Geom_CartesianPoint) aCentre;
|
||||
Standard_Real x, y, z;
|
||||
if (aCentre.IsNull())
|
||||
@@ -488,11 +488,11 @@ if (aCentre.IsNull())
|
||||
aCentre = new PGeom_CartesianPoint (0, 0, 0);
|
||||
}
|
||||
aCentre->Coord (x, y, z);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The example below illustrates how to access the type object of a Cartesian point:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(Standard_Transient) aPnt = new Geom_CartesianPoint (0., 0., 0.);
|
||||
if (aPnt->DynamicType() == STANDARD_TYPE(Geom_CartesianPoint))
|
||||
{
|
||||
@@ -502,7 +502,7 @@ else
|
||||
{
|
||||
std::cout << "Type check FAILED\n";
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
*Standard_NullObject* exception will be raised if a field or a method of an object is accessed via a *Null* handle.
|
||||
|
||||
@@ -512,9 +512,9 @@ A class method is called like a static C++ function, i.e. it is called by the na
|
||||
|
||||
For example, we can find the maximum degree of a Bezier curve:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer aDegree = Geom_BezierCurve::MaxDegree();
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_fcug_2_2_5 Handle deallocation
|
||||
|
||||
@@ -529,7 +529,7 @@ The object is automatically deleted by the handle when reference counter becomes
|
||||
|
||||
The principle of allocation can be seen in the example below.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
...
|
||||
{
|
||||
Handle(TColStd_HSequenceOfInteger) H1 = new TColStd_HSequenceOfInteger();
|
||||
@@ -549,11 +549,11 @@ The principle of allocation can be seen in the example below.
|
||||
// Here, H1 has 1 reference
|
||||
}
|
||||
// Here, H1 has no reference and the referred TColStd_HSequenceOfInteger object is deleted.
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
You can easily cast a reference to the handle object to <i> void* </i> by defining the following:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~
|
||||
void* aPointer;
|
||||
Handle(Some_Class) aHandle;
|
||||
// Here only a pointer will be copied
|
||||
@@ -701,12 +701,12 @@ The following paragraphs describe recommended approaches for using exceptions wh
|
||||
#### "C++ like" Syntax
|
||||
|
||||
The following example:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
throw Standard_DomainError ("Cannot cope with this condition");
|
||||
~~~~
|
||||
~~~~~
|
||||
raises an exception of *Standard_DomainError* type with the associated message "Cannot cope with this condition", the message being optional.
|
||||
This exception may be caught by a handler of a *Standard_DomainError* type as follows:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
try
|
||||
{
|
||||
OCC_CATCH_SIGNALS
|
||||
@@ -716,7 +716,7 @@ catch (const Standard_DomainError& )
|
||||
{
|
||||
// handle Standard_DomainError exceptions here
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
#### Regular usage
|
||||
|
||||
@@ -734,7 +734,7 @@ For example, if you consider the *TCollection_Array1* class used with:
|
||||
|
||||
then, the *Value* function may be implemented as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Item TCollection_Array1::Value (Standard_Integer theIndex) const
|
||||
{
|
||||
// where myR1 and myR2 are the lower and upper bounds of the array
|
||||
@@ -744,7 +744,7 @@ Item TCollection_Array1::Value (Standard_Integer theIndex) const
|
||||
}
|
||||
return myContents[theIndex];
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Here validity of the index is first verified using the Lower and Upper functions in order to protect the call.
|
||||
Normally the caller ensures the index being in the valid range before calling <i>Value()</i>.
|
||||
@@ -752,26 +752,26 @@ In this case the above implementation of *Value* is not optimal since the test d
|
||||
|
||||
It is a widely used practice to include that kind of protections in a debug build of the program and exclude in release (optimized) build.
|
||||
To support this practice, the macros <i>Raise_if()</i> are provided for every OCCT exception class:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
<ErrorTypeName>_Raise_if(condition, "Error message");
|
||||
~~~~
|
||||
~~~~~
|
||||
where *ErrorTypeName* is the exception type, *condition* is the logical expression leading to the raise of the exception, and *Error message* is the associated message.
|
||||
|
||||
The entire call may be removed by defining one of the preprocessor symbols *No_Exception* or <i>No_<ErrorTypeName></i> at compile-time:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#define No_Exception // remove all raises
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Using this syntax, the *Value* function becomes:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Item TCollection_Array1::Value (Standard_Integer theIndex) const
|
||||
{
|
||||
Standard_OutOfRange_Raise_if(theIndex < myR1 || theIndex > myR2, "index out of range in TCollection_Array1::Value");
|
||||
return myContents[theIndex];
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_fcug_2_4_3 Handling an Exception
|
||||
|
||||
@@ -788,7 +788,7 @@ The recommended location for it is first statement after opening brace of <i>try
|
||||
|
||||
As an example, consider the exceptions of type *Standard_NumericError, Standard_Overflow, Standard_Underflow* and *Standard_DivideByZero*, where *Standard_NumericError* is the parent type of the three others.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
void f(1)
|
||||
{
|
||||
try
|
||||
@@ -805,7 +805,7 @@ void f(1)
|
||||
// ...
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Here, the first handler will catch exceptions of *Standard_Overflow* type
|
||||
and the second one -- exceptions of *Standard_NumericError* type and all exceptions derived from it, including *Standard_Underflow* and *Standard_DivideByZero*.
|
||||
@@ -813,7 +813,7 @@ and the second one -- exceptions of *Standard_NumericError* type and all excepti
|
||||
The handlers are checked in order of appearance, from the nearest to the try block to the most distant from it, until one matches the raise expression.
|
||||
For a try block, it would be a mistake to place a handler for a base exception type ahead of a handler for its derived type since that would ensure that the handler for the derived exception would never be invoked.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
void f(1)
|
||||
{
|
||||
int i = 0;
|
||||
@@ -832,7 +832,7 @@ void f(1)
|
||||
}
|
||||
. . .
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The exceptions form a hierarchy tree completely separated from other user defined classes.
|
||||
One exception of type *Standard_Failure* is the root of the entire exception hierarchy.
|
||||
@@ -841,7 +841,7 @@ It is recommended to set up such a handler in the main routine.
|
||||
|
||||
The main routine of a program would look like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include <Standard_ErrorHandler.hxx>
|
||||
#include <Standard_Failure.hxx>
|
||||
#include <iostream>
|
||||
@@ -859,7 +859,7 @@ int main (int argc, char* argv[])
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Though standard C++ scoping rules and syntax apply to try block and handlers, note that on some platforms Open CASCADE Technology may be compiled in compatibility mode when exceptions are emulated by long jumps (see below).
|
||||
In this mode it is required that no statement precedes or follows any handler.
|
||||
@@ -921,17 +921,17 @@ Foundation classes provide in the package *Plugin* a method named *Load()*, whic
|
||||
|
||||
That method reads the information regarding available plug-ins and their locations from the resource file *Plugin* found by environment variable *CSF_PluginDefaults*:
|
||||
|
||||
~~~~
|
||||
~~~~~
|
||||
$CSF_PluginDefaults/Plugin
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The *Load* method looks for the library name in the resource file or registry through its GUID, for example, on UNIX:
|
||||
~~~~
|
||||
~~~~~
|
||||
! METADATADRIVER whose value must be OS or DM.
|
||||
|
||||
! FW
|
||||
a148e300-5740-11d1-a904-080036aaa103.Location: libFWOSPlugin.so
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Then the *Load* method loads the library according to the rules of the operating system of the host machine (for example, by using environment variables such as *LD_LIBRARY_PATH* with Unix and *PATH* with Windows).
|
||||
After that it invokes the *PLUGINFACTORY* method to return the object, which supports the required service.
|
||||
@@ -941,13 +941,13 @@ The client may then call the functions supported by this object.
|
||||
|
||||
To invoke one of the services provided by the plug-in, you may call the *Plugin::Load()* global function with the *Standard_GUID* of the requested service as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
Handle(FADriver_PartStorer)::DownCast(PlugIn::Load (yourStandardGUID));
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Let us take *FAFactory.hxx* and *FAFactory.cxx* as an example:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <Standard_Macro.hxx>
|
||||
#include <Standard_GUID.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
@@ -957,9 +957,9 @@ class FAFactory
|
||||
public:
|
||||
Standard_EXPORT static Handle(Standard_Transient) Factory (const Standard_GUID& theGUID);
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <FAFactory.hxx>
|
||||
|
||||
#include <FADriver_PartRetriever.hxx>
|
||||
@@ -1004,7 +1004,7 @@ Handle(Standard_Transient) FAFactory::Factory (const Standard_GUID& theGUID)
|
||||
|
||||
// export plugin function "PLUGINFACTORY"
|
||||
PLUGIN(FAFactory)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Application might also instantiate a factory by linking to the library and calling *FAFactory::Factory()* directly.
|
||||
|
||||
@@ -1042,14 +1042,14 @@ These definitions are now obsolete though still can be used, particularly for co
|
||||
|
||||
Let see an example of NCollection template class instantiation for a sequence of points in the header file *MyPackage_SequenceOfPnt.hxx* (analogue of *TColgp_SequenceOfPnt*):
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <NCollection_Sequence.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
typedef NCollection_Sequence<gp_Pnt> MyPackage_SequenceOfPnt;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
For the case, when sequence itself should be managed by handle, auxiliary macros *DEFINE_HSEQUENCE* can be used:
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <NCollection_Sequence.hxx>
|
||||
#include <NCollection_DefineHSequence.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
@@ -1057,7 +1057,7 @@ typedef NCollection_Sequence<gp_Pnt> MyPackage_SequenceOfPnt;
|
||||
DEFINE_HSEQUENCE(MyPackage_HSequenceOfPnt, MyPackage_SequenceOfPnt)
|
||||
...
|
||||
Handle(MyPackage_HSequenceOfPnt) aSeq = new MyPackage_HSequenceOfPnt();
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
See more details about available collections in following sections.
|
||||
|
||||
@@ -1302,7 +1302,7 @@ The common methods of Iterator are:
|
||||
|
||||
Usage sample:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
typedef Ncollection_Sequence<gp_Pnt> MyPackage_SequenceOfPnt;
|
||||
void Perform (const MyPackage_SequenceOfPnt& theSequence)
|
||||
{
|
||||
@@ -1312,17 +1312,17 @@ void Perform (const MyPackage_SequenceOfPnt& theSequence)
|
||||
...
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_fcug_3_1_5 Allocators
|
||||
|
||||
All constructors of *NCollection* classes receive the *Allocator* object as the last parameter.
|
||||
This is an object of a type managed by Handle, inheriting *NCollection_BaseAllocator*, with the following (mandatory) methods redefined:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
virtual void* Allocate (const size_t theSize) override;
|
||||
virtual void Free (void* theAddress) override;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
It is used internally every time when the collection allocates memory for its item(s) and releases this memory.
|
||||
The default value of this parameter (empty *Handle*) designates the use of *NCollection_BaseAllocator*, where the functions *Standard::Allocate* and *Standard::Free* are called.
|
||||
@@ -1360,7 +1360,7 @@ Among the best suitable solutions there can be a pointer to an object, handled o
|
||||
The bounding object may have any dimension and geometry.
|
||||
The minimal interface of *TheBndType* (besides public empty and copy constructor and operator=) used in NCollection_UBTree algorithm as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
class MyBndType
|
||||
{
|
||||
public:
|
||||
@@ -1373,7 +1373,7 @@ public:
|
||||
//! Computes the squared maximal linear extent of me (for a box it is the squared diagonal of the box).
|
||||
Standard_Real SquareExtent() const;
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
This interface is implemented in types of Bnd package: *Bnd_Box, Bnd_Box2d, Bnd_B2x, Bnd_B3x*.
|
||||
|
||||
@@ -1384,7 +1384,7 @@ The quality of a tree is better (considering the speed of searches) if objects a
|
||||
Instantiation of *NCollection_UBTreeFiller* collects objects to be added, and then adds them at once to the given NCollection_UBTree instance in a random order using the Fisher-Yates algorithm.
|
||||
Below is the sample code that creates an instance of *NCollection_UBTree* indexed by 2D boxes (Bnd_B2f), then a selection is performed returning the objects whose bounding boxes contain the given 2D point.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
typedef NCollection_UBTree<MyData, Bnd_B2f> UBTree;
|
||||
typedef NCollection_List<MyData> ListOfSelected;
|
||||
//! Tree Selector type
|
||||
@@ -1426,7 +1426,7 @@ aTreeFiller.Fill();
|
||||
MyTreeSelector aSel (aPoint2d);
|
||||
aTree.Select (aSel);
|
||||
const ListOfSelected& aSelected = aSel.ListAccepted();
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
##### NCollection_CellFilter
|
||||
|
||||
@@ -1438,10 +1438,10 @@ while search with NCollection_UBTree provides logarithmic law access time.
|
||||
|
||||
Packages *TShort*, *TColGeom*, *TColGeom2d*, *TColStd*, *TColgp* provide template instantiations (typedefs) of *NCollection* templates to standard OCCT types.
|
||||
Classes with *H* prefix in name are handle-based variants and inherit Standard_Transient.
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
typedef NCollection_Array1<gp_Vec> TColgp_Array1OfVec;
|
||||
typedef NCollection_Array1<TCollection_AsciiString> TColStd_Array1OfAsciiString;
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Packages like *TopTools* also include definitions of collections and hash functions for complex types like shapes -- *TopTools_ShapeMapHasher*, *TopTools_MapOfShape*.
|
||||
|
||||
@@ -1525,27 +1525,27 @@ These classes also provide a data structure to represent any expression, relatio
|
||||
|
||||
Vectors and matrices have arbitrary ranges which must be defined at declaration time and cannot be changed after declaration.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
math_Vector aVec (1, 3);
|
||||
// a vector of dimension 3 with range (1..3)
|
||||
math_Matrix aMat (0, 2, 0, 2);
|
||||
// a matrix of dimension 3x3 with range (0..2, 0..2)
|
||||
math_Vector aVec (N1, N2);
|
||||
// a vector of dimension N2-N1+1 with range (N1..N2)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Vector and Matrix objects use value semantics.
|
||||
In other words, they cannot be shared and are copied through assignment.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
math_Vector aVec1 (1, 3), aVec2 (0, 2);
|
||||
aVec2 = aVec1;
|
||||
// aVec1 is copied into aVec2; a modification of aVec1 does not affect aVec2
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Vector and Matrix values may be initialized and obtained using indexes which must lie within the range definition of the vector or the matrix.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
math_Vector aVec (1, 3);
|
||||
math_Matrix aMat (1, 3, 1, 3);
|
||||
Standard_Real aValue;
|
||||
@@ -1554,7 +1554,7 @@ aVec (2) = 1.0;
|
||||
aValue = aVec(1);
|
||||
aMat (1, 3) = 1.0;
|
||||
aValue = aMat (2, 2);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Some operations on Vector and Matrix objects may not be legal.
|
||||
In this case an exception is raised.
|
||||
@@ -1562,12 +1562,12 @@ Two standard exceptions are used:
|
||||
* *Standard_DimensionError* exception is raised when two matrices or vectors involved in an operation are of incompatible dimensions.
|
||||
* *Standard_RangeError* exception is raised if an access outside the range definition of a vector or of a matrix is attempted.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~{.cpp}
|
||||
math_Vector aVec1 (1, 3), aVec2 (1, 2), aVec3 (0, 2);
|
||||
aVec1 = aVec2; // error: Standard_DimensionError is raised
|
||||
aVec1 = aVec3; // OK: ranges are not equal but dimensions are compatible
|
||||
aVec1 (0) = 2.0; // error: Standard_RangeError is raised
|
||||
~~~~
|
||||
~~~~~~
|
||||
|
||||
@subsection occt_occt_fcug_4_3 Primitive Geometric Types
|
||||
|
||||
@@ -1649,7 +1649,7 @@ They contain:
|
||||
The example below demonstrates the use of the math_Gauss class, which implements the Gauss solution for a set of linear equations.
|
||||
The following definition is an extract from the header file of the class *math_Gauss*:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~~{.cpp}
|
||||
class math_Gauss
|
||||
{
|
||||
public:
|
||||
@@ -1657,11 +1657,11 @@ public:
|
||||
Standard_Boolean IsDone() const;
|
||||
void Solve (const math_Vector& B, math_Vector& X) const;
|
||||
};
|
||||
~~~~
|
||||
~~~~~~
|
||||
|
||||
Now the main program uses the math_Gauss class to solve the equations _a*x1=b1_ and _a*x2=b2_:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <math_Vector.hxx>
|
||||
#include <math_Matrix.hxx>
|
||||
main()
|
||||
@@ -1686,12 +1686,12 @@ main()
|
||||
// StdFail_NotDone is raised
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The next example demonstrates the use of the *math_BissecNewton* class, which implements a combination of the Newton and Bissection algorithms to find the root of a function known to lie between two bounds.
|
||||
The definition is an extract from the header file of the class *math_BissecNewton*:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
class math_BissecNewton
|
||||
{
|
||||
public:
|
||||
@@ -1702,12 +1702,12 @@ public:
|
||||
Standard_Boolean IsDone() const;
|
||||
Standard_Real Root();
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
The abstract class *math_FunctionWithDerivative* describes the services which have to be implemented for the function _f_ which is to be used by a *math_BissecNewton* algorithm.
|
||||
The following definition corresponds to the header file of the abstract class *math_FunctionWithDerivative*:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
class math_FunctionWithDerivative
|
||||
{
|
||||
public:
|
||||
@@ -1715,12 +1715,12 @@ public:
|
||||
virtual Standard_Boolean Derivative (const Standard_Real x, Standard_Real& d) = 0;
|
||||
virtual Standard_Boolean Values (const Standard_Real x, Standard_Real& f, Standard_Real& d) = 0;
|
||||
};
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
Now the test sample uses the *math_BissecNewton* class to find the root of the equation _f(x)=x**2-4_ in the interval [1.5, 2.5].
|
||||
The function to solve is implemented in the class *myFunction* which inherits from the class *math_FunctionWithDerivative*, then the main program finds the required root.
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{.cpp}
|
||||
#include <math_BissecNewton.hxx>
|
||||
#include <math_FunctionWithDerivative.hxx>
|
||||
class myFunction : public math_FunctionWithDerivative
|
||||
@@ -1759,7 +1759,7 @@ main()
|
||||
else // no
|
||||
{
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsection occt_occt_fcug_4_7 Precision
|
||||
|
||||
@@ -1796,10 +1796,10 @@ The choice of precision value for parametric space depends not only on the accur
|
||||
This is because it is desirable to link parametric precision and real precision.
|
||||
If you are on a curve defined by the equation *P(t)*, you would want to have equivalence between the following:
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Abs (t1 - t2) < ParametricPrecision
|
||||
Distance (P(t1), P(t2)) < RealPrecision
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_occt_fcug_4_7_1 The Precision package
|
||||
|
||||
@@ -1832,7 +1832,7 @@ This method is used to compare two angles.
|
||||
Its current value is *Epsilon(2 * PI)* i.e. the smallest number *x* such that *2*PI + x* is different of *2\*PI*.
|
||||
|
||||
It can be used to check confusion of two angles as follows:
|
||||
~~~~{.cpp}
|
||||
~~~{.cpp}
|
||||
bool areEqualAngles (double theAngle1, double theAngle2)
|
||||
{
|
||||
return Abs(theAngle1 - theAngle2) < Precision::Angular();
|
||||
@@ -1840,7 +1840,7 @@ bool areEqualAngles (double theAngle1, double theAngle2)
|
||||
~~~
|
||||
|
||||
It is also possible to check parallelism of two vectors as follows:
|
||||
~~~~{.cpp}
|
||||
~~~{.cpp}
|
||||
bool areParallelVectors (const gp_Vec& theVec1, const gp_Vec& theVec2)
|
||||
{
|
||||
return theVec1.IsParallel (theVec2, Precision::Angular());
|
||||
@@ -1849,7 +1849,7 @@ bool areParallelVectors (const gp_Vec& theVec1, const gp_Vec& theVec2)
|
||||
|
||||
Note that *Precision::Angular()* can be used on both dot and cross products because for small angles the *Sine* and the *Angle* are equivalent.
|
||||
So to test if two directions of type *gp_Dir* are perpendicular, it is legal to use the following code:
|
||||
~~~~{.cpp}
|
||||
~~~{.cpp}
|
||||
bool arePerpendicular (const gp_Dir& theDir1, const gp_Dir& theDir2)
|
||||
{
|
||||
return Abs(theDir1 * theDir2) < Precision::Angular();
|
||||
@@ -1862,7 +1862,7 @@ This method is used to test 3D distances.
|
||||
The current value is *1.e-7*, in other words, 1/10 micron if the unit used is the millimeter.
|
||||
|
||||
It can be used to check confusion of two points as follows:
|
||||
~~~~{.cpp}
|
||||
~~~{.cpp}
|
||||
bool areEqualPoints (const gp_Pnt& thePnt1, const gp_Pnt& thePnt2)
|
||||
{
|
||||
return thePnt1.IsEqual (thePnt2, Precision::Confusion());
|
||||
@@ -1870,7 +1870,7 @@ bool areEqualPoints (const gp_Pnt& thePnt1, const gp_Pnt& thePnt2)
|
||||
~~~
|
||||
|
||||
It is also possible to find a vector of null length:
|
||||
~~~~{.cpp}
|
||||
~~~{.cpp}
|
||||
bool isNullVector (const gp_Vec& theVec)
|
||||
{
|
||||
return theVec.Magnitude() < Precision::Confusion();
|
||||
|
@@ -60,25 +60,25 @@ Administrative data, in the Global Section of the IGES file (such as the file n
|
||||
@subsection occt_iges_2_3 Description of the process
|
||||
@subsubsection occt_iges_2_3_1 Loading the IGES file
|
||||
Before performing any other operation, you have to load the file using the syntax below.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IGESControl_Reader reader;
|
||||
IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”);
|
||||
~~~~
|
||||
~~~~~
|
||||
The loading operation only loads the IGES file into computer memory; it does not translate it.
|
||||
|
||||
@subsubsection occt_iges_2_3_2 Checking the IGES file
|
||||
This step is not obligatory. Check the loaded file with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = reader.Check(Standard_True);
|
||||
~~~~
|
||||
~~~~~
|
||||
The variable “ok is True” is returned if no fail message was found; “ok is False” is returned if there was at least one fail message.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
reader.PrintCheckLoad (failsonly, mode);
|
||||
~~~~
|
||||
~~~~~
|
||||
Error messages are displayed if there are invalid or incomplete IGES entities, giving you information on the cause of the error.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean failsonly = Standard_True or Standard_False;
|
||||
~~~~
|
||||
~~~~~
|
||||
If you give True, you will see fail messages only. If you give False, you will see both fail and warning messages.
|
||||
|
||||
Your analysis of the file can be either message-oriented or entity-oriented. Choose your preference with *IFSelect_PrintCount mode = IFSelect_xxx*, where *xxx* can be any of the following:
|
||||
@@ -98,14 +98,14 @@ manages the continuity of BSpline curves (IGES entities 106, 112 and 126) after
|
||||
* 2: This option concerns IGES Spline curves only. IGES Spline curves are broken down into pieces of C2 continuity. If C2 cannot be ensured, the Spline curves will be broken down into pieces of C1 continuity.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer ic = Interface_Static::IVal("read.iges.bspline.continuity");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this value with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetIVal ("read.iges.bspline.continuity",2))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is 1.
|
||||
|
||||
This parameter does not change the continuity of curves that are used in the construction of IGES BRep entities. In this case, the parameter does not influence the continuity of the resulting OCCT curves (it is ignored).
|
||||
@@ -117,14 +117,14 @@ reads the precision value.
|
||||
* User (1) the precision value is that of the read.precision.val parameter.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer ic = Interface_Static::IVal("read.precision.mode");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this value with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetIVal ("read.precision.mode",1))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is *File* (0).
|
||||
|
||||
<h4>read.precision.val</h4>
|
||||
@@ -133,14 +133,14 @@ User defined precision value. This parameter gives the precision for shape const
|
||||
This value is in the measurement unit defined in the IGES file header.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Real rp = Interface_Static::RVal("read.precision.val");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetRVal ("read.precision.val",0.001))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is 0.0001.
|
||||
|
||||
The value given to this parameter is a target value that is applied to *TopoDS_Vertex, TopoDS_Edge* and *TopoDS_Face* entities. The processor does its best to reach it. Under certain circumstances, the value you give may not be attached to all of the entities concerned at the end of processing. IGES-to-OCCT translation does not improve the quality of the geometry in the original IGES file. This means that the value you enter may be impossible to attain the given quality of geometry in the IGES file.
|
||||
@@ -154,27 +154,27 @@ defines the mode of applying the maximum allowed tolerance. Its possible values
|
||||
* *Forced(1)* maximum tolerance is used as a rigid limit, i.e. it can not be exceeded and, if this happens, tolerance is trimmed to suit the maximum-allowable value.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer mv = Interface_Static::IVal("read.maxprecision.mode");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetIVal ("read.maxprecision.mode",1))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is *Preferred (0)*.
|
||||
|
||||
<h4>read.maxprecision.val</h4>
|
||||
defines the maximum allowable tolerance (in mm) of the shape. It should be not less than the basis value of tolerance set in processor (either Resolution from the file or *read.precision.val*). Actually, the maximum between *read.maxprecision.val* and basis tolerance is used to define maximum allowed tolerance.
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Real rp = Interface_Static::RVal("read.maxprecision.val");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetRVal ("read.maxprecision.val",0.1))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is 1.
|
||||
|
||||
<h4>read.stdsameparameter.mode</h4>
|
||||
@@ -183,14 +183,14 @@ defines the using of *BRepLib\::SameParameter*. Its possible values are:
|
||||
* 1 (On) -- *BRepLib\::SameParameter* is called.
|
||||
*BRepLib\::SameParameter* is used through *ShapeFix_Edge\::SameParameter*. It ensures that the resulting edge will have the lowest tolerance taking pcurves either unmodified from the IGES file or modified by *BRepLib\::SameParameter*.
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer mv = Interface_Static::IVal("read.stdsameparameter.mode");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetIVal ("read.stdsameparameter.mode",1))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Deafault value is 0 (Off).
|
||||
|
||||
<h4>read.surfacecurve.mode</h4>
|
||||
@@ -224,42 +224,42 @@ In any other case, the 2D representation is preferred to the 3D.
|
||||
If either a 3D or a 2D contour is absent in the file or cannot be translated, then it is re-computed from another contour. If the translation of both 2D and 3D contours fails, the whole curve (type 141 or 142) is not translated. If this curve is used for trimming a face, the face will be translated without this trimming and will have natural restrictions.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer ic = Interface_Static::IVal("read.surfacecurve.mode");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this value with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetIVal ("read.surfacecurve.mode",3))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is Default (0).
|
||||
|
||||
<h4>read.encoderegularity.angle</h4>
|
||||
This parameter is used within the *BRepLib::EncodeRegularity()* function which is called for a shape read from an IGES or a STEP file at the end of translation process. This function sets the regularity flag of an edge in a shell when this edge is shared by two faces. This flag shows the continuity, which these two faces are connected with at that edge.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Real era = Interface_Static::RVal("read.encoderegularity.angle");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetRVal ("read.encoderegularity.angle",0.1))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is 0.01.
|
||||
|
||||
<h4>read.iges.bspline.approxd1.mode</h4>
|
||||
This parameter is obsolete (it is rarely used in real practice). If set to True, it affects the translation of bspline curves of degree 1 from IGES: these curves (which geometrically are polylines) are split by duplicated points, and the translator attempts to convert each of the obtained parts to a bspline of a higher continuity.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Real bam = Interface_Static::CVal("read.iges.bspline.approxd1.mode");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetRVal ("read.encoderegularity.angle","On"))
|
||||
.. error ..;
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is Off.
|
||||
|
||||
|
||||
@@ -282,41 +282,41 @@ Default value is MM.
|
||||
@subsubsection occt_iges_2_3_4 Selecting entities
|
||||
|
||||
A list of entities can be formed by invoking the method *IGESControl_Reader::GiveList*.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Handle(TColStd_HSequenceOfTransient) list = reader.GiveList();
|
||||
~~~~
|
||||
~~~~~
|
||||
Several predefined operators can be used to select a list of entities of a specific type.
|
||||
To make a selection, use the method *IGESControl_Reader::GiveList* with the selection type in quotation marks as an argument. You can also make cumulative selections. For example, you would use the following Syntax:
|
||||
To make a selection, use the method *IGESControl_Reader::GiveList* with the selection type in quotation marks as an argument. You can also make cumulative selections. For example, you would use the following syntax:
|
||||
1. Requesting the faces in the file:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
faces = Reader.GiveList("iges-faces");
|
||||
~~~~
|
||||
~~~~~
|
||||
2. Requesting the visible roots in the file:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
visibles = Reader.GiveList(iges-visible-roots);
|
||||
~~~~
|
||||
~~~~~
|
||||
3. Requesting the visible faces:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
visfac = Reader.GiveList(iges-visible-roots,faces);
|
||||
~~~~
|
||||
~~~~~
|
||||
Using a signature, you can define a selection dynamically, filtering the string by means of a criterion. When you request a selection using the method GiveList, you can give either a predefined selection or a selection by signature. You make your selection by signature using the predefined signature followed by your criterion in parentheses as shown in the example below. The syntaxes given are equivalent to each other.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
faces = Reader.GiveList(“xst-type(SurfaceOfRevolution)”);
|
||||
faces = Reader.GiveList(“iges-type(120)”);
|
||||
~~~~
|
||||
~~~~~
|
||||
You can also look for:
|
||||
* values returned by your signature which match your criterion exactly
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
faces = Reader.GiveList(“xst-type(=SurfaceOfRevolution)”);
|
||||
~~~~
|
||||
~~~~~
|
||||
* values returned by your signature which do not contain your criterion
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
faces = Reader.GiveList(“xst-type(!SurfaceOfRevolution)”);
|
||||
~~~~
|
||||
~~~~~
|
||||
* values returned by your signature which do not exactly match your criterion.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
faces = Reader.GiveList(“xst-type(!=SurfaceOfRevolution)”);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
<h4>List of predefined operators that can be used:</h4>
|
||||
* *xst-model-all* -- selects all entities.
|
||||
@@ -329,7 +329,7 @@ faces = Reader.GiveList(“xst-type(!=SurfaceOfRevolution)”);
|
||||
* *iges-visible-transf-roots* -- selects all visible and translatable roots.
|
||||
* *iges-blanked-roots* -- selects all blank roots, whether translatable or not.
|
||||
* *iges-blanked-transf-roots* -- selects all blank and translatable roots.
|
||||
* *iges-status-independent* -- selects entities whose IGES Subordinate Status = 0.
|
||||
* *iges-status-independant* -- selects entities whose IGES Subordinate Status = 0.
|
||||
* *iges-bypass-group* -- selects all root entities. If a root entity is a group (402/7 or 402/9), the entities in the group are selected.
|
||||
* *iges-bypass-subfigure* -- selects all root entities. If a root entity is a subfigure definition (308), the entities in the subfigure definition are selected.
|
||||
* *iges-bypass-group-subfigure* -- selects all root entities. If a root entity is a group (402/7 or 402/9) or a subfigure definition (308), the entities in the group and in the subfigure definition are selected.
|
||||
@@ -342,62 +342,62 @@ faces = Reader.GiveList(“xst-type(!=SurfaceOfRevolution)”);
|
||||
@subsubsection occt_iges_2_3_5 Performing the IGES file translation
|
||||
Perform translation according to what you want to translate:
|
||||
1. Translate an entity identified by its rank with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = reader.Transfer (rank);
|
||||
~~~~
|
||||
~~~~~
|
||||
2. Translate an entity identified by its handle with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = reader.TransferEntity (ent);
|
||||
~~~~
|
||||
~~~~~
|
||||
3. Translate a list of entities in one operation with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer nbtrans = reader.TransferList (list);
|
||||
reader.IsDone();
|
||||
~~~~
|
||||
~~~~~
|
||||
where *nbtrans* returns the number of items in the list that produced a shape and *reader.IsDone()* indicates whether at least one entity was translated.
|
||||
4. Translate a list of entities, entity by entity:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer i,nb = list-Length();
|
||||
for (i = 1; i <= nb; i ++) {
|
||||
Handle(Standard_Transient) ent = list-Value(i);
|
||||
Standard_Boolean OK = reader.TransferEntity (ent);
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
5. Translate the whole file (all entities or only visible entities) with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean onlyvisible = Standard_True or Standard_False;
|
||||
reader.TransferRoots(onlyvisible)
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_iges_2_3_6 Getting the translation results
|
||||
Each successful translation operation outputs one shape. A series of translations gives a series of shapes.
|
||||
Each time you invoke *TransferEntity, Transfer* or *Transferlist*, their results are accumulated and NbShapes increases. You can clear the results (Clear function) between two translation operations, if you do not do this, the results from the next translation will be added to the accumulation. *TransferRoots* operations automatically clear all existing results before they start.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer nbs = reader.NbShapes();
|
||||
~~~~
|
||||
~~~~~
|
||||
returns the number of shapes recorded in the result.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
TopoDS_Shape shape = reader.Shape(num);,
|
||||
~~~~
|
||||
~~~~~
|
||||
returns the result *num*, where *num* is an integer between 1 and *NbShapes*.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
TopoDS_Shape shape = reader.Shape();
|
||||
~~~~
|
||||
~~~~~
|
||||
returns the first result in a translation operation.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
TopoDS_Shape shape = reader.OneShape();
|
||||
~~~~
|
||||
~~~~~
|
||||
returns all results in a single shape which is:
|
||||
* a null shape if there are no results,
|
||||
* in case of a single result, a shape that is specific to that result,
|
||||
* a compound that lists the results if there are several results.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
reader.Clear();
|
||||
~~~~
|
||||
~~~~~
|
||||
erases the existing results.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
reader.PrintTransferInfo (failsonly, mode);
|
||||
~~~~
|
||||
~~~~~
|
||||
displays the messages that appeared during the last invocation of *Transfer* or *TransferRoots*.
|
||||
|
||||
If *failsonly* is *IFSelect_FailOnly*, only fail messages will be output, if it is *IFSelect_FailAndWarn*, all messages will be output. Parameter “mode” can have *IFSelect_xxx* values where *xxx* can be:
|
||||
@@ -490,25 +490,25 @@ If a *TopoDS_Face* is output, its geometrical support is a *Geom_Surface* and i
|
||||
@subsection occt_iges_2_5 Messages
|
||||
Messages are displayed concerning the normal functioning of the processor (transfer, loading, etc.).
|
||||
You must declare an include file:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include \<Interface_DT.hxx\>
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
You have the choice of the following options for messages:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IDT_SetLevel (level);
|
||||
~~~~
|
||||
~~~~~
|
||||
level modifies the level of messages:
|
||||
* 0: no messages
|
||||
* 1: raise and fail messages are displayed, as are messages concerning file access,
|
||||
* 2: warnings are also displayed.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IDT_SetFile (“tracefile.log”);
|
||||
~~~~
|
||||
~~~~~
|
||||
prints the messages in a file,
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IDT_SetStandard();
|
||||
~~~~
|
||||
~~~~~
|
||||
restores screen output.
|
||||
|
||||
@subsection occt_iges_2_6 Tolerance management
|
||||
@@ -605,7 +605,7 @@ The highlighted classes produce OCCT geometry.
|
||||
|
||||
@subsection occt_iges_2_8 Example
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
#include “IGESControl_Reader.hxx”
|
||||
#include “TColStd_HSequenceOfTransient.hxx”
|
||||
#include “TopoDS_Shape.hxx”
|
||||
@@ -627,7 +627,7 @@ cout<<"IGES Faces: "<<nIgesFaces<<" Transferred:"<<nTransFaces<<endl;
|
||||
TopoDS_Shape sh = myIgesReader.OneShape();
|
||||
//and obtains the results in an OCCT shape.
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@section occt_iges_3 Writing IGES
|
||||
@subsection occt_iges_3_1 Procedure
|
||||
@@ -665,13 +665,13 @@ The following parameters are used for the OCCT-to-IGES translation.
|
||||
* "Faces" (0): OCCT *TopoDS_Faces* will be translated into IGES 144 (Trimmed Surface) entities, no BRep entities will be written to the IGES file,
|
||||
* "BRep" (1): OCCT *TopoDS_Faces* will be translated into IGES 510 (Face) entities, the IGES file will contain BRep entities.
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Integer byvalue = Interface_Static::IVal("write.iges.brep.mode");
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Interface_Static::SetIVal ("write.iges.brep.mode", 1);
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is "Faces" (0).
|
||||
* *write.convertsurface.mode* when writing to IGES in the BRep mode, this parameter indicates whether elementary surfaces (cylindrical, conical, spherical, and toroidal) are converted into corresponding IGES 5.3 entities (if the value of a parameter value is On), or written as surfaces of revolution (by default).
|
||||
* *write.iges.unit:* allows choosing the unit. The default unit for Open CASCADE Technology is "MM" (millimeter). You can choose to write a file into any unit accepted by IGES.
|
||||
@@ -700,46 +700,46 @@ Default value is "Faces" (0).
|
||||
* *write.precision.val:* is the user precision value. This parameter gives the resolution value for an IGES file when the *write.precision.mode* parameter value is 1. It is equal to 0.0001 by default, but can take any real positive (non null) value.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Real rp = Interface_Static::RVal(;write.precision.val;);
|
||||
~~~~
|
||||
~~~~~
|
||||
Modify this parameter with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
if (!Interface_Static::SetRVal(;write.precision.val;,0.01))
|
||||
.. error ..
|
||||
~~~~
|
||||
~~~~~
|
||||
Default value is 0.0001.
|
||||
|
||||
<h4>write.iges.resource.name</h4> and <h4>write.iges.sequence</h4> are the same as the corresponding read.iges.\* parameters. Note that the default sequence for writing contains *DirectFaces* operator, which converts elementary surfaces based on left-hand axes (valid in CASCADE) to right-hand axes (which are valid only in IGES).
|
||||
|
||||
Default values :
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
write.iges.resource.name - IGES,
|
||||
write.iges.sequence - ToIGES.
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_iges_3_3_3 Performing the Open CASCADE Technology shape translation
|
||||
|
||||
You can perform the translation in one or several operations. Here is how you translate topological and geometrical objects:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = writer.AddShape (TopoDS_Shape);
|
||||
~~~~
|
||||
~~~~~
|
||||
*ok* is True if translation was correctly performed and False if there was at least one entity that was not translated.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = writer.AddGeom (geom);
|
||||
~~~~
|
||||
~~~~~
|
||||
where *geom* is *Handle(Geom_Curve)* or *Handle(Geom_Surface)*;
|
||||
*ok* is True if the translation was correctly performed and False if there was at least one entity whose geometry was not among the allowed types.
|
||||
|
||||
@subsubsection occt_iges_3_3_4 Writing the IGES file
|
||||
Write the IGES file with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = writer.Write ("filename.igs");
|
||||
~~~~
|
||||
~~~~~
|
||||
to give the file name.
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = writer.Write (S);
|
||||
~~~~
|
||||
~~~~~
|
||||
where *S* is *Standard_OStream*
|
||||
*ok* is True if the operation was correctly performed and False if an error occurred (for instance, if the processor could not create the file).
|
||||
|
||||
@@ -823,7 +823,7 @@ The highlighted classes are intended to translate geometry.
|
||||
|
||||
@subsection occt_iges_3_7 Example
|
||||
|
||||
~~~~{.cpp}
|
||||
~~~~~{c++}
|
||||
#include <IGESControl_Controller.hxx>
|
||||
#include <IGESControl_Writer.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
@@ -839,7 +839,7 @@ Standard_Integer main()
|
||||
Standard_Boolean OK = ICW.Write (;MyFile.igs;);
|
||||
//writes a model to the file MyFile.igs
|
||||
}
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
|
||||
@section occt_iges_4 Using XSTEPDRAW
|
||||
@@ -852,7 +852,7 @@ In the description of commands, square brackets ([]) are used to indicate optio
|
||||
|
||||
A set of parameters for importing and exporting IGES files is defined in the XSTEP resource file. In XSTEPDRAW, these parameters can be viewed or changed using command
|
||||
|
||||
~~~~{.php}
|
||||
~~~~
|
||||
Draw> param [<parameter_name> [<value>]]
|
||||
~~~~
|
||||
|
||||
@@ -883,15 +883,15 @@ These parameters are set by command *param* :
|
||||
It is possible either only to load an IGES file into memory (i.e. to fill the model with data from the file), or to read it (i.e. to load and convert all entities to OCCT shapes).
|
||||
|
||||
Loading is done by the command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> xload <file_name>
|
||||
~~~~
|
||||
~~~~~
|
||||
Once the file is loaded, it is possible to investigate the structure of the loaded data. To learn how to do it see @ref occt_iges_4_4 "Analyzing the transferred".
|
||||
|
||||
Reading of an IGES file is done by the command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> igesbrep <file_name> <result_shape_name> [<selection>]
|
||||
~~~~
|
||||
~~~~~
|
||||
Here a dot can be used instead of a filename if the file is already loaded by *xload* or *igesbrep* command. In that case, only conversion of IGES entities to OCCT shapes will be done.
|
||||
|
||||
Command *igesbrep* will interactively ask the user to select a set of entities to be converted:
|
||||
@@ -912,13 +912,13 @@ The second parameter of the *igesbrep* command defines the name of the loaded s
|
||||
|
||||
|
||||
Instead of *igesbrep* it is possible to use commands:
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> trimport <file_name> <result_shape_name> <selection>
|
||||
~~~~
|
||||
~~~~~
|
||||
which outputs the result of translation of each selected entity into one shape, or
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> trimpcomp <file_name> <result_shape_name> <selection>
|
||||
~~~~
|
||||
~~~~~
|
||||
which outputs the result of translation of all selected entities into one shape (*TopoDS_Compound* for several entities).
|
||||
|
||||
An asterisk “*” can be specified instead of *selection*, it means *xst-transferrable-roots*.
|
||||
@@ -940,9 +940,9 @@ The procedure of analysis of the data import can be divided into two stages:
|
||||
@subsubsection occt_iges_4_4_1 Checking file contents
|
||||
|
||||
General statistics on the loaded data can be obtained by using command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> data <symbol>
|
||||
~~~~
|
||||
~~~~~
|
||||
The information printed by this command depends on the symbol specified:
|
||||
|
||||
| Symbol | Output |
|
||||
@@ -963,18 +963,18 @@ There is a set of special objects, which can be used to operate with the loaded
|
||||
|
||||
|
||||
A list of these objects defined in the current session can be printed in DRAW by command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> listitems
|
||||
~~~~
|
||||
~~~~~
|
||||
In the following commands if several <i>\<selection\></i> arguments are specified the results of each following selection are applied to the results of the previous one.
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> givelist <selection_name> [<selection_name>]
|
||||
~~~~
|
||||
~~~~~
|
||||
prints a list of loaded entities defined by selection argument.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> givecount <selection_name> [<selection_name>]
|
||||
~~~~
|
||||
~~~~~
|
||||
prints a number of loaded entities defined by <i>selection</i> argument.
|
||||
|
||||
Three commands are used to calculate statistics on the entities in the model:
|
||||
@@ -991,9 +991,9 @@ Optional <i>\<selection\></i> argument, if specified, defines a subset of entiti
|
||||
| iges-levels | Calculates how much entities lie in different IGES levels |
|
||||
|
||||
The command:
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> listtypes <selection_name> ...
|
||||
~~~~
|
||||
~~~~~
|
||||
gives a list of entity types which were encountered in the last loaded file (with a number of IGES entities of each type). The list can be shown not for all entities but for a subset of them. This subset is defined by an optional selection argument.
|
||||
|
||||
Entities in the IGES file are numbered in the succeeding order. An entity can be identified either by its number (#) or by its label. Label is the letter ‘D’ followed by the index of the first line with the data for this entity in the Directory Entry section of the IGES file. The label can be calculated on the basis of the number as ‘D(2*# -1)’. For example, entity # 6 has label D11.
|
||||
@@ -1006,9 +1006,9 @@ Entities in the IGES file are numbered in the succeeding order. An entity can b
|
||||
@subsubsection occt_iges_4_4_2 Estimating the results of reading IGES
|
||||
All of the following commands are available only after the data are converted into OCCT shapes (i.e. after command **igesbrep**).
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> tpstat [*|?]<symbol> [<selection>]
|
||||
~~~~
|
||||
~~~~~
|
||||
provides all statistics on the last transfer, including the list of transferred entities with mapping from IGES to OCCT types, as well as fail and warning messages. The parameter <i>\<symbol\></i> defines what information will be printed:
|
||||
* G -- General statistics (list of results and messages)
|
||||
* C -- Count of all warning and fail messages
|
||||
@@ -1028,13 +1028,13 @@ Optional argument <i>\<selection\></i> can limit the action of the command with
|
||||
To get help, run this command without arguments.
|
||||
|
||||
For example, to get translation ratio on IGES faces, you can use.
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw:> tpstat *l iges-faces
|
||||
~~~~
|
||||
~~~~~
|
||||
The second version of the same command is TPSTAT (not capital spelling).
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw:> TPSTAT <symbol>
|
||||
~~~~
|
||||
~~~~~
|
||||
Symbol can be of the following values:
|
||||
* g -- General statistics (list of results and messages)
|
||||
* c -- Count of all warning and fail messages
|
||||
@@ -1045,37 +1045,37 @@ Symbol can be of the following values:
|
||||
Sometimes the trimming contours of IGES faces (i.e., entity 141 for 143, 142 for 144) can be lost during translation due to fails.
|
||||
|
||||
The number of lost trims and the corresponding IGES entities can be obtained by the command:
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> tplosttrim [<IGES_type>]
|
||||
~~~~
|
||||
~~~~~
|
||||
It outputs the rank and DE numbers of faces that lost their trims and their numbers for each type (143, 144, 510) and their total number. If a face lost several of its trims it is output only once.
|
||||
|
||||
Optional parameter <i>\<IGES_type\></i> can be *TrimmedSurface, BoundedSurface* or *Face* to specify the only type of IGES faces.
|
||||
|
||||
For example, to get untrimmed 144 entities, use command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> tplosttrim TrimmedSurface
|
||||
~~~~
|
||||
~~~~~
|
||||
To get the information on OCCT shape contents, use command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> statshape <shape_name>
|
||||
~~~~
|
||||
~~~~~
|
||||
It outputs the number of each kind of shapes (vertex, edge, wire, etc.) in a shape and some geometrical data (number of C0 surfaces, curves, indirect surfaces, etc.).
|
||||
|
||||
Note. The number of faces is returned as a number of references. To obtain the number of single instances the standard command (from TTOPOLOGY executable) **nbshapes** can be used.
|
||||
|
||||
To analyze the internal validity of a shape, use command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> checkbrep <shape_name> <expurged_shape_name>
|
||||
~~~~
|
||||
~~~~~
|
||||
It checks the geometry and topology of a shape for different cases of inconsistency, like self-intersecting wires or wrong orientation of trimming contours. If an error is found, it copies bad parts of the shape with the names "expurged_subshape_name _#" and generates an appropriate message. If possible, this command also tries to find IGES entities the OCCT shape was produced from.
|
||||
|
||||
<i>\<expurged_shape_name\></i> will contain the original shape without invalid subshapes.
|
||||
|
||||
To get information on tolerances of subshapes, use command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> tolerance <shape_name> [<min> [<max>] [<symbol>]]
|
||||
~~~~
|
||||
~~~~~
|
||||
It outputs maximum, average and minimum values of tolerances for each kind of subshapes having tolerances or it can output tolerances of all subshapes of the whole shape.
|
||||
|
||||
When specifying *min* and *max* arguments this command outputs shapes with names <i>\<shape_name\>...</i> and their total number with tolerances in the range <i>[min, max]</i>.
|
||||
@@ -1099,19 +1099,19 @@ Refer to @ref occt_iges_3_3_2 "Setting the translation parameters" for a descrip
|
||||
| Measurement units | XSTEP.iges.unit | 1-11 (or a string value) |
|
||||
|
||||
Several shapes can be written in one file. To start writing a new file, enter command
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> newmodel
|
||||
~~~~
|
||||
~~~~~
|
||||
This command clears the *InterfaceModel* to make it empty.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> brepiges <shape_name_1> [<filename.igs>]
|
||||
~~~~
|
||||
~~~~~
|
||||
Converts the specified shapes into IGES entities and puts them into the *InterfaceModel*.
|
||||
|
||||
~~~~{.php}
|
||||
~~~~~
|
||||
Draw> writeall <filename.igs>
|
||||
~~~~
|
||||
~~~~~
|
||||
Allows writing the prepared model to a file with name *filename.igs*.
|
||||
|
||||
@section occt_iges_5 Reading from and writing to IGES
|
||||
@@ -1121,10 +1121,10 @@ Allows writing the prepared model to a file with name *filename.igs*.
|
||||
### Load an IGES file
|
||||
|
||||
Before performing any other operation, you must load an IGES file with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IGESCAFControl_Reader reader(XSDRAW::Session(), Standard_False);
|
||||
IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”);
|
||||
~~~~
|
||||
~~~~~
|
||||
Loading the file only memorizes, but does not translate the data.
|
||||
|
||||
### Check the loaded IGES file
|
||||
@@ -1137,64 +1137,64 @@ See the description of @ref occt_iges_2_3_3 "Setting translation parameters" abo
|
||||
|
||||
In addition, the following parameters can be set for XDE translation of attributes:
|
||||
* For transferring colors:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
reader.SetColorMode(mode);
|
||||
// mode can be Standard_True or Standard_False
|
||||
~~~~
|
||||
~~~~~
|
||||
* For transferring names:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
reader.SetNameMode(mode);
|
||||
// mode can be Standard_True or Standard_False
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Translate an IGES file to XDE
|
||||
|
||||
The following function performs a translation of the whole document:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
Standard_Boolean ok = reader.Transfer(doc);
|
||||
~~~~
|
||||
~~~~~
|
||||
where *doc* is a variable which contains a handle to the output document and should have a type *Handle(TDocStd_Document)*.
|
||||
|
||||
|
||||
@subsection occt_iges_5_2 Writing to IGES
|
||||
|
||||
The translation from XDE to IGES can be initialized as follows:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IGESCAFControl_Writer aWriter(XSDRAW::Session(),Standard_False);
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Set parameters for translation from XDE to IGES
|
||||
|
||||
The following parameters can be set for translation of attributes to IGES:
|
||||
* For transferring colors:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
aWriter.SetColorMode(mode);
|
||||
// mode can be Standard_True or Standard_False
|
||||
~~~~
|
||||
~~~~~
|
||||
* For transferring names:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
aWriter.SetNameMode(mode);
|
||||
// mode can be Standard_True or Standard_False
|
||||
~~~~
|
||||
~~~~~
|
||||
|
||||
### Translate an XDE document to IGES
|
||||
|
||||
You can perform the translation of a document by calling the function:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc);
|
||||
~~~~
|
||||
~~~~~
|
||||
where "doc" is a variable which contains a handle to the input document for transferring and should have a type *Handle(TDocStd_Document)*.
|
||||
|
||||
### Write an IGES file
|
||||
|
||||
Write an IGES file with:
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IFSelect_ReturnStatus statw = aWriter.WriteFile("filename.igs");
|
||||
~~~~
|
||||
~~~~~
|
||||
or
|
||||
~~~~{.cpp}
|
||||
~~~~~
|
||||
IFSelect_ReturnStatus statw = writer.WriteFile (S);
|
||||
~~~~
|
||||
~~~~~
|
||||
where S is OStream.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
@@ -1,27 +1,284 @@
|
||||
<svg width="609" height="426" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#58a50b" id="svg_1" height="424.00001" width="605" y="-0.00001" x="0.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_2" height="89" width="575" y="16" x="13.5" stroke-width="4" stroke="#58a50b" fill="#66af1c"/>
|
||||
<rect stroke="#58a50b" id="svg_3" height="280" width="277.99999" y="121" x="16.5" stroke-width="4" fill="#66af1c"/>
|
||||
<rect stroke="#58a50b" id="svg_4" height="122" width="277.99999" y="120" x="309.5" stroke-width="4" fill="#66af1c"/>
|
||||
<rect stroke="#58a50b" id="svg_5" height="140" width="277.99999" y="256" x="310.5" stroke-width="4" fill="#66af1c"/>
|
||||
<rect id="svg_6" height="64" width="219" y="184" x="47.5" stroke-width="4" stroke="#58a50b" fill="#ffffff"/>
|
||||
<rect id="svg_7" height="40" width="277" y="36" x="30.5" stroke-width="4" stroke="#58a50b" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_8" height="40" width="112" y="36" x="321.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_10" height="40" width="119" y="36" x="446.5" stroke-width="4" fill="#ffffff"/>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_11" y="61" x="98.5" stroke-width="0" stroke="#58a50b" fill="#000000">Tree Navigation</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_12" y="63" x="338.5" stroke-width="0" stroke="#58a50b" fill="#000000">Update</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_13" y="65" x="474.5" stroke-width="0" stroke="#58a50b" fill="#ffffff">Search</text>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_14" y="62" x="475.5" stroke-width="0" stroke="#58a50b" fill="#000000">Search</text>
|
||||
<rect stroke="#58a50b" id="svg_20" height="54" width="136.99999" y="291" x="318.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_21" height="52" width="188" y="180" x="391.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_22" height="54" width="163" y="136" x="323.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_23" height="53" width="146" y="317" x="426.5" stroke-width="4" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_27" y="170" x="338.5" stroke-width="0" stroke="#58a50b" fill="#000000">Property panel</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_28" y="227" x="83.5" stroke-width="0" stroke="#58a50b" fill="#000000">OCAF tree view</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="21" id="svg_30" y="322" x="322.5" stroke-width="0" stroke="#58a50b" fill="#000000">Dump View</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_31" y="352" x="459.5" stroke-width="0" stroke="#58a50b" fill="#000000">3D View</text>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="18" id="svg_32" y="214" x="398.5" stroke-width="0" stroke="#58a50b" fill="#000000">Property panel (custom)</text>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="165.36443mm"
|
||||
height="99.48317mm"
|
||||
viewBox="0 0 165.36443 99.48317"
|
||||
version="1.1"
|
||||
id="svg1643"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="dfbrowser_elements.svg">
|
||||
<defs
|
||||
id="defs1637" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="290.24314"
|
||||
inkscape:cy="320.3071"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1246"
|
||||
inkscape:window-height="857"
|
||||
inkscape:window-x="371"
|
||||
inkscape:window-y="37"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata1640">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(356.33698,30.17611)">
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4147"
|
||||
width="164.83542"
|
||||
height="98.95417"
|
||||
x="-356.07248"
|
||||
y="-29.91161"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4157"
|
||||
width="155.951"
|
||||
height="20.214758"
|
||||
x="-352.0733"
|
||||
y="-25.674246"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159"
|
||||
width="75.795822"
|
||||
height="64.91011"
|
||||
x="-352.07172"
|
||||
y="-0.79434544"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4161-4"
|
||||
width="75.811562"
|
||||
height="30.252827"
|
||||
x="-272.04941"
|
||||
y="33.729694"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4161-4-8"
|
||||
width="75.811562"
|
||||
height="30.252827"
|
||||
x="-272.04941"
|
||||
y="-0.80220562"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195"
|
||||
width="73.552574"
|
||||
height="11.118413"
|
||||
x="-347.50781"
|
||||
y="-21.126072"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-1"
|
||||
width="30.417513"
|
||||
height="11.316654"
|
||||
x="-267.92496"
|
||||
y="-21.225193"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-1-5"
|
||||
width="30.417513"
|
||||
height="11.316654"
|
||||
x="-231.57631"
|
||||
y="-21.225193"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-259.7175"
|
||||
y="-14.48304"
|
||||
id="text5675"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5677"
|
||||
x="-259.7175"
|
||||
y="-14.48304"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Update</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-223.04579"
|
||||
y="-14.12208"
|
||||
id="text5679"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5681"
|
||||
x="-223.04579"
|
||||
y="-14.12208"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Search</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-325.95343"
|
||||
y="-14.547463"
|
||||
id="text5683"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685"
|
||||
x="-325.95343"
|
||||
y="-14.547463"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Tree Navigation</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8"
|
||||
width="65.570122"
|
||||
height="19.385952"
|
||||
x="-347.50781"
|
||||
y="11.248657"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-333.31332"
|
||||
y="22.090868"
|
||||
id="text5683-5"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3"
|
||||
x="-333.31332"
|
||||
y="22.090868"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">OCAF tree view</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-0"
|
||||
width="65.570122"
|
||||
height="19.385952"
|
||||
x="-267.68332"
|
||||
y="3.9789243"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-3-5"
|
||||
width="38.7719"
|
||||
height="16.820164"
|
||||
x="-267.11316"
|
||||
y="37.191612"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#9bbb59;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-3"
|
||||
width="38.7719"
|
||||
height="16.820164"
|
||||
x="-240.60002"
|
||||
y="42.180641"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-252.8326"
|
||||
y="13.779153"
|
||||
id="text5683-5-9"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-8"
|
||||
x="-252.8326"
|
||||
y="13.779153"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Property Panel</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-231.82542"
|
||||
y="51.393177"
|
||||
id="text5683-5-0"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-5"
|
||||
x="-231.82542"
|
||||
y="51.393177"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D View</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-267.25568"
|
||||
y="46.086102"
|
||||
id="text5683-5-1"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-80"
|
||||
x="-267.25568"
|
||||
y="46.086102"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Dump View</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 33 KiB |
@@ -1,21 +0,0 @@
|
||||
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#ff56ff" id="svg_1" height="296.99999" width="297.00002" y="1.6" x="1" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_3" height="120" width="136" y="22.6" x="153" stroke-width="4" stroke="#ff56ff" fill="#ff56ff"/>
|
||||
<rect stroke="#ff56ff" id="svg_4" height="259.99999" width="126.99999" y="18.6" x="16" stroke-width="4" fill="#ff56ff"/>
|
||||
<rect stroke="#ff56ff" id="svg_5" height="122" width="131" y="155.6" x="156" stroke-width="4" fill="#ff56ff"/>
|
||||
<rect stroke="#ff56ff" id="svg_6" height="41.00001" width="125" y="87.6" x="17" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_7" height="3" width="2" y="364.6" x="89" stroke-width="4" stroke="#ff56ff" fill="#ffffff"/>
|
||||
<rect stroke="#ffffff" id="svg_8" height="41.00001" width="117" y="126.6" x="21" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#ff56ff" id="svg_9" height="41.00001" width="125" y="63.6" x="164" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#ff56ff" id="svg_10" height="64.00001" width="114.00001" y="158.6" x="159" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#ff56ff" id="svg_11" height="41.00001" width="101.00001" y="215.6" x="184" stroke-width="4" fill="#ffffff"/>
|
||||
<text transform="matrix(0.742836 0 0 0.850555 6.17194 14.6433)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_13" y="119.6" x="24" stroke-width="0" fill="#000000">Message report</text>
|
||||
<text style="cursor: move;" transform="matrix(0.742836 0 0 0.850555 6.17194 46.6433)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_14" y="118.4243" x="24" stroke-width="0" fill="#000000">tree view</text>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_15" y="90.6" x="167" stroke-width="0" stroke="#ff56ff" fill="#000000">Dump panel</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_16" y="245.6" x="190" stroke-width="0" stroke="#ff56ff" fill="#000000">3D View</text>
|
||||
<text transform="matrix(0.784367 0 0 0.769922 36.8545 36.9383)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_17" y="181.6" x="157" stroke-width="0" fill="#000000">Property panel</text>
|
||||
<text transform="matrix(0.884685 0 0 0.774516 20.9874 38.7657)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_18" y="206.5113" x="176.34827" stroke-width="0" fill="#000000">(custom)</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 37 KiB |
@@ -1,16 +1,142 @@
|
||||
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke-width="4" stroke="#ffaa56" id="svg_1" height="295" width="294.99999" y="2.59999" x="3" fill="#fff"/>
|
||||
<rect id="svg_3" height="252" width="130" y="26.6" x="20" stroke-width="4" stroke="#ffaa56" fill="#ffaa56"/>
|
||||
<rect stroke="#ffaa56" id="svg_4" height="121.00001" width="130" y="157.6" x="158" stroke-width="4" fill="#ffaa56"/>
|
||||
<rect stroke="#ffaa56" id="svg_5" height="116.99999" width="130" y="25.6" x="159" stroke-width="4" fill="#ffaa56"/>
|
||||
<rect stroke="#ffaa56" id="svg_10" height="83" width="120" y="97.6" x="24" stroke-width="0" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_12" y="125.6" x="33" stroke-width="0" stroke="#7f7f2f" fill="#000000">Topo_DS</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_13" y="160.6" x="28" stroke-width="0" stroke="#7f7f2f" fill="#000000">Shape view</text>
|
||||
<rect stroke="#ffaa56" id="svg_14" height="50" width="120" y="197.6" x="164" stroke-width="0" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_15" y="231.6" x="184" stroke-width="0" stroke="#7f7f2f" fill="#000000">3D view</text>
|
||||
<rect stroke="#ffaa56" id="svg_16" height="50" width="125.99999" y="59.6" x="161" stroke-width="0" fill="#ffffff"/>
|
||||
<text transform="matrix(0.893464 0 0 0.962463 18.0458 2.59472)" stroke="#7f7f2f" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_17" y="92.678" x="160" stroke-width="0" fill="#000000">Property panel</text>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="165.36458mm"
|
||||
height="99.483337mm"
|
||||
viewBox="0 0 165.36458 99.483337"
|
||||
version="1.1"
|
||||
id="svg2491"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="shapeview_elements.svg">
|
||||
<defs
|
||||
id="defs2485" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="319.53221"
|
||||
inkscape:cy="223.36826"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:showpageshadow="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1205"
|
||||
inkscape:window-height="766"
|
||||
inkscape:window-x="422"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata2488">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(293.59301,-77.169049)">
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#ffa040;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4147-0-8"
|
||||
width="164.83542"
|
||||
height="98.95417"
|
||||
x="-293.32843"
|
||||
y="77.433632"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#fcd5b5;fill-opacity:1;fill-rule:evenodd;stroke:#ff9933;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159-8"
|
||||
width="70.094536"
|
||||
height="85.011993"
|
||||
x="-285.46909"
|
||||
y="83.598381"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.62230003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-2"
|
||||
width="54.993557"
|
||||
height="25.389547"
|
||||
x="-277.91861"
|
||||
y="113.40961"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#fcd5b5;fill-opacity:1;fill-rule:evenodd;stroke:#ffa040;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159-8-9"
|
||||
width="70.094536"
|
||||
height="85.011993"
|
||||
x="-207.25319"
|
||||
y="83.598389"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-2-4"
|
||||
width="54.993557"
|
||||
height="25.389547"
|
||||
x="-199.70271"
|
||||
y="113.40961"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-272.88153"
|
||||
y="125.70056"
|
||||
id="text5683-5-4-9"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-59-2"
|
||||
x="-272.88153"
|
||||
y="125.70056"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">TopoDS_Shape View</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-182.24478"
|
||||
y="126.02359"
|
||||
id="text5683-5-0-0"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-5-6"
|
||||
x="-182.24478"
|
||||
y="126.02359"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D View</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 39 KiB |
@@ -1,19 +1,244 @@
|
||||
<svg width="609" height="426" xmlns="http://www.w3.org/2000/svg">
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#7f3f00" stroke-width="4" id="svg_2" height="419.99998" width="605.00004" y="2.8" x="1.99999" fill="#ffffff"/>
|
||||
<rect id="svg_5" height="193" width="413" y="207.8" x="167" stroke-width="3" stroke="#08a4d8" fill="#ffffff"/>
|
||||
<rect stroke="#f2780e" id="svg_6" height="193.99999" width="409.99997" y="173.8" x="137" opacity="NaN" stroke-width="3" fill="#ffffff"/>
|
||||
<rect stroke="#d608cb" id="svg_7" height="192" width="404.99998" y="136.8" x="106" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#5fbf00" id="svg_9" height="193" width="406.00001" y="91.8" x="66.99999" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_10" height="43" width="137" y="23.8" x="19" stroke-width="4" stroke="#5fbf00" fill="#5fbf00"/>
|
||||
<rect stroke="#d608cb" id="svg_16" height="43" width="137" y="23.8" x="163" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#f2780e" opacity="NaN" id="svg_17" height="42" width="135" y="23.8" x="309" stroke-width="3" fill="#ffffff"/>
|
||||
<rect stroke="#08a4d8" id="svg_18" height="43" width="135" y="23.8" x="451" stroke-width="3" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_19" y="52.8" x="32" stroke-width="0" stroke="#08a4d8" fill="#000000">DFBrowser</text>
|
||||
<text transform="matrix(0.903837 0 0 1 19.0402 0)" stroke="#010b0f" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_22" y="52.8" x="165.91458" stroke-width="0" fill="#000000">MessageView</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_23" y="52.8" x="325" stroke-width="0" stroke="#5fbf00" fill="#000000">ShapeView</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_24" y="51.8" x="463" stroke-width="0" stroke="#7f3f00" fill="#000000">VInspector</text>
|
||||
</g>
|
||||
</svg>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="164.48495mm"
|
||||
height="98.635941mm"
|
||||
viewBox="0 0 164.48495 98.635941"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="tinspector_elements.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2">
|
||||
<pattern
|
||||
y="0"
|
||||
x="0"
|
||||
height="6"
|
||||
width="6"
|
||||
patternUnits="userSpaceOnUse"
|
||||
id="EMFhbasepattern" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="329.8397"
|
||||
inkscape:cy="227.89271"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1575"
|
||||
inkscape:window-height="895"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="75"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-23.06172,-25.84832)">
|
||||
<path
|
||||
id="path933"
|
||||
d="M 23.326301,26.112901 H 187.28209 V 124.21968 H 23.326301 Z"
|
||||
style="fill:none;stroke:#953735;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path935"
|
||||
d="M 28.109932,31.192871 H 62.95001 v 12.97507 H 28.109932 Z"
|
||||
style="fill:#9bbb59;fill-opacity:1;fill-rule:nonzero;stroke:#71893f;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path937"
|
||||
d="m 66.54831,31.108201 h 34.84008 v 12.97507 H 66.54831 Z"
|
||||
style="fill:none;stroke:#33cccc;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path939"
|
||||
d="m 104.9867,31.023531 h 34.84007 v 12.97508 H 104.9867 Z"
|
||||
style="fill:none;stroke:#ff9933;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path941"
|
||||
d="m 37.550195,37.648651 c 0,0.254 -0.04233,0.48683 -0.169332,0.6985 -0.105832,0.21166 -0.253998,0.38099 -0.444497,0.48683 -0.126999,0.0847 -0.275164,0.14816 -0.42333,0.16933 -0.169332,0.0423 -0.35983,0.0635 -0.634995,0.0635 h -0.698495 v -2.83631 h 0.698495 c 0.275165,0 0.48683,0.0212 0.656162,0.0635 0.169332,0.0423 0.296331,0.10583 0.42333,0.16933 0.190498,0.127 0.338664,0.27516 0.444497,0.48683 0.105832,0.1905 0.148165,0.42333 0.148165,0.69849 z m -0.380997,0 c 0,-0.21166 -0.04233,-0.40216 -0.126999,-0.55033 -0.0635,-0.16933 -0.190498,-0.27516 -0.338664,-0.35983 -0.105833,-0.0635 -0.232832,-0.10583 -0.359831,-0.14816 -0.126999,-0.0212 -0.275164,-0.0212 -0.444497,-0.0212 h -0.35983 v 2.18015 h 0.35983 c 0.190499,0 0.338665,-0.0212 0.465664,-0.0423 0.148165,-0.0423 0.275164,-0.0847 0.380997,-0.14817 0.148165,-0.10583 0.253998,-0.21166 0.317498,-0.35983 0.0635,-0.14817 0.105832,-0.33866 0.105832,-0.55033 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path943"
|
||||
d="m 39.963178,36.569161 h -1.418157 v 0.80433 h 1.227658 v 0.33866 h -1.227658 v 1.35466 h -0.380997 v -2.83631 h 1.799154 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path945"
|
||||
d="m 42.524325,38.198981 c 0,0.127 -0.02117,0.254 -0.08467,0.35983 -0.04233,0.10583 -0.126999,0.21167 -0.211665,0.27517 -0.105833,0.0847 -0.211665,0.14816 -0.338664,0.16933 -0.126999,0.0423 -0.296331,0.0635 -0.48683,0.0635 h -1.015992 v -2.83631 h 0.84666 c 0.211665,0 0.359831,0.0212 0.465663,0.0423 0.105833,0 0.190499,0.0423 0.296331,0.0847 0.105833,0.0635 0.169332,0.12699 0.211666,0.21166 0.0635,0.0847 0.08467,0.1905 0.08467,0.29633 0,0.14817 -0.04233,0.254 -0.105832,0.35983 -0.0635,0.0847 -0.169332,0.16933 -0.275165,0.21167 v 0.0212 c 0.190499,0.0423 0.338665,0.127 0.444497,0.254 0.105833,0.12699 0.169332,0.27516 0.169332,0.48683 z m -0.634995,-1.26999 c 0,-0.0847 0,-0.127 -0.02117,-0.16933 -0.04233,-0.0635 -0.0635,-0.0847 -0.126999,-0.127 -0.04233,-0.0212 -0.126999,-0.0423 -0.211665,-0.0635 -0.08467,0 -0.190498,0 -0.317497,0 h -0.444497 v 0.80433 h 0.486829 c 0.127,0 0.211665,0 0.275165,-0.0212 0.08467,0 0.148166,-0.0423 0.190499,-0.0635 0.0635,-0.0423 0.105832,-0.0847 0.126999,-0.14817 0.04233,-0.0635 0.04233,-0.127 0.04233,-0.21166 z m 0.253998,1.26999 c 0,-0.10583 -0.02117,-0.1905 -0.0635,-0.254 -0.02117,-0.0847 -0.08467,-0.127 -0.190498,-0.16933 -0.0635,-0.0423 -0.126999,-0.0635 -0.211665,-0.0635 -0.08467,-0.0212 -0.190499,-0.0212 -0.317498,-0.0212 h -0.592662 v 1.05833 h 0.507996 c 0.148166,0 0.296331,-0.0212 0.402164,-0.0423 0.105832,0 0.190498,-0.0423 0.253998,-0.0847 0.0635,-0.0423 0.126999,-0.10584 0.148165,-0.16933 0.04233,-0.0635 0.0635,-0.14817 0.0635,-0.254 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path947"
|
||||
d="m 44.344645,37.331151 h -0.02117 c -0.04233,-0.0212 -0.105832,-0.0212 -0.148165,-0.0212 -0.04233,0 -0.105833,-0.0212 -0.169332,-0.0212 -0.126999,0 -0.232832,0.0423 -0.317498,0.0847 -0.105832,0.0423 -0.211665,0.10584 -0.296331,0.1905 v 1.50283 h -0.359831 v -2.11663 h 0.359831 v 0.3175 c 0.126999,-0.127 0.253998,-0.21166 0.359831,-0.254 0.105832,-0.0423 0.232831,-0.0635 0.338664,-0.0635 0.0635,0 0.105832,0 0.126999,0 0.04233,0 0.08467,0 0.126999,0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path949"
|
||||
d="m 46.482462,38.008481 c 0,0.33867 -0.08467,0.61383 -0.253998,0.80433 -0.169332,0.21167 -0.42333,0.3175 -0.719661,0.3175 -0.296331,0 -0.529163,-0.10583 -0.698495,-0.3175 -0.190498,-0.1905 -0.275164,-0.46566 -0.275164,-0.80433 0,-0.35983 0.08467,-0.61383 0.275164,-0.82549 0.169332,-0.1905 0.402164,-0.29633 0.698495,-0.29633 0.296331,0 0.550329,0.10583 0.719661,0.29633 0.169332,0.21166 0.253998,0.46566 0.253998,0.82549 z m -0.35983,0 c 0,-0.27516 -0.04233,-0.48683 -0.169332,-0.61383 -0.105833,-0.127 -0.253998,-0.21166 -0.444497,-0.21166 -0.190499,0 -0.338664,0.0847 -0.444497,0.21166 -0.105832,0.127 -0.169332,0.33867 -0.169332,0.61383 0,0.254 0.0635,0.46567 0.169332,0.59267 0.105833,0.14816 0.253998,0.21166 0.444497,0.21166 0.190499,0 0.338664,-0.0635 0.444497,-0.21166 0.105832,-0.127 0.169332,-0.33867 0.169332,-0.59267 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path951"
|
||||
d="m 49.699771,36.950161 -0.550328,2.11665 h -0.317498 l -0.550329,-1.62982 -0.529163,1.62982 h -0.338664 l -0.550329,-2.11665 h 0.35983 l 0.402164,1.62982 0.529163,-1.62982 h 0.275164 l 0.55033,1.62982 0.35983,-1.62982 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path953"
|
||||
d="m 51.731758,38.452981 c 0,0.1905 -0.08467,0.35983 -0.232834,0.46566 -0.16933,0.127 -0.380997,0.1905 -0.656161,0.1905 -0.169331,0 -0.296331,-0.0212 -0.444497,-0.0423 -0.126998,-0.0423 -0.232831,-0.0847 -0.317498,-0.127 v -0.40216 h 0.02117 c 0.105833,0.0847 0.232833,0.14816 0.380997,0.1905 0.127,0.0635 0.253998,0.0847 0.380998,0.0847 0.169333,0 0.275164,-0.0212 0.380997,-0.0847 0.08467,-0.0423 0.127,-0.127 0.127,-0.23283 0,-0.0847 -0.02117,-0.14817 -0.08467,-0.1905 -0.04233,-0.0423 -0.127,-0.0847 -0.275164,-0.10584 -0.04233,-0.0212 -0.105833,-0.0212 -0.1905,-0.0423 -0.08467,-0.0212 -0.148164,-0.0212 -0.211664,-0.0423 -0.1905,-0.0635 -0.338664,-0.12699 -0.402164,-0.23283 -0.08467,-0.0847 -0.127,-0.21166 -0.127,-0.33866 0,-0.0847 0.02117,-0.16933 0.0635,-0.254 0.04233,-0.0635 0.08467,-0.14817 0.169334,-0.21166 0.0635,-0.0423 0.148164,-0.10584 0.253997,-0.127 0.127,-0.0423 0.232831,-0.0635 0.380997,-0.0635 0.127,0 0.253998,0.0212 0.380998,0.0635 0.126997,0.0212 0.23283,0.0635 0.317497,0.10583 v 0.381 h -0.02117 c -0.08467,-0.0635 -0.190497,-0.127 -0.317497,-0.16934 -0.148167,-0.0423 -0.275164,-0.0635 -0.402164,-0.0635 -0.127,0 -0.232831,0.0212 -0.317497,0.0635 -0.08467,0.0423 -0.127,0.127 -0.127,0.23284 0,0.0847 0.02117,0.14816 0.0635,0.19049 0.0635,0.0423 0.148166,0.0847 0.275164,0.10584 0.0635,0.0212 0.127,0.0212 0.211666,0.0423 0.08466,0.0212 0.148164,0.0423 0.211664,0.0423 0.148167,0.0423 0.275164,0.10583 0.380998,0.1905 0.08467,0.10583 0.127,0.23283 0.127,0.38099 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path955"
|
||||
d="m 54.017739,38.029651 h -1.56632 c 0,0.14816 0.02117,0.254 0.0635,0.35983 0.04233,0.0847 0.08466,0.16933 0.169331,0.23283 0.0635,0.0635 0.127,0.10583 0.23283,0.127 0.08467,0.0423 0.1905,0.0423 0.296334,0.0423 0.148164,0 0.275164,-0.0212 0.423328,-0.0847 0.148166,-0.0423 0.254,-0.10583 0.317497,-0.16933 h 0.02117 v 0.40216 c -0.126998,0.0423 -0.253998,0.0847 -0.359831,0.127 -0.126997,0.0212 -0.275164,0.0423 -0.402161,0.0423 -0.359831,0 -0.634998,-0.0847 -0.825495,-0.27516 -0.1905,-0.1905 -0.296331,-0.46567 -0.296331,-0.8255 0,-0.33866 0.105831,-0.61383 0.275164,-0.82549 0.190498,-0.1905 0.444498,-0.29633 0.761995,-0.29633 0.275164,0 0.507995,0.0847 0.656161,0.254 0.148167,0.16933 0.232831,0.40216 0.232831,0.69849 z m -0.338664,-0.254 c -0.02117,-0.1905 -0.0635,-0.33866 -0.148164,-0.4445 -0.105833,-0.10583 -0.232833,-0.14816 -0.423331,-0.14816 -0.1905,0 -0.338664,0.0423 -0.465664,0.16933 -0.105833,0.10583 -0.16933,0.254 -0.190497,0.42333 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path957"
|
||||
d="m 55.88039,37.331151 h -0.0212 c -0.0635,-0.0212 -0.10583,-0.0212 -0.14816,-0.0212 -0.0635,0 -0.127,-0.0212 -0.1905,-0.0212 -0.10583,0 -0.21166,0.0423 -0.3175,0.0847 -0.10583,0.0423 -0.1905,0.10584 -0.29633,0.1905 v 1.50283 h -0.3598 v -2.11663 h 0.35983 v 0.3175 c 0.14817,-0.127 0.27517,-0.21166 0.381,-0.254 0.10583,-0.0423 0.21166,-0.0635 0.33866,-0.0635 0.0423,0 0.10584,0 0.127,0 0.0212,0 0.0635,0 0.127,0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path959"
|
||||
d="m 76.00974,35.786001 -1.03715,2.81515 h -0.508 l -1.01599,-2.81515 h 0.40216 l 0.88899,2.47648 0.889,-2.47648 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path961"
|
||||
d="m 77.4279,38.601151 h -1.12182 v -0.27517 h 0.38099 v -2.24365 h -0.38099 v -0.29633 h 1.12182 v 0.29633 h -0.381 v 2.24365 h 0.381 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path963"
|
||||
d="m 79.79855,38.601151 h -0.33866 v -1.18533 c 0,-0.10583 -0.0212,-0.1905 -0.0212,-0.27516 -0.0212,-0.0847 -0.0423,-0.16934 -0.0635,-0.21167 -0.0423,-0.0423 -0.0847,-0.0847 -0.14817,-0.10583 -0.0423,-0.0423 -0.127,-0.0423 -0.21167,-0.0423 -0.10583,0 -0.21166,0.0212 -0.31749,0.0635 -0.10583,0.0423 -0.21167,0.10583 -0.29633,0.1905 v 1.56632 H 78.0417 v -2.11665 h 0.35983 v 0.254 c 0.10583,-0.10584 0.21166,-0.16934 0.33866,-0.23284 0.127,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.23283,0 0.40217,0.0635 0.52917,0.1905 0.12699,0.14817 0.16933,0.33867 0.16933,0.61383 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path965"
|
||||
d="m 81.99987,38.008481 c 0,0.1905 -0.0635,0.33867 -0.23283,0.46567 -0.16934,0.127 -0.381,0.19049 -0.65617,0.19049 -0.14816,0 -0.29633,-0.0212 -0.42333,-0.0635 -0.14816,-0.0212 -0.254,-0.0635 -0.33866,-0.127 v -0.38099 h 0.0212 c 0.10583,0.0847 0.23283,0.14816 0.38099,0.1905 0.127,0.0423 0.27517,0.0847 0.381,0.0847 0.16933,0 0.29633,-0.0423 0.381,-0.0847 0.0847,-0.0423 0.127,-0.127 0.127,-0.23284 0,-0.0847 -0.0212,-0.14816 -0.0635,-0.19049 -0.0635,-0.0423 -0.14817,-0.0847 -0.27517,-0.10584 -0.0635,-0.0212 -0.127,-0.0423 -0.21166,-0.0423 -0.0847,-0.0212 -0.14817,-0.0423 -0.21167,-0.0635 -0.19049,-0.0423 -0.31749,-0.10583 -0.40216,-0.21166 -0.0847,-0.0847 -0.10583,-0.21167 -0.10583,-0.33867 0,-0.10583 0,-0.16933 0.0423,-0.25399 0.0423,-0.0847 0.0847,-0.14817 0.16933,-0.21167 0.0635,-0.0635 0.14817,-0.10583 0.27517,-0.127 0.10583,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.127,0 0.25399,0.0212 0.38099,0.0423 0.127,0.0423 0.23284,0.0635 0.3175,0.127 v 0.381 H 81.894 c -0.0847,-0.0847 -0.1905,-0.127 -0.3175,-0.16933 -0.12699,-0.0635 -0.25399,-0.0847 -0.38099,-0.0847 -0.127,0 -0.254,0.0212 -0.33867,0.0847 -0.0847,0.0423 -0.12699,0.127 -0.12699,0.21166 0,0.0847 0.0212,0.16933 0.0847,0.21167 0.0423,0.0423 0.127,0.0635 0.254,0.10583 0.0635,0 0.12699,0.0212 0.21166,0.0423 0.0847,0.0212 0.14817,0.0212 0.21166,0.0423 0.16934,0.0423 0.29634,0.10583 0.381,0.1905 0.0847,0.10583 0.127,0.21166 0.127,0.381 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path967"
|
||||
d="m 84.37051,37.521651 c 0,0.16933 -0.0212,0.33867 -0.0635,0.48683 -0.0423,0.127 -0.127,0.254 -0.21166,0.35983 -0.0847,0.0847 -0.16933,0.14817 -0.29633,0.21167 -0.10584,0.0423 -0.23283,0.0635 -0.35983,0.0635 -0.10584,0 -0.21167,0 -0.29633,-0.0212 -0.0847,-0.0212 -0.16934,-0.0635 -0.27517,-0.127 v 0.88899 h -0.35983 v -2.89981 h 0.35983 v 0.23283 c 0.10583,-0.0847 0.21167,-0.14816 0.3175,-0.1905 0.127,-0.0635 0.254,-0.0847 0.381,-0.0847 0.25399,0 0.46566,0.0847 0.59266,0.27517 0.14816,0.1905 0.21166,0.46566 0.21166,0.80433 z m -0.35983,0.0212 c 0,-0.254 -0.0423,-0.44449 -0.12699,-0.57149 -0.0847,-0.127 -0.23284,-0.1905 -0.40217,-0.1905 -0.10583,0 -0.21166,0.0212 -0.31749,0.0635 -0.10584,0.0423 -0.1905,0.10583 -0.29634,0.16933 v 1.20649 c 0.10584,0.0423 0.1905,0.0635 0.27517,0.0847 0.0635,0.0212 0.14816,0.0212 0.23283,0.0212 0.21167,0 0.35983,-0.0635 0.46566,-0.1905 0.10584,-0.127 0.16933,-0.33866 0.16933,-0.59266 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path969"
|
||||
d="m 86.69883,37.585151 h -1.54515 c 0,0.127 0.0212,0.254 0.0635,0.33867 0.0212,0.10583 0.0847,0.1905 0.14816,0.25399 0.0635,0.0423 0.14817,0.10584 0.23283,0.127 0.0847,0.0212 0.1905,0.0423 0.29633,0.0423 0.14817,0 0.29633,-0.0212 0.4445,-0.0847 0.14817,-0.0635 0.254,-0.10583 0.3175,-0.16933 v 0 0.381 c -0.10583,0.0635 -0.23283,0.10583 -0.35983,0.127 -0.127,0.0423 -0.254,0.0635 -0.40217,0.0635 -0.33866,0 -0.61382,-0.10583 -0.80432,-0.29633 -0.21167,-0.1905 -0.29633,-0.4445 -0.29633,-0.80433 0,-0.33866 0.0847,-0.61383 0.27516,-0.82549 0.1905,-0.1905 0.4445,-0.29634 0.74083,-0.29634 0.29633,0 0.50799,0.0847 0.65616,0.254 0.16933,0.14817 0.23283,0.40217 0.23283,0.6985 z m -0.33866,-0.27516 c 0,-0.16933 -0.0423,-0.3175 -0.14817,-0.42333 -0.0847,-0.10583 -0.23283,-0.14817 -0.42333,-0.14817 -0.1905,0 -0.33866,0.0423 -0.44449,0.16933 -0.127,0.10584 -0.1905,0.23284 -0.1905,0.40217 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path971"
|
||||
d="m 88.81548,38.474151 c -0.127,0.0635 -0.23283,0.10583 -0.33866,0.127 -0.10583,0.0423 -0.23283,0.0635 -0.33867,0.0635 -0.14816,0 -0.29633,-0.0212 -0.42333,-0.0635 -0.127,-0.0635 -0.23283,-0.127 -0.33866,-0.21167 -0.0847,-0.0847 -0.14817,-0.21167 -0.21166,-0.33866 -0.0423,-0.14817 -0.0635,-0.3175 -0.0635,-0.48683 0,-0.35983 0.0847,-0.635 0.27516,-0.8255 0.1905,-0.1905 0.4445,-0.29633 0.76199,-0.29633 0.127,0 0.23284,0.0212 0.35984,0.0635 0.10583,0.0212 0.21166,0.0635 0.31749,0.10583 v 0.40217 h -0.0212 c -0.10583,-0.0847 -0.21166,-0.14817 -0.33866,-0.1905 -0.10584,-0.0423 -0.23283,-0.0635 -0.33867,-0.0635 -0.1905,0 -0.35983,0.0635 -0.48683,0.1905 -0.10583,0.14816 -0.16933,0.33866 -0.16933,0.61383 0,0.25399 0.0635,0.44449 0.16933,0.57149 0.127,0.14817 0.27517,0.21167 0.48683,0.21167 0.0635,0 0.14817,0 0.21167,-0.0212 0.0847,-0.0212 0.14816,-0.0423 0.21166,-0.0847 0.0423,-0.0212 0.10584,-0.0423 0.14817,-0.0847 0.0423,-0.0212 0.0847,-0.0423 0.10583,-0.0635 h 0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path973"
|
||||
d="m 90.36064,38.601151 c -0.0635,0 -0.127,0.0212 -0.21167,0.0423 -0.0847,0 -0.14816,0 -0.21166,0 -0.21167,0 -0.381,-0.0423 -0.48683,-0.16934 -0.10584,-0.10583 -0.16933,-0.29633 -0.16933,-0.55033 v -1.12182 h -0.23284 v -0.3175 h 0.23284 v -0.59266 h 0.35983 v 0.59266 h 0.71966 v 0.3175 h -0.71966 v 0.95249 c 0,0.10584 0,0.21167 0,0.27517 0,0.0423 0.0212,0.10583 0.0635,0.16933 0.0212,0.0423 0.0635,0.0847 0.10583,0.10583 0.0423,0.0212 0.127,0.0423 0.23283,0.0423 0.0423,0 0.10583,-0.0212 0.16933,-0.0212 0.0635,-0.0212 0.10584,-0.0423 0.14817,-0.0635 v 0 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path975"
|
||||
d="m 92.60429,37.563991 c 0,0.33866 -0.0847,0.61382 -0.254,0.80432 -0.1905,0.21167 -0.42333,0.29633 -0.71966,0.29633 -0.29633,0 -0.52917,-0.0847 -0.71966,-0.29633 -0.16934,-0.1905 -0.254,-0.46566 -0.254,-0.80432 0,-0.35983 0.0847,-0.635 0.254,-0.8255 0.19049,-0.21166 0.42333,-0.29633 0.71966,-0.29633 0.29633,0 0.52916,0.0847 0.71966,0.29633 0.16933,0.1905 0.254,0.46567 0.254,0.8255 z m -0.35983,0 c 0,-0.27517 -0.0635,-0.48683 -0.16933,-0.61383 -0.10584,-0.14817 -0.254,-0.21167 -0.4445,-0.21167 -0.1905,0 -0.33867,0.0635 -0.4445,0.21167 -0.10583,0.127 -0.16933,0.33866 -0.16933,0.61383 0,0.25399 0.0635,0.46566 0.16933,0.59266 0.10583,0.14816 0.254,0.21166 0.4445,0.21166 0.1905,0 0.33866,-0.0635 0.4445,-0.21166 0.10583,-0.127 0.16933,-0.33867 0.16933,-0.59266 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path977"
|
||||
d="m 94.48811,36.886661 h -0.0212 c -0.0635,-0.0212 -0.10584,-0.0212 -0.16933,-0.0212 -0.0423,-0.0212 -0.10584,-0.0212 -0.16934,-0.0212 -0.10583,0 -0.21166,0.0212 -0.31749,0.0847 -0.10584,0.0423 -0.1905,0.10583 -0.29633,0.16933 v 1.50282 h -0.35984 v -2.11665 h 0.35984 v 0.3175 c 0.14816,-0.10583 0.27516,-0.1905 0.38099,-0.23283 0.10583,-0.0423 0.21167,-0.0847 0.3175,-0.0847 0.0635,0 0.10583,0.0212 0.14816,0.0212 0.0212,0 0.0635,0 0.127,0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path979"
|
||||
d="m 114.0883,37.775651 c 0,0.10583 -0.0212,0.23283 -0.0635,0.33867 -0.0635,0.10583 -0.127,0.19049 -0.21167,0.27516 -0.10583,0.0635 -0.23283,0.127 -0.35983,0.16933 -0.14817,0.0635 -0.29633,0.0847 -0.48683,0.0847 -0.21166,0 -0.381,-0.0212 -0.55033,-0.0635 -0.16933,-0.0423 -0.3175,-0.0847 -0.48683,-0.16933 v -0.46566 h 0.0212 c 0.14817,0.10583 0.29633,0.21166 0.48683,0.27516 0.1905,0.0635 0.35983,0.0847 0.52916,0.0847 0.23284,0 0.42333,-0.0423 0.55033,-0.127 0.127,-0.0847 0.1905,-0.1905 0.1905,-0.33866 0,-0.127 -0.0423,-0.23283 -0.0847,-0.27517 -0.0635,-0.0635 -0.16933,-0.10583 -0.29633,-0.14816 -0.0847,-0.0212 -0.1905,-0.0423 -0.29633,-0.0635 -0.10583,-0.0212 -0.23283,-0.0423 -0.35983,-0.0635 -0.254,-0.0423 -0.42333,-0.14817 -0.55033,-0.27517 -0.127,-0.127 -0.1905,-0.29633 -0.1905,-0.48683 0,-0.23283 0.10583,-0.44449 0.3175,-0.59266 0.1905,-0.14816 0.4445,-0.21166 0.74083,-0.21166 0.21166,0 0.38099,0 0.55033,0.0423 0.16933,0.0423 0.31749,0.0847 0.44449,0.14816 v 0.4445 h -0.0212 c -0.10583,-0.0847 -0.254,-0.16933 -0.42333,-0.23283 -0.1905,-0.0635 -0.35983,-0.0847 -0.55033,-0.0847 -0.19049,0 -0.35983,0.0423 -0.48683,0.127 -0.10583,0.0847 -0.16933,0.1905 -0.16933,0.3175 0,0.12699 0.0212,0.21166 0.0847,0.27516 0.0635,0.0635 0.16933,0.127 0.3175,0.14817 0.0847,0.0212 0.1905,0.0423 0.35983,0.0635 0.14816,0.0423 0.27516,0.0635 0.35983,0.0847 0.21166,0.0635 0.381,0.14816 0.48683,0.25399 0.10583,0.10584 0.14817,0.27517 0.14817,0.46567 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path981"
|
||||
d="m 116.43778,38.579981 h -0.35983 v -1.20649 c 0,-0.0847 0,-0.1905 -0.0212,-0.27517 0,-0.0847 -0.0212,-0.14816 -0.0635,-0.1905 -0.0212,-0.0635 -0.0635,-0.0847 -0.127,-0.12699 -0.0635,-0.0212 -0.127,-0.0212 -0.23283,-0.0212 -0.0847,0 -0.1905,0.0212 -0.29633,0.0635 -0.10584,0.0423 -0.21167,0.10583 -0.3175,0.19049 v 1.56633 h -0.35983 v -2.94215 h 0.35983 v 1.05833 c 0.127,-0.0847 0.23283,-0.14817 0.35983,-0.21167 0.10583,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.23284,0 0.40217,0.0635 0.52917,0.1905 0.10583,0.14817 0.16933,0.33867 0.16933,0.59266 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path983"
|
||||
d="m 118.76609,38.579981 h -0.35983 v -0.21167 c -0.0212,0.0212 -0.0635,0.0423 -0.127,0.0847 -0.0423,0.0423 -0.10583,0.0635 -0.14816,0.0847 -0.0635,0.0423 -0.127,0.0635 -0.21167,0.0847 -0.0635,0.0212 -0.16933,0.0212 -0.25399,0.0212 -0.1905,0 -0.35984,-0.0635 -0.48684,-0.19049 -0.14816,-0.127 -0.21166,-0.27517 -0.21166,-0.48683 0,-0.14817 0.0423,-0.27517 0.10583,-0.381 0.0635,-0.10583 0.16933,-0.16933 0.29633,-0.23283 0.127,-0.0635 0.27517,-0.10584 0.46567,-0.127 0.16933,-0.0212 0.381,-0.0212 0.57149,-0.0423 v -0.0423 c 0,-0.0847 0,-0.14817 -0.0423,-0.21167 -0.0212,-0.0423 -0.0635,-0.0847 -0.10583,-0.127 -0.0635,-0.0212 -0.127,-0.0423 -0.1905,-0.0635 -0.0635,0 -0.14816,0 -0.21166,0 -0.10583,0 -0.21167,0 -0.3175,0.0423 -0.127,0.0212 -0.23283,0.0423 -0.35983,0.10584 h -0.0212 v -0.381 c 0.0635,0 0.16933,-0.0212 0.29633,-0.0635 0.14816,-0.0212 0.27516,-0.0212 0.40216,-0.0212 0.14817,0 0.27517,0 0.381,0.0423 0.10583,0.0212 0.21166,0.0635 0.29633,0.127 0.0635,0.0423 0.127,0.127 0.16933,0.21166 0.0423,0.10584 0.0635,0.21167 0.0635,0.33867 z m -0.35983,-0.508 v -0.59266 c -0.10583,0 -0.23283,0.0212 -0.38099,0.0212 -0.14817,0.0212 -0.254,0.0423 -0.33867,0.0635 -0.10583,0.0212 -0.1905,0.0635 -0.254,0.127 -0.0635,0.0635 -0.0847,0.14816 -0.0847,0.254 0,0.127 0.0212,0.21166 0.10584,0.27516 0.0635,0.0635 0.1905,0.0847 0.33866,0.0847 0.127,0 0.23283,-0.0212 0.33867,-0.0635 0.10583,-0.0423 0.19049,-0.10583 0.27516,-0.16933 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path985"
|
||||
d="m 121.32724,37.500491 c 0,0.16933 -0.0212,0.33866 -0.0847,0.46566 -0.0423,0.14817 -0.10583,0.27516 -0.21166,0.35983 -0.0847,0.10583 -0.16933,0.16933 -0.29633,0.23283 -0.10584,0.0423 -0.21167,0.0635 -0.33867,0.0635 -0.127,0 -0.21166,0 -0.3175,-0.0212 -0.0847,-0.0423 -0.16933,-0.0635 -0.25399,-0.127 v 0.889 h -0.35983 v -2.89981 h 0.35983 v 0.23283 c 0.0847,-0.0847 0.1905,-0.14817 0.31749,-0.21167 0.10584,-0.0423 0.23284,-0.0635 0.381,-0.0635 0.254,0 0.4445,0.0847 0.59266,0.27517 0.127,0.1905 0.21167,0.46566 0.21167,0.80433 z m -0.381,0.0212 c 0,-0.27517 -0.0423,-0.46567 -0.127,-0.59267 -0.0847,-0.10583 -0.21166,-0.16933 -0.40216,-0.16933 -0.10583,0 -0.1905,0.0212 -0.29633,0.0635 -0.10583,0.0423 -0.21166,0.0847 -0.29633,0.16933 v 1.2065 c 0.0847,0.0423 0.16933,0.0635 0.254,0.0847 0.0635,0.0212 0.14816,0.0212 0.254,0.0212 0.19049,0 0.33866,-0.0635 0.46566,-0.1905 0.10583,-0.14817 0.14816,-0.33867 0.14816,-0.59267 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path987"
|
||||
d="m 123.65556,37.563991 h -1.56632 c 0,0.12699 0.0212,0.25399 0.0635,0.33866 0.0423,0.10583 0.0847,0.16933 0.14816,0.23283 0.0847,0.0635 0.14817,0.10583 0.23283,0.14817 0.10583,0.0212 0.1905,0.0423 0.3175,0.0423 0.127,0 0.27517,-0.0212 0.42333,-0.0847 0.14817,-0.0635 0.254,-0.127 0.3175,-0.16933 h 0.0212 v 0.38099 c -0.127,0.0635 -0.254,0.10583 -0.381,0.127 -0.127,0.0423 -0.254,0.0635 -0.381,0.0635 -0.35983,0 -0.635,-0.10583 -0.82549,-0.29633 -0.1905,-0.1905 -0.29633,-0.46566 -0.29633,-0.80433 0,-0.33866 0.0847,-0.61383 0.27516,-0.82549 0.1905,-0.21167 0.4445,-0.29633 0.76199,-0.29633 0.27517,0 0.48684,0.0635 0.65617,0.23283 0.14817,0.16933 0.23283,0.40216 0.23283,0.71966 z m -0.35983,-0.27517 c 0,-0.1905 -0.0423,-0.33866 -0.127,-0.42333 -0.10583,-0.10583 -0.23283,-0.16933 -0.42333,-0.16933 -0.1905,0 -0.35983,0.0635 -0.46567,0.16933 -0.10583,0.127 -0.16933,0.254 -0.19049,0.42333 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path989"
|
||||
d="m 126.44954,35.764831 -1.03716,2.81515 h -0.50799 l -1.016,-2.81515 h 0.40217 l 0.88899,2.47648 0.88899,-2.47648 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path991"
|
||||
d="m 127.2327,36.124661 h -0.40216 v -0.38099 h 0.40216 z m -0.0212,2.45532 h -0.35983 v -2.11665 h 0.35983 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path993"
|
||||
d="m 129.68802,37.563991 h -1.56632 c 0,0.12699 0.0212,0.25399 0.0635,0.33866 0.0423,0.10583 0.0847,0.16933 0.14816,0.23283 0.0847,0.0635 0.14817,0.10583 0.23283,0.14817 0.10583,0.0212 0.1905,0.0423 0.3175,0.0423 0.127,0 0.27516,-0.0212 0.42333,-0.0847 0.14816,-0.0635 0.254,-0.127 0.3175,-0.16933 h 0.0212 v 0.38099 c -0.127,0.0635 -0.254,0.10583 -0.38099,0.127 -0.127,0.0423 -0.254,0.0635 -0.381,0.0635 -0.35983,0 -0.635,-0.10583 -0.82549,-0.29633 -0.1905,-0.1905 -0.29634,-0.46566 -0.29634,-0.80433 0,-0.33866 0.0847,-0.61383 0.27517,-0.82549 0.1905,-0.21167 0.4445,-0.29633 0.76199,-0.29633 0.27517,0 0.48683,0.0635 0.65616,0.23283 0.14817,0.16933 0.23284,0.40216 0.23284,0.71966 z m -0.35984,-0.27517 c 0,-0.1905 -0.0423,-0.33866 -0.12699,-0.42333 -0.10584,-0.10583 -0.23284,-0.16933 -0.42333,-0.16933 -0.1905,0 -0.35983,0.0635 -0.46567,0.16933 -0.10583,0.127 -0.16933,0.254 -0.19049,0.42333 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path995"
|
||||
d="m 132.88416,36.463331 -0.55033,2.11665 h -0.33866 l -0.52917,-1.62982 -0.55033,1.62982 h -0.31749 l -0.5715,-2.11665 h 0.381 l 0.38099,1.65099 0.52917,-1.65099 h 0.29633 l 0.55033,1.65099 0.35983,-1.65099 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path997"
|
||||
d="M 42.608991,62.752131 H 181.82113 V 118.33539 H 42.608991 Z"
|
||||
style="fill:none;stroke:#ff9933;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path999"
|
||||
d="M 35.666376,55.280361 H 174.89968 V 110.86361 H 35.666376 Z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#33cccc;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path1001"
|
||||
d="M 28.744927,47.808581 H 167.97823 V 103.39183 H 28.744927 Z"
|
||||
style="fill:#9bbb59;fill-opacity:1;fill-rule:nonzero;stroke:#77933c;stroke-width:0.52916667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 29 KiB |