1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

Compare commits

..

10 Commits

Author SHA1 Message Date
ddzama
c0418c96db ??????: Fix error of TKernal and TMath compilation.
Error occured if using c++20 standard with new oneTBB 2021.5.0.
The error was:
   Error C2672 'tbb::v1::parallel_for_each': no matching overloaded function found TKernel
   could be 'void tbb::detail::d2::parallel_for_each(Iterator,Iterator,const Body &)' TKernel
   'tbb::detail::d2::parallel_for_each': the associated constraints are not satisfied TKernel
Note, that if we use c++14 or c++17, all ok, error does not occures.
To solve the problem, i have to modify `UniversalIterator` class:
`value_type` instead `UniversalIterator` converted to `IteratorInterface*`
`pointer` = `reference` = `value_type`
Method `DownCast` moved into `FunctorInterface` abstract class.
argument `UniversalIterator& item` of the unary fuctions converted to `IteratorInterface*`.
The proposed solution solved the compilation error.
2022-08-29 13:45:15 +03:00
ddzama
83cc25e05b moving to intel oneTBB 2021* 2022-08-29 13:45:15 +03:00
ddzama
8b536fff48 0032986: Fix error of compilation WPF_D3D, WPF_WinForms and WinForms with MSVC 2022. 2022-08-29 13:44:36 +03:00
ddzama
ac76263667 0032986: Fix error of compilation CSharp samples/OCCTProxy project with MSVC 2022. 2022-08-29 13:44:36 +03:00
ddzama
efc007f044 0032921: Set C++11 standard for several projects.
Several projects depends on Qt library 0f 5.11.2 version.
TKDFBrowser
TKMessageView
TKShapeView
TKTInspector
TInspectorEXE
TKTreeModel
TKMessageModel
TKVInspector
TKToolsDraw
TKTInspectorAPI
TKView

When using C++20 language standard, compilation errors occures because
of incompatibility of 5.11.2 version of Qt library interface with C++20 standard.
Therefore, these projects stay on C++11 language standard.
2022-08-29 13:32:30 +03:00
ddzama
c45ac27846 0032921: Update CMAKE requirements in documentation. 2022-08-29 12:47:38 +03:00
ddzama
4a1eddc2c9 0032921: Add description of new CMAKE variable BUILD_CPP_STANDARD into documantation. 2022-08-29 12:47:38 +03:00
ddzama
f001c6f012 0032921: more flexible CMAKE_CXX_COMPILER_ID identification (fixups previous commit!) 2022-08-29 12:47:38 +03:00
ddzama
8271ac6728 0032921: require minimum CMAKE version 3.1 (for enabling CMAKE_CXX_STANDARD)
If we require CMAKE minimal version 3.1, rather than 2.8,
by default new policies are employed:
from CMP0024 to CMP0054.
Unique problematic policy is CMP0054:
`Only interpret if() arguments as variables or keywords when unquoted.`

Requiring of 3.1 as minimal version without preserving old behavior of 54th policy breaks MSVC compilation.
If we require cmake_policy (SET CMP0054 OLD), compilation finishs without errors.
New behavior of CMP0054 leads to changes in next target MSVC vcxproj files:
 - TKV3d
 - TKOpenGl
 - TKOpenGlTest
 - TKOpenGles
 - TKOpenGlesTest
Difference is absense of HAVE_OPENGL/HAVE_OPENGLES definitions.
So, source of error has been localizedin file occt_toolkit.cmake, in lines ~325 and ~327.
In accordance with old CMP0054 policy "CSF_OpenGlLibs" interprets as variable CSF_OpenGlLibs, rather than just a string.
Contrary, new policy interpret "CSF_OpenGlLibs" as a string.
To employ new policy, began since CMAKE 3.1 we should replace "CSF_OpenGlLibs" to "${CSF_OpenGlLibs}"
and "CSF_OpenGlesLibs" to "${CSF_OpenGlesLibs}".

P.S.

When cmake policy CMP0054 is set to NEW
expression
  "${CURRENT_CSF}" STREQUAL "CSF_OpenGlLibs"
is false,
while if policy CMP0054 is set to OLD
expression
  "${CURRENT_CSF}" STREQUAL "CSF_OpenGlLibs"
is true.
If replace "CSF_OpenGlLibs" to "${CSF_OpenGlLibs}"
expression is true independent on CMP0054 policy.
Notice, that OLD policy had beed taken place by default on master before
this ticket integration.
2022-08-29 12:47:38 +03:00
ddzama
293b9f436b 0032921: Configuratiuon, CMake - allow selecting C++ standard
Make C++ standard to be enable from cmake settings:
Now, user can choose standard by setting cmake variable CPP_STANDARD.
Available next standard items: C++11, C++14, C++17, C++20, C++23.
2022-08-29 12:47:38 +03:00
269 changed files with 706 additions and 18739 deletions

View File

@@ -10,22 +10,6 @@ set (CMAKE_CONFIGURATION_TYPES Release Debug RelWithDebInfo CACHE INTERNAL "" FO
set (BUILD_CPP_STANDARD "C++11" CACHE STRING "Select using c++ standard.")
set_property(CACHE BUILD_CPP_STANDARD PROPERTY STRINGS "C++11" "C++14" "C++17" "C++20" "C++23")
# Set desired C++ standard
if ("${BUILD_CPP_STANDARD}" STREQUAL "C++11")
set (CMAKE_CXX_STANDARD 11)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++14")
set (CMAKE_CXX_STANDARD 14)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++17")
set (CMAKE_CXX_STANDARD 17)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++20")
set (CMAKE_CXX_STANDARD 20)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++23")
set (CMAKE_CXX_STANDARD 23)
else ()
message (FATAL_ERROR, "misprint in c++ standard name")
endif()
set (CMAKE_CXX_STANDARD_REQUIRED ON)
# macro: include patched file if it exists
macro (OCCT_INCLUDE_CMAKE_FILE BEING_INCLUDED_FILE)
if (BUILD_PATCH AND EXISTS "${BUILD_PATCH}/${BEING_INCLUDED_FILE}.cmake")
@@ -733,14 +717,14 @@ if (NOT DEFINED ANDROID AND CAN_USE_TBB)
add_definitions (-DHAVE_TBB)
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/tbb")
else()
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TBB")
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TBB12")
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TBBMALLOC")
OCCT_CHECK_AND_UNSET ("INSTALL_TBB")
endif()
else()
OCCT_CHECK_AND_UNSET ("USE_TBB")
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TBB")
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TBB12")
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_TBBMALLOC")
OCCT_CHECK_AND_UNSET ("INSTALL_TBB")
endif()
@@ -820,12 +804,6 @@ else()
OCCT_CHECK_AND_UNSET ("3RDPARTY_DOT_EXECUTABLE")
endif()
# ExpToCasExe
if (EMSCRIPTEN)
list (REMOVE_ITEM BUILD_TOOLKITS TKExpress)
list (REMOVE_ITEM BUILD_TOOLKITS ExpToCasExe)
endif()
# bison
if (BUILD_YACCLEX)
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/bison")

View File

@@ -3,5 +3,5 @@ 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
ApplicationFramework TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF
DataExchange TKXDE TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh TKXDECascade TKExpress ExpToCasExe
DataExchange TKXDE TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh TKXDECascade
Draw TKDraw TKTopTest TKOpenGlTest TKOpenGlesTest TKD3DHostTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE

View File

@@ -480,6 +480,3 @@ n TreeModel
n View
n ViewControl
n VInspector
n Express
t TKExpress
x ExpToCasExe

View File

@@ -22,4 +22,6 @@ if (3RDPARTY_DIR)
endforeach()
endif()
find_package (BISON 3.7.4)
# bison 3.2 is required because it provides options to avoid generation of redundant header
# files and embedding of local paths in the generated code
find_package (BISON 3.2)

View File

@@ -26,7 +26,9 @@ if (3RDPARTY_DIR)
endforeach()
endif()
find_package (FLEX 2.6.4)
# flex 2.5.37 is required because closest known lower version, 2.5.3 from WOK 6.8.0,
# generates code which is unusable on Windows (includes unistd.h without any way to avoid this)
find_package (FLEX 2.5.37)
if (NOT FLEX_FOUND OR NOT FLEX_INCLUDE_DIR OR NOT EXISTS "${FLEX_INCLUDE_DIR}/FlexLexer.h")
list (APPEND 3RDPARTY_NOT_INCLUDED FLEX_INCLUDE_DIR)

View File

@@ -12,7 +12,7 @@ endif()
# TBB
if (USE_TBB)
set (CSF_TBB "tbb tbbmalloc")
set (CSF_TBB "tbb12 tbbmalloc")
else()
set (CSF_TBB)
endif()

View File

@@ -130,6 +130,22 @@ elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_CXX_COMPIL
endif()
endif()
# Set desired C++ standard
if ("${BUILD_CPP_STANDARD}" STREQUAL "C++11")
set (CMAKE_CXX_STANDARD 11)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++14")
set (CMAKE_CXX_STANDARD 14)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++17")
set (CMAKE_CXX_STANDARD 17)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++20")
set (CMAKE_CXX_STANDARD 20)
elseif ("${BUILD_CPP_STANDARD}" STREQUAL "C++23")
set (CMAKE_CXX_STANDARD 23)
else ()
message (FATAL_ERROR, "misprint in c++ standard name")
endif()
set (CMAKE_CXX_STANDARD_REQUIRED ON)
if (CMAKE_CXX_COMPILER_ID MATCHES "[Cc][Ll][Aa][Nn][Gg]")
if (APPLE)
# CLang can be used with both libstdc++ and libc++, however on OS X libstdc++ is outdated.

View File

@@ -106,12 +106,6 @@ foreach (OCCT_PACKAGE ${USED_PACKAGES})
set (BISON_OUTPUT_FILE_EXT "cxx")
endif()
endforeach()
if (EXISTS ${FLEX_BISON_TARGET_DIR}/FlexLexer.h)
message (STATUS "Info: remove old FLEX header file: ${FLEX_BISON_TARGET_DIR}/FlexLexer.h")
file(REMOVE ${FLEX_BISON_TARGET_DIR}/FlexLexer.h)
endif()
file (STRINGS "${CURRENT_FLEX_FILE}" FILE_FLEX_CONTENT)
foreach (FILE_FLEX_CONTENT_LINE ${FILE_FLEX_CONTENT})
string (REGEX MATCH "%option c\\+\\+" CXX_FLEX_LANGUAGE_FOUND ${FILE_FLEX_CONTENT_LINE})
@@ -127,19 +121,6 @@ foreach (OCCT_PACKAGE ${USED_PACKAGES})
set (BISON_OUTPUT_FILE ${CURRENT_BISON_FILE_NAME}.tab.${BISON_OUTPUT_FILE_EXT})
set (FLEX_OUTPUT_FILE lex.${CURRENT_FLEX_FILE_NAME}.${FLEX_OUTPUT_FILE_EXT})
if (EXISTS ${FLEX_BISON_TARGET_DIR}/${CURRENT_BISON_FILE_NAME}.tab.${BISON_OUTPUT_FILE_EXT})
message (STATUS "Info: remove old output BISON file: ${FLEX_BISON_TARGET_DIR}/${CURRENT_BISON_FILE_NAME}.tab.${BISON_OUTPUT_FILE_EXT}")
file(REMOVE ${FLEX_BISON_TARGET_DIR}/${CURRENT_BISON_FILE_NAME}.tab.${BISON_OUTPUT_FILE_EXT})
endif()
if (EXISTS ${FLEX_BISON_TARGET_DIR}/${CURRENT_BISON_FILE_NAME}.tab.hxx)
message (STATUS "Info: remove old output BISON file: ${FLEX_BISON_TARGET_DIR}/${CURRENT_BISON_FILE_NAME}.tab.hxx")
file(REMOVE ${FLEX_BISON_TARGET_DIR}/${CURRENT_BISON_FILE_NAME}.tab.hxx)
endif()
if (EXISTS ${FLEX_BISON_TARGET_DIR}/${FLEX_OUTPUT_FILE})
message (STATUS "Info: remove old output FLEX file: ${FLEX_BISON_TARGET_DIR}/${FLEX_OUTPUT_FILE}")
file(REMOVE ${FLEX_BISON_TARGET_DIR}/${FLEX_OUTPUT_FILE})
endif()
BISON_TARGET (Parser_${CURRENT_BISON_FILE_NAME} ${CURRENT_BISON_FILE} "${FLEX_BISON_TARGET_DIR}/${BISON_OUTPUT_FILE}"
COMPILE_FLAGS "-p ${CURRENT_BISON_FILE_NAME} -l -M ${CMAKE_SOURCE_DIR}/${RELATIVE_SOURCES_DIR}/=")
FLEX_TARGET (Scanner_${CURRENT_FLEX_FILE_NAME} ${CURRENT_FLEX_FILE} "${FLEX_BISON_TARGET_DIR}/${FLEX_OUTPUT_FILE}"

View File

@@ -1,13 +1,5 @@
# tbb
if (NOT DEFINED 3RDPARTY_DIR)
message (FATAL_ERROR "3RDPARTY_DIR is not defined.")
endif()
if ((NOT EXISTS "${3RDPARTY_DIR}") OR ("${3RDPARTY_DIR}" STREQUAL ""))
message (FATAL_ERROR "Directory ${3RDPARTY_DIR} is not set.")
endif()
if (NOT DEFINED INSTALL_TBB AND BUILD_SHARED_LIBS)
set (INSTALL_TBB OFF CACHE BOOL "${INSTALL_TBB_DESCR}")
endif()
@@ -77,186 +69,226 @@ else()
set (3RDPARTY_TBB_INCLUDE_DIR "" CACHE PATH "the path to tbb.h" FORCE)
endif()
# Throw execution if 3RDPARTY_TBB_DIR is equal to void string.
if ("${3RDPARTY_TBB_DIR}" STREQUAL "")
message (FATAL_ERROR "Directory with one TBB have not found.")
endif()
# common steps for tbb12 and tbbmalloc
macro (TBB_PRODUCT_SEARCH PRODUCT_LIBRARY_NAME)
# Searching TBBConfig.cmake and TBBTargets-release.cmake in 3RDPARTY_TBB_DIR
# TBBConfig.cmake - is required, TBBTargets-release.cmake is optional.
file (GLOB_RECURSE TBB_CONFIG_CMAKE_FILE "${3RDPARTY_TBB_DIR}/*TBBConfig.cmake")
if (NOT EXISTS "${TBB_CONFIG_CMAKE_FILE}")
message (FATAL_ERROR "TBBConfig.cmake has not been found.")
endif()
include ("${TBB_CONFIG_CMAKE_FILE}")
string (TOUPPER ${PRODUCT_LIBRARY_NAME} upper_PRODUCT_LIBRARY_NAME)
file (GLOB_RECURSE TBB_TARGET_CMAKE_FILE "${3RDPARTY_TBB_DIR}/*TBBTargets-release.cmake")
if (EXISTS "${TBB_TARGET_CMAKE_FILE}")
include ("${TBB_TARGET_CMAKE_FILE}")
endif()
# We do not know, full path to file is pointed, or local.
# So, we should check it and output FULL PATH to FILE.
macro (TBB_FILE_NAME_TO_FILEPATH FL_NAME FL_PATH)
if (EXISTS "${FL_NAME}")
# FL_NAME is full path.
set (${FL_PATH} "${FL_NAME}")
else()
# Here we deal with local path, so assign to var full path to file.
# Acquire full path.
set (${FL_PATH} "${3RDPARTY_TBB_DIR}${FL_NAME}")
if (NOT EXISTS "${${FL_PATH}}")
message (FATAL_ERROR "TBB: needed file not found (${FL_PATH}).")
endif()
endif()
endmacro()
# TARGET_NAME - is target name from oneTBB cmake file
# it is either "TBB::tbb", or "TBB::tbbmalloc"
# LIB_NAME_UC - is library id (TBB or TBBMALLOC)
# PROPERTY_TO_SET - LIBRARY or DLL
macro (WIN_TBB_PARSE TARGET_NAME LIB_NAME PROPERTY_TO_SET)
set (FILE_NAME "")
set (FILE_PATH "")
set (FILE_DIR "")
if ("${PROPERTY_TO_SET}" STREQUAL "LIBRARY")
get_target_property (FILE_NAME "${TARGET_NAME}" IMPORTED_IMPLIB_RELEASE)
else()
get_target_property (FILE_NAME "${TARGET_NAME}" IMPORTED_LOCATION_RELEASE)
# define required tbb12/tbbmalloc variables
if (NOT DEFINED 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY OR NOT 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR}")
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY "" CACHE FILEPATH "${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
endif()
# acquire full path
TBB_FILE_NAME_TO_FILEPATH("${FILE_NAME}" FILE_PATH)
if (NOT DEFINED 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} library")
endif()
get_filename_component (FILE_NAME "${FILE_PATH}" NAME)
get_filename_component (FILE_DIR "${FILE_PATH}" DIRECTORY)
if (WIN32)
if (NOT DEFINED 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL OR NOT 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR OR NOT EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR}")
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL "" CACHE FILEPATH "${upper_PRODUCT_LIBRARY_NAME} shared library" FORCE)
endif()
endif()
if (NOT EXISTS "${FILE_DIR}/${FILE_NAME}")
set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET} "" CACHE FILEPATH "${LIB_NAME} library" FORCE)
set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR "" CACHE PATH "The directory containing ${LIB_NAME} shared library")
if (WIN32 AND NOT DEFINED 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR "" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} shared library")
endif()
if ("${PROPERTY_TO_SET}" STREQUAL "LIBRARY")
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR)
# check 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_ paths for consistency with specified 3RDPARTY_TBB_DIR
if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY FILEPATH "the path to ${upper_PRODUCT_LIBRARY_NAME} library")
if (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY AND EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}")
get_filename_component (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}" PATH)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR}" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
else()
list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR)
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} library")
endif()
if (WIN32)
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL FILEPATH "the path to ${upper_PRODUCT_LIBRARY_NAME} shared library")
if (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL AND EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}")
get_filename_component (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}" PATH)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR}" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} shared library" FORCE)
else()
CHECK_PATH_FOR_CONSISTENCY (3RDPARTY_TBB_DIR 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} shared library")
endif()
endif()
endif()
OCCT_MAKE_COMPILER_SHORT_NAME()
OCCT_MAKE_COMPILER_BITNESS()
if (${COMPILER_BITNESS} EQUAL 32)
set (${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME ia32)
else()
set (${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME intel64)
endif()
# tbb12/tbbmalloc library
if (NOT 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY OR NOT EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}")
set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .so .dylib .a)
set (PRODUCT_PATH_SUFFIXES lib ${PRODUCT_LIBRARY_NAME})
# set 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY as notfound, otherwise find_library can't assign a new value to 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY "3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY-NOTFOUND" CACHE FILEPATH "The path to ${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
if (NOT EXISTS "${3RDPARTY_TBB_DIR}/lib/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/${COMPILER}")
if (EXISTS "${3RDPARTY_TBB_DIR}/lib/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}")
file (GLOB ${upper_PRODUCT_LIBRARY_NAME}_COMPILER_LIST "${3RDPARTY_TBB_DIR}/lib/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/*")
if (${upper_PRODUCT_LIBRARY_NAME}_COMPILER_LIST)
list (GET ${upper_PRODUCT_LIBRARY_NAME}_COMPILER_LIST -1 THE_MOST_FRESH_COMPILER_VERSION)
if (THE_MOST_FRESH_COMPILER_VERSION)
get_filename_component (THE_MOST_FRESH_COMPILER_VERSION_NAME "${THE_MOST_FRESH_COMPILER_VERSION}" NAME)
set (PRODUCT_PATH_SUFFIXES lib ${PRODUCT_LIBRARY_NAME} lib/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/${THE_MOST_FRESH_COMPILER_VERSION_NAME})
endif()
endif()
endif()
else()
set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET} "${FILE_DIR}/${FILE_NAME}" CACHE FILEPATH "${LIB_NAME} library" FORCE)
set (3RDPARTY_${LIB_NAME}_${PROPERTY_TO_SET}_DIR "${FILE_DIR}" CACHE PATH "The directory containing ${LIB_NAME} shared library")
set (PRODUCT_PATH_SUFFIXES lib ${PRODUCT_LIBRARY_NAME} lib/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/${COMPILER})
endif()
if ("${PROPERTY_TO_SET}" STREQUAL "LIBRARY")
list (APPEND 3RDPARTY_LIBRARY_DIRS "${FILE_DIR}")
find_library (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY ${PRODUCT_LIBRARY_NAME}
PATHS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR}" "${3RDPARTY_TBB_DIR}"
PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
CMAKE_FIND_ROOT_PATH_BOTH
NO_DEFAULT_PATH)
else()
list (APPEND 3RDPARTY_DLL_DIRS "${FILE_DIR}")
find_library (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY ${PRODUCT_LIBRARY_NAME}
PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
CMAKE_FIND_ROOT_PATH_BOTH)
endif()
endif()
endmacro()
# TARGET_NAME - is target name from oneTBB cmake file
# it is either "TBB::tbb", or "TBB::tbbmalloc"
# LIB_NAME_UC - is library id (TBB or TBBMALLOC)
macro (LIN_TBB_PARSE TARGET_NAME LIB_NAME)
set (FILE_NAME "")
set (FILE_PATH "")
set (FILE_DIR "")
get_target_property (FILE_NAME "${TARGET_NAME}" IMPORTED_LOCATION_RELEASE)
# acquire full path
TBB_FILE_NAME_TO_FILEPATH("${FILE_NAME}" FILE_PATH)
get_filename_component (FILE_NAME "${FILE_PATH}" NAME)
get_filename_component (FILE_DIR "${FILE_PATH}" DIRECTORY)
if (NOT EXISTS "${FILE_DIR}/${FILE_NAME}")
set (3RDPARTY_${LIB_NAME}_LIBRARY "" CACHE FILEPATH "${LIB_NAME} library" FORCE)
set (3RDPARTY_${LIB_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${LIB_NAME} shared library")
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${LIB_NAME}_LIBRARY_DIR)
if (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY AND EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}")
get_filename_component (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}" PATH)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR}" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
else()
set (3RDPARTY_${LIB_NAME}_LIBRARY "${FILE_DIR}/${FILE_NAME}" CACHE FILEPATH "${LIB_NAME} library" FORCE)
set (3RDPARTY_${LIB_NAME}_LIBRARY_DIR "${FILE_DIR}" CACHE PATH "The directory containing ${LIB_NAME} shared library")
list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${LIB_NAME}_LIBRARY_DIR}")
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR "" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
endif()
endif()
endmacro()
if (WIN32)
# Here we should set:
# - 3RDPARTY_*_LIBRARY
# - 3RDPARTY_*_LIBRARY_DIR
# - 3RDPARTY_*_DLL
# - 3RDPARTY_*_DLL_DIR
# where * - is TBB or TBBMALLOC
if (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR AND EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR}")
list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR}")
else()
list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY_DIR)
separate_arguments (CSF_TBB)
foreach (LIB IN LISTS CSF_TBB)
string(TOLOWER "${LIB}" LIB_LOWER)
string(TOUPPER "${LIB}" LIB_UPPER)
WIN_TBB_PARSE("TBB::${LIB_LOWER}" "${LIB_UPPER}" "LIBRARY")
WIN_TBB_PARSE("TBB::${LIB_LOWER}" "${LIB_UPPER}" "DLL")
endforeach()
else()
# Here we should set:
# - 3RDPARTY_*_LIBRARY
# - 3RDPARTY_*_LIBRARY_DIR
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY "" CACHE FILEPATH "The path to ${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
endif()
separate_arguments (CSF_TBB)
foreach (LIB IN LISTS CSF_TBB)
string(TOLOWER "${LIB}" LIB_LOWER)
string(TOUPPER "${LIB}" LIB_UPPER)
LIN_TBB_PARSE("TBB::${LIB_LOWER}" "${LIB_UPPER}")
endforeach()
endif()
# tbb12/tbbmalloc shared library
if (WIN32)
if (NOT 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL OR NOT EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}")
set (CMAKE_FIND_LIBRARY_SUFFIXES .dll)
set (PRODUCT_PATH_SUFFIXES bin)
# install tbb/tbbmalloc
if (INSTALL_TBB)
# set 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL as notfound, otherwise find_library can't assign a new value to 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL "3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL-NOTFOUND" CACHE FILEPATH "${upper_PRODUCT_LIBRARY_NAME} shared library" FORCE)
if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
if (NOT EXISTS "${3RDPARTY_TBB_DIR}/bin/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/${COMPILER}")
if (EXISTS "${3RDPARTY_TBB_DIR}/bin/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}")
file (GLOB ${upper_PRODUCT_LIBRARY_NAME}_COMPILER_LIST "${3RDPARTY_TBB_DIR}/bin/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/*")
if (${upper_PRODUCT_LIBRARY_NAME}_COMPILER_LIST)
list (GET ${upper_PRODUCT_LIBRARY_NAME}_COMPILER_LIST -1 THE_MOST_FRESH_COMPILER_VERSION)
if (THE_MOST_FRESH_COMPILER_VERSION)
get_filename_component (THE_MOST_FRESH_COMPILER_VERSION_NAME "${THE_MOST_FRESH_COMPILER_VERSION}" NAME)
set (PRODUCT_PATH_SUFFIXES bin bin/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/${THE_MOST_FRESH_COMPILER_VERSION_NAME})
endif()
endif()
endif()
else()
set (PRODUCT_PATH_SUFFIXES bin bin/${${upper_PRODUCT_LIBRARY_NAME}_ARCH_NAME}/${COMPILER})
endif()
if (3RDPARTY_TBB_DIR AND EXISTS "${3RDPARTY_TBB_DIR}")
find_library (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL ${PRODUCT_LIBRARY_NAME}
PATHS "${3RDPARTY_TBB_DIR}"
PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES}
NO_DEFAULT_PATH)
else()
find_library (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL ${PRODUCT_LIBRARY_NAME} PATH_SUFFIXES ${PRODUCT_PATH_SUFFIXES})
endif()
if (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL AND EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}")
get_filename_component (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}" PATH)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR}" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} library" FORCE)
else()
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR "" CACHE PATH "The directory containing ${upper_PRODUCT_LIBRARY_NAME} shared library" FORCE)
set (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL "" CACHE FILEPATH "${upper_PRODUCT_LIBRARY_NAME} shared library" FORCE)
endif()
endif()
endif()
if (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR OR EXISTS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR}")
list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR}")
else()
list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL_DIR)
endif()
endif()
# install tbb12/tbbmalloc
if (INSTALL_TBB)
OCCT_MAKE_OS_WITH_BITNESS()
OCCT_MAKE_COMPILER_SHORT_NAME()
if (WIN32)
if (SINGLE_GENERATOR)
foreach (LIB IN LISTS CSF_TBB)
string(TOUPPER "${LIB}" LIB_UPPER)
install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} DESTINATION "${INSTALL_DIR_BIN}")
endforeach()
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL} DESTINATION "${INSTALL_DIR_BIN}")
else()
foreach (LIB IN LISTS CSF_TBB)
string(TOUPPER "${LIB}" LIB_UPPER)
install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS Release DESTINATION "${INSTALL_DIR_BIN}")
install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS RelWithDebInfo DESTINATION "${INSTALL_DIR_BIN}i")
install (FILES ${3RDPARTY_${LIB_UPPER}_DLL} CONFIGURATIONS Debug DESTINATION "${INSTALL_DIR_BIN}d")
endforeach()
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}
CONFIGURATIONS Release
DESTINATION "${INSTALL_DIR_BIN}")
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}
CONFIGURATIONS RelWithDebInfo
DESTINATION "${INSTALL_DIR_BIN}i")
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL}
CONFIGURATIONS Debug
DESTINATION "${INSTALL_DIR_BIN}d")
endif()
else()
if (SINGLE_GENERATOR)
foreach (LIB IN LISTS CSF_TBB)
string(TOUPPER "${LIB}" LIB_UPPER)
install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} DESTINATION "${INSTALL_DIR_LIB}")
endforeach()
else()
foreach (LIB IN LISTS CSF_TBB)
string(TOUPPER "${LIB}" LIB_UPPER)
install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS Release DESTINATION "${INSTALL_DIR_LIB}")
install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS RelWithDebInfo DESTINATION "${INSTALL_DIR_LIB}i")
install (FILES ${3RDPARTY_${LIB_UPPER}_LIBRARY} CONFIGURATIONS Debug DESTINATION "${INSTALL_DIR_LIB}d")
endforeach()
endif()
endif()
endif()
foreach (LIB IN LISTS CSF_TBB)
string(TOUPPER "${LIB}" LIB_UPPER)
mark_as_advanced (3RDPARTY_${LIB_UPPER}_LIBRARY 3RDPARTY_${LIB_UPPER}_DLL)
endforeach()
get_filename_component (PRODUCT_LIBRARY_NAME ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY} NAME)
if (INSTALL_TBB)
if (SINGLE_GENERATOR)
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}.2
DESTINATION "${INSTALL_DIR_LIB}"
RENAME ${PRODUCT_LIBRARY_NAME}.2)
else()
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}.2
CONFIGURATIONS Release
DESTINATION "${INSTALL_DIR_LIB}"
RENAME ${PRODUCT_LIBRARY_NAME}.2)
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}.2
CONFIGURATIONS RelWithDebInfo
DESTINATION "${INSTALL_DIR_LIB}i"
RENAME ${PRODUCT_LIBRARY_NAME}.2)
install (FILES ${3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY}.2
CONFIGURATIONS Debug
DESTINATION "${INSTALL_DIR_LIB}d"
RENAME ${PRODUCT_LIBRARY_NAME}.2)
endif()
endif()
endif()
mark_as_advanced (3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_LIBRARY 3RDPARTY_${upper_PRODUCT_LIBRARY_NAME}_DLL)
endmacro()
#if (BUILD_SHARED_LIBS)
separate_arguments (CSF_TBB)
foreach (LIB IN LISTS CSF_TBB)
TBB_PRODUCT_SEARCH (${LIB})
endforeach()
if (INSTALL_TBB)
set (USED_3RDPARTY_TBB_DIR "")
else()
else()
# the library directory for using by the executable
if (WIN32)
set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_DLL_DIR})
set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB12_DLL_DIR})
else()
set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB_LIBRARY_DIR})
set (USED_3RDPARTY_TBB_DIR ${3RDPARTY_TBB12_LIBRARY_DIR})
endif()
endif()
endif()
#endif()

View File

@@ -775,7 +775,7 @@ proc wokdep:SearchTBB {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64
lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib/$aSubDir/$aVcLib"
}
if { "$aTbbLibPath" == "" } {
lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}tbb.${::SYS_LIB_SUFFIX}' not found (Intel TBB)"
lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}tbb12.${::SYS_LIB_SUFFIX}' not found (Intel TBB)"
if { "$::ARCH" == "$anArchIter"} { set isFound "false" }
}
}

View File

@@ -1233,11 +1233,28 @@ proc osutils:convertModules { theModules theSrcDir theSourceDirOther theProjects
lappend aProjectsInModule($aModule) $aToolKit
lappend aDependencies [LibToLink $aToolKit $theSrcDir $theSourceDirOther]
}
# executables
# executables, assume one project per cxx file...
foreach aUnit [OS:executable ${aModule}] {
lappend aProjects $aUnit
lappend aProjectsInModule($aModule) $aUnit
lappend aDependencies [LibToLink $aUnit $theSrcDir $theSourceDirOther]
set aUnitLoc $aUnit
set src_files [_get_used_files $aUnit $theSrcDir false]
set aSrcFiles {}
foreach s $src_files {
regexp {source ([^\s]+)} $s dummy name
lappend aSrcFiles $name
}
foreach aSrcFile $aSrcFiles {
set aFileExtension [file extension $aSrcFile]
if { $aFileExtension == ".cxx" } {
set aPrjName [file rootname $aSrcFile]
lappend aProjects $aPrjName
lappend aProjectsInModule($aModule) $aPrjName
if {[file isdirectory $path/$theSrcDir/$aUnitLoc]} {
lappend aDependencies [LibToLinkX $aUnitLoc [file rootname $aSrcFile] $theSrcDir $theSourceDirOther]
} else {
lappend aDependencies {}
}
}
}
}
}
}
@@ -1420,7 +1437,7 @@ proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap theRelease} {
set aLibsMap(CSF_FFmpeg) "avcodec avformat swscale avutil"
}
if { "$::HAVE_TBB" == "true" } {
set aLibsMap(CSF_TBB) "tbb tbbmalloc"
set aLibsMap(CSF_TBB) "tbb12 tbbmalloc"
}
if { "$::HAVE_VTK" == "true" } {
if { "$theOS" == "wnt" } {
@@ -2093,9 +2110,10 @@ proc osutils:tk:execfiles { theFiles theOutDir theCommand thePrefix theExtension
# Generate Visual Studio project file for executable
proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir theSourceDirOther } {
set aVcFiles {}
foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
set aProjTmpl [osutils:vcproj:readtemplate $theVcVer $isUWP 1]
set aProjName $theToolKit
set aProjName [file rootname [file tail $f]]
set l_compilable [osutils:compilable wnt]
regsub -all -- {__XQTNAM__} $aProjTmpl $aProjName aProjTmpl
@@ -2124,32 +2142,23 @@ proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
set aVcFilesCxx(units) ""
set aVcFilesHxx(units) ""
if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
if { ![info exists written([file tail $f])] } {
set written([file tail $f]) 1
if { "$theVcVer" != "vc7" && "$theVcVer" != "vc8" && "$theVcVer" != "vc9" } {
append aFilesSection [osutils:vcxproj:cxxfile $f "" 3]
if { ! [info exists aVcFilesCxx($theToolKit)] } { lappend aVcFilesCxx(units) $theToolKit }
lappend aVcFilesCxx($theToolKit) $f
} else {
puts "Warning : in vcproj there are more than one occurrences for [file tail $f]"
}
}
} else {
append aFilesSection "\t\t\t<Filter\n"
append aFilesSection "\t\t\t\tName=\"$theToolKit\"\n"
append aFilesSection "\t\t\t\t>\n"
foreach f [osutils:tk:cxxfiles $theToolKit wnt $theSrcDir] {
if { ![info exists written([file tail $f])] } {
set written([file tail $f]) 1
append aFilesSection [osutils:vcproj:file $theVcVer $f ""]
append aFilesSection "\t\t\t</Filter>"
}
} else {
puts "Warning : in vcproj there are more than one occurrences for [file tail $f]"
}
}
append aFilesSection "\t\t\t</Filter>"
}
#puts "$aProjTmpl $aFilesSection"
set anIncPaths "..\\..\\..\\inc"
regsub -all -- {__TKINC__} $aProjTmpl $anIncPaths aProjTmpl
@@ -2192,7 +2201,7 @@ proc osutils:vcprojx { theVcVer isUWP theOutDir theToolKit theGuidsMap theSrcDir
lappend aVcFiles "$aCommonSettingsFile"
}
}
return $aVcFiles
}

View File

@@ -23,7 +23,7 @@ CSF_TclLibs = -ltcl8.6
CSF_TclTkLibs = -ltk8.6
HAVE_FREEIMAGE { CSF_FreeImagePlus = -lfreeimage } else:win32 { CSF_FreeImagePlus = -lwindowscodecs -lole32 }
HAVE_FFMPEG { CSF_FFmpeg = -lavcodec -lavformat -lswscale -lavutil }
HAVE_TBB { CSF_TBB = -ltbb -ltbbmalloc }
HAVE_TBB { CSF_TBB = -ltbb12 -ltbbmalloc }
HAVE_ZLIB { CSF_ZLIB = -lzlib }
HAVE_LIBLZMA { CSF_LIBLZMA = -lliblzma }
HAVE_DRACO { CSF_Draco = -ldraco }

View File

@@ -11,7 +11,7 @@ if /I "%VCVER%" == "@COMPILER@" (
set "FREEIMAGE_DIR=@3RDPARTY_FREEIMAGE_DLL_DIRS@"
set "EGL_DIR=@3RDPARTY_EGL_DLL_DIRS@"
set "GLES2_DIR=@3RDPARTY_GLES2_DLL_DIRS@"
set "TBB_DIR=@3RDPARTY_TBB_DLL_DIR@"
set "TBB_DIR=@3RDPARTY_TBB12_DLL_DIR@"
set "VTK_DIR=@3RDPARTY_VTK_DLL_DIR@"
set "FFMPEG_DIR=@3RDPARTY_FFMPEG_DLL_DIR@"
set "OPENVR_DIR=@3RDPARTY_OPENVR_DLL_DIRS@"

View File

@@ -9,7 +9,7 @@ if [ "$1" == "@BIN_LETTER@" ]; then
export TK_DIR="@3RDPARTY_TK_LIBRARY_DIR@"
export FREETYPE_DIR="@3RDPARTY_FREETYPE_LIBRARY_DIR@"
export FREEIMAGE_DIR="@3RDPARTY_FREEIMAGE_LIBRARY_DIRS@"
export TBB_DIR="@3RDPARTY_TBB_LIBRARY_DIR@"
export TBB_DIR="@3RDPARTY_TBB12_LIBRARY_DIR@"
export VTK_DIR="@3RDPARTY_VTK_LIBRARY_DIR@"
export FFMPEG_DIR="@3RDPARTY_FFMPEG_LIBRARY_DIR@"

View File

@@ -341,7 +341,7 @@ The tables below describe the recommended software configurations for which OCCT
| OS | Compiler |
| --------- | ----------- |
| Windows | Microsoft Visual Studio: 2015 Update 3, 2017 <sup>1</sup>, 2019, 2022 <br>, LLVM (ClangCL), GCC 4.3+ (Mingw-w64)|
| Windows | Microsoft Visual Studio: 2013 Update 5, 2015 Update 3, 2017 <sup>1</sup>, 2019, 2022 <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 |
@@ -572,7 +572,8 @@ FreeType 2 is released under two open-source licenses: BSD-like FreeType License
It is a library that helps you to take advantage of multi-core processor performance without having to be a threading expert.
Threading Building Blocks is not just a threads-replacement library. It represents a higher-level, task-based parallelism that
abstracts platform details and threading mechanisms for scalability and performance.
Intel oneTBB 2021.5.0 is available under Apache 2.0 license (https://www.threadingbuildingblocks.org).
oneTBB 2021.5.0 is available under Apache 2.0 license, while older versions
until 4.4 are available under GPLv2 license with the runtime exception (https://www.threadingbuildingblocks.org).
**OpenGL** is an industry standard API for 3D graphics used by OCCT for
implementation of 3D viewer. OpenGL specification is developed by the

View File

@@ -2338,8 +2338,3 @@ or to include system OpenGL headers in advance (with help of `OpenGl_GlNative.hx
Method `StdPrs_ToolTriangulatedShape::Normal()` has been removed.
Please use `BRepLib_ToolTriangulatedShape::ComputeNormals()` to fill in normal attributes in triangulation and fetch them directly using `Poly_Triangulation::Normal()`.
@subsection upgrade_occt770_shapeproximity BRepExtrema_ShapeProximity
A new way of using the `BRepExtrema_ShapeProximity` class was provided for computing a proximity value between two shapes.
If at initialization of the `BRepExtrema_ShapeProximity` class the *theTolerance* parameter is not defined (Precision::Infinite() by default), the proximity value will be computed.

View File

@@ -326,8 +326,7 @@ The <i>Geom2dConvert</i> package provides the following:
* a global function which is used to construct a BSpline curve from a bounded curve based on a 2D curve from the Geom2d package,
* a splitting algorithm which computes the points at which a 2D BSpline curve should be cut in order to obtain arcs with the same degree of continuity,
* global functions used to construct the BSpline curves created by this splitting algorithm, or by other types of segmentation of the BSpline curve,
* an algorithm which converts a 2D BSpline curve into a series of adjacent Bezier curves,
* an algorithm which converts an arbitrary 2D curve into a series of adjacent 2D circular arcs and 2D linear segments.
* an algorithm which converts a 2D BSpline curve into a series of adjacent Bezier curves.
The <i>GeomConvert</i> package also provides the following:

View File

@@ -91,6 +91,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy.dll</OutputFile>
@@ -121,6 +122,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy.dll</OutputFile>
@@ -145,6 +147,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy.dll</OutputFile>
@@ -172,6 +175,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy.dll</OutputFile>

View File

@@ -92,6 +92,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy_D3D.dll</OutputFile>
@@ -123,6 +124,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy_D3D.dll</OutputFile>
@@ -147,6 +149,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy_D3D.dll</OutputFile>
@@ -174,6 +177,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ConformanceMode>false</ConformanceMode>
</ClCompile>
<Link>
<OutputFile>$(OutDir)OCCTProxy_D3D.dll</OutputFile>

View File

@@ -51,7 +51,7 @@ unix {
DEFINES += OCC_CONVERT_SIGNALS QT_NO_STL
!macx | equals(MACOSX_USE_GLX, true): LIBS += -L$$QMAKE_LIBDIR_X11 $$QMAKE_LIBS_X11 -L$$QMAKE_LIBDIR_OPENGL $$QMAKE_LIBS_OPENGL $$QMAKE_LIBS_THREAD
LIBS += -lfreeimageplus
LIBS += -ltbb -ltbbmalloc
LIBS += -ltbb12 -ltbbmalloc
QMAKE_CXXFLAGS += -std=gnu++11
}

View File

@@ -251,9 +251,7 @@ void AIS_Animation::Stop()
myState = AnimationState_Stopped;
if (!myTimer.IsNull())
{
const Standard_Real anElapsedTime = ElapsedTime();
myTimer->Stop();
myTimer->Seek (Min (Duration(), anElapsedTime));
}
for (NCollection_Sequence<Handle(AIS_Animation)>::Iterator anIter (myAnimations); anIter.More(); anIter.Next())

View File

@@ -1,4 +1,4 @@
// Created on: 1997-01-17
// Created on: 1997-01-17
// Created by: Robert COUBLANC
// Copyright (c) 1997-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
@@ -1001,14 +1001,6 @@ void AIS_InteractiveContext::RecomputeSelectionOnly (const Handle(AIS_Interactiv
return;
}
TColStd_ListOfInteger aModes;
ActivatedModes (theIO, aModes);
for (TColStd_ListIteratorOfListOfInteger aModesIter (aModes); aModesIter.More(); aModesIter.Next())
{
mgrSelector->Deactivate (theIO, aModesIter.Value());
}
mgrSelector->RecomputeSelection (theIO);
const Handle(AIS_GlobalStatus)* aStatus = myObjects.Seek (theIO);
@@ -1018,7 +1010,10 @@ void AIS_InteractiveContext::RecomputeSelectionOnly (const Handle(AIS_Interactiv
return;
}
for (TColStd_ListIteratorOfListOfInteger aModesIter (aModes); aModesIter.More(); aModesIter.Next())
TColStd_ListOfInteger aModes;
ActivatedModes (theIO, aModes);
TColStd_ListIteratorOfListOfInteger aModesIter (aModes);
for (; aModesIter.More(); aModesIter.Next())
{
mgrSelector->Activate (theIO, aModesIter.Value());
}

View File

@@ -15,13 +15,8 @@
// commercial license or contractual agreement.
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Curve2d.hxx>
#include <BRepAlgo.hxx>
#include <BRepLib.hxx>
#include <BRepLib_MakeEdge.hxx>
@@ -30,13 +25,10 @@
#include <ElCLib.hxx>
#include <Geom_Curve.hxx>
#include <Geom_TrimmedCurve.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <Geom2dConvert_ApproxArcsSegments.hxx>
#include <GeomAbs_CurveType.hxx>
#include <GeomConvert.hxx>
#include <GeomConvert_CompCurveToBSplineCurve.hxx>
#include <GeomLProp.hxx>
#include <NCollection_Vector.hxx>
#include <gp_Pnt.hxx>
#include <Precision.hxx>
#include <ShapeFix_Shape.hxx>
@@ -48,7 +40,6 @@
#include <TColStd_SequenceOfBoolean.hxx>
#include <TColStd_SequenceOfReal.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <TopLoc_Location.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
@@ -56,166 +47,6 @@
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Wire.hxx>
// The minimal tolerance of approximation (edges can be defined with yet smaller tolerance)
static const Standard_Real MINIMAL_TOLERANCE = 0.0001;
namespace {
struct OrientedCurve
{
Handle(Geom2d_TrimmedCurve) Curve;
Standard_Boolean IsReverse;
inline gp_Pnt2d Point (const Standard_Boolean isEnd) const
{
if (isEnd == IsReverse)
return Curve->StartPoint();
return Curve->EndPoint();
}
};
}
//=======================================================================
//function : ConvertWire
//purpose :
//=======================================================================
TopoDS_Wire BRepAlgo::ConvertWire(const TopoDS_Wire& theWire,
const Standard_Real theAngleTol,
const TopoDS_Face& theFace)
{
TopoDS_Wire aResult;
Standard_Real aMaxTol(0.);
const Handle(Geom_Surface) aSurf = BRep_Tool::Surface(theFace);
NCollection_Vector<OrientedCurve> vecCurve;
BRepTools_WireExplorer anExpE(theWire, theFace);
// Explore the edges in the current wire, in their connection order
for (; anExpE.More(); anExpE.Next()) {
const TopoDS_Edge& anEdge = anExpE.Current();
BRepAdaptor_Curve2d aCurve(anEdge, theFace);
Standard_Real aTol = BRep_Tool::Tolerance(anEdge);
if (aTol < MINIMAL_TOLERANCE)
aTol = MINIMAL_TOLERANCE;
if (aTol > aMaxTol)
aMaxTol = aTol;
Geom2dConvert_ApproxArcsSegments anAlgo(aCurve, aTol, theAngleTol);
const TColGeom2d_SequenceOfCurve& aResultApprox = anAlgo.GetResult();
// Form the array of approximated elementary curves
if (anEdge.Orientation() == TopAbs_REVERSED) {
for (Standard_Integer iCrv = aResultApprox.Length(); iCrv > 0 ; iCrv--) {
const Handle(Geom2d_Curve)& aCrv = aResultApprox(iCrv);
if (aCrv.IsNull() == Standard_False) {
OrientedCurve& anOCurve = vecCurve.Append(OrientedCurve());
anOCurve.Curve = Handle(Geom2d_TrimmedCurve)::DownCast(aCrv);
anOCurve.IsReverse = Standard_True;
}
}
} else {
for (Standard_Integer iCrv = 1; iCrv <= aResultApprox.Length(); iCrv++) {
const Handle(Geom2d_Curve)& aCrv = aResultApprox(iCrv);
if (aCrv.IsNull() == Standard_False) {
OrientedCurve& anOCurve = vecCurve.Append(OrientedCurve());
anOCurve.Curve = Handle(Geom2d_TrimmedCurve)::DownCast(aCrv);
anOCurve.IsReverse = Standard_False;
}
}
}
}
if (vecCurve.Length() > 0)
{
// Build the first vertex
BRep_Builder aVBuilder;
gp_Pnt2d aPnt[2] = {
vecCurve(0).Point(Standard_False),
vecCurve(vecCurve.Length() - 1).Point(Standard_True)
};
Standard_Real aDist = aPnt[0].Distance(aPnt[1]);
if (aDist > aMaxTol + Precision::Confusion())
aDist = Precision::Confusion();
else {
aDist = 0.5 * aDist + Precision::Confusion();
aPnt[0] = 0.5 * (aPnt[0].XY() + aPnt[1].XY());
}
gp_Pnt aPnt3d;
aSurf->D0(aPnt[0].X(), aPnt[0].Y(), aPnt3d);
TopoDS_Vertex aFirstVertex;
aVBuilder.MakeVertex(aFirstVertex, aPnt3d, aDist);
// Loop creating edges
BRepBuilderAPI_MakeWire aMkWire;
TopoDS_Edge anEdgeRes;
TopoDS_Vertex aVertex = aFirstVertex;
for (Standard_Integer iCrv = 0; iCrv < vecCurve.Length(); iCrv++) {
const OrientedCurve& anOCurve = vecCurve(iCrv);
TopoDS_Vertex aNextVertex;
aPnt[0] = anOCurve.Point(Standard_True);
if (iCrv == vecCurve.Length() - 1) {
aPnt[1] = vecCurve(0).Point(Standard_False);
aDist = aPnt[0].Distance(aPnt[1]);
if (aDist > aMaxTol + Precision::Confusion()) {
aSurf->D0(aPnt[0].X(), aPnt[0].Y(), aPnt3d);
aVBuilder.MakeVertex(aNextVertex, aPnt3d, Precision::Confusion());
} else {
aNextVertex = aFirstVertex;
}
} else {
aPnt[1] = vecCurve(iCrv + 1).Point(Standard_False);
aDist = 0.5 * (aPnt[0].Distance(aPnt[1])) + Precision::Confusion();
aPnt[0] = 0.5 * (aPnt[0].XY() + aPnt[1].XY());
aSurf->D0(aPnt[0].X(), aPnt[0].Y(), aPnt3d);
aVBuilder.MakeVertex(aNextVertex, aPnt3d, aDist);
}
const Standard_Real aParam[2] = {
anOCurve.Curve->FirstParameter(),
anOCurve.Curve->LastParameter()
};
if (anOCurve.IsReverse) {
BRepBuilderAPI_MakeEdge aMkEdge(anOCurve.Curve, aSurf, aNextVertex,
aVertex, aParam[0], aParam[1]);
anEdgeRes = aMkEdge.Edge();
anEdgeRes.Orientation(TopAbs_REVERSED);
} else {
BRepBuilderAPI_MakeEdge aMkEdge(anOCurve.Curve, aSurf, aVertex,
aNextVertex, aParam[0], aParam[1]);
anEdgeRes = aMkEdge.Edge();
}
aVertex = aNextVertex;
aMkWire.Add(anEdgeRes);
}
if (aMkWire.IsDone())
aResult = aMkWire.Wire();
}
return aResult;
}
//=======================================================================
//function : ConvertFace
//purpose :
//=======================================================================
TopoDS_Face BRepAlgo::ConvertFace (const TopoDS_Face& theFace,
const Standard_Real theAngleTolerance)
{
TopoDS_Face aResult;
const Handle(Geom_Surface) aSurf = BRep_Tool::Surface(theFace);
BRepBuilderAPI_MakeFace aMkFace(aSurf,Precision::Confusion());
TopExp_Explorer anExp(theFace, TopAbs_WIRE);
for (; anExp.More(); anExp.Next()) {
const TopoDS_Wire& aWire = TopoDS::Wire(anExp.Current());
const TopoDS_Wire aNewWire = ConvertWire(aWire, theAngleTolerance, theFace);
aMkFace.Add(aNewWire);
}
if (aMkFace.IsDone()) {
aResult = aMkFace.Face();
}
return aResult;
}
//=======================================================================
//function : ConcatenateWire
//purpose :

View File

@@ -21,7 +21,6 @@
#include <TopTools_ListOfShape.hxx>
class TopoDS_Wire;
class TopoDS_Edge;
class TopoDS_Face;
class TopoDS_Shape;
@@ -45,28 +44,6 @@ public:
//! resulting curve of the resulting edge may be C0.
Standard_EXPORT static TopoDS_Edge ConcatenateWireC0 (const TopoDS_Wire& Wire);
//! Method of wire conversion, calls BRepAlgo_Approx internally.
//! @param theWire
//! Input Wire object.
//! @param theAngleTolerance
//! Angle (in radians) defining the continuity of the wire: if two vectors
//! differ by less than this angle, the result will be smooth (zero angle of
//! tangent lines between curve elements).
//! @return
//! The new TopoDS_Wire object consisting of edges each representing an arc
//! of circle or a linear segment. The accuracy of conversion is defined
//! as the maximal tolerance of edges in theWire.
static Standard_EXPORT TopoDS_Wire ConvertWire
(const TopoDS_Wire& theWire,
const Standard_Real theAngleTolerance,
const TopoDS_Face& theFace);
//! Method of face conversion. The API corresponds to the method ConvertWire.
//! This is a shortcut for calling ConvertWire() for each wire in theFace.
static Standard_EXPORT TopoDS_Face ConvertFace
(const TopoDS_Face& theFace,
const Standard_Real theAngleTolerance);
//! Checks if the shape is "correct". If not, returns
//! <Standard_False>, else returns <Standard_True>.
Standard_EXPORT static Standard_Boolean IsValid (const TopoDS_Shape& S);

View File

@@ -197,12 +197,10 @@ Standard_Boolean CheckOn(IntRes2d_IntersectionPoint& thePntInter,
if (aMinDist <= theTolZ) {
IntRes2d_Transition aTrOnLin(IntRes2d_Head);
IntRes2d_Position aPosOnCurve = IntRes2d_Middle;
if ((Abs(aPar - theDeb) <= Precision::Confusion())
|| (aPar < theDeb)) {
if (Abs(aPar - theDeb) <= Precision::Confusion()) {
aPosOnCurve = IntRes2d_Head;
}
else if ((Abs(aPar - theFin) <= Precision::Confusion())
|| (aPar > theFin)) {
else if (Abs(aPar - theFin) <= Precision::Confusion()) {
aPosOnCurve = IntRes2d_End;
}
//
@@ -383,16 +381,8 @@ void BRepClass_Intersector::Perform(const gp_Lin2d& L,
{
Standard_Boolean aStatusOn = Standard_False;
IntRes2d_IntersectionPoint aPntInter;
Standard_Real aDebTol = deb;
Standard_Real aFinTol = fin;
if (aTolZ > Precision::Confusion())
{
aDebTol = deb - aTolZ;
aFinTol = fin + aTolZ;
}
Geom2dAdaptor_Curve aCurAdaptor(aC2D, aDebTol, aFinTol);
aStatusOn = CheckOn(aPntInter, F, L, aCurAdaptor, aTolZ, fin, deb);
aStatusOn = CheckOn(aPntInter, F, L, C, aTolZ, fin, deb);
if (aStatusOn)
{
Append(aPntInter);

View File

@@ -1,460 +0,0 @@
// Created on: 2022-08-08
// Created by: Kseniya NOSULKO
// Copyright (c) 2022 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BRepExtrema_ProximityDistTool.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRep_Tool.hxx>
#include <gp_Pln.hxx>
#include <Precision.hxx>
#include <Poly_Connect.hxx>
#include <Standard_NullValue.hxx>
#include <TopoDS.hxx>
//=======================================================================
//function : BRepExtrema_ProximityDistTool
//purpose : Creates new unitialized tool
//=======================================================================
BRepExtrema_ProximityDistTool::BRepExtrema_ProximityDistTool()
: myMinDistance (std::numeric_limits<Standard_Real>::max()),
myProxDist (-1.),
myPntStatus1 (ProxPnt_Status_UNKNOWN),
myPntStatus2 (ProxPnt_Status_UNKNOWN),
myNbSamples1 (0),
myProxVtxIdx1 (-1)
{
}
//=======================================================================
//function : BRepExtrema_ProximityDistTool
//purpose : Creates new tool for the given element sets
//=======================================================================
BRepExtrema_ProximityDistTool::BRepExtrema_ProximityDistTool (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Standard_Integer theNbSamples1,
const Handle(BRepExtrema_TriangleSet)& theSet2,
const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2)
: myMinDistance (std::numeric_limits<Standard_Real>::max()),
myProxDist (-1.),
myPntStatus1 (ProxPnt_Status_UNKNOWN),
myPntStatus2 (ProxPnt_Status_UNKNOWN),
myNbSamples1 (theNbSamples1),
myProxVtxIdx1 (-1)
{
LoadTriangleSets (theSet1, theSet2);
LoadShapeLists (theShapeList1, theShapeList2);
}
//=======================================================================
//function : LoadTriangleSets
//purpose : Loads the given element sets into the tool
//=======================================================================
void BRepExtrema_ProximityDistTool::LoadTriangleSets (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Handle(BRepExtrema_TriangleSet)& theSet2)
{
mySet1 = theSet1;
mySet2 = theSet2;
}
//=======================================================================
//function : LoadTriangleSets
//purpose : Loads the given list of subshapes into the proximity tool
//=======================================================================
void BRepExtrema_ProximityDistTool::LoadShapeLists (const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2)
{
myShapeList1 = theShapeList1;
myShapeList2 = theShapeList2;
}
//=======================================================================
//function : Perform
//purpose : Performs searching of the proximity distance
//=======================================================================
void BRepExtrema_ProximityDistTool::Perform()
{
SetBVHSet (mySet2.get());
const BVH_Array3d& aVertices1 = mySet1->GetVertices();
Standard_Integer aVtxSize = (Standard_Integer)aVertices1.size();
Standard_Integer aVtxStep = Max (myNbSamples1 <= 0 ? 1 : aVtxSize / myNbSamples1, 1);
for (Standard_Integer aVtxIdx = 0; aVtxIdx < aVtxSize; aVtxIdx += aVtxStep)
{
myDistance = std::numeric_limits<Standard_Real>::max();
myMinDistance = std::numeric_limits<Standard_Real>::max();
myIsDone = Standard_False;
SetObject (aVertices1[aVtxIdx]);
ComputeDistance();
if (!IsDone() && myProxDist < 0.) return;
if (IsDone() && myDistance > myProxDist)
{
myPnt1 = aVertices1[aVtxIdx];
myPnt2 = myExtremaPoint;
myProxDist = myDistance;
myProxVtxIdx1 = aVtxIdx;
myProxPrjState = myExtPrjState;
}
}
myIsDone = myProxDist > -1.;
if (myIsDone)
{
DefineStatusProxPnt();
}
}
static Standard_Real pointBoxSquareMaxDistance (const BVH_Vec3d& thePoint,
const BVH_Vec3d& theCMin,
const BVH_Vec3d& theCMax)
{
Standard_Real aDist = 0;
for (int i = 0; i < 3; ++i)
{
if (thePoint[i] <= 0.5 * (theCMax[i] + theCMin[i])) { Standard_Real d = theCMax[i] - thePoint[i]; d *= d; aDist += d; }
else { Standard_Real d = thePoint[i] - theCMin[i]; d *= d; aDist += d; }
}
return aDist;
}
//=======================================================================
//function : Branch rejection
//purpose : Defines the rules for node rejection by bounding box
//=======================================================================
Standard_Boolean BRepExtrema_ProximityDistTool::RejectNode (const BVH_Vec3d& theCornerMin,
const BVH_Vec3d& theCornerMax,
Standard_Real& theMetric) const
{
theMetric = sqrt (BVH_Tools<Standard_Real, 3>::PointBoxSquareDistance (myObject,
theCornerMin,
theCornerMax));
Standard_Real aMaxMetric = sqrt (pointBoxSquareMaxDistance (myObject,
theCornerMin,
theCornerMax));
return theMetric > myDistance || aMaxMetric < myProxDist;
}
//=======================================================================
//function : Leaf acceptance
//purpose : Defines the rules for leaf acceptance
//=======================================================================
Standard_Boolean BRepExtrema_ProximityDistTool::Accept (const Standard_Integer theTrgIdx,
const Standard_Real&)
{
BVH_Vec3d aTrgVert1;
BVH_Vec3d aTrgVert2;
BVH_Vec3d aTrgVert3;
BVH_PrjState aBVH_PrjState;
Standard_Integer aNumberOfFirstNode = -1;
Standard_Integer aNumberOfLastNode = -1;
mySet2->GetVertices (theTrgIdx, aTrgVert1, aTrgVert2, aTrgVert3);
BVH_Vec3d aNearestPnt = BVH_Tools<Standard_Real, 3>::PointTriangleProjection (myObject,
aTrgVert1, aTrgVert2, aTrgVert3,
&aBVH_PrjState,
&aNumberOfFirstNode, &aNumberOfLastNode);
PrjState aPrjState (theTrgIdx, aBVH_PrjState, aNumberOfFirstNode, aNumberOfLastNode);
BVH_Vec3d aDirect = myObject - aNearestPnt;
Standard_Real aSqDistance = aDirect.Dot(aDirect);
if (aSqDistance > Precision::SquareConfusion()) // point belongs to triangle
{
const BVH_Vec3d aAB = aTrgVert2 - aTrgVert1;
BVH_Vec3d aNorm;
if (aTrgVert2.IsEqual (aTrgVert3)) // is this degenerate triangle (= segment)
{
const BVH_Vec3d aAP = myObject - aTrgVert1;
aNorm = BVH_Vec3d::Cross (BVH_Vec3d::Cross (aAP, aAB), aAB);
}
else
{
const BVH_Vec3d aAC = aTrgVert3 - aTrgVert1;
aNorm = BVH_Vec3d::Cross (aAB, aAC);
}
Standard_Real aNormSqLen = aNorm.Dot (aNorm);
// check if the distance is under perpendicular
const BVH_Vec3d aCrossCross = BVH_Vec3d::Cross (aDirect, aNorm);
Standard_Real aCrossCrossSqLen = aCrossCross.Dot (aCrossCross);
if (aCrossCrossSqLen > Precision::SquareConfusion() * aSqDistance * aNormSqLen)
{
// the distance is not under perpendicular
if (myMinDistance - sqrt (aSqDistance) > Precision::Confusion())
{
myMinDistance = sqrt (aSqDistance);
myMinDistPoint = aNearestPnt;
myMinPrjState = aPrjState;
}
return Standard_False;
}
}
// the distance is under perpendicular
if (myDistance - sqrt (aSqDistance) > Precision::Confusion())
{
myDistance = sqrt (aSqDistance);
myExtremaPoint = aNearestPnt;
myExtPrjState = aPrjState;
return Standard_True;
}
return Standard_False;
}
//=======================================================================
//function : ComputeDistance
//purpose : Computes the distance between object and BVH tree
//=======================================================================
Standard_Real BRepExtrema_ProximityDistTool::ComputeDistance()
{
myIsDone = this->Select() > 0;
if (!myIsDone)
{
if (myMinDistance < std::numeric_limits<Standard_Real>::max())
{
myExtremaPoint = myMinDistPoint;
myExtPrjState = myMinPrjState;
myIsDone = true;
}
myDistance = myMinDistance;
}
return myDistance;
}
static Standard_Boolean isNodeOnBorder (const Standard_Integer theNodeIdx, const Handle (Poly_Triangulation)& theTr)
{
Poly_Connect aPolyConnect (theTr);
Standard_Integer aContTrg; //index of triangle containing exploring node
for (aPolyConnect.Initialize (theNodeIdx); aPolyConnect.More(); aPolyConnect.Next())
{
aContTrg = aPolyConnect.Value();
Standard_Integer aContTrgNodes[3];
theTr->Triangle (aContTrg).Get (aContTrgNodes[0], aContTrgNodes[1], aContTrgNodes[2]); //indices of nodes of the triangle
Standard_Integer aAdjTrg[3];
aPolyConnect.Triangles (aContTrg, aAdjTrg[0], aAdjTrg[1], aAdjTrg[2]); //indices of adjacent triangles
for (Standard_Integer j = 0; j < 3; j++)
{
Standard_Integer k = (j + 1) % 3;
if (aAdjTrg[j] == 0) //free segment of triangle
{
//aContTrgNodes[j], aContTrgNodes[k] are ends of free segment and it is a part of border
if (aContTrgNodes[j] == theNodeIdx || aContTrgNodes[k] == theNodeIdx)
{
return Standard_True;
}
}
}
}
return Standard_False;
}
//=======================================================================
//function : defineStatusProxPnt1
//purpose : Defines the status of proximity point from 1st BVH
//=======================================================================
void BRepExtrema_ProximityDistTool::defineStatusProxPnt1()
{
Standard_Integer aFaceID1 = mySet1->GetShapeIDOfVtx (myProxVtxIdx1);
if (myShapeList1 (aFaceID1).ShapeType() == TopAbs_EDGE)
{
const BVH_Array3d& aVertices1 = mySet1->GetVertices();
Standard_Integer aVtxSize = (Standard_Integer)aVertices1.size();
Standard_Integer aLastIdx = aVtxSize - 1;
if ((aVertices1[0] - aVertices1[aLastIdx]).Modulus() < Precision::Confusion()) // if closed
{
myPntStatus1 = ProxPnt_Status_MIDDLE;
return;
}
if (myProxVtxIdx1 == 0 || myProxVtxIdx1 == aLastIdx)
{
myPntStatus1 = ProxPnt_Status_BORDER;
}
else
{
myPntStatus1 = ProxPnt_Status_MIDDLE;
}
}
else if (myShapeList1 (aFaceID1).ShapeType() == TopAbs_FACE)
{
Standard_Integer aNodeIdx = mySet1->GetVtxIdxInShape (myProxVtxIdx1) + 1;
TopLoc_Location aLocation;
const TopoDS_Face& aF = TopoDS::Face (myShapeList1 (aFaceID1));
Handle (Poly_Triangulation) aTr = BRep_Tool::Triangulation (aF, aLocation);
if (isNodeOnBorder (aNodeIdx, aTr))
{
myPntStatus1 = ProxPnt_Status_BORDER;
}
else
{
myPntStatus1 = ProxPnt_Status_MIDDLE;
}
}
}
//=======================================================================
//function : defineStatusProxPnt2
//purpose : Defines the status of proximity point from 2nd BVH
//=======================================================================
void BRepExtrema_ProximityDistTool::defineStatusProxPnt2()
{
Standard_Integer aTrgIdx = myProxPrjState.GetTrgIdx();
Standard_Integer aFaceID2 = mySet2->GetFaceID (aTrgIdx);
if (myShapeList2 (aFaceID2).ShapeType() == TopAbs_EDGE)
{
if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_INNER)
{
return;
}
else
{
const BVH_Array3d& aVertices2 = mySet2->GetVertices();
Standard_Integer aVtxSize = (Standard_Integer)aVertices2.size();
Standard_Integer aLastIdx = aVtxSize - 1;
if ((aVertices2[0] - aVertices2[aLastIdx]).Modulus() < Precision::Confusion()) // if closed
{
myPntStatus2 = ProxPnt_Status_MIDDLE;
return;
}
NCollection_Array1<Standard_Integer> aVtxIndicesOfTrg;
mySet2->GetVtxIndices (aTrgIdx, aVtxIndicesOfTrg);
Standard_Integer aFirstNodeNum = myProxPrjState.GetNumberOfFirstNode();
Standard_Integer aFirstVtxIdx = aVtxIndicesOfTrg[aFirstNodeNum];
if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_VERTEX)
{
if (aFirstVtxIdx == 0 || aFirstVtxIdx == aLastIdx)
{
myPntStatus2 = ProxPnt_Status_BORDER;
}
else
{
myPntStatus2 = ProxPnt_Status_MIDDLE;
}
}
else if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_EDGE)
{
Standard_Integer aLastNodeNum = myProxPrjState.GetNumberOfLastNode();
Standard_Integer aLastVtxIdx = aVtxIndicesOfTrg[aLastNodeNum];
// it could be border only in case projection is on a degenerated edge
if (aFirstVtxIdx == aLastVtxIdx && (aFirstVtxIdx == 0 || aFirstVtxIdx == aLastIdx))
{
myPntStatus2 = ProxPnt_Status_BORDER;
}
else
{
myPntStatus2 = ProxPnt_Status_MIDDLE;
}
}
}
}
else if (myShapeList2 (aFaceID2).ShapeType() == TopAbs_FACE)
{
if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_INNER)
{
myPntStatus2 = ProxPnt_Status_MIDDLE;
}
else
{
TopLoc_Location aLocation;
const TopoDS_Face& aF = TopoDS::Face (myShapeList2 (aFaceID2));
Handle (Poly_Triangulation) aTr = BRep_Tool::Triangulation (aF, aLocation);
NCollection_Array1<Standard_Integer> aVtxIndicesOfTrg;
mySet2->GetVtxIndices (aTrgIdx, aVtxIndicesOfTrg);
if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_VERTEX)
{
Standard_Integer aNodeNum = myProxPrjState.GetNumberOfFirstNode();
Standard_Integer aNodeIdx = mySet2->GetVtxIdxInShape (aVtxIndicesOfTrg[aNodeNum]) + 1;
if (isNodeOnBorder (aNodeIdx, aTr))
{
myPntStatus2 = ProxPnt_Status_BORDER;
}
else
{
myPntStatus2 = ProxPnt_Status_MIDDLE;
}
}
else if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_EDGE)
{
myPntStatus2 = ProxPnt_Status_MIDDLE;
Poly_Connect aPolyConnect (aTr);
Standard_Integer aTrgIdxInShape = mySet2->GetTrgIdxInShape (aTrgIdx) + 1;
Standard_Integer aAdjTrg[3];
aPolyConnect.Triangles (aTrgIdxInShape, aAdjTrg[0], aAdjTrg[1], aAdjTrg[2]); //indices of adjacent triangles
for (Standard_Integer j = 0; j < 3; j++)
{
Standard_Integer k = (j + 1) % 3;
if (aAdjTrg[j] == 0) //free segment of triangle
{
//aVtxIndicesOfTrg[j] and aVtxIndicesOfTrg[k] are ends of free segment and it is a part of border
if (j == myProxPrjState.GetNumberOfFirstNode() &&
k == myProxPrjState.GetNumberOfLastNode())
{
myPntStatus2 = ProxPnt_Status_BORDER;
break;
}
}
}
} //else if (myProxPrjState.GetPrjState() == BVH_PrjState::BVH_PrjStateInTriangle_EDGE)
}
} //else if (myShapeList1 (aFaceID1).ShapeType() == TopAbs_FACE)
}
//=======================================================================
//function : DefineStatusProxPnt
//purpose : Defines the status of proximity points
//=======================================================================
void BRepExtrema_ProximityDistTool::DefineStatusProxPnt()
{
// define the status of proximity point from 1st BVH
defineStatusProxPnt1();
// define the status of proximity point from 2nd BVH
defineStatusProxPnt2();
}

View File

@@ -1,200 +0,0 @@
// Created on: 2022-08-08
// Created by: Kseniya NOSULKO
// Copyright (c) 2022 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BRepExtrema_ProximityDistTool_HeaderFile
#define _BRepExtrema_ProximityDistTool_HeaderFile
#include <BRepExtrema_ElementFilter.hxx>
#include <BRepExtrema_MapOfIntegerPackedMapOfInteger.hxx>
#include <BRepExtrema_TriangleSet.hxx>
#include <BVH_Distance.hxx>
#include <BVH_Tools.hxx>
//! Tool class for computation the proximity distance from first
//! primitive set to second one that is the maximal from minimum
//! perpendicular distances. If no perpendicular distance is found, the
//! minimum distance will be returned.
//! This tool is not intended to be used independently, and is integrated
//! in other classes, implementing algorithms based on shape tessellation
//! (BRepExtrema_ProximityValueTool).
//!
//! Please note that algorithm results are approximate and depend greatly
//! on the quality of input tessellation(s).
class BRepExtrema_ProximityDistTool : public BVH_Distance <Standard_Real, 3, BVH_Vec3d,
BRepExtrema_TriangleSet>
{
public:
typedef typename BVH_Tools<Standard_Real, 3>::BVH_PrjStateInTriangle BVH_PrjState;
enum ProxPnt_Status
{
ProxPnt_Status_BORDER,
ProxPnt_Status_MIDDLE,
ProxPnt_Status_UNKNOWN
};
public:
//! Struct with information about projection point state from 2nd BVH,
//! providing proximity point of 2nd shape
struct PrjState
{
PrjState()
: myTrgIdx (0),
myPrjState (BVH_PrjState::BVH_PrjStateInTriangle_INNER),
myNumberOfFirstNode (0),
myNumberOfLastNode (0)
{}
PrjState (const Standard_Integer theTrgIdx,
const BVH_PrjState thePrjState,
const Standard_Integer theNumberOfFirstNode,
const Standard_Integer theNumberOfLastNode)
: myTrgIdx (theTrgIdx),
myPrjState (thePrjState),
myNumberOfFirstNode (theNumberOfFirstNode),
myNumberOfLastNode (theNumberOfLastNode)
{}
Standard_Integer GetTrgIdx() const { return myTrgIdx; }
BVH_PrjState GetPrjState() const { return myPrjState; }
Standard_Integer GetNumberOfFirstNode() const { return myNumberOfFirstNode; }
Standard_Integer GetNumberOfLastNode() const { return myNumberOfLastNode; }
private:
Standard_Integer myTrgIdx; //!< Index of triangle on which the projection is located
BVH_PrjState myPrjState; //!< Position of a projection on the triangle (vertex, edge, inner)
Standard_Integer myNumberOfFirstNode; //!< The 1st vtx of the triangle edge on which the projection is located
Standard_Integer myNumberOfLastNode; //!< The 2nd vtx of the triangle edge on which the projection is located
};
public:
//! Creates new unitialized tool.
Standard_EXPORT BRepExtrema_ProximityDistTool();
//! Creates new tool for the given element sets.
Standard_EXPORT BRepExtrema_ProximityDistTool (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Standard_Integer theNbSamples1,
const Handle(BRepExtrema_TriangleSet)& theSet2,
const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2);
public:
//! Loads the given element sets into the tool.
Standard_EXPORT void LoadTriangleSets (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Handle(BRepExtrema_TriangleSet)& theSet2);
//! Loads the given list of subshapes into the tool.
Standard_EXPORT void LoadShapeLists (const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2);
//! Performs searching of the proximity distance.
Standard_EXPORT void Perform();
public: //! @name Reject/Accept implementations
//! Defines the rules for node rejection by bounding box.
Standard_EXPORT virtual Standard_Boolean RejectNode (const BVH_Vec3d& theCornerMin,
const BVH_Vec3d& theCornerMax,
Standard_Real& theMetric) const Standard_OVERRIDE;
//! Defines the rules for leaf acceptance.
Standard_EXPORT virtual Standard_Boolean Accept (const Standard_Integer theSgmIdx,
const Standard_Real&) Standard_OVERRIDE;
//! Returns points on triangles sets, which provide the proximity distance.
void ProximityPoints (BVH_Vec3d& thePoint1, BVH_Vec3d& thePoint2) const
{
thePoint1 = myPnt1;
thePoint2 = myPnt2;
}
//! Returns status of points on triangles sets, which provide the proximity distance.
void ProximityPointsStatus (ProxPnt_Status& thePointStatus1, ProxPnt_Status& thePointStatus2) const
{
thePointStatus1 = myPntStatus1;
thePointStatus2 = myPntStatus2;
}
//! Returns the computed distance
Standard_Real ProximityDistance() const { return myProxDist; }
protected:
//! Computes the distance between object and BVH tree.
Standard_EXPORT Standard_Real ComputeDistance();
//! Defines the status of proximity points.
Standard_EXPORT void DefineStatusProxPnt();
private:
//! Defines the status of proximity point from 1st BVH.
void defineStatusProxPnt1();
//! Defines the status of proximity point from 2nd BVH.
void defineStatusProxPnt2();
protected:
Standard_Real myMinDistance; //!< Minimal distance from point to BVH, could be not equal to myDistance
BVH_Vec3d myMinDistPoint; //!< Point on BVH providing the minimal distance
BVH_Vec3d myExtremaPoint; //!< Point on BVH providing the extrema
Standard_Real myProxDist; //!< Proximity distance
//! Proximity points
BVH_Vec3d myPnt1, myPnt2;
//! Proximity points' status
ProxPnt_Status myPntStatus1, myPntStatus2;
private:
//! Set of all mesh elements (triangles) of the 1st shape.
Handle(BRepExtrema_TriangleSet) mySet1;
//! Set of all mesh elements (triangles) of the 2nd shape.
Handle(BRepExtrema_TriangleSet) mySet2;
//! List of subshapes of the 1st shape.
BRepExtrema_ShapeList myShapeList1;
//! List of subshapes of the 2nd shape.
BRepExtrema_ShapeList myShapeList2;
Standard_Integer myNbSamples1; //!< Number of samples points on the first shape
//! Vertex index from 1st BVH corresponding to proximity point of 1st shape
Standard_Integer myProxVtxIdx1;
//! Information of projection point state from 2nd BVH providing proximity point of 2nd shape
PrjState myProxPrjState;
//! Information of projection point state from 2nd BVH providing the extrema
PrjState myExtPrjState;
//! Information of projection point state from 2nd BVH providing the minimal distance
PrjState myMinPrjState;
};
#endif // _BRepExtrema_ProximityDistTool_HeaderFile

View File

@@ -1,161 +0,0 @@
// Created on: 2022-08-08
// Created by: Kseniya NOSULKO
// Copyright (c) 2022 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BRepExtrema_ProximityValueTool.hxx>
//=======================================================================
//function : BRepExtrema_ProximityValueTool
//purpose : Creates new unitialized proximity tool
//=======================================================================
BRepExtrema_ProximityValueTool::BRepExtrema_ProximityValueTool()
: myDistance (std::numeric_limits<Standard_Real>::max()),
myIsDone (Standard_False),
myNbSamples1(0),
myNbSamples2(0)
{}
//=======================================================================
//function : BRepExtrema_ProximityValueTool
//purpose : Creates new proximity tool for the given element sets
//=======================================================================
BRepExtrema_ProximityValueTool::BRepExtrema_ProximityValueTool (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Handle(BRepExtrema_TriangleSet)& theSet2,
const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2)
: myDistance (std::numeric_limits<Standard_Real>::max()),
myIsDone (Standard_False),
myNbSamples1(0),
myNbSamples2(0)
{
LoadTriangleSets (theSet1, theSet2);
LoadShapeLists (theShapeList1, theShapeList2);
}
//=======================================================================
//function : LoadTriangleSets
//purpose : Loads the given element sets into the proximity tool
//=======================================================================
void BRepExtrema_ProximityValueTool::LoadTriangleSets (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Handle(BRepExtrema_TriangleSet)& theSet2)
{
mySet1 = theSet1;
mySet2 = theSet2;
myIsDone = Standard_False;
}
//=======================================================================
//function : LoadTriangleSets
//purpose : Loads the given list of subshapes into the proximity tool
//=======================================================================
void BRepExtrema_ProximityValueTool::LoadShapeLists (const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2)
{
myShapeList1 = theShapeList1;
myShapeList2 = theShapeList2;
myIsDone = Standard_False;
}
//=======================================================================
//function : SetNbSamplePoints
//purpose : Sets number of sample points used for proximity calculation for each shape
//=======================================================================
void BRepExtrema_ProximityValueTool::SetNbSamplePoints(const Standard_Integer theSamples1,
const Standard_Integer theSamples2)
{
myNbSamples1 = theSamples1;
myNbSamples2 = theSamples2;
myIsDone = Standard_False;
}
//=======================================================================
//function : computeProximityValue
//purpose : Returns the computed proximity value from first BVH to another one
//=======================================================================
Standard_Real BRepExtrema_ProximityValueTool::computeProximityDist (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Standard_Integer theNbSamples1,
const Handle(BRepExtrema_TriangleSet)& theSet2,
const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2,
BVH_Vec3d& thePoint1,
BVH_Vec3d& thePoint2,
ProxPnt_Status& thePointStatus1,
ProxPnt_Status& thePointStatus2) const
{
BRepExtrema_ProximityDistTool aProxDistTool (theSet1, theNbSamples1, theSet2, theShapeList1, theShapeList2);
aProxDistTool.Perform();
if (!aProxDistTool.IsDone())
return -1.;
aProxDistTool.ProximityPoints (thePoint1, thePoint2);
aProxDistTool.ProximityPointsStatus (thePointStatus1, thePointStatus2);
return aProxDistTool.ProximityDistance();
}
//=======================================================================
//function : Perform
//purpose : Performs the computation of the proximity value
//=======================================================================
void BRepExtrema_ProximityValueTool::Perform (Standard_Real& theTolerance)
{
myIsDone = Standard_False;
// max(min) dist from the 1st shape to the 2nd one
BVH_Vec3d aP1_1, aP1_2;
ProxPnt_Status aPointStatus1_1 = ProxPnt_Status::ProxPnt_Status_UNKNOWN;
ProxPnt_Status aPointStatus1_2 = ProxPnt_Status::ProxPnt_Status_UNKNOWN;
Standard_Real aProximityDist1 = computeProximityDist (mySet1, myNbSamples1, mySet2, myShapeList1, myShapeList2,
aP1_1, aP1_2, aPointStatus1_1, aPointStatus1_2);
if (aProximityDist1 < 0.)
return;
// max(min) dist from the 2nd shape to t he 1st one
BVH_Vec3d aP2_1, aP2_2;
ProxPnt_Status aPointStatus2_1 = ProxPnt_Status::ProxPnt_Status_UNKNOWN;
ProxPnt_Status aPointStatus2_2 = ProxPnt_Status::ProxPnt_Status_UNKNOWN;
Standard_Real aProximityDist2 = computeProximityDist (mySet2, myNbSamples2, mySet1, myShapeList2, myShapeList1,
aP2_2, aP2_1, aPointStatus2_2, aPointStatus2_1);
if (aProximityDist2 < 0.)
return;
// min dist of the two max(min) dists
if (aProximityDist1 < aProximityDist2)
{
myDistance = aProximityDist1;
myPnt1.SetCoord(aP1_1.x(), aP1_1.y(), aP1_1.z());
myPnt2.SetCoord(aP1_2.x(), aP1_2.y(), aP1_2.z());
myPntStatus1 = aPointStatus1_1;
myPntStatus2 = aPointStatus1_2;
}
else
{
myDistance = aProximityDist2;
myPnt1.SetCoord(aP2_1.x(), aP2_1.y(), aP2_1.z());
myPnt2.SetCoord(aP2_2.x(), aP2_2.y(), aP2_2.z());
myPntStatus1 = aPointStatus2_1;
myPntStatus2 = aPointStatus2_2;
}
myIsDone = Standard_True;
theTolerance = myDistance;
}

View File

@@ -1,126 +0,0 @@
// Created on: 2022-08-08
// Created by: Kseniya NOSULKO
// Copyright (c) 2022 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BRepExtrema_ProximityValueTool_HeaderFile
#define _BRepExtrema_ProximityValueTool_HeaderFile
#include <BRepExtrema_ProximityDistTool.hxx>
#include <BRepExtrema_TriangleSet.hxx>
//! Tool class for computation of the proximity value from one BVH
//! primitive set to another, solving max(min) problem.
//! This tool is not intended to be used independently, and is integrated
//! in other classes, implementing algorithms based on shape tessellation
//! (BRepExtrema_ShapeProximity and BRepExtrema_SelfIntersection).
//!
//! Please note that algorithm results are approximate and depend greatly
//! on the quality of input tessellation(s).
class BRepExtrema_ProximityValueTool
{
public:
typedef typename BRepExtrema_ProximityDistTool::ProxPnt_Status ProxPnt_Status;
public:
//! Creates new unitialized proximity tool.
Standard_EXPORT BRepExtrema_ProximityValueTool();
//! Creates new proximity tool for the given element sets.
Standard_EXPORT BRepExtrema_ProximityValueTool (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Handle(BRepExtrema_TriangleSet)& theSet2,
const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2);
public:
//! Loads the given element sets into the proximity tool.
Standard_EXPORT void LoadTriangleSets (const Handle (BRepExtrema_TriangleSet)& theSet1,
const Handle (BRepExtrema_TriangleSet)& theSet2);
//! Loads the given list of subshapes into the proximity tool.
Standard_EXPORT void LoadShapeLists (const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2);
//! Sets number of sample points used for proximity calculation for each shape.
//! If number is less or equal zero, all triangulation nodes are used.
Standard_EXPORT void SetNbSamplePoints (const Standard_Integer theSamples1 = 0,
const Standard_Integer theSamples2 = 0);
//! Performs the computation of the proximity value.
Standard_EXPORT void Perform (Standard_Real& theTolerance);
//! Is proximity test completed?
Standard_Boolean IsDone() const { return myIsDone; }
//! Marks test results as outdated.
void MarkDirty() { myIsDone = Standard_False; }
//! Returns the computed distance.
Standard_Real Distance() const { return myDistance; }
//! Returns points on triangles sets, which provide the proximity distance.
void ProximityPoints(gp_Pnt& thePoint1, gp_Pnt& thePoint2) const
{
thePoint1 = myPnt1;
thePoint2 = myPnt2;
}
//! Returns status of points on triangles sets, which provide the proximity distance.
void ProximityPointsStatus (ProxPnt_Status& thePointStatus1, ProxPnt_Status& thePointStatus2) const
{
thePointStatus1 = myPntStatus1;
thePointStatus2 = myPntStatus2;
}
private:
//! Returns the computed proximity value from first BVH to another one.
Standard_Real computeProximityDist (const Handle(BRepExtrema_TriangleSet)& theSet1,
const Standard_Integer theNbSamples1,
const Handle(BRepExtrema_TriangleSet)& theSet2,
const BRepExtrema_ShapeList& theShapeList1,
const BRepExtrema_ShapeList& theShapeList2,
BVH_Vec3d& thePoint1,
BVH_Vec3d& thePoint2,
ProxPnt_Status& thePointStatus1,
ProxPnt_Status& thePointStatus2) const;
private:
//! Set of all mesh primitives of the 1st shape.
Handle(BRepExtrema_TriangleSet) mySet1;
//! Set of all mesh primitives of the 2nd shape.
Handle(BRepExtrema_TriangleSet) mySet2;
//! List of subshapes of the 1st shape.
BRepExtrema_ShapeList myShapeList1;
//! List of subshapes of the 2nd shape.
BRepExtrema_ShapeList myShapeList2;
Standard_Real myDistance; //!< Distance
Standard_Boolean myIsDone; //!< State of the algorithm
Standard_Integer myNbSamples1; //!< Number of samples points on the first shape
Standard_Integer myNbSamples2; //!< Number of samples points on the second shape
//! Proximity points
gp_Pnt myPnt1, myPnt2;
//! Proximity points' status
ProxPnt_Status myPntStatus1, myPntStatus2;
};
#endif // _BRepExtrema_ProximityValueTool_HeaderFile

View File

@@ -18,8 +18,6 @@
#include <BRepExtrema_OverlapTool.hxx>
#include <TopoDS.hxx>
//! Tool class for detection of self-sections in the given shape.
//! This class is based on BRepExtrema_OverlapTool and thus uses
//! shape tessellation to detect incorrect mesh fragments (pairs
@@ -78,7 +76,7 @@ public:
//! Returns sub-shape from the shape for the given index (started from 0).
const TopoDS_Face& GetSubShape (const Standard_Integer theID) const
{
return TopoDS::Face(myFaceList.Value(theID));
return myFaceList.Value (theID);
}
//! Returns set of all the face triangles of the shape.

View File

@@ -18,28 +18,6 @@
#include <Precision.hxx>
#include <TopExp_Explorer.hxx>
// Assign a map of sub-shapes (edges/faces) of a given shape
static Standard_Boolean initSubShapes(const TopoDS_Shape& theShape,
BRepExtrema_ShapeList& theSubshapesList,
Handle(BRepExtrema_TriangleSet)& theTriangleSet)
{
theSubshapesList.Clear();
for (TopExp_Explorer anIter(theShape, TopAbs_FACE); anIter.More(); anIter.Next())
{
theSubshapesList.Append(anIter.Current());
}
for (TopExp_Explorer anIter(theShape, TopAbs_EDGE); anIter.More(); anIter.Next())
{
theSubshapesList.Append(anIter.Current());
}
if (theTriangleSet.IsNull())
theTriangleSet = new BRepExtrema_TriangleSet;
return theTriangleSet->Init(theSubshapesList);
}
//=======================================================================
//function : BRepExtrema_ShapeProximity
//purpose : Creates uninitialized proximity tool
@@ -47,9 +25,7 @@ static Standard_Boolean initSubShapes(const TopoDS_Shape& theShape,
BRepExtrema_ShapeProximity::BRepExtrema_ShapeProximity (const Standard_Real theTolerance)
: myTolerance (theTolerance),
myElementSet1 (new BRepExtrema_TriangleSet),
myElementSet2 (new BRepExtrema_TriangleSet),
myNbSamples1 (0),
myNbSamples2 (0)
myElementSet2 (new BRepExtrema_TriangleSet)
{
// Should be initialized later
myIsInitS1 = myIsInitS2 = Standard_False;
@@ -64,9 +40,7 @@ BRepExtrema_ShapeProximity::BRepExtrema_ShapeProximity (const TopoDS_Shape& theS
const Standard_Real theTolerance)
: myTolerance (theTolerance),
myElementSet1 (new BRepExtrema_TriangleSet),
myElementSet2 (new BRepExtrema_TriangleSet),
myNbSamples1 (0),
myNbSamples2 (0)
myElementSet2 (new BRepExtrema_TriangleSet)
{
LoadShape1 (theShape1);
LoadShape2 (theShape2);
@@ -78,18 +52,16 @@ BRepExtrema_ShapeProximity::BRepExtrema_ShapeProximity (const TopoDS_Shape& theS
//=======================================================================
Standard_Boolean BRepExtrema_ShapeProximity::LoadShape1 (const TopoDS_Shape& theShape1)
{
myIsInitS1 = initSubShapes(theShape1, myShapeList1, myElementSet1);
myFaceList1.Clear();
if (myTolerance == Precision::Infinite())
for (TopExp_Explorer anIter (theShape1, TopAbs_FACE); anIter.More(); anIter.Next())
{
myProxValTool.MarkDirty();
myFaceList1.Append (static_cast<const TopoDS_Face&> (anIter.Current()));
}
else
{
myOverlapTool.MarkDirty();
}
return myIsInitS1;
return myIsInitS1 = myElementSet1->Init (myFaceList1);
}
//=======================================================================
@@ -98,18 +70,16 @@ Standard_Boolean BRepExtrema_ShapeProximity::LoadShape1 (const TopoDS_Shape& the
//=======================================================================
Standard_Boolean BRepExtrema_ShapeProximity::LoadShape2 (const TopoDS_Shape& theShape2)
{
myIsInitS2 = initSubShapes(theShape2, myShapeList2, myElementSet2);
myFaceList2.Clear();
if (myTolerance == Precision::Infinite())
for (TopExp_Explorer anIter (theShape2, TopAbs_FACE); anIter.More(); anIter.Next())
{
myProxValTool.MarkDirty();
myFaceList2.Append (static_cast<const TopoDS_Face&> (anIter.Current()));
}
else
{
myOverlapTool.MarkDirty();
}
return myIsInitS2;
return myIsInitS2 = myElementSet2->Init (myFaceList2);
}
//=======================================================================
@@ -118,24 +88,6 @@ Standard_Boolean BRepExtrema_ShapeProximity::LoadShape2 (const TopoDS_Shape& the
//=======================================================================
void BRepExtrema_ShapeProximity::Perform()
{
if (myTolerance == Precision::Infinite())
{
if (!myIsInitS1 || !myIsInitS2 || myProxValTool.IsDone())
{
return;
}
myProxValTool.LoadTriangleSets (myElementSet1,
myElementSet2);
myProxValTool.LoadShapeLists (myShapeList1,
myShapeList2);
myProxValTool.Perform (myTolerance);
myProxValTool.ProximityPoints(myProxPoint1, myProxPoint2);
myProxValTool.ProximityPointsStatus (myProxPntStatus1, myProxPntStatus2);
}
else
{
if (!myIsInitS1 || !myIsInitS2 || myOverlapTool.IsDone())
{
return;
@@ -145,5 +97,4 @@ void BRepExtrema_ShapeProximity::Perform()
myElementSet2);
myOverlapTool.Perform (myTolerance);
}
}

View File

@@ -16,48 +16,31 @@
#ifndef _BRepExtrema_ShapeProximity_HeaderFile
#define _BRepExtrema_ShapeProximity_HeaderFile
#include <NCollection_DataMap.hxx>
#include <Precision.hxx>
#include <TColStd_PackedMapOfInteger.hxx>
#include <BRepExtrema_ProximityValueTool.hxx>
#include <BRepExtrema_TriangleSet.hxx>
#include <BRepExtrema_OverlapTool.hxx>
//! @brief Tool class for shape proximity detection.
//!
//! First approach:
//! Tool class for shape proximity detection.
//! For two given shapes and given tolerance (offset from the mesh) the algorithm allows
//! to determine whether or not they are overlapped. The algorithm input consists of any
//! shapes which can be decomposed into individual faces (used as basic shape elements).
//! High performance is achieved through the use of existing triangulation of faces. So
//! poly triangulation (with the desired deflection) should already be built. Note that
//! solution is approximate (and corresponds to the deflection used for triangulation).
//!
//! The algorithm can be run in two modes. If tolerance is set to zero, the algorithm
//! will detect only intersecting faces (containing triangles with common points). If
//! tolerance is set to positive value, the algorithm will also detect faces located
//! on distance less than the given tolerance from each other.
//!
//! Second approach:
//! Compute the proximity value between two shapes if the tolerance is not defined (Precision::Infinite()).
//! In this case the proximity value is a minimal thickness of a layer containing both shapes.
//!
//! For the both approaches the high performance is achieved through the use of existing
//! triangulation of faces. So, poly triangulation (with the desired deflection) should already
//! be built. Note that solution is approximate (and corresponds to the deflection used for
//! triangulation).
class BRepExtrema_ShapeProximity
{
public:
typedef typename BRepExtrema_ProximityValueTool::ProxPnt_Status ProxPnt_Status;
public:
//! Creates empty proximity tool.
Standard_EXPORT BRepExtrema_ShapeProximity (const Standard_Real theTolerance = Precision::Infinite());
Standard_EXPORT BRepExtrema_ShapeProximity (const Standard_Real theTolerance = 0.0);
//! Creates proximity tool for the given two shapes.
Standard_EXPORT BRepExtrema_ShapeProximity (const TopoDS_Shape& theShape1,
const TopoDS_Shape& theShape2,
const Standard_Real theTolerance = Precision::Infinite());
const Standard_Real theTolerance = 0.0);
public:
@@ -73,33 +56,19 @@ public:
myTolerance = theTolerance;
}
//! Returns proximity value calculated for the whole input shapes.
Standard_Real Proximity() const
{
return Tolerance();
}
//! Loads 1st shape into proximity tool.
Standard_EXPORT Standard_Boolean LoadShape1 (const TopoDS_Shape& theShape1);
//! Loads 2nd shape into proximity tool.
Standard_EXPORT Standard_Boolean LoadShape2 (const TopoDS_Shape& theShape2);
//! Set number of sample points on the 1st shape used to compute the proximity value.
//! In case of 0, all triangulation nodes will be used.
void SetNbSamples1(const Standard_Integer theNbSamples) { myNbSamples1 = theNbSamples; }
//! Set number of sample points on the 2nd shape used to compute the proximity value.
//! In case of 0, all triangulation nodes will be used.
void SetNbSamples2(const Standard_Integer theNbSamples) { myNbSamples2 = theNbSamples; }
//! Performs search of overlapped faces.
Standard_EXPORT void Perform();
//! True if the search is completed.
Standard_Boolean IsDone() const
{
return myOverlapTool.IsDone() || myProxValTool.IsDone();
return myOverlapTool.IsDone();
}
//! Returns set of IDs of overlapped faces of 1st shape (started from 0).
@@ -115,15 +84,15 @@ public:
}
//! Returns sub-shape from 1st shape with the given index (started from 0).
const TopoDS_Shape& GetSubShape1 (const Standard_Integer theID) const
const TopoDS_Face& GetSubShape1 (const Standard_Integer theID) const
{
return myShapeList1.Value (theID);
return myFaceList1.Value (theID);
}
//! Returns sub-shape from 1st shape with the given index (started from 0).
const TopoDS_Shape& GetSubShape2 (const Standard_Integer theID) const
const TopoDS_Face& GetSubShape2 (const Standard_Integer theID) const
{
return myShapeList2.Value (theID);
return myFaceList2.Value (theID);
}
//! Returns set of all the face triangles of the 1st shape.
@@ -138,34 +107,6 @@ public:
return myElementSet2;
}
//! Returns the point on the 1st shape, which could be used as a reference point
//! for the value of the proximity.
const gp_Pnt& ProximityPoint1() const
{
return myProxPoint1;
}
//! Returns the point on the 2nd shape, which could be used as a reference point
//! for the value of the proximity.
const gp_Pnt& ProximityPoint2() const
{
return myProxPoint2;
}
//! Returns the status of point on the 1st shape, which could be used as a reference point
//! for the value of the proximity.
const ProxPnt_Status& ProxPntStatus1() const
{
return myProxPntStatus1;
}
//! Returns the status of point on the 2nd shape, which could be used as a reference point
//! for the value of the proximity.
const ProxPnt_Status& ProxPntStatus2() const
{
return myProxPntStatus2;
}
private:
//! Maximum overlapping distance.
@@ -176,39 +117,19 @@ private:
//! Is the 2nd shape initialized?
Standard_Boolean myIsInitS2;
//! List of subshapes of the 1st shape.
BRepExtrema_ShapeList myShapeList1;
//! List of subshapes of the 2nd shape.
BRepExtrema_ShapeList myShapeList2;
//! List of faces of the 1st shape.
BRepExtrema_ShapeList myFaceList1;
//! List of faces of the 2nd shape.
BRepExtrema_ShapeList myFaceList2;
//! Set of all the face triangles of the 1st shape.
Handle(BRepExtrema_TriangleSet) myElementSet1;
//! Set of all the face triangles of the 2nd shape.
Handle(BRepExtrema_TriangleSet) myElementSet2;
//! Number of sample points on the 1st shape used to compute the proximity value
//! (if zero (default), all triangulation nodes will be used).
Standard_Integer myNbSamples1;
//! Number of sample points on the 2nd shape used to compute the proximity value
//! (if zero (default), all triangulation nodes will be used).
Standard_Integer myNbSamples2;
//! Reference point of the proximity value on the 1st shape.
gp_Pnt myProxPoint1;
//! Reference point of the proximity value on the 2st shape.
gp_Pnt myProxPoint2;
//! Status of reference points of the proximity value.
ProxPnt_Status myProxPntStatus1, myProxPntStatus2;
//! Overlap tool used for intersection/overlap test.
BRepExtrema_OverlapTool myOverlapTool;
//! Shape-shape proximity tool used for computation of
//! the minimal diameter of a tube containing both edges or
//! the minimal thickness of a shell containing both faces.
BRepExtrema_ProximityValueTool myProxValTool;
};
#endif // _BRepExtrema_ShapeProximity_HeaderFile

View File

@@ -18,7 +18,6 @@
#include <BRep_Tool.hxx>
#include <BVH_LinearBuilder.hxx>
#include <Poly_Triangulation.hxx>
#include <TopoDS.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BRepExtrema_TriangleSet, BVH_PrimitiveSet3d)
@@ -115,65 +114,17 @@ void BRepExtrema_TriangleSet::Swap (const Standard_Integer theIndex1, const Stan
{
std::swap (myTriangles[theIndex1],
myTriangles[theIndex2]);
std::swap (myTrgIdxMap (theIndex1),
myTrgIdxMap (theIndex2));
}
//=======================================================================
//function : GetFaceID
//purpose : Returns face ID of the given vertex
//purpose : Returns face ID of the given triangle
//=======================================================================
Standard_Integer BRepExtrema_TriangleSet::GetFaceID (const Standard_Integer theIndex) const
{
return myTriangles[theIndex].w();
}
//=======================================================================
//function : GetShapeIDOfVtx
//purpose : Returns shape ID of the given vertex index
//=======================================================================
Standard_Integer BRepExtrema_TriangleSet::GetShapeIDOfVtx (const Standard_Integer theIndex) const
{
return myShapeIdxOfVtxVec.Value (theIndex);
}
//=======================================================================
//function : GetVtxIdxInShape
//purpose : Returns vertex index in tringulation of the shape, which vertex belongs,
// with the given vtx ID in whole set
//=======================================================================
Standard_Integer BRepExtrema_TriangleSet::GetVtxIdxInShape (const Standard_Integer theIndex) const
{
Standard_Integer aShID = myShapeIdxOfVtxVec.Value (theIndex);
Standard_Integer aNumVertices = 0;
for (Standard_Integer aSIdx = 0; aSIdx < aShID; aSIdx++)
{
aNumVertices += myNumVtxInShapeVec.Value (aSIdx);
}
return theIndex - aNumVertices;
}
//=======================================================================
//function : GetTrgIdxInShape
//purpose : Returns triangle index (before swapping) in tringulation of the shape, which triangle belongs,
// with the given trg ID in whole set (after swapping)
//=======================================================================
Standard_Integer BRepExtrema_TriangleSet::GetTrgIdxInShape (const Standard_Integer theIndex) const
{
Standard_Integer aShID = GetFaceID (theIndex);
Standard_Integer aNumTriangles = 0;
for (Standard_Integer aSIdx = 0; aSIdx < aShID; aSIdx++)
{
aNumTriangles += myNumTrgInShapeVec.Value (aSIdx);
}
return myTrgIdxMap (theIndex) - aNumTriangles;
}
//=======================================================================
//function : GetVertices
//purpose : Returns vertices of the given triangle
@@ -190,21 +141,6 @@ void BRepExtrema_TriangleSet::GetVertices (const Standard_Integer theIndex,
theVertex3 = myVertexArray[aTriangle.z()];
}
//=======================================================================
//function : GetVertices
//purpose : Returns vertices of the given triangle
//=======================================================================
void BRepExtrema_TriangleSet::GetVtxIndices (const Standard_Integer theIndex,
NCollection_Array1<Standard_Integer>& theVtxIndices) const
{
BVH_Vec4i aTriangle = myTriangles[theIndex];
theVtxIndices = NCollection_Array1<Standard_Integer> (0, 2);
theVtxIndices.SetValue (0, aTriangle.x());
theVtxIndices.SetValue (1, aTriangle.y());
theVtxIndices.SetValue (2, aTriangle.z());
}
//=======================================================================
//function : Clear
//purpose : Clears triangle set data
@@ -222,26 +158,41 @@ void BRepExtrema_TriangleSet::Clear()
//function : Init
//purpose : Initializes triangle set
//=======================================================================
Standard_Boolean BRepExtrema_TriangleSet::Init (const BRepExtrema_ShapeList& theShapes)
Standard_Boolean BRepExtrema_TriangleSet::Init (const BRepExtrema_ShapeList& theFaces)
{
Clear();
Standard_Boolean isOK = Standard_True;
for (Standard_Integer aShapeIdx = 0; aShapeIdx < theShapes.Size() && isOK; ++aShapeIdx)
for (Standard_Integer aFaceIdx = 0; aFaceIdx < theFaces.Size(); ++aFaceIdx)
{
if (theShapes (aShapeIdx).ShapeType() == TopAbs_FACE)
isOK = initFace (TopoDS::Face (theShapes(aShapeIdx)), aShapeIdx);
else if (theShapes (aShapeIdx).ShapeType() == TopAbs_EDGE)
isOK = initEdge (TopoDS::Edge (theShapes(aShapeIdx)), aShapeIdx);
TopLoc_Location aLocation;
Handle(Poly_Triangulation) aTriangulation =
BRep_Tool::Triangulation (theFaces (aFaceIdx), aLocation);
if (aTriangulation.IsNull())
{
return Standard_False;
}
Standard_Integer aNumTrg = static_cast<Standard_Integer> (myTriangles.size());
myTrgIdxMap.Clear();
myTrgIdxMap.ReSize (aNumTrg);
const Standard_Integer aVertOffset =
static_cast<Standard_Integer> (myVertexArray.size()) - 1;
for (Standard_Integer aTrgIdx = 0; aTrgIdx < aNumTrg; ++aTrgIdx)
for (Standard_Integer aVertIdx = 1; aVertIdx <= aTriangulation->NbNodes(); ++aVertIdx)
{
myTrgIdxMap.Bind (aTrgIdx, aTrgIdx);
gp_Pnt aVertex = aTriangulation->Node (aVertIdx);
aVertex.Transform (aLocation.Transformation());
myVertexArray.push_back (BVH_Vec3d (aVertex.X(), aVertex.Y(), aVertex.Z()));
}
for (Standard_Integer aTriIdx = 1; aTriIdx <= aTriangulation->NbTriangles(); ++aTriIdx)
{
Standard_Integer aVertex1, aVertex2, aVertex3;
aTriangulation->Triangle (aTriIdx).Get (aVertex1, aVertex2, aVertex3);
myTriangles.push_back (BVH_Vec4i (aVertex1 + aVertOffset,
aVertex2 + aVertOffset,
aVertex3 + aVertOffset,
aFaceIdx));
}
}
MarkDirty(); // needs BVH rebuilding
@@ -252,95 +203,3 @@ Standard_Boolean BRepExtrema_TriangleSet::Init (const BRepExtrema_ShapeList& the
return Standard_True;
}
//=======================================================================
//function : initFace
//purpose : Initializes triangle set
//=======================================================================
Standard_Boolean BRepExtrema_TriangleSet::initFace (const TopoDS_Face& theFace, const Standard_Integer theIndex)
{
TopLoc_Location aLocation;
Handle(Poly_Triangulation) aTriangulation = BRep_Tool::Triangulation (theFace, aLocation);
if (aTriangulation.IsNull())
{
return Standard_False;
}
const Standard_Integer aVertOffset =
static_cast<Standard_Integer> (myVertexArray.size()) - 1;
initNodes (aTriangulation->MapNodeArray()->ChangeArray1(), aLocation.Transformation(), theIndex);
for (Standard_Integer aTriIdx = 1; aTriIdx <= aTriangulation->NbTriangles(); ++aTriIdx)
{
Standard_Integer aVertex1;
Standard_Integer aVertex2;
Standard_Integer aVertex3;
aTriangulation->Triangle (aTriIdx).Get (aVertex1,
aVertex2,
aVertex3);
myTriangles.push_back (BVH_Vec4i (aVertex1 + aVertOffset,
aVertex2 + aVertOffset,
aVertex3 + aVertOffset,
theIndex));
}
myNumTrgInShapeVec.SetValue (theIndex, aTriangulation->NbTriangles());
return Standard_True;
}
//=======================================================================
//function : initEdge
//purpose : Initializes triangle set
//=======================================================================
Standard_Boolean BRepExtrema_TriangleSet::initEdge (const TopoDS_Edge& theEdge, const Standard_Integer theIndex)
{
TopLoc_Location aLocation;
Handle(Poly_Polygon3D) aPolygon = BRep_Tool::Polygon3D (theEdge, aLocation);
if (aPolygon.IsNull())
{
return Standard_False;
}
const Standard_Integer aVertOffset =
static_cast<Standard_Integer> (myVertexArray.size()) - 1;
initNodes (aPolygon->Nodes(), aLocation.Transformation(), theIndex);
for (Standard_Integer aVertIdx = 1; aVertIdx < aPolygon->NbNodes(); ++aVertIdx)
{
// segment as degenerate triangle
myTriangles.push_back (BVH_Vec4i (aVertIdx + aVertOffset,
aVertIdx + aVertOffset + 1,
aVertIdx + aVertOffset + 1,
theIndex));
}
return Standard_True;
}
//=======================================================================
//function : initNodes
//purpose : Initializes nodes
//=======================================================================
void BRepExtrema_TriangleSet::initNodes (const TColgp_Array1OfPnt& theNodes,
const gp_Trsf& theTrsf,
const Standard_Integer theIndex)
{
for (Standard_Integer aVertIdx = 1; aVertIdx <= theNodes.Size(); ++aVertIdx)
{
gp_Pnt aVertex = theNodes.Value (aVertIdx);
aVertex.Transform (theTrsf);
myVertexArray.push_back (BVH_Vec3d (aVertex.X(),
aVertex.Y(),
aVertex.Z()));
myShapeIdxOfVtxVec.Append (theIndex);
}
myNumVtxInShapeVec.SetValue (theIndex, theNodes.Size());
}

View File

@@ -16,14 +16,11 @@
#ifndef _BRepExtrema_TriangleSet_HeaderFile
#define _BRepExtrema_TriangleSet_HeaderFile
#include <BVH_PrimitiveSet3d.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <TColStd_DataMapOfIntegerInteger.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <BVH_PrimitiveSet3d.hxx>
//! List of shapes and their IDs for collision detection.
typedef NCollection_Vector<TopoDS_Shape> BRepExtrema_ShapeList;
typedef NCollection_Vector<TopoDS_Face> BRepExtrema_ShapeList;
//! Triangle set corresponding to specific face.
class BRepExtrema_TriangleSet : public BVH_PrimitiveSet3d
@@ -62,10 +59,7 @@ public:
Standard_EXPORT void Clear();
//! Initializes triangle set.
Standard_EXPORT Standard_Boolean Init (const BRepExtrema_ShapeList& theShapes);
//! Returns all vertices.
Standard_EXPORT const BVH_Array3d& GetVertices() const { return myVertexArray; }
Standard_EXPORT Standard_Boolean Init (const BRepExtrema_ShapeList& theFaces);
//! Returns vertices of the given triangle.
Standard_EXPORT void GetVertices (const Standard_Integer theIndex,
@@ -73,37 +67,9 @@ public:
BVH_Vec3d& theVertex2,
BVH_Vec3d& theVertex3) const;
//! Returns vertex indices of the given triangle.
Standard_EXPORT void GetVtxIndices (const Standard_Integer theIndex,
NCollection_Array1<Standard_Integer>& theVtxIndices) const;
//! Returns face ID of the given triangle.
Standard_EXPORT Standard_Integer GetFaceID (const Standard_Integer theIndex) const;
//! Returns shape ID of the given vertex index.
Standard_EXPORT Standard_Integer GetShapeIDOfVtx (const Standard_Integer theIndex) const;
//! Returns vertex index in tringulation of the shape, which vertex belongs,
//! with the given vtx ID in whole set.
Standard_EXPORT Standard_Integer GetVtxIdxInShape (const Standard_Integer theIndex) const;
//! Returns triangle index (before swapping) in tringulation of the shape, which triangle belongs,
//! with the given trg ID in whole set (after swapping).
Standard_EXPORT Standard_Integer GetTrgIdxInShape (const Standard_Integer theIndex) const;
private:
//! Initializes triangle set from the face
Standard_Boolean initFace (const TopoDS_Face& theFace, const Standard_Integer theIndex);
//! Initializes polygon from the edge
Standard_Boolean initEdge (const TopoDS_Edge& theEdge, const Standard_Integer theIndex);
//! Initializes nodes
void initNodes (const TColgp_Array1OfPnt& theNodes,
const gp_Trsf& theTrsf,
const Standard_Integer theIndex);
protected:
//! Array of vertex indices.
@@ -112,19 +78,6 @@ protected:
//! Array of vertex coordinates.
BVH_Array3d myVertexArray;
//! Vector of shapes' indices where index of item corresponds to index of vertex,
//! belonging to this shape.
NCollection_Vector<Standard_Integer> myShapeIdxOfVtxVec;
//! Vector of vertexes' number belonging to shape which index corresponds item's index.
NCollection_Vector<Standard_Integer> myNumVtxInShapeVec;
//! Vector of triangles' number belonging to shape which index corresponds item's index.
NCollection_Vector<Standard_Integer> myNumTrgInShapeVec;
//! Map of triangles' indices after (key) and before (value) swapping.
TColStd_DataMapOfIntegerInteger myTrgIdxMap;
public:
DEFINE_STANDARD_RTTIEXT(BRepExtrema_TriangleSet, BVH_PrimitiveSet3d)

View File

@@ -18,10 +18,6 @@ BRepExtrema_OverlapTool.cxx
BRepExtrema_OverlapTool.hxx
BRepExtrema_Poly.cxx
BRepExtrema_Poly.hxx
BRepExtrema_ProximityValueTool.cxx
BRepExtrema_ProximityValueTool.hxx
BRepExtrema_ProximityDistTool.cxx
BRepExtrema_ProximityDistTool.hxx
BRepExtrema_SelfIntersection.cxx
BRepExtrema_SelfIntersection.hxx
BRepExtrema_SeqOfSolution.hxx

View File

@@ -506,14 +506,7 @@ void BRepLib_FindSurface::Init(const TopoDS_Shape& S,
if (!isSolved)
return;
//Removing very small values
Standard_Real aMaxV = Max(Abs(aVec(1)), Max(Abs(aVec(2)), Abs(aVec(3))));
Standard_Real eps = Epsilon(aMaxV);
for (i = 1; i <= 3; ++i)
{
if (Abs(aVec(i)) <= eps)
aVec(i) = 0.;
}
gp_Vec aN (aVec (1), aVec (2), aVec (3));
Handle(Geom_Plane) aPlane = new Geom_Plane (aBaryCenter, aN);
myTolReached = Controle (aPoints, aPlane);

View File

@@ -41,13 +41,10 @@ std::pair<Standard_Real, Standard_Real> BRepMesh_ConeRangeSplitter::GetSplitStep
const Standard_Real aDiffU = aRangeU.second - aRangeU.first;
const Standard_Real aDiffV = aRangeV.second - aRangeV.first;
const Standard_Real aScale = (Du * aRadius);
const Standard_Real aRatio = Max(1., Log(aDiffV / aScale));
const Standard_Integer nbU = (Standard_Integer)(aDiffU / Du);
const Standard_Integer nbV = (Standard_Integer)(aDiffV / aScale / aRatio);
Standard_Integer nbU = (Standard_Integer) (aDiffU / Du);
Standard_Integer nbV = (Standard_Integer) (nbU * (aDiffV) / (aDiffU * aRadius));
Du = aDiffU / (nbU + 1);
Dv = aDiffV / (nbV + static_cast<Standard_Integer>(aRatio));
Dv = aDiffV / (nbV + 1);
theStepsNb.first = nbU;
theStepsNb.second = nbV;

View File

@@ -1,45 +0,0 @@
// Created on: 2022-09-07
// Copyright (c) 2022 OPEN CASCADE SAS
// Created by: Oleg AGASHIN
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BRepMesh_ExtrusionRangeSplitter.hxx>
//=======================================================================
// Function: getUndefinedIntervalNb
// Purpose :
//=======================================================================
Standard_Integer BRepMesh_ExtrusionRangeSplitter::getUndefinedIntervalNb(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean /*isU*/,
const GeomAbs_Shape theContinuity) const
{
// Here we need just a regular grid along dimension with no
// geometrical data regarding intervals like extrusion surface.
const Handle(Adaptor3d_Curve) aCurve = theSurface->BasisCurve();
Standard_Integer aIntervalsNb = aCurve->NbIntervals(theContinuity);
if (aIntervalsNb == 1)
{
const GeomAbs_CurveType aCurveType = aCurve->GetType();
const Standard_Boolean isBSplineCurve =
aCurveType == GeomAbs_BezierCurve ||
aCurveType == GeomAbs_BSplineCurve;
if (isBSplineCurve)
{
aIntervalsNb = aCurve->NbPoles() - 1;
}
}
return aIntervalsNb;
}

View File

@@ -1,45 +0,0 @@
// Created on: 2022-09-07
// Copyright (c) 2022 OPEN CASCADE SAS
// Created by: Oleg AGASHIN
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BRepMesh_ExtrusionRangeSplitter_HeaderFile
#define _BRepMesh_ExtrusionRangeSplitter_HeaderFile
#include <BRepMesh_NURBSRangeSplitter.hxx>
//! Auxiliary class analysing extrusion surface in order to generate internal nodes.
class BRepMesh_ExtrusionRangeSplitter : public BRepMesh_NURBSRangeSplitter
{
public:
//! Constructor.
BRepMesh_ExtrusionRangeSplitter()
{
}
//! Destructor.
virtual ~BRepMesh_ExtrusionRangeSplitter()
{
}
protected:
//! Returns number of intervals computed using available geometrical parameters.
Standard_EXPORT virtual Standard_Integer getUndefinedIntervalNb(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean isU,
const GeomAbs_Shape theContinuity) const Standard_OVERRIDE;
};
#endif

View File

@@ -21,8 +21,6 @@
#include <BRepMesh_DelaunayBaseMeshAlgo.hxx>
#include <BRepMesh_DelaunayDeflectionControlMeshAlgo.hxx>
#include <BRepMesh_BoundaryParamsRangeSplitter.hxx>
#include <BRepMesh_ExtrusionRangeSplitter.hxx>
#include <BRepMesh_UndefinedRangeSplitter.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BRepMesh_MeshAlgoFactory, IMeshTools_MeshAlgoFactory)
@@ -100,18 +98,7 @@ Handle(IMeshTools_MeshAlgo) BRepMesh_MeshAlgoFactory::GetAlgo(
return new DeflectionControlMeshAlgo<BRepMesh_BoundaryParamsRangeSplitter>::Type;
break;
case GeomAbs_SurfaceOfExtrusion:
return new DeflectionControlMeshAlgo<BRepMesh_ExtrusionRangeSplitter>::Type;
break;
case GeomAbs_BezierSurface:
case GeomAbs_BSplineSurface:
return new DeflectionControlMeshAlgo<BRepMesh_NURBSRangeSplitter>::Type;
break;
case GeomAbs_OffsetSurface:
case GeomAbs_OtherSurface:
default:
return new DeflectionControlMeshAlgo<BRepMesh_UndefinedRangeSplitter>::Type;
return new DeflectionControlMeshAlgo<BRepMesh_NURBSRangeSplitter>::Type;
}
}

View File

@@ -392,73 +392,27 @@ Handle(IMeshData::ListOfPnt2d) BRepMesh_NURBSRangeSplitter::GenerateSurfaceNodes
return aNodes;
}
//=======================================================================
// Function: getUndefinedIntervalNb
// Purpose :
//=======================================================================
Standard_Integer BRepMesh_NURBSRangeSplitter::getUndefinedIntervalNb(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean isU,
const GeomAbs_Shape /*theContinuity*/) const
{
return (isU ? theSurface->NbUPoles() : theSurface->NbVPoles()) - 1;
}
//=======================================================================
// Function: getUndefinedInterval
// Purpose :
//=======================================================================
void BRepMesh_NURBSRangeSplitter::getUndefinedInterval(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean isU,
const GeomAbs_Shape theContinuity,
const std::pair<Standard_Real, Standard_Real>& theRange,
TColStd_Array1OfReal& theIntervals) const
{
Standard_Integer aIntervalsNb = isU ?
theSurface->NbUIntervals(theContinuity) :
theSurface->NbVIntervals(theContinuity);
if (aIntervalsNb == 1)
{
aIntervalsNb = getUndefinedIntervalNb(theSurface, isU, theContinuity);
if (aIntervalsNb > 1)
{
theIntervals = TColStd_Array1OfReal(1, aIntervalsNb - 1);
const Standard_Real aDiff = (theRange.second - theRange.first) / aIntervalsNb;
for (Standard_Integer i = theIntervals.Lower(); i <= theIntervals.Upper(); ++i)
{
theIntervals.SetValue(i, theRange.first + i * aDiff);
}
}
}
if (theIntervals.IsEmpty())
{
theIntervals = TColStd_Array1OfReal(1, aIntervalsNb + 1);
if (isU)
{
theSurface->UIntervals(theIntervals, theContinuity);
}
else
{
theSurface->VIntervals(theIntervals, theContinuity);
}
}
}
//=======================================================================
// Function: initParameters
// Purpose :
//=======================================================================
Standard_Boolean BRepMesh_NURBSRangeSplitter::initParameters() const
{
const GeomAbs_Shape aContinuity = GeomAbs_CN;
const Handle(BRepAdaptor_Surface)& aSurface = GetSurface();
TColStd_Array1OfReal aIntervals[2];
getUndefinedInterval(aSurface, Standard_True, aContinuity, GetRangeU(), aIntervals[0]);
getUndefinedInterval(aSurface, Standard_False, aContinuity, GetRangeV(), aIntervals[1]);
const GeomAbs_Shape aContinuity = GeomAbs_CN;
const std::pair<Standard_Integer, Standard_Integer> aIntervalsNb(
aSurface->NbUIntervals(aContinuity),
aSurface->NbVIntervals(aContinuity)
);
TColStd_Array1OfReal aIntervals[2] = {
TColStd_Array1OfReal(1, aIntervalsNb.first + 1),
TColStd_Array1OfReal(1, aIntervalsNb.second + 1)
};
aSurface->UIntervals(aIntervals[0], aContinuity);
aSurface->VIntervals(aIntervals[1], aContinuity);
const Standard_Boolean isSplitIntervals = toSplitIntervals (aSurface->Surface().Surface(), aIntervals);
@@ -553,17 +507,12 @@ Handle(IMeshData::SequenceOfReal) BRepMesh_NURBSRangeSplitter::computeGrainAndFi
aMinDiff /= theDelta;
}
const Handle(BRepAdaptor_Surface)& aSurface = GetSurface();
const Standard_Real aMinSize2d = Max(
aSurface->UResolution(theParameters.MinSize),
aSurface->UResolution(theParameters.MinSize));
aMinDiff = Max(aMinSize2d, aMinDiff);
aMinDiff = Max(theParameters.MinSize, aMinDiff);
const Standard_Real aDiffMaxLim = 0.1 * theRangeDiff;
const Standard_Real aDiffMinLim = Max(0.005 * theRangeDiff,
2. * theTol2d);
const Standard_Real aDiff = Max(aMinSize2d,
const Standard_Real aDiff = Max(theParameters.MinSize,
Min(aDiffMaxLim, aDiffMinLim));
return filterParameters(theSourceParams, aMinDiff, aDiff, theAllocator);
}

View File

@@ -49,21 +49,7 @@ protected:
//! Initializes U and V parameters lists using CN continuity intervals.
Standard_EXPORT virtual Standard_Boolean initParameters() const;
//! Returns number of intervals computed using available geometrical parameters.
Standard_EXPORT virtual Standard_Integer getUndefinedIntervalNb(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean isU,
const GeomAbs_Shape theContinuity) const;
private:
//! Tries to compute intervals even for cases with no intervals
//! at all using available geometrical parameters.
void getUndefinedInterval(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean isU,
const GeomAbs_Shape theContinuity,
const std::pair<Standard_Real, Standard_Real>& theRange,
TColStd_Array1OfReal& theIntervals) const;
//! Computes parameters of filter and applies it to the source parameters.
Handle(IMeshData::SequenceOfReal) computeGrainAndFilterParameters(

View File

@@ -1,28 +0,0 @@
// Created on: 2022-09-07
// Copyright (c) 2022 OPEN CASCADE SAS
// Created by: Oleg AGASHIN
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <BRepMesh_UndefinedRangeSplitter.hxx>
//=======================================================================
// Function: getUndefinedIntervalNb
// Purpose :
//=======================================================================
Standard_Integer BRepMesh_UndefinedRangeSplitter::getUndefinedIntervalNb(
const Handle(Adaptor3d_Surface)& /*theSurface*/,
const Standard_Boolean /*isU*/,
const GeomAbs_Shape /*theContinuity*/) const
{
return 1;
}

View File

@@ -1,46 +0,0 @@
// Created on: 2022-09-07
// Copyright (c) 2022 OPEN CASCADE SAS
// Created by: Oleg AGASHIN
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _BRepMesh_UndefinedRangeSplitter_HeaderFile
#define _BRepMesh_UndefinedRangeSplitter_HeaderFile
#include <BRepMesh_NURBSRangeSplitter.hxx>
//! Auxiliary class provides safe value for surfaces that looks like NURBS
//! but has no poles or other characteristics.
class BRepMesh_UndefinedRangeSplitter : public BRepMesh_NURBSRangeSplitter
{
public:
//! Constructor.
BRepMesh_UndefinedRangeSplitter()
{
}
//! Destructor.
virtual ~BRepMesh_UndefinedRangeSplitter()
{
}
protected:
//! Returns number of intervals computed using available geometrical parameters.
Standard_EXPORT virtual Standard_Integer getUndefinedIntervalNb(
const Handle(Adaptor3d_Surface)& theSurface,
const Standard_Boolean isU,
const GeomAbs_Shape theContinuity) const Standard_OVERRIDE;
};
#endif

View File

@@ -40,8 +40,6 @@ BRepMesh_EdgeDiscret.hxx
BRepMesh_EdgeParameterProvider.hxx
BRepMesh_EdgeTessellationExtractor.cxx
BRepMesh_EdgeTessellationExtractor.hxx
BRepMesh_ExtrusionRangeSplitter.cxx
BRepMesh_ExtrusionRangeSplitter.hxx
BRepMesh_FaceChecker.cxx
BRepMesh_FaceChecker.hxx
BRepMesh_FaceDiscret.cxx
@@ -82,8 +80,6 @@ BRepMesh_SphereRangeSplitter.hxx
BRepMesh_TorusRangeSplitter.cxx
BRepMesh_TorusRangeSplitter.hxx
BRepMesh_Triangle.hxx
BRepMesh_UndefinedRangeSplitter.cxx
BRepMesh_UndefinedRangeSplitter.hxx
BRepMesh_UVParamRangeSplitter.hxx
BRepMesh_Vertex.hxx
BRepMesh_VertexInspector.hxx

View File

@@ -17,12 +17,9 @@
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRepAlgo.hxx>
#include <BRepAlgo_FaceRestrictor.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepLib.hxx>
#include <BRepOffsetAPI_MakeOffset.hxx>
#include <BRepTopAdaptor_FClass2d.hxx>
#include <Extrema_ExtPS.hxx>
@@ -44,50 +41,6 @@
static Standard_Boolean AffichSpine = Standard_False;
#endif
static Standard_Boolean NeedsConvertion (const TopoDS_Wire& theWire)
{
TopoDS_Iterator anIter (theWire);
for (; anIter.More(); anIter.Next())
{
const TopoDS_Edge& anEdge = TopoDS::Edge (anIter.Value());
BRepAdaptor_Curve aBAcurve (anEdge);
GeomAbs_CurveType aType = aBAcurve.GetType();
if (aType != GeomAbs_Line &&
aType != GeomAbs_Circle)
return Standard_True;
}
return Standard_False;
}
TopoDS_Face BRepOffsetAPI_MakeOffset::ConvertFace (const TopoDS_Face& theFace,
const Standard_Real theAngleTolerance)
{
TopAbs_Orientation anOr = theFace.Orientation();
TopoDS_Face aFace = theFace;
aFace.Orientation (TopAbs_FORWARD);
TopoDS_Face aNewFace = TopoDS::Face (aFace.EmptyCopied());
BRep_Builder aBB;
TopoDS_Iterator anIter (aFace);
for (; anIter.More(); anIter.Next())
{
TopoDS_Wire aWire = TopoDS::Wire (anIter.Value());
if (NeedsConvertion (aWire))
{
TopAbs_Orientation anOrOfWire = aWire.Orientation();
aWire.Orientation (TopAbs_FORWARD);
aWire = BRepAlgo::ConvertWire (aWire, theAngleTolerance, aFace);
BRepLib::BuildCurves3d (aWire);
aWire.Orientation (anOrOfWire);
}
aBB.Add (aNewFace, aWire);
}
aNewFace.Orientation (anOr);
return aNewFace;
}
//=======================================================================
//function : BRepOffsetAPI_MakeOffset
//purpose :
@@ -96,8 +49,7 @@ TopoDS_Face BRepOffsetAPI_MakeOffset::ConvertFace (const TopoDS_Face& theFace,
BRepOffsetAPI_MakeOffset::BRepOffsetAPI_MakeOffset()
: myIsInitialized( Standard_False),
myJoin(GeomAbs_Arc),
myIsOpenResult(Standard_False),
myIsToApprox(Standard_False)
myIsOpenResult(Standard_False)
{
}
@@ -128,7 +80,6 @@ void BRepOffsetAPI_MakeOffset::Init(const TopoDS_Face& Spine,
myIsInitialized = Standard_True;
myJoin = Join;
myIsOpenResult = IsOpenResult;
myIsToApprox = Standard_False;
TopExp_Explorer exp;
for (exp.Init(myFace,TopAbs_WIRE); exp.More();exp.Next()) {
myWires.Append(exp.Current());
@@ -148,7 +99,6 @@ BRepOffsetAPI_MakeOffset::BRepOffsetAPI_MakeOffset(const TopoDS_Wire& Spine,
myIsInitialized = Standard_True;
myJoin = Join;
myIsOpenResult = IsOpenResult;
myIsToApprox = Standard_False;
}
//=======================================================================
@@ -163,18 +113,6 @@ void BRepOffsetAPI_MakeOffset::Init(const GeomAbs_JoinType Join,
myIsOpenResult = IsOpenResult;
}
//=======================================================================
//function : SetApprox
//purpose : Set approximation flag
// for convertion input contours into ones consisting of
// 2D circular arcs and 2D linear segments only
//=======================================================================
void BRepOffsetAPI_MakeOffset::SetApprox(const Standard_Boolean ToApprox)
{
myIsToApprox = ToApprox;
}
//=======================================================================
//function : BRepOffsetAPI_MakeOffset
//purpose :
@@ -351,46 +289,6 @@ void BRepOffsetAPI_MakeOffset::Perform(const Standard_Real Offset,
try
{
if (myIsToApprox)
{
Standard_Real aTol = 0.1;
if (myFace.IsNull())
{
TopoDS_Face aFace;
Standard_Boolean OnlyPlane = Standard_True;
TopTools_ListIteratorOfListOfShape anItl (myWires);
for (; anItl.More(); anItl.Next())
{
BRepBuilderAPI_MakeFace aFaceMaker (TopoDS::Wire(anItl.Value()), OnlyPlane);
if (aFaceMaker.Error() == BRepBuilderAPI_FaceDone)
{
aFace = aFaceMaker.Face();
break;
}
}
for (anItl.Initialize(myWires); anItl.More(); anItl.Next())
{
const TopoDS_Wire& aWire = TopoDS::Wire(anItl.Value());
if (NeedsConvertion (aWire))
{
TopoDS_Wire aNewWire = BRepAlgo::ConvertWire (aWire, aTol, aFace);
BRepLib::BuildCurves3d (aNewWire);
aNewWire.Orientation (aWire.Orientation());
anItl.ChangeValue() = aNewWire;
}
}
}
else
{
myFace = ConvertFace (myFace, aTol);
BRepLib::BuildCurves3d (myFace);
myWires.Clear();
TopoDS_Iterator anIter (myFace);
for (; anIter.More(); anIter.Next())
myWires.Append (anIter.Value());
}
}
Standard_Integer i = 1;
BRepFill_ListIteratorOfListOfOffsetWire itOW;
TopoDS_Compound Res;

View File

@@ -63,11 +63,6 @@ public:
//! Initialize the evaluation of Offsetting.
Standard_EXPORT void Init (const GeomAbs_JoinType Join = GeomAbs_Arc, const Standard_Boolean IsOpenResult = Standard_False);
//! Set approximation flag
//! for convertion input contours into ones consisting of
//! 2D circular arcs and 2D linear segments only.
Standard_EXPORT void SetApprox (const Standard_Boolean ToApprox);
//! Initializes the algorithm to construct parallels to the wire Spine.
Standard_EXPORT void AddWire (const TopoDS_Wire& Spine);
@@ -84,10 +79,7 @@ public:
//! from the shape <S>.
Standard_EXPORT virtual const TopTools_ListOfShape& Generated (const TopoDS_Shape& S) Standard_OVERRIDE;
//! Converts each wire of the face into contour consisting only of
//! arcs and segments. New 3D curves are built too.
Standard_EXPORT static TopoDS_Face ConvertFace (const TopoDS_Face& theFace,
const Standard_Real theAngleTolerance);
protected:
@@ -104,7 +96,6 @@ private:
Standard_Boolean myLastIsLeft;
GeomAbs_JoinType myJoin;
Standard_Boolean myIsOpenResult;
Standard_Boolean myIsToApprox;
TopoDS_Face myFace;
TopTools_ListOfShape myWires;
BRepFill_ListOfOffsetWire myLeft;

View File

@@ -1530,23 +1530,10 @@ Standard_Integer mkoffset(Draw_Interpretor& di,
char name[100];
BRepOffsetAPI_MakeOffset Paral;
Standard_Boolean ToApprox = Standard_False;
GeomAbs_JoinType theJoinType = GeomAbs_Arc;
Standard_Integer anIndArg = 6;
if (n >= 6)
{
if (strcmp(a[5], "-approx") == 0)
{
ToApprox = Standard_True;
anIndArg++;
}
if (n >= anIndArg && strcmp(a[anIndArg-1], "i") == 0)
if (n >= 6 && strcmp(a[5], "i") == 0)
theJoinType = GeomAbs_Intersection;
}
Paral.Init(theJoinType);
TopoDS_Shape Base = DBRep::Get(a[2],TopAbs_FACE);
if ( Base.IsNull())
@@ -1566,7 +1553,6 @@ Standard_Integer mkoffset(Draw_Interpretor& di,
Base.Orientation(TopAbs_FORWARD);
Paral.Init(TopoDS::Face(Base), theJoinType);
}
Paral.SetApprox (ToApprox);
Standard_Real U, dU;
Standard_Integer Nb;
@@ -1574,8 +1560,8 @@ Standard_Integer mkoffset(Draw_Interpretor& di,
Nb = Draw::Atoi(a[3]);
Standard_Real Alt = 0.;
if (n > anIndArg)
Alt = Draw::Atof(a[anIndArg]);
if ( n == 7)
Alt = Draw::Atof(a[6]);
Standard_Integer Compt = 1;
@@ -1612,30 +1598,16 @@ Standard_Integer openoffset(Draw_Interpretor& di,
char name[100];
BRepOffsetAPI_MakeOffset Paral;
Standard_Boolean ToApprox = Standard_False;
GeomAbs_JoinType theJoinType = GeomAbs_Arc;
Standard_Integer anIndArg = 6;
if (n >= 6)
{
if (strcmp(a[5], "-approx") == 0)
{
ToApprox = Standard_True;
anIndArg++;
}
if (n >= anIndArg && strcmp(a[anIndArg-1], "i") == 0)
if (n == 6 && strcmp(a[5], "i") == 0)
theJoinType = GeomAbs_Intersection;
}
Paral.Init(theJoinType, Standard_True);
TopoDS_Shape Base = DBRep::Get(a[2] ,TopAbs_FACE);
if ( Base.IsNull())
{
Base = DBRep::Get(a[2], TopAbs_WIRE);
if (Base.IsNull()) return 1;
Paral.Init(theJoinType, Standard_True);
Paral.AddWire(TopoDS::Wire(Base));
}
else
@@ -1643,7 +1615,6 @@ Standard_Integer openoffset(Draw_Interpretor& di,
Base.Orientation(TopAbs_FORWARD);
Paral.Init(TopoDS::Face(Base), theJoinType, Standard_True);
}
Paral.SetApprox (ToApprox);
Standard_Real U, dU;
Standard_Integer Nb;
@@ -1784,72 +1755,6 @@ Standard_Integer edgeintersector(Draw_Interpretor& di,
}
//=================================================================================
//function : arclinconvert
//purpose : Convert a single face to a face with contour made of arcs and segments
//=================================================================================
static Standard_Integer arclinconvert (Draw_Interpretor& /*dout*/, Standard_Integer n, const char** a)
{
// Check the command arguments
if (n < 3) {
std::cout<<"Error: "<<a[0]<<" - invalid number of arguments"<<std::endl;
std::cout<<"Usage: type help "<<a[0]<<std::endl;
return 1; //TCL_ERROR
}
//read shape
const TopoDS_Shape aShape = DBRep::Get(a[2]);
if (aShape.IsNull()) {
std::cout<<"Error: "<<a[2]<<" is null"<<std::endl;
return 1; //TCL_ERROR
}
TopAbs_ShapeEnum aType = aShape.ShapeType();
if (aType != TopAbs_WIRE &&
aType != TopAbs_FACE)
{
std::cout<<"Error: "<<a[2]<<" is neither wire no face"<<std::endl;
return 1; //TCL_ERROR
}
//read tolerance
Standard_Real aTol = 0.01;
if (n > 3)
aTol = Draw::Atof(a[3]);
std::cout<<"Info: tolerance is set to "<<aTol<<std::endl;
TopoDS_Shape aResult;
if (aType == TopAbs_WIRE)
{
Standard_Boolean OnlyPlane = Standard_False;
BRepBuilderAPI_MakeFace aFaceMaker (TopoDS::Wire(aShape), OnlyPlane);
if (aFaceMaker.Error() != BRepBuilderAPI_FaceDone)
{
std::cout<<"Error: failed to find a face for the wire "<<a[2]<<std::endl;
return 1; //TCL_ERROR
}
TopoDS_Face aFace = aFaceMaker.Face();
TopoDS_Iterator anIter (aFace);
TopoDS_Wire aWire = TopoDS::Wire (anIter.Value());
aResult = BRepAlgo::ConvertWire (aWire, aTol, aFace);
}
else if (aType == TopAbs_FACE)
{
TopoDS_Face aFace = TopoDS::Face(aShape);
aResult = BRepAlgo::ConvertFace (aFace, aTol);
}
if (aResult.IsNull()) {
std::cout<<"Error: could not convert "<<a[2]<<std::endl;
return 1; //TCL_ERROR
}
DBRep::Set(a[1], aResult);
return 0; //TCL_OK
}
//=======================================================================
//function : concatC0wire
//purpose :
@@ -2003,11 +1908,11 @@ void BRepTest::CurveCommands(Draw_Interpretor& theCommands)
profile2d,g);
theCommands.Add("mkoffset",
"mkoffset result face/compound of wires nboffset stepoffset [-approx] [jointype(a/i) [alt]]",__FILE__,
"mkoffset result face/compound of wires nboffset stepoffset [jointype(a/i) [alt]]",__FILE__,
mkoffset,g);
theCommands.Add("openoffset",
"openoffset result face/wire nboffset stepoffset [-approx] [jointype(a/i)]",__FILE__,
"openoffset result face/wire nboffset stepoffset [jointype(a/i)]",__FILE__,
openoffset,g);
theCommands.Add("mkedge",
@@ -2063,12 +1968,6 @@ void BRepTest::CurveCommands(Draw_Interpretor& theCommands)
"reducepcurves shape1 shape2 ...",__FILE__,
reducepcurves, g);
theCommands.Add("arclinconvert",
"arclinconvert result wire/face [tol]",
__FILE__,
arclinconvert,
g);
theCommands.Add("concatC0wire",
"concatC0wire result wire",
__FILE__,

View File

@@ -173,7 +173,7 @@ static int ShapeProximity (Draw_Interpretor& theDI, Standard_Integer theNbArgs,
{
if (theNbArgs < 3 || theNbArgs > 6)
{
Message::SendFail() << "Usage: " << theArgs[0] << " Shape1 Shape2 [-tol <value> | -value] [-profile]";
Message::SendFail() << "Usage: " << theArgs[0] << " Shape1 Shape2 [-tol <value>] [-profile]";
return 1;
}
@@ -186,11 +186,9 @@ static int ShapeProximity (Draw_Interpretor& theDI, Standard_Integer theNbArgs,
return 1;
}
BRepExtrema_ShapeProximity aTool(0.0);
BRepExtrema_ShapeProximity aTool;
Standard_Boolean aProfile = Standard_False;
Standard_Boolean isTolerance = Standard_False;
Standard_Boolean isValue = Standard_False;
for (Standard_Integer anArgIdx = 3; anArgIdx < theNbArgs; ++anArgIdx)
{
@@ -199,7 +197,6 @@ static int ShapeProximity (Draw_Interpretor& theDI, Standard_Integer theNbArgs,
if (aFlag == "-tol")
{
isTolerance = Standard_True;
if (++anArgIdx >= theNbArgs)
{
Message::SendFail() << "Error: wrong syntax at argument '" << aFlag;
@@ -217,23 +214,13 @@ static int ShapeProximity (Draw_Interpretor& theDI, Standard_Integer theNbArgs,
aTool.SetTolerance (aTolerance);
}
}
else if (aFlag == "-value")
{
isValue = Standard_True;
aTool.SetTolerance(Precision::Infinite());
}
else if (aFlag == "-profile")
if (aFlag == "-profile")
{
aProfile = Standard_True;
}
}
if (isTolerance && isValue)
{
Message::SendFail() << "Error: Proximity value could not be computed if the tolerance is set";
return 1;
}
Standard_Real aInitTime = 0.0;
Standard_Real aWorkTime = 0.0;
@@ -277,73 +264,38 @@ static int ShapeProximity (Draw_Interpretor& theDI, Standard_Integer theNbArgs,
theDI << "Executing proximity test: " << aWorkTime << "\n";
}
if (isValue)
{
theDI << "Proximity value: " << aTool.Proximity() << "\n";
// proximity points
TopoDS_Vertex aProxVtx1 = BRepLib_MakeVertex (aTool.ProximityPoint1());
TopoDS_Vertex aProxVtx2 = BRepLib_MakeVertex (aTool.ProximityPoint2());
DBRep::Set ("ProxPnt1", aProxVtx1);
DBRep::Set ("ProxPnt2", aProxVtx2);
// proximity points' status
TCollection_AsciiString ProxPntStatus1;
TCollection_AsciiString ProxPntStatus2;
switch (aTool.ProxPntStatus1())
{
case 0: ProxPntStatus1 = "Border"; break;
case 1: ProxPntStatus1 = "Middle"; break;
default: ProxPntStatus1 = "Unknown";
}
switch (aTool.ProxPntStatus2())
{
case 0: ProxPntStatus2 = "Border"; break;
case 1: ProxPntStatus2 = "Middle"; break;
default: ProxPntStatus2 = "Unknown";
}
theDI << " Status of ProxPnt1 on " << theArgs[1] << " : " << ProxPntStatus1 << "\n";
theDI << " Status of ProxPnt2 on " << theArgs[2] << " : " << ProxPntStatus2 << "\n";
}
else
{
TopoDS_Builder aCompBuilder;
TopoDS_Compound aFaceCompound1;
aCompBuilder.MakeCompound(aFaceCompound1);
aCompBuilder.MakeCompound (aFaceCompound1);
for (BRepExtrema_MapOfIntegerPackedMapOfInteger::Iterator anIt1(aTool.OverlapSubShapes1()); anIt1.More(); anIt1.Next())
for (BRepExtrema_MapOfIntegerPackedMapOfInteger::Iterator anIt1 (aTool.OverlapSubShapes1()); anIt1.More(); anIt1.Next())
{
TCollection_AsciiString aStr = TCollection_AsciiString(theArgs[1]) + "_" + (anIt1.Key() + 1);
TCollection_AsciiString aStr = TCollection_AsciiString (theArgs[1]) + "_" + (anIt1.Key() + 1);
const TopoDS_Shape& aShape = aTool.GetSubShape1(anIt1.Key());
aCompBuilder.Add(aFaceCompound1, aShape);
DBRep::Set(aStr.ToCString(), aShape);
const TopoDS_Face& aFace = aTool.GetSubShape1 (anIt1.Key());
aCompBuilder.Add (aFaceCompound1, aFace);
DBRep::Set (aStr.ToCString(), aFace);
theDI << aStr << " \n";
}
TopoDS_Compound aFaceCompound2;
aCompBuilder.MakeCompound(aFaceCompound2);
aCompBuilder.MakeCompound (aFaceCompound2);
for (BRepExtrema_MapOfIntegerPackedMapOfInteger::Iterator anIt2(aTool.OverlapSubShapes2()); anIt2.More(); anIt2.Next())
for (BRepExtrema_MapOfIntegerPackedMapOfInteger::Iterator anIt2 (aTool.OverlapSubShapes2()); anIt2.More(); anIt2.Next())
{
TCollection_AsciiString aStr = TCollection_AsciiString(theArgs[2]) + "_" + (anIt2.Key() + 1);
TCollection_AsciiString aStr = TCollection_AsciiString (theArgs[2]) + "_" + (anIt2.Key() + 1);
const TopoDS_Shape& aShape = aTool.GetSubShape2(anIt2.Key());
aCompBuilder.Add(aFaceCompound2, aShape);
DBRep::Set(aStr.ToCString(), aShape);
const TopoDS_Face& aFace = aTool.GetSubShape2 (anIt2.Key());
aCompBuilder.Add (aFaceCompound2, aFace);
DBRep::Set (aStr.ToCString(), aFace);
theDI << aStr << " \n";
}
DBRep::Set((TCollection_AsciiString(theArgs[1]) + "_" + "overlapped").ToCString(), aFaceCompound1);
DBRep::Set((TCollection_AsciiString(theArgs[2]) + "_" + "overlapped").ToCString(), aFaceCompound2);
}
DBRep::Set ((TCollection_AsciiString (theArgs[1]) + "_" + "overlapped").ToCString(), aFaceCompound1);
DBRep::Set ((TCollection_AsciiString (theArgs[2]) + "_" + "overlapped").ToCString(), aFaceCompound2);
return 0;
}
@@ -493,14 +445,12 @@ void BRepTest::ExtremaCommands (Draw_Interpretor& theCommands)
aGroup);
theCommands.Add ("proximity",
"proximity Shape1 Shape2 [-tol <value> | -value] [-profile]"
"proximity Shape1 Shape2 [-tol <value>] [-profile]"
"\n\t\t: Searches for pairs of overlapping faces of the given shapes."
"\n\t\t: The options are:"
"\n\t\t: -tol : non-negative tolerance value used for overlapping"
"\n\t\t: test (for zero tolerance, the strict intersection"
"\n\t\t: test will be performed)"
"\n\t\t: -value : compute the proximity value (minimal value which"
"\n\t\t: shows both shapes fully overlapped)"
"\n\t\t: -profile : outputs execution time for main algorithm stages",
__FILE__,
ShapeProximity,

View File

@@ -35,7 +35,6 @@
#include <Bisector_BisecAna.hxx>
#include <Precision.hxx>
#include <BRepOffsetAPI_MakeOffset.hxx>
#include <BRepMAT2d_Explorer.hxx>
#include <BRepMAT2d_BisectingLocus.hxx>
#include <BRepMAT2d_LinkTopoBilo.hxx>
@@ -45,7 +44,6 @@
#include <DBRep.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Face.hxx>
#ifdef _WIN32
Standard_IMPORT Draw_Viewer dout;
@@ -72,16 +70,7 @@ static Standard_Integer topoload (Draw_Interpretor& , Standard_Integer argc, con
if (C1.IsNull()) return 1;
TopoDS_Face aFace = TopoDS::Face(C1);
if (argc >= 3 &&
(strcmp(argv[2], "-approx") == 0))
{
Standard_Real aTol = 0.1;
aFace = BRepOffsetAPI_MakeOffset::ConvertFace (aFace, aTol);
}
anExplo.Perform (aFace);
anExplo.Perform (TopoDS::Face(C1));
return 0;
}
@@ -278,7 +267,7 @@ void DrawCurve(const Handle(Geom2d_Curve)& aCurve,
void BRepTest::MatCommands (Draw_Interpretor& theCommands)
{
theCommands.Add("topoload","load face: topoload face [-approx]",__FILE__,topoload);
theCommands.Add("topoload","load face",__FILE__,topoload);
theCommands.Add("drawcont","display current contour",__FILE__,drawcont);
theCommands.Add("mat","computes the mat: mat [a/i [o]]",__FILE__,mat);
theCommands.Add("side","side left/right",__FILE__,side);

View File

@@ -30,15 +30,6 @@ public: //! @name public types
typedef typename BVH::VectorType<T, N>::Type BVH_VecNt;
public:
enum BVH_PrjStateInTriangle
{
BVH_PrjStateInTriangle_VERTEX,
BVH_PrjStateInTriangle_EDGE,
BVH_PrjStateInTriangle_INNER
};
public: //! @name Box-Box Square distance
//! Computes Square distance between Axis aligned bounding boxes
@@ -122,14 +113,11 @@ public: //! @name Point-Box projection
public: //! @name Point-Triangle Square distance
//! Find nearest point on a triangle for the given point
static BVH_VecNt PointTriangleProjection (const BVH_VecNt& thePoint,
//! Computes square distance between point and triangle
static T PointTriangleSquareDistance (const BVH_VecNt& thePoint,
const BVH_VecNt& theNode0,
const BVH_VecNt& theNode1,
const BVH_VecNt& theNode2,
BVH_PrjStateInTriangle* thePrjState = nullptr,
Standard_Integer* theNumberOfFirstNode = nullptr,
Standard_Integer* theNumberOfLastNode = nullptr)
const BVH_VecNt& theNode2)
{
const BVH_VecNt aAB = theNode1 - theNode0;
const BVH_VecNt aAC = theNode2 - theNode0;
@@ -140,110 +128,68 @@ public: //! @name Point-Triangle Square distance
if (aABdotAP <= 0. && aACdotAP <= 0.)
{
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_VERTEX;
*theNumberOfFirstNode = 0;
*theNumberOfLastNode = 0;
}
return theNode0;
return aAP.Dot(aAP);
}
const BVH_VecNt aBC = theNode2 - theNode1;
const BVH_VecNt aBP = thePoint - theNode1;
T aBAdotBP = -(aAB.Dot (aBP));
T aBCdotBP = (aBC.Dot (aBP));
T aBAdotBP = -(aAB.Dot(aBP));
T aBCdotBP = (aBC.Dot(aBP));
if (aBAdotBP <= 0. && aBCdotBP <= 0.)
{
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_VERTEX;
*theNumberOfFirstNode = 1;
*theNumberOfLastNode = 1;
}
return theNode1;
return (aBP.Dot(aBP));
}
const BVH_VecNt aCP = thePoint - theNode2;
T aCBdotCP = -(aBC.Dot (aCP));
T aCAdotCP = -(aAC.Dot (aCP));
T aCBdotCP = -(aBC.Dot(aCP));
T aCAdotCP = -(aAC.Dot(aCP));
if (aCAdotCP <= 0. && aCBdotCP <= 0.)
{
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_VERTEX;
*theNumberOfFirstNode = 2;
*theNumberOfLastNode = 2;
}
return theNode2;
return (aCP.Dot(aCP));
}
T aACdotBP = (aAC.Dot (aBP));
T aACdotBP = (aAC.Dot(aBP));
T aVC = aABdotAP * aACdotBP + aBAdotBP * aACdotAP;
if (aVC <= 0. && aABdotAP > 0. && aBAdotBP > 0.)
{
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_EDGE;
*theNumberOfFirstNode = 0;
*theNumberOfLastNode = 1;
}
return theNode0 + aAB * (aABdotAP / (aABdotAP + aBAdotBP));
const BVH_VecNt aDirect = aAP - aAB * (aABdotAP / (aABdotAP + aBAdotBP));
return (aDirect.Dot(aDirect));
}
T aABdotCP = (aAB.Dot (aCP));
T aABdotCP = (aAB.Dot(aCP));
T aVA = aBAdotBP * aCAdotCP - aABdotCP * aACdotBP;
if (aVA <= 0. && aBCdotBP > 0. && aCBdotCP > 0.)
{
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_EDGE;
*theNumberOfFirstNode = 1;
*theNumberOfLastNode = 2;
}
return theNode1 + aBC * (aBCdotBP / (aBCdotBP + aCBdotCP));
const BVH_VecNt aDirect = aBP - aBC * (aBCdotBP / (aBCdotBP + aCBdotCP));
return (aDirect.Dot(aDirect));
}
T aVB = aABdotCP * aACdotAP + aABdotAP * aCAdotCP;
if (aVB <= 0. && aACdotAP > 0. && aCAdotCP > 0.)
{
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_EDGE;
*theNumberOfFirstNode = 2;
*theNumberOfLastNode = 0;
}
return theNode0 + aAC * (aACdotAP / (aACdotAP + aCAdotCP));
const BVH_VecNt aDirect = aAP - aAC * (aACdotAP / (aACdotAP + aCAdotCP));
return (aDirect.Dot(aDirect));
}
T aNorm = aVA + aVB + aVC;
if (thePrjState != nullptr)
{
*thePrjState = BVH_PrjStateInTriangle_INNER;
}
const BVH_VecNt& aDirect = thePoint - (theNode0 * aVA +
theNode1 * aVB +
theNode2 * aVC) / aNorm;
return (theNode0 * aVA + theNode1 * aVB + theNode2 * aVC) / aNorm;
}
//! Computes square distance between point and triangle
static T PointTriangleSquareDistance (const BVH_VecNt& thePoint,
const BVH_VecNt& theNode0,
const BVH_VecNt& theNode1,
const BVH_VecNt& theNode2)
{
const BVH_VecNt aProj = PointTriangleProjection(thePoint, theNode0, theNode1, theNode2);
const BVH_VecNt aPP = aProj - thePoint;
return aPP.Dot(aPP);
return (aDirect.Dot(aDirect));
}
public: //! @name Ray-Box Intersection

View File

@@ -1221,105 +1221,6 @@ static void ComputeSphere (const gp_Sphere& Sphere,
}
}
//=======================================================================
//function : computeDegeneratedTorus
//purpose : compute bounding box for degenerated torus
//=======================================================================
static void computeDegeneratedTorus (const gp_Torus& theTorus,
const Standard_Real theUMin, const Standard_Real theUMax,
const Standard_Real theVMin, const Standard_Real theVMax,
Bnd_Box& theB)
{
gp_Pnt aP = theTorus.Location();
Standard_Real aRa = theTorus.MajorRadius();
Standard_Real aRi = theTorus.MinorRadius();
Standard_Real aXmin,anYmin,aZmin,aXmax,anYmax,aZmax;
aXmin = aP.X() - aRa - aRi;
aXmax = aP.X() + aRa + aRi;
anYmin = aP.Y() - aRa - aRi;
anYmax = aP.Y() + aRa + aRi;
aZmin = aP.Z() - aRi;
aZmax = aP.Z() + aRi;
Standard_Real aPhi = ACos (-aRa / aRi);
Standard_Real anUper = 2. * M_PI - Precision::PConfusion();
Standard_Real aVper = 2. * aPhi - Precision::PConfusion();
if (theUMax - theUMin >= anUper && theVMax - theVMin >= aVper)
{
// a whole torus
theB.Update(aXmin, anYmin, aZmin, aXmax, anYmax, aZmax);
return;
}
Standard_Real anU,aV;
Standard_Real anUmax = theUMin + 2. * M_PI;
const gp_Ax3& aPos = theTorus.Position();
gp_Pnt aPExt = aP;
aPExt.SetX(aXmin);
ElSLib::TorusParameters(aPos,aRa,aRi,aPExt,anU,aV);
anU = ElCLib::InPeriod(anU,theUMin,anUmax);
if(anU >= theUMin && anU <= theUMax && aV >= theVMin && aV <= theVMax)
{
theB.Add(aPExt);
}
//
aPExt.SetX(aXmax);
ElSLib::TorusParameters(aPos,aRa,aRi,aPExt,anU,aV);
anU = ElCLib::InPeriod(anU,theUMin,anUmax);
if(anU >= theUMin && anU <= theUMax && aV >= theVMin && aV <= theVMax)
{
theB.Add(aPExt);
}
aPExt.SetX(aP.X());
//
aPExt.SetY(anYmin);
ElSLib::TorusParameters(aPos,aRa,aRi,aPExt,anU,aV);
anU = ElCLib::InPeriod(anU,theUMin,anUmax);
if(anU >= theUMin && anU <= theUMax && aV >= theVMin && aV <= theVMax)
{
theB.Add(aPExt);
}
//
aPExt.SetY(anYmax);
ElSLib::TorusParameters(aPos,aRa,aRi,aPExt,anU,aV);
anU = ElCLib::InPeriod(anU,theUMin,anUmax);
if(anU >= theUMin && anU <= theUMax && aV >= theVMin && aV <= theVMax)
{
theB.Add(aPExt);
}
aPExt.SetY(aP.Y());
//
aPExt.SetZ(aZmin);
ElSLib::TorusParameters(aPos,aRa,aRi,aPExt,anU,aV);
anU = ElCLib::InPeriod(anU,theUMin,anUmax);
if(anU >= theUMin && anU <= theUMax && aV >= theVMin && aV <= theVMax)
{
theB.Add(aPExt);
}
//
aPExt.SetZ(aZmax);
ElSLib::TorusParameters(aPos,aRa,aRi,aPExt,anU,aV);
anU = ElCLib::InPeriod(anU,theUMin,anUmax);
if(anU >= theUMin && anU <= theUMax && aV >= theVMin && aV <= theVMax)
{
theB.Add(aPExt);
}
//
// Add boundaries of patch
// UMin, UMax
gp_Circ aC = ElSLib::TorusUIso(aPos,aRa,aRi,theUMin);
BndLib::Add(aC,theVMin,theVMax,0.,theB);
aC = ElSLib::TorusUIso(aPos,aRa,aRi,theUMax);
BndLib::Add(aC,theVMin,theVMax,0.,theB);
// VMin, VMax
aC = ElSLib::TorusVIso(aPos,aRa,aRi,theVMin);
BndLib::Add(aC,theUMin,theUMax,0.,theB);
aC = ElSLib::TorusVIso(aPos,aRa,aRi,theVMax);
BndLib::Add(aC,theUMin,theUMax,0.,theB);
}
void BndLib::Add(const gp_Sphere& S,const Standard_Real UMin,
const Standard_Real UMax,const Standard_Real VMin,
const Standard_Real VMax,const Standard_Real Tol, Bnd_Box& B)
@@ -1364,13 +1265,6 @@ void BndLib::Add(const gp_Torus& S,const Standard_Real UMin,
if (Fi2<Fi1) return;
if (Ra<Ri)
{
computeDegeneratedTorus(S,UMin,UMax,VMin,VMax,B);
B.Enlarge(Tol);
return;
}
#define SC 0.71
#define addP0 (Compute(UMin,UMax,Ra+Ri,Ra+Ri,gp_Pnt(S.XAxis().Direction().XYZ()),gp_Pnt(S.YAxis().Direction().XYZ()),S.Location(),B))
#define addP1 (Compute(UMin,UMax,Ra+Ri*SC,Ra+Ri*SC,gp_Pnt(S.XAxis().Direction().XYZ()),gp_Pnt(S.YAxis().Direction().XYZ()),gp_Pnt(S.Location().XYZ()+(Ri*SC)*S.Axis().Direction().XYZ()),B))

View File

@@ -16,7 +16,6 @@
#include <Adaptor3d_CurveOnSurface.hxx>
#include <Adaptor3d_CurveOnSurface.hxx>
#include <Adaptor3d_TopolTool.hxx>
#include <GeomAdaptor_SurfaceOfLinearExtrusion.hxx>
#include <Approx_CurveOnSurface.hxx>
#include <BRep_Builder.hxx>
@@ -899,29 +898,8 @@ void Draft_Modification::Perform ()
// 1 - If ProjLib should make an Approx, it is stupid to approximate the
// entire intersection curve.
// 2 - Additionally, if YaRev, there is a risk to not be SameRange.
Handle(GeomAdaptor_Surface) HS[2] = {new GeomAdaptor_Surface(S1), new GeomAdaptor_Surface(S2)};
for (Standard_Integer i = 0; i < 2; ++i)
{
Handle(Geom_Surface) S = (i == 0 ? S1 : S2);
if (S->DynamicType() == STANDARD_TYPE(Geom_ConicalSurface))
{
Standard_Real aVs, aVe;
Adaptor3d_TopolTool::GetConeApexParam(Handle(Geom_ConicalSurface)::DownCast(S)->Cone(), aVs, aVe);
if (aVe < 0.)
{
aVs = aVe;
aVe = Precision::Infinite();
}
else
{
aVs = -Precision::Infinite();
aVe = aVe;
}
HS[i]->Load(S, 0., 2 * M_PI, aVs, aVe, 0., 0.);
}
}
i2s.Perform(HS[0], HS[1], Precision::Confusion(),
Standard_True, Standard_False, Standard_False);
i2s.Perform(S1,S2,Precision::Confusion(),
Standard_True,Standard_False,Standard_False);
if (!i2s.IsDone() || i2s.NbLines() <= 0) {
errStat = Draft_EdgeRecomputation;
@@ -1130,9 +1108,8 @@ void Draft_Modification::Perform ()
for (i = 1; i <= Candidates.Length(); i++)
{
Handle( Geom_Curve ) aCurve = Candidates(i);
GeomAPI_ProjectPointOnCurve Projector(pfv, aCurve );
gp_Pnt aPnt = Projector.NbPoints() ? Projector.NearestPoint() : aCurve->Value(aCurve->FirstParameter());
const Standard_Real Dist = aPnt.Distance( pfv );
gp_Pnt Pnt = aCurve->Value( aCurve->FirstParameter() );
const Standard_Real Dist = Pnt.Distance( pfv );
if (Dist - DistMin < -Precision::Confusion())
{
DistMin = Dist;

View File

@@ -1,5 +0,0 @@
project(ExpToCasExe)
set (EXECUTABLE_PROJECT ON)
OCCT_INCLUDE_CMAKE_FILE (adm/cmake/occt_toolkit)
unset (EXECUTABLE_PROJECT)

View File

@@ -1,2 +0,0 @@
TKernel
TKExpress

View File

@@ -1,395 +0,0 @@
// Created: Mon Nov 1 12:50:27 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <cstring>
#include <Express_Item.hxx>
#include <Express_Schema.hxx>
#include <Message.hxx>
#include <OSD_File.hxx>
#include <OSD_FileSystem.hxx>
#include <OSD_OpenFile.hxx>
#include <TCollection_HAsciiString.hxx>
#include "exptocas.tab.hxx"
//=======================================================================
// function : GetSchema
// purpose : interface to parser
//=======================================================================
Handle(Express_Schema) GetSchema (const char* theFileName)
{
std::ifstream aFileStream;
OSD_OpenStream(aFileStream, theFileName, std::ios_base::in | std::ios_base::binary);
exptocas::scanner aScanner(&aFileStream);
aScanner.yyrestart(&aFileStream);
// uncomment next string for debug of parser
//aScanner.set_debug(1);
exptocas::parser aParser(&aScanner);
aParser.parse();
return Express::Schema();
}
//=======================================================================
// function : LoadList
// purpose : Load list of (class name, package name) from the file
// Package names and optional mark flag are set to items in the schema
//=======================================================================
static Standard_Boolean LoadList (const char *theFileName,
const Handle(Express_Schema)& theSchema,
const Standard_Boolean theMark)
{
const Handle(OSD_FileSystem)& aFileSystem = OSD_FileSystem::DefaultFileSystem();
std::shared_ptr<std::istream> aStreamPtr = aFileSystem->OpenIStream (theFileName, std::ios::in);
Standard_IStream& anIS = *aStreamPtr;
if (aStreamPtr == nullptr)
{
Message::SendFail() << "Error: cannot open " << theFileName;
return Standard_False;
}
Message::SendInfo() << "Loading " << theFileName << "...";
char aBuf[512];
Standard_Integer aLineNum = 0;
// a line entry in file has the next format:
// item_name package_name [shortname [check_flag(0 or 1) [fillshared_flag(0 or 1) [category]]]]
while (anIS.getline (aBuf, 512))
{
char* aCurPos = aBuf;
char* anItemName;
char* aPackageName;
char* aShortName;
char* aCheckFlag;
char* aFillSharedFlag;
char* aCategoryName;
Standard_Size aSepIdx = 0;
aLineNum += 1;
// -------------------------------------------------------------
// first word is an item name
// -------------------------------------------------------------
// skip any whitespace character in the line
while (*aCurPos && (aSepIdx = strcspn (aCurPos, " \t\r\n")) == 0)
{
aCurPos++;
}
// to next line if first word isn't found or comment started
if (*aCurPos == '\0' || *aCurPos == '#')
{
continue;
}
// get the name of the item
anItemName = aCurPos;
// shift the position
if (aCurPos[aSepIdx] == '\0')
{
aCurPos += aSepIdx;
}
else
{
aCurPos[aSepIdx] = '\0';
aCurPos += aSepIdx + 1;
}
Handle(Express_Item) anItem = theSchema->Item (anItemName, Standard_True);
// skip any class name not in schema
if (anItem.IsNull())
{
continue;
}
// -------------------------------------------------------------
// second word is a package name
// -------------------------------------------------------------
// skip any whitespace character in the rest of the line
while (*aCurPos && (aSepIdx = strcspn (aCurPos, " \t\r\n")) == 0)
{
aCurPos++;
}
// to next line if second word isn't found or comment started
if (*aCurPos == '\0' || *aCurPos == '#')
{
continue;
}
// get the name of the package
aPackageName = aCurPos;
// shift the position
if (aCurPos[aSepIdx] == '\0')
{
aCurPos += aSepIdx;
}
else
{
aCurPos[aSepIdx] = '\0';
aCurPos += aSepIdx + 1;
}
// make warning if there is another package for the item
if (anItem->IsPackageNameSet() && anItem->GetPackageName().IsDifferent (aPackageName))
{
Message::SendWarning() << "Warning: Package is redefined for item " << anItemName;
}
anItem->SetPackageName (aPackageName);
anItem->SetGenMode (theMark ? Express_Item::GM_GenByUser : Express_Item::GM_NoGen);
// -------------------------------------------------------------
// third word is an item short name (optional)
// -------------------------------------------------------------
// skip any whitespace character in the line
while (*aCurPos && (aSepIdx = strcspn (aCurPos, " \t\r\n")) == 0)
{
aCurPos++;
}
// to next line if third word isn't found or comment started
if (*aCurPos == '\0' || *aCurPos == '#')
{
continue;
}
// get the short name
aShortName = aCurPos;
// shift the position
if (aCurPos[aSepIdx] == '\0')
{
aCurPos += aSepIdx;
}
else
{
aCurPos[aSepIdx] = '\0';
aCurPos += aSepIdx + 1;
}
if (!std::isalpha (*aShortName))
{
Message::SendWarning() << "Warning: Not recognized a shortname at the line " << aLineNum;
continue;
}
// if short name "-" then just do not set it
if (*aShortName != '-')
{
Handle(TCollection_HAsciiString) anItemShortName = new TCollection_HAsciiString(aShortName);
if (anItemShortName->Length() > 0)
{
anItem->SetShortName (anItemShortName);
}
}
// -------------------------------------------------------------
// fourth word is an item check flag (optional)
// -------------------------------------------------------------
// skip any whitespace character in the line
while (*aCurPos && (aSepIdx = strcspn (aCurPos, " \t\r\n")) == 0)
{
aCurPos++;
}
// to next line if fourth word isn't found or comment started
if (*aCurPos == '\0' || *aCurPos == '#')
{
continue;
}
// get the check flag
aCheckFlag = aCurPos;
// shift the position
if (aCurPos[aSepIdx] == '\0')
{
aCurPos += aSepIdx;
}
else
{
aCurPos[aSepIdx] = '\0';
aCurPos += aSepIdx + 1;
}
if (!(*aCheckFlag == '0' || *aCheckFlag == '1'))
{
Message::SendWarning() << "Warning: Not recognized a check flag at the line " << aLineNum;
continue;
}
Standard_Boolean hasCheck = (*aCheckFlag == '0' ? Standard_False : Standard_True);
anItem->SetCheckFlag (hasCheck);
// -------------------------------------------------------------
// fifth word is an item fill share flag (optional)
// -------------------------------------------------------------
// skip any whitespace character in the line
while (*aCurPos && (aSepIdx = strcspn (aCurPos, " \t\r\n")) == 0)
{
aCurPos++;
}
// to next line if fifth word isn't found or comment started
if (*aCurPos == '\0' || *aCurPos == '#')
{
continue;
}
// get the fill share flag
aFillSharedFlag = aCurPos;
// shift the position
if (aCurPos[aSepIdx] == '\0')
{
aCurPos += aSepIdx;
}
else
{
aCurPos[aSepIdx] = '\0';
aCurPos += aSepIdx + 1;
}
if (!(*aFillSharedFlag == '0' || *aFillSharedFlag == '1'))
{
Message::SendWarning() << "Warning: Not recognized a fill shared flag at the line " << aLineNum;
continue;
}
Standard_Boolean hasFillShared = (*aFillSharedFlag == '0' ? Standard_False : Standard_True);
anItem->SetFillSharedFlag (hasFillShared);
// -------------------------------------------------------------
// sixth word is an item category name (optional)
// -------------------------------------------------------------
// skip any whitespace character in the line
while (*aCurPos && (aSepIdx = strcspn (aCurPos, " \t\r\n")) == 0)
{
aCurPos++;
}
// to next line if sixth word isn't found or comment started
if (*aCurPos == '\0' || *aCurPos == '#')
{
continue;
}
// get the category name
aCategoryName = aCurPos;
aCurPos[aSepIdx] = '\0';
if (!std::isalpha (*aCategoryName))
{
Message::SendWarning() << "Warning: Not recognized a category name at the line " << aLineNum;
continue;
}
// if category name "-" then just do not set it
if (*aCategoryName != '-')
{
Handle(TCollection_HAsciiString) anItemCategoryName = new TCollection_HAsciiString(aCategoryName);
if (anItemCategoryName->Length() > 0)
{
anItem->SetShortName (anItemCategoryName);
}
}
}
Message::SendInfo() << " Done";
return Standard_True;
}
//=======================================================================
// function : main
// purpose :
//=======================================================================
Standard_Integer main (const Standard_Integer argc, const char* argv[])
{
if (argc < 2)
{
Message::SendInfo() << "EXPRESS -> CASCADE/XSTEP classes generator 3.0\n"
"Use: ExpToCas <schema.exp> [<create.lst> [<packaging.lst> [start_index]]]\n"
"Where: \n"
"- schema.exp is a file with EXPRESS schema \n"
"- create.lst is a file with list of types to generate (all if none)\n"
" (or \"-\" for creating all entities in the schema)\n"
"- packaging.lst is a file with classes distribution per package\n"
" in the form of the list (one item per line) \"<TypeName> <Package>\"\n"
" If package not defined for some type, \"StepStep\" assumed\n"
"- start_index - a first number for auxiliary generated files with data\n"
" to copy into StepAP214_Protocol.cxx, RWStepAP214_GeneralModule.cxx and\n"
" RWStepAP214_ReadWriteModule.cxx";
return 0;
}
//=================================
// Step 1: parsing EXPRESS file
// open schema file
OSD_Path aPath (argv[1]);
OSD_File aFile (aPath);
if (!aFile.IsReadable())
{
Message::SendFail() << "Error: Cannot open " << argv[1];
return -1;
}
// parse
Message::SendInfo() << "Starting parsing " << argv[1];
Handle(Express_Schema) aSchema = GetSchema (argv[1]);
if (aSchema.IsNull())
{
Message::SendFail() << "Error: Parsing finished with no result";
return -1;
}
else
{
Message::SendInfo() << "Schema " << aSchema->Name()->ToCString() << " successfully parsed";
}
Message::SendInfo() << "Total " << aSchema->NbItems() << " items";
//=================================
// Step 2: Prepare data for creating classes
// load packaging information
if (argc > 3)
{
if (!LoadList (argv[3], aSchema, Standard_False))
{
return -1;
}
}
// load list of classes to generate
if (argc > 2)
{
if (argv[2][0] == '-')
{
// set mark for all items
for (Standard_Integer num = 1; num <= aSchema->NbItems(); num++)
{
aSchema->Item (num)->SetGenMode (Express_Item::GM_GenByUser);
}
}
else if (!LoadList (argv[2], aSchema, Standard_True))
{
return -1;
}
}
// get starting index
Standard_Integer anIndex = -1;
if (argc > 4)
{
char* aStopSymbol;
anIndex = (Standard_Integer) strtol (argv[4], &aStopSymbol, 10);
if (*aStopSymbol != '\0')
{
Message::SendFail() << "Error: invalid starting index: " << argv[4];
return -1;
}
}
//=================================
// Step 3: Iterate over new items and set the package name if need
const TCollection_AsciiString aUserName("user");
for (Standard_Integer aNum = 1; aNum <= aSchema->NbItems(); aNum++)
{
if (aSchema->Item (aNum)->GetGenMode() == Express_Item::GM_GenByUser)
{
aSchema->Item (aNum)->Use2(aUserName, Express_Item::GetUnknownPackageName());
}
}
//=================================
// Step 4: Iterate by items and generate classes
Standard_Boolean isDone = Standard_False;
Express_Item::SetIndex (anIndex);
do
{
isDone = Standard_False;
for (Standard_Integer aNum = 1; aNum <= aSchema->NbItems(); aNum++)
{
isDone = isDone || aSchema->Item (aNum)->Generate();
}
} while (isDone);
return 0;
}

View File

@@ -1,7 +0,0 @@
exptocas.lex
expltocas.yacc
lex.exptocas.cxx
exptocas.tab.hxx
exptocas.tab.cxx
ExpToCasExe.cxx

View File

@@ -1,220 +0,0 @@
// -*-C++-*-
// FlexLexer.h -- define interfaces for lexical analyzer classes generated
// by flex
// Copyright (c) 1993 The Regents of the University of California.
// All rights reserved.
//
// This code is derived from software contributed to Berkeley by
// Kent Williams and Tom Epperly.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// Neither the name of the University nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE.
// This file defines FlexLexer, an abstract class which specifies the
// external interface provided to flex C++ lexer objects, and yyFlexLexer,
// which defines a particular lexer class.
//
// If you want to create multiple lexer classes, you use the -P flag
// to rename each yyFlexLexer to some other xxFlexLexer. You then
// include <FlexLexer.h> in your other sources once per lexer class:
//
// #undef yyFlexLexer
// #define yyFlexLexer xxFlexLexer
// #include <FlexLexer.h>
//
// #undef yyFlexLexer
// #define yyFlexLexer zzFlexLexer
// #include <FlexLexer.h>
// ...
#ifndef __FLEX_LEXER_H
// Never included before - need to define base class.
#define __FLEX_LEXER_H
#include <iostream>
extern "C++" {
struct yy_buffer_state;
typedef int yy_state_type;
class FlexLexer
{
public:
virtual ~FlexLexer() { }
const char* YYText() const { return yytext; }
int YYLeng() const { return yyleng; }
virtual void
yy_switch_to_buffer( yy_buffer_state* new_buffer ) = 0;
virtual yy_buffer_state* yy_create_buffer( std::istream* s, int size ) = 0;
virtual yy_buffer_state* yy_create_buffer( std::istream& s, int size ) = 0;
virtual void yy_delete_buffer( yy_buffer_state* b ) = 0;
virtual void yyrestart( std::istream* s ) = 0;
virtual void yyrestart( std::istream& s ) = 0;
virtual int yylex() = 0;
// Call yylex with new input/output sources.
int yylex( std::istream& new_in, std::ostream& new_out )
{
switch_streams( new_in, new_out );
return yylex();
}
int yylex( std::istream* new_in, std::ostream* new_out = 0)
{
switch_streams( new_in, new_out );
return yylex();
}
// Switch to new input/output streams. A nil stream pointer
// indicates "keep the current one".
virtual void switch_streams( std::istream* new_in,
std::ostream* new_out ) = 0;
virtual void switch_streams( std::istream& new_in,
std::ostream& new_out ) = 0;
int lineno() const { return yylineno; }
int debug() const { return yy_flex_debug; }
void set_debug( int flag ) { yy_flex_debug = flag; }
protected:
char* yytext;
int yyleng;
int yylineno; // only maintained if you use %option yylineno
int yy_flex_debug; // only has effect with -d or "%option debug"
};
}
#endif // FLEXLEXER_H
#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
// Either this is the first time through (yyFlexLexerOnce not defined),
// or this is a repeated include to define a different flavor of
// yyFlexLexer, as discussed in the flex manual.
# define yyFlexLexerOnce
extern "C++" {
class yyFlexLexer : public FlexLexer {
public:
// arg_yyin and arg_yyout default to the cin and cout, but we
// only make that assignment when initializing in yylex().
yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout );
yyFlexLexer( std::istream* arg_yyin = 0, std::ostream* arg_yyout = 0 );
private:
void ctor_common();
public:
virtual ~yyFlexLexer();
void yy_switch_to_buffer( yy_buffer_state* new_buffer );
yy_buffer_state* yy_create_buffer( std::istream* s, int size );
yy_buffer_state* yy_create_buffer( std::istream& s, int size );
void yy_delete_buffer( yy_buffer_state* b );
void yyrestart( std::istream* s );
void yyrestart( std::istream& s );
void yypush_buffer_state( yy_buffer_state* new_buffer );
void yypop_buffer_state();
virtual int yylex();
virtual void switch_streams( std::istream& new_in, std::ostream& new_out );
virtual void switch_streams( std::istream* new_in = 0, std::ostream* new_out = 0 );
virtual int yywrap();
protected:
virtual int LexerInput( char* buf, int max_size );
virtual void LexerOutput( const char* buf, int size );
virtual void LexerError( const char* msg );
void yyunput( int c, char* buf_ptr );
int yyinput();
void yy_load_buffer_state();
void yy_init_buffer( yy_buffer_state* b, std::istream& s );
void yy_flush_buffer( yy_buffer_state* b );
int yy_start_stack_ptr;
int yy_start_stack_depth;
int* yy_start_stack;
void yy_push_state( int new_state );
void yy_pop_state();
int yy_top_state();
yy_state_type yy_get_previous_state();
yy_state_type yy_try_NUL_trans( yy_state_type current_state );
int yy_get_next_buffer();
std::istream yyin; // input source for default LexerInput
std::ostream yyout; // output sink for default LexerOutput
// yy_hold_char holds the character lost when yytext is formed.
char yy_hold_char;
// Number of characters read into yy_ch_buf.
int yy_n_chars;
// Points to current character in buffer.
char* yy_c_buf_p;
int yy_init; // whether we need to initialize
int yy_start; // start state number
// Flag which is used to allow yywrap()'s to do buffer switches
// instead of setting up a fresh yyin. A bit of a hack ...
int yy_did_buffer_switch_on_eof;
size_t yy_buffer_stack_top; /**< index of top of stack. */
size_t yy_buffer_stack_max; /**< capacity of stack. */
yy_buffer_state ** yy_buffer_stack; /**< Stack as an array. */
void yyensure_buffer_stack(void);
// The following are not always needed, but may be depending
// on use of certain flex features (like REJECT or yymore()).
yy_state_type yy_last_accepting_state;
char* yy_last_accepting_cpos;
yy_state_type* yy_state_buf;
yy_state_type* yy_state_ptr;
char* yy_full_match;
int* yy_full_state;
int yy_full_lp;
int yy_lp;
int yy_looking_for_trail_begin;
int yy_more_flag;
int yy_more_len;
int yy_more_offset;
int yy_prev_more_offset;
};
}
#endif // yyFlexLexer || ! yyFlexLexerOnce

View File

@@ -1,171 +0,0 @@
# STEP express schema to OCCT classes
## 1. Introduction
**ExpToCasExe** is an auxiliary tool to generate code for implementation
of new STEP entities into OCCT.
This tool consists of two packages: **ExpToCasExe** and **TKExpress**.
*ExpToCasExe* package is the basic package for generation.
It parses the express schema, makes a list of entities described in the schema,
and starts generating classes according to the specified lists.
This package has the file *occt_existed_step_entities.lst* witch contains list
of STEP entities implemented in *OCCT* at this moment.
*TKExpress* package generates files with description of the STEP entities
to use in *OCCT* taking into account their dependencies.
Below is a set of generated files using the example
of the *Condition* entity from the *StepAP214* package.
* **StepAP214_Condition.hxx** - contains declaration of the class that describes STEP entity
* **StepAP214_Condition.cxx** - contains definition of the class that describes STEP entity
* **RWStepAP214_RWCondition.hxx** - contains declaration of the class that reads (writes) STEP entity from STEP file
* **RWStepAP214_RWCondition.cxx** - contains definition of the class that reads (writes) STEP entity from STEP file
* **category.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_GeneralModule.cxx* file
* **fillshared.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_GeneralModule.cxx* file
* **inc.txt** - common file for all generated entities with part of code to insert to *StepAP214_Protocol.cxx*
* **newvoid.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_GeneralModule.cxx* file
* **protocol.txt** - common file for all generated entities with part of code to insert to *StepAP214_Protocol.cxx* file
* **readstep.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_ReadWriteModule.cxx* file
* **reco.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_ReadWriteModule.cxx* file
* **rwinc.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_ReadWriteModule.cxx* file
* **steptype.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_ReadWriteModule.cxx* file
* **typebind.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_ReadWriteModule.cxx* file
* **writestep.txt** - common file for all generated entities with part of code to insert to *RWStepAP214_ReadWriteModule.cxx* file
## 2. Build
The build process is automated, but has some specifics. *ExpToCasExe* package contains file *exptocas.lex*
which contains rules for lexical analyzer builder (*FLEX*), and file *exptocas.yacc*
which contains rules for syntax analyzer builder (*GNU Bison*).
During build process *FLEX* and *Bison* generate the next files:
* FlexLexer.h
* lex.exptocas.cxx
* exptocas.tab.cxx
* exptocas.tab.hxx
These files are placed to the source directory ("*src/ExpToCasExe*") due to *CMAKE* script specific.
Then standard Visual Studio build process continues.
There is no necessary to include these files to the *git* repository, due to automatic generation.
To change the behaviour of Express schema parser, the user need to modify original files:
*exptocas.lex* and *exptocas.yacc*.
## 3. Usage
**ExpToCasExe** program has the following call pattern:
~~~~
> ExpToCasExe <schema.exp> [<new.lst> [<existed.lst> [start_index]]]
~~~~
where:
* **schema.exp** - file with STEP Express schema
* **new.lst** - file with list of new STEP entities which we have to generate
* **existed.lst** - file with list of already implemented STEP entities
* **start_index** - a first index for entity registration
(value of it you can receive after analyse of *StepAP214_Protocol.cxx* file)
If *new.lst* file is set to "-" then all entities from Express schema are considered as new.
*new.lst* and *existed.lst* are the text files. Line in file describes the class name
of STEP entity and to witch *OCCT* package it's belong. Line has the following format:
~~~~
item_name package_name [shortname [check_flag(0 or 1) [fillshared_flag(0 or 1) [category]]]]
~~~~
where:
* **item_name** is the class name of the STEP entity (*ProductDefinitionOrReference* for example)
* **package_name** is the name of the *OCCT* package (*StepBasic* for example)
* **shortname** is the short name of the STEP entity
* **check_flag** is the flag to generate the *Check* function in the class
* **fillshared_flag** is the flag to generate the *FillShared* function in the class
* **category** is the name of category to witch entity belongs to
These file can include comments after the symbol "#".
The result of generation consists of several folders:
* two folders (*\_package_name\_* and *RW\_package_name\_*) for each package for which new entities were generated.
* a folder *Registration* with *\*.txt* files with code to copy into common files (see the example in the first section).
For generation, it is easy to copy to separate directory following files:
* **ExpToCasExe.exe**, **TKernel.dll** and **TKExpress.dll** from OCCT
* STEP Express schema
* **occt_existed_step_entities.lst** from package *ExpToCasExe*
create a file with needed entities **new.lst** and from this directory execute command:
~~~~
> ExpToCasExe.exe schema.exp new.lst occt_existed_step_entities.lst 1000
~~~~
## 4. Disclaimer
**NOTE**:
Some STEP schemes may be not fully corresponded to the rules which set in our generator.
If during generation we receive a message about syntax error you can try to edit schema
file in order to avoid it. Such approach is reasonable if number of errors is small.
If there are many errors we have to change existed rules (for debug parser process you can
uncomment string "//aScanner.set_debug(1);" in the file *exptocas.yacc*).
TIP: remove upper case from name after SCHEMA key word.
**NOTE**:
Please, take into account that most of existed entities were generated many years ago.
Some of them can be not corresponded to last versions of schemes.
For example, we don't have classes for entity:
~~~~
ENTITY founded_item
SUPERTYPE OF ((ONEOF(b_spline_curve_knot_locator, b_spline_curve_segment, b_spline_surface_knot_locator,
b_spline_surface_patch, b_spline_surface_strip,
boundary_curve_of_b_spline_or_rectangular_composite_surface, box_domain,
character_glyph_style_outline, character_glyph_style_stroke, composite_curve_segment,
composite_curve_transition_locator, curve_style, curve_style_font, curve_style_font_and_scaling,
curve_style_font_pattern, externally_defined_style, fill_area_style,
interpolated_configuration_segment, kinematic_path_segment, plane_angle_and_length_pair,
plane_angle_and_ratio_pair, point_style, presentation_style_assignment,
rectangular_composite_surface_transition_locator, surface_patch, surface_side_style,
surface_style_boundary, surface_style_control_grid, surface_style_fill_area,
surface_style_parameter_line, surface_style_segmentation_curve, surface_style_silhouette,
surface_style_usage, symbol_style, text_style, view_volume)) ANDOR
(ONEOF(character_glyph_style_outline, character_glyph_style_stroke, curve_style, curve_style_font,
curve_style_font_and_scaling, curve_style_font_pattern, externally_defined_style,
fill_area_style, point_style, presentation_style_assignment, surface_side_style,
surface_style_boundary, surface_style_control_grid, surface_style_fill_area,
surface_style_parameter_line, surface_style_segmentation_curve, surface_style_silhouette,
surface_style_usage, symbol_style, text_style)));
DERIVE
users : SET [0 : ?] OF founded_item_select := using_items(SELF, []);
WHERE
WR1: SIZEOF(users) > 0;
WR2: NOT (SELF IN users);
END_ENTITY;
~~~~
But some of existed entities (for example - *composite_curve_segment*) must be inherited from
this missing entity (at present such existed entities are inherited from *Standard_Transient*):
~~~~
ENTITY composite_curve_segment
SUBTYPE OF (founded_item);
transition : transition_code;
same_sense : BOOLEAN;
parent_curve : curve;
INVERSE
using_curves : BAG[1:?] OF composite_curve FOR segments;
WHERE
wr1 : ('AUTOMOTIVE_DESIGN.BOUNDED_CURVE' IN TYPEOF(parent_curve));
END_ENTITY; -- 10303-42: geometry_schema
~~~~
**NOTE**: To facilitate the work of those who will use this program after you,
it is strongly recommended update the file **occt_existed_step_entities.lst**
after each generation and not to forget to change update date in the first line of this file.

View File

@@ -1,203 +0,0 @@
%{
// Created: Thu Oct 28 12:21:16 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
/*****************************************************************************
This LEX scanner is performs lexical analysis of EXPRESS schema file
for EXPRESS -> CASCADE/XSTEP classes generator
On the stage of lexical scanner comments (single- and multi-line),
definitions of CONSTANT, FUNCTION, RULE items and clauses WHERE, INVERSE
and DERIVE of TYPE amd ENTITY items are dismissed (ignored)
Then, keywords such as ENTITY, SUPERTYPE, SET etc., names of items
and special symbols are identified and returned to parser (yacc) as tokens
Also, error processing and current line number tracking functions are defined
*****************************************************************************/
/************************************/
/* Section 1 */
/* definitions */
#include <stdlib.h>
#include <string.h>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <Express_HSequenceOfField.hxx>
#include <Express_HSequenceOfItem.hxx>
#include <Express_Field.hxx>
#include <Express_Item.hxx>
#include <Express_Type.hxx>
#include <Express_Schema.hxx>
#include <Express_Reference.hxx>
#include "exptocas.tab.hxx" /* define tokens */
/* Auxiliary functions */
static int fun_level=0;
static int ec_linenum=1;
static int ec_state = 0;
int yywrap(void) { return 1; }
int ec_curline ( void )
{
return ec_linenum;
}
int ec_error ( const std::string& s, const std::string& text )
{
printf ( "\nError at line %d: %s \"%s\"\n", ec_curline(), s.c_str(), text.c_str() );
return 0;
}
%}
/*
c++ generate C++ parser class
*/
%option c++
%option noyywrap
%option yyclass="exptocas::scanner"
%option nounistd
%s TYP ENT
%x COMM SKP RULE FUN
%a 4000
%o 6000
%top{
// Pre-include stdlib.h to avoid redefinition of integer type macros (INT8_MIN and similar in generated code)
#if !defined(_MSC_VER) || (_MSC_VER >= 1600) // Visual Studio 2010+
#include "stdint.h"
#endif
}
%{
// Tell flex which function to define
#ifdef YY_DECL
# undef YY_DECL
#endif
#define YY_DECL int exptocas::scanner::lex (exptocas::parser::semantic_type* yylval)
typedef exptocas::parser::token token;
/************************************/
/* Section 2 */
/* parsing rules */
%}
%%
"--".* { /* Eat line comments */ }
"(*" { ec_state = YYSTATE; BEGIN(COMM); }
<COMM>. { /* Eat multiline comments */ }
<COMM>"*)" { BEGIN(ec_state); }
"SCHEMA" { return yylval->num = token::KSCHEM; }
"END_SCHEMA" { return yylval->num = token::KENDS; }
"TYPE" { BEGIN(TYP); return yylval->num = token::KTYP; }
<TYP,SKP>"END_TYPE" { BEGIN(0); return yylval->num = token::KENDT; }
"ENTITY" { BEGIN(ENT); return yylval->num = token::KENT; }
<ENT,SKP>"END_ENTITY" { BEGIN(0); return yylval->num = token::KENDE; }
<ENT>"INVERSE" |
<ENT>"DERIVE" |
<ENT,TYP>"WHERE" { BEGIN(SKP); }
<SKP>. { /* eat contents of WHERE and DERIVE subclauses of ENTITY and TYPE */ }
"SELECT" { return yylval->num = token::KSEL; }
"ENUMERATION" { return yylval->num = token::KENUM; }
"LIST" { return yylval->num = token::KLIST; }
"ARRAY" { return yylval->num = token::KARR; }
"SET" { return yylval->num = token::KSET; }
"BAG" { return yylval->num = token::KBAG; }
"OF" { return yylval->num = token::KOF; }
"NUMBER" { return yylval->num = token::KNUM; }
"INTEGER" { return yylval->num = token::KINT; }
"REAL" { return yylval->num = token::KDBL; }
"STRING" { return yylval->num = token::KSTR; }
"LOGICAL" { return yylval->num = token::KLOG; }
"BOOLEAN" { return yylval->num = token::KBOOL; }
"OPTIONAL" { return yylval->num = token::KOPT; }
"UNIQUE" { return yylval->num = token::KUNIQ; }
"SELF" { return yylval->num = token::KSELF; }
"ABSTRACT" { return yylval->num = token::KABSTR; }
"SUBTYPE" { return yylval->num = token::KSUBT; }
"SUPERTYPE" { return yylval->num = token::KSPRT; }
"ANDOR" { return yylval->num = token::KANDOR; }
"ONEOF" { return yylval->num = token::K1OF; }
"AND" { return yylval->num = token::KAND; }
"UR"[0-9]+ { yylval->str = strdup ( yytext ); return token::NAME; }
[a-z_][a-z_0-9]* { yylval->str = strdup ( yytext ); return token::NAME; }
[0-9]+ { yylval->num = atoi ( yytext ); return token::NUMBER; }
[,=();?:.\\]|"["|"]" { return yylval->num = yytext[0]; }
<INITIAL,FUN>"FUNCTION" { BEGIN(FUN); fun_level++; }
<FUN>"(*" { ec_state = YYSTATE; BEGIN(COMM); /* eat comments in functions */ }
<FUN>"--".* { /* Eat line comments in functions */ }
<FUN>[A-Za-z_0-9]* { /* eat FUNCTIONs - skip IDs explicitly */ }
<FUN>\'[^\']*\' { /* eat FUNCTIONs - skip strings explicitly */ }
<FUN>. { /* eat FUNCTIONs - skip all other symbols in functions */ }
<FUN>"END_FUNCTION;" { fun_level--; if ( ! fun_level ) BEGIN(0); }
"RULE" { BEGIN(RULE); /* eat RULEs */ }
<RULE>. { /* eat RULEs */ }
<RULE>"END_RULE;" { BEGIN(0); }
"CONSTANT"[ \t\na-z_0-9:=;'()|-]+"END_CONSTANT;" { /* eat CONSTANTs */
char *s = yytext; /* but don't forget to count lines.. */
while ( *s ) if ( *(s++) == '\n' ) ec_linenum++;
}
[ \t]+ { /* eat spaces */ }
[A-Za-z0-9_]+ { ec_error ( "unknown keyword ", yytext ); /* put unrecognized keywords to cerr */ }
. { ec_error ( "unknown symbol ", yytext ); /* put unrecognized data to cerr */ }
<INITIAL,COMM,SKP,RULE,ENT,TYP,FUN>\n { ec_linenum++; /* count lines */ }
%%
/************************************/
/* Section 3 */
/* auxiliary procedures */
exptocas::scanner::scanner(std::istream* in, std::ostream* out)
: exptocasFlexLexer(in, out)
{
}
/*
int main ( void )
{
yylex();
}
*/

File diff suppressed because it is too large Load Diff

View File

@@ -1,910 +0,0 @@
// A Bison parser, made by GNU Bison 3.7.4.
// Skeleton interface for Bison LALR(1) parsers in C++
// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
/**
** \file ExpToCasExe/exptocas.tab.hxx
** Define the exptocas::parser class.
*/
// C++ LALR(1) parser skeleton written by Akim Demaille.
// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
// especially those whose name start with YY_ or yy_. They are
// private implementation details that can be changed or removed.
#ifndef YY_EXPTOCAS_EXPTOCASEXE_EXPTOCAS_TAB_HXX_INCLUDED
# define YY_EXPTOCAS_EXPTOCASEXE_EXPTOCAS_TAB_HXX_INCLUDED
// "%code requires" blocks.
#include <OSD_OpenFile.hxx>
#include <TCollection_HAsciiString.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <Express_HSequenceOfField.hxx>
#include <Express_HSequenceOfItem.hxx>
#include <Express_Field.hxx>
#include <Express_Item.hxx>
#include <Express_Enum.hxx>
#include <Express_Alias.hxx>
#include <Express_Select.hxx>
#include <Express_Entity.hxx>
#include <Express_Type.hxx>
#include <Express_NamedType.hxx>
#include <Express_PredefinedType.hxx>
#include <Express_Number.hxx>
#include <Express_Integer.hxx>
#include <Express_Boolean.hxx>
#include <Express_Logical.hxx>
#include <Express_Real.hxx>
#include <Express_String.hxx>
#include <Express_ComplexType.hxx>
#include <Express_Array.hxx>
#include <Express_List.hxx>
#include <Express_Set.hxx>
#include <Express_Bag.hxx>
#include <Express_Schema.hxx>
#include <Express_Reference.hxx>
#include <Express.hxx>
namespace exptocas {
class scanner;
};
#ifdef _MSC_VER
// disable MSVC warning C4522: 'exptocas::parser::stack_symbol_type': multiple assignment operators
#pragma warning(disable: 4522)
#endif
# include <cstdlib> // std::abort
# include <iostream>
# include <stdexcept>
# include <string>
# include <vector>
#if defined __cplusplus
# define YY_CPLUSPLUS __cplusplus
#else
# define YY_CPLUSPLUS 199711L
#endif
// Support move semantics when possible.
#if 201103L <= YY_CPLUSPLUS
# define YY_MOVE std::move
# define YY_MOVE_OR_COPY move
# define YY_MOVE_REF(Type) Type&&
# define YY_RVREF(Type) Type&&
# define YY_COPY(Type) Type
#else
# define YY_MOVE
# define YY_MOVE_OR_COPY copy
# define YY_MOVE_REF(Type) Type&
# define YY_RVREF(Type) const Type&
# define YY_COPY(Type) const Type&
#endif
// Support noexcept when possible.
#if 201103L <= YY_CPLUSPLUS
# define YY_NOEXCEPT noexcept
# define YY_NOTHROW
#else
# define YY_NOEXCEPT
# define YY_NOTHROW throw ()
#endif
// Support constexpr when possible.
#if 201703 <= YY_CPLUSPLUS
# define YY_CONSTEXPR constexpr
#else
# define YY_CONSTEXPR
#endif
#ifndef YY_ATTRIBUTE_PURE
# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
# else
# define YY_ATTRIBUTE_PURE
# endif
#endif
#ifndef YY_ATTRIBUTE_UNUSED
# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
# else
# define YY_ATTRIBUTE_UNUSED
# endif
#endif
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
#else
# define YYUSE(E) /* empty */
#endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
#endif
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
# define YY_IGNORE_USELESS_CAST_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
# define YY_IGNORE_USELESS_CAST_END \
_Pragma ("GCC diagnostic pop")
#endif
#ifndef YY_IGNORE_USELESS_CAST_BEGIN
# define YY_IGNORE_USELESS_CAST_BEGIN
# define YY_IGNORE_USELESS_CAST_END
#endif
# ifndef YY_CAST
# ifdef __cplusplus
# define YY_CAST(Type, Val) static_cast<Type> (Val)
# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
# else
# define YY_CAST(Type, Val) ((Type) (Val))
# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
# endif
# endif
# ifndef YY_NULLPTR
# if defined __cplusplus
# if 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# else
# define YY_NULLPTR ((void*)0)
# endif
# endif
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
namespace exptocas {
/// A Bison parser.
class parser
{
public:
#ifndef YYSTYPE
/// Symbol semantic values.
union semantic_type
{
int num;
char *str;
TColStd_HSequenceOfHAsciiString *tlist;
Express_HSequenceOfField *flist;
Express_HSequenceOfItem *ilist;
Express_Field *field;
Express_Item *item;
Express_Type *type;
Express_Schema *schema;
Express_Reference *ref;
};
#else
typedef YYSTYPE semantic_type;
#endif
/// Syntax errors thrown from user actions.
struct syntax_error : std::runtime_error
{
syntax_error (const std::string& m)
: std::runtime_error (m)
{}
syntax_error (const syntax_error& s)
: std::runtime_error (s.what ())
{}
~syntax_error () YY_NOEXCEPT YY_NOTHROW;
};
/// Token kinds.
struct token
{
enum token_kind_type
{
YYEMPTY = -2,
YYEOF = 0, // "end of file"
YYerror = 256, // error
YYUNDEF = 257, // "invalid token"
KSCHEM = 258, // KSCHEM
KENDS = 259, // KENDS
KTYP = 260, // KTYP
KENDT = 261, // KENDT
KENT = 262, // KENT
KENDE = 263, // KENDE
KREF = 264, // KREF
KFROM = 265, // KFROM
KSEL = 266, // KSEL
KENUM = 267, // KENUM
KLIST = 268, // KLIST
KARR = 269, // KARR
KBAG = 270, // KBAG
KSET = 271, // KSET
KOF = 272, // KOF
KNUM = 273, // KNUM
KINT = 274, // KINT
KDBL = 275, // KDBL
KSTR = 276, // KSTR
KLOG = 277, // KLOG
KBOOL = 278, // KBOOL
KOPT = 279, // KOPT
KUNIQ = 280, // KUNIQ
KSELF = 281, // KSELF
KABSTR = 282, // KABSTR
KSUBT = 283, // KSUBT
KSPRT = 284, // KSPRT
KANDOR = 285, // KANDOR
K1OF = 286, // K1OF
KAND = 287, // KAND
NUMBER = 288, // NUMBER
NAME = 289 // NAME
};
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type yytokentype;
};
/// Token kind, as returned by yylex.
typedef token::yytokentype token_kind_type;
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type token_type;
/// Symbol kinds.
struct symbol_kind
{
enum symbol_kind_type
{
YYNTOKENS = 46, ///< Number of tokens.
S_YYEMPTY = -2,
S_YYEOF = 0, // "end of file"
S_YYerror = 1, // error
S_YYUNDEF = 2, // "invalid token"
S_KSCHEM = 3, // KSCHEM
S_KENDS = 4, // KENDS
S_KTYP = 5, // KTYP
S_KENDT = 6, // KENDT
S_KENT = 7, // KENT
S_KENDE = 8, // KENDE
S_KREF = 9, // KREF
S_KFROM = 10, // KFROM
S_KSEL = 11, // KSEL
S_KENUM = 12, // KENUM
S_KLIST = 13, // KLIST
S_KARR = 14, // KARR
S_KBAG = 15, // KBAG
S_KSET = 16, // KSET
S_KOF = 17, // KOF
S_KNUM = 18, // KNUM
S_KINT = 19, // KINT
S_KDBL = 20, // KDBL
S_KSTR = 21, // KSTR
S_KLOG = 22, // KLOG
S_KBOOL = 23, // KBOOL
S_KOPT = 24, // KOPT
S_KUNIQ = 25, // KUNIQ
S_KSELF = 26, // KSELF
S_KABSTR = 27, // KABSTR
S_KSUBT = 28, // KSUBT
S_KSPRT = 29, // KSPRT
S_KANDOR = 30, // KANDOR
S_K1OF = 31, // K1OF
S_KAND = 32, // KAND
S_NUMBER = 33, // NUMBER
S_NAME = 34, // NAME
S_35_ = 35, // ','
S_36_ = 36, // ';'
S_37_ = 37, // '='
S_38_ = 38, // '('
S_39_ = 39, // ')'
S_40_ = 40, // '['
S_41_ = 41, // ':'
S_42_ = 42, // ']'
S_43_ = 43, // '?'
S_44_ = 44, // '\\'
S_45_ = 45, // '.'
S_YYACCEPT = 46, // $accept
S_SCHEMA = 47, // SCHEMA
S_ILIST = 48, // ILIST
S_ITEM = 49, // ITEM
S_ENUM = 50, // ENUM
S_SELECT = 51, // SELECT
S_ALIAS = 52, // ALIAS
S_ENTITY = 53, // ENTITY
S_REFERENCE = 54, // REFERENCE
S_TLIST = 55, // TLIST
S_TLIST1 = 56, // TLIST1
S_TYPE = 57, // TYPE
S_TSTD = 58, // TSTD
S_TNAME = 59, // TNAME
S_TSET = 60, // TSET
S_INDEX = 61, // INDEX
S_OPTUNI = 62, // OPTUNI
S_SUBT = 63, // SUBT
S_SUPERT = 64, // SUPERT
S_SUPLST = 65, // SUPLST
S_FLIST = 66, // FLIST
S_FLIST1 = 67, // FLIST1
S_FIELD = 68, // FIELD
S_REDEF = 69, // REDEF
S_SPECIF = 70, // SPECIF
S_OPTNL = 71, // OPTNL
S_UNIQIT = 72, // UNIQIT
S_UNIQLS = 73, // UNIQLS
S_UNIQUE = 74, // UNIQUE
S_SPCLST = 75 // SPCLST
};
};
/// (Internal) symbol kind.
typedef symbol_kind::symbol_kind_type symbol_kind_type;
/// The number of tokens.
static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
/// A complete symbol.
///
/// Expects its Base type to provide access to the symbol kind
/// via kind ().
///
/// Provide access to semantic value.
template <typename Base>
struct basic_symbol : Base
{
/// Alias to Base.
typedef Base super_type;
/// Default constructor.
basic_symbol ()
: value ()
{}
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
basic_symbol (basic_symbol&& that)
: Base (std::move (that))
, value (std::move (that.value))
{}
#endif
/// Copy constructor.
basic_symbol (const basic_symbol& that);
/// Constructor for valueless symbols.
basic_symbol (typename Base::kind_type t);
/// Constructor for symbols with semantic value.
basic_symbol (typename Base::kind_type t,
YY_RVREF (semantic_type) v);
/// Destroy the symbol.
~basic_symbol ()
{
clear ();
}
/// Destroy contents, and record that is empty.
void clear ()
{
Base::clear ();
}
#if YYDEBUG || 0
/// The user-facing name of this symbol.
const char *name () const YY_NOEXCEPT
{
return parser::symbol_name (this->kind ());
}
#endif // #if YYDEBUG || 0
/// Backward compatibility (Bison 3.6).
symbol_kind_type type_get () const YY_NOEXCEPT;
/// Whether empty.
bool empty () const YY_NOEXCEPT;
/// Destructive move, \a s is emptied into this.
void move (basic_symbol& s);
/// The semantic value.
semantic_type value;
private:
#if YY_CPLUSPLUS < 201103L
/// Assignment operator.
basic_symbol& operator= (const basic_symbol& that);
#endif
};
/// Type access provider for token (enum) based symbols.
struct by_kind
{
/// Default constructor.
by_kind ();
#if 201103L <= YY_CPLUSPLUS
/// Move constructor.
by_kind (by_kind&& that);
#endif
/// Copy constructor.
by_kind (const by_kind& that);
/// The symbol kind as needed by the constructor.
typedef token_kind_type kind_type;
/// Constructor from (external) token numbers.
by_kind (kind_type t);
/// Record that this symbol is empty.
void clear ();
/// Steal the symbol kind from \a that.
void move (by_kind& that);
/// The (internal) type number (corresponding to \a type).
/// \a empty when empty.
symbol_kind_type kind () const YY_NOEXCEPT;
/// Backward compatibility (Bison 3.6).
symbol_kind_type type_get () const YY_NOEXCEPT;
/// The symbol kind.
/// \a S_YYEMPTY when empty.
symbol_kind_type kind_;
};
/// Backward compatibility for a private implementation detail (Bison 3.6).
typedef by_kind by_type;
/// "External" symbols: returned by the scanner.
struct symbol_type : basic_symbol<by_kind>
{};
/// Build a parser object.
parser (exptocas::scanner* scanner_yyarg);
virtual ~parser ();
#if 201103L <= YY_CPLUSPLUS
/// Non copyable.
parser (const parser&) = delete;
/// Non copyable.
parser& operator= (const parser&) = delete;
#endif
/// Parse. An alias for parse ().
/// \returns 0 iff parsing succeeded.
int operator() ();
/// Parse.
/// \returns 0 iff parsing succeeded.
virtual int parse ();
#if YYDEBUG
/// The current debugging stream.
std::ostream& debug_stream () const YY_ATTRIBUTE_PURE;
/// Set the current debugging stream.
void set_debug_stream (std::ostream &);
/// Type for debugging levels.
typedef int debug_level_type;
/// The current debugging level.
debug_level_type debug_level () const YY_ATTRIBUTE_PURE;
/// Set the current debugging level.
void set_debug_level (debug_level_type l);
#endif
/// Report a syntax error.
/// \param msg a description of the syntax error.
virtual void error (const std::string& msg);
/// Report a syntax error.
void error (const syntax_error& err);
#if YYDEBUG || 0
/// The user-facing name of the symbol whose (internal) number is
/// YYSYMBOL. No bounds checking.
static const char *symbol_name (symbol_kind_type yysymbol);
#endif // #if YYDEBUG || 0
private:
#if YY_CPLUSPLUS < 201103L
/// Non copyable.
parser (const parser&);
/// Non copyable.
parser& operator= (const parser&);
#endif
/// Stored state numbers (used for stacks).
typedef unsigned char state_type;
/// Compute post-reduction state.
/// \param yystate the current state
/// \param yysym the nonterminal to push on the stack
static state_type yy_lr_goto_state_ (state_type yystate, int yysym);
/// Whether the given \c yypact_ value indicates a defaulted state.
/// \param yyvalue the value to check
static bool yy_pact_value_is_default_ (int yyvalue);
/// Whether the given \c yytable_ value indicates a syntax error.
/// \param yyvalue the value to check
static bool yy_table_value_is_error_ (int yyvalue);
static const short yypact_ninf_;
static const signed char yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals
/// are valid, yet not members of the token_type enum.
static symbol_kind_type yytranslate_ (int t);
#if YYDEBUG || 0
/// For a symbol, its name in clear.
static const char* const yytname_[];
#endif // #if YYDEBUG || 0
// Tables.
// YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
// STATE-NUM.
static const short yypact_[];
// YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
// Performed when YYTABLE does not specify something else to do. Zero
// means the default is an error.
static const signed char yydefact_[];
// YYPGOTO[NTERM-NUM].
static const short yypgoto_[];
// YYDEFGOTO[NTERM-NUM].
static const short yydefgoto_[];
// YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
// positive, shift that token. If negative, reduce the rule whose
// number is the opposite. If YYTABLE_NINF, syntax error.
static const unsigned char yytable_[];
static const short yycheck_[];
// YYSTOS[STATE-NUM] -- The (internal number of the) accessing
// symbol of state STATE-NUM.
static const signed char yystos_[];
// YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
static const signed char yyr1_[];
// YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
static const signed char yyr2_[];
#if YYDEBUG
// YYRLINE[YYN] -- Source line where rule number YYN was defined.
static const short yyrline_[];
/// Report on the debug stream that the rule \a r is going to be reduced.
virtual void yy_reduce_print_ (int r) const;
/// Print the state stack on the debug stream.
virtual void yy_stack_print_ () const;
/// Debugging level.
int yydebug_;
/// Debug stream.
std::ostream* yycdebug_;
/// \brief Display a symbol kind, value and location.
/// \param yyo The output stream.
/// \param yysym The symbol.
template <typename Base>
void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
#endif
/// \brief Reclaim the memory associated to a symbol.
/// \param yymsg Why this token is reclaimed.
/// If null, print nothing.
/// \param yysym The symbol.
template <typename Base>
void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
private:
/// Type access provider for state based symbols.
struct by_state
{
/// Default constructor.
by_state () YY_NOEXCEPT;
/// The symbol kind as needed by the constructor.
typedef state_type kind_type;
/// Constructor.
by_state (kind_type s) YY_NOEXCEPT;
/// Copy constructor.
by_state (const by_state& that) YY_NOEXCEPT;
/// Record that this symbol is empty.
void clear () YY_NOEXCEPT;
/// Steal the symbol kind from \a that.
void move (by_state& that);
/// The symbol kind (corresponding to \a state).
/// \a symbol_kind::S_YYEMPTY when empty.
symbol_kind_type kind () const YY_NOEXCEPT;
/// The state number used to denote an empty symbol.
/// We use the initial state, as it does not have a value.
enum { empty_state = 0 };
/// The state.
/// \a empty when empty.
state_type state;
};
/// "Internal" symbol: element of the stack.
struct stack_symbol_type : basic_symbol<by_state>
{
/// Superclass.
typedef basic_symbol<by_state> super_type;
/// Construct an empty symbol.
stack_symbol_type ();
/// Move or copy construction.
stack_symbol_type (YY_RVREF (stack_symbol_type) that);
/// Steal the contents from \a sym to build this.
stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
#if YY_CPLUSPLUS < 201103L
/// Assignment, needed by push_back by some old implementations.
/// Moves the contents of that.
stack_symbol_type& operator= (stack_symbol_type& that);
/// Assignment, needed by push_back by other implementations.
/// Needed by some other old implementations.
stack_symbol_type& operator= (const stack_symbol_type& that);
#endif
};
/// A stack with random access from its top.
template <typename T, typename S = std::vector<T> >
class stack
{
public:
// Hide our reversed order.
typedef typename S::iterator iterator;
typedef typename S::const_iterator const_iterator;
typedef typename S::size_type size_type;
typedef typename std::ptrdiff_t index_type;
stack (size_type n = 200)
: seq_ (n)
{}
#if 201103L <= YY_CPLUSPLUS
/// Non copyable.
stack (const stack&) = delete;
/// Non copyable.
stack& operator= (const stack&) = delete;
#endif
/// Random access.
///
/// Index 0 returns the topmost element.
const T&
operator[] (index_type i) const
{
return seq_[size_type (size () - 1 - i)];
}
/// Random access.
///
/// Index 0 returns the topmost element.
T&
operator[] (index_type i)
{
return seq_[size_type (size () - 1 - i)];
}
/// Steal the contents of \a t.
///
/// Close to move-semantics.
void
push (YY_MOVE_REF (T) t)
{
seq_.push_back (T ());
operator[] (0).move (t);
}
/// Pop elements from the stack.
void
pop (std::ptrdiff_t n = 1) YY_NOEXCEPT
{
for (; 0 < n; --n)
seq_.pop_back ();
}
/// Pop all elements from the stack.
void
clear () YY_NOEXCEPT
{
seq_.clear ();
}
/// Number of elements on the stack.
index_type
size () const YY_NOEXCEPT
{
return index_type (seq_.size ());
}
/// Iterator on top of the stack (going downwards).
const_iterator
begin () const YY_NOEXCEPT
{
return seq_.begin ();
}
/// Bottom of the stack.
const_iterator
end () const YY_NOEXCEPT
{
return seq_.end ();
}
/// Present a slice of the top of a stack.
class slice
{
public:
slice (const stack& stack, index_type range)
: stack_ (stack)
, range_ (range)
{}
const T&
operator[] (index_type i) const
{
return stack_[range_ - i];
}
private:
const stack& stack_;
index_type range_;
};
private:
#if YY_CPLUSPLUS < 201103L
/// Non copyable.
stack (const stack&);
/// Non copyable.
stack& operator= (const stack&);
#endif
/// The wrapped container.
S seq_;
};
/// Stack type.
typedef stack<stack_symbol_type> stack_type;
/// The stack.
stack_type yystack_;
/// Push a new state on the stack.
/// \param m a debug message to display
/// if null, no trace is output.
/// \param sym the symbol
/// \warning the contents of \a s.value is stolen.
void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
/// Push a new look ahead token on the state on the stack.
/// \param m a debug message to display
/// if null, no trace is output.
/// \param s the state
/// \param sym the symbol (for its value and location).
/// \warning the contents of \a sym.value is stolen.
void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
/// Pop \a n symbols from the stack.
void yypop_ (int n = 1);
/// Constants.
enum
{
yylast_ = 164, ///< Last index in yytable_.
yynnts_ = 30, ///< Number of nonterminal symbols.
yyfinal_ = 4 ///< Termination state number.
};
// User arguments.
exptocas::scanner* scanner;
};
} // exptocas
// "%code provides" blocks.
#if !defined(yyFlexLexer) && !defined(FlexLexerOnce)
#define yyFlexLexer exptocasFlexLexer
#include "FlexLexer.h"
#endif
namespace exptocas {
// To feed data back to bison, the yylex method needs yylval and
// yylloc parameters. Since the exptocasFlexLexer class is defined in the
// system header <FlexLexer.h> the signature of its yylex() method
// can not be changed anymore. This makes it necessary to derive a
// scanner class that provides a method with the desired signature:
class scanner : public exptocasFlexLexer
{
public:
explicit scanner(std::istream* in = 0, std::ostream* out = 0);
int lex(exptocas::parser::semantic_type* yylval);
};
};
#endif // !YY_EXPTOCAS_EXPTOCASEXE_EXPTOCAS_TAB_HXX_INCLUDED

View File

@@ -1,506 +0,0 @@
/*
Copyright (c) 1999-2022 OPEN CASCADE SAS
This file is part of Open CASCADE Technology software library.
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License version 2.1 as published
by the Free Software Foundation, with special exception defined in the file
OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
distribution for complete text of the license and disclaimer of any warranty.
Alternatively, this file may be used under the terms of Open CASCADE
commercial license or contractual agreement.
*/
%code top {
// Created: Thu Oct 28 12:21:16 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
/*****************************************************************************
This YACC parser implements parsing algorithm for EXPRESS -> CASCADE/XSTEP
classes generator
Input in the form of tokens is obtained from lexical analyser. Then, data
structure representing schema is created on the basis of grammar analysis.
NOTE: The grammar currently implemented is not full.
FUNCTION, RULE and CONSTANT items, WHERE, INVERSE and DERIVE clauses
of TYPE and ENTITY items are not considered (ignored on the level of lexical
scanner).
SUPERTYPE and UNIQUE clauses of ENTITY item are recognized but ignored.
Also, complex constructs such as using call to function in dimensions of
complex time or redefinition of inherited field are ignored.
*****************************************************************************/
}
%language "C++"
%require "3.2"
%parse-param {exptocas::scanner* scanner}
%code requires {
#include <OSD_OpenFile.hxx>
#include <TCollection_HAsciiString.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <Express_HSequenceOfField.hxx>
#include <Express_HSequenceOfItem.hxx>
#include <Express_Field.hxx>
#include <Express_Item.hxx>
#include <Express_Enum.hxx>
#include <Express_Alias.hxx>
#include <Express_Select.hxx>
#include <Express_Entity.hxx>
#include <Express_Type.hxx>
#include <Express_NamedType.hxx>
#include <Express_PredefinedType.hxx>
#include <Express_Number.hxx>
#include <Express_Integer.hxx>
#include <Express_Boolean.hxx>
#include <Express_Logical.hxx>
#include <Express_Real.hxx>
#include <Express_String.hxx>
#include <Express_ComplexType.hxx>
#include <Express_Array.hxx>
#include <Express_List.hxx>
#include <Express_Set.hxx>
#include <Express_Bag.hxx>
#include <Express_Schema.hxx>
#include <Express_Reference.hxx>
#include <Express.hxx>
namespace exptocas {
class scanner;
};
#ifdef _MSC_VER
// disable MSVC warning C4522: 'exptocas::parser::stack_symbol_type': multiple assignment operators
#pragma warning(disable: 4522)
#endif
}
%code {
#undef yylex
#define yylex scanner->lex
// disable MSVC warnings in bison code
#ifdef _MSC_VER
#pragma warning(disable:4244 4800)
#endif
/************************************************/
/* ERROR MESSAGE FUNCTION */
/* external functions (from exptocas.l) */
int ec_error ( const std::string& s, const std::string& text );
int ec_curline ( void );
//int yyerror ( char *s )
//{
// printf ( "\nParse error at line %d: %s\n", ec_curline(), s );
// return 0;
//}
/************************************************/
/* FUNCTIONS FOR CREATING SCHEMA REPRESENTATION */
static Express_Schema *mkschema ( char *name, Express_HSequenceOfItem *ilist );
static Express_HSequenceOfItem *mkilist ( Express_Item *item, Express_HSequenceOfItem *seq );
static Express_Item *mkenum ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
static Express_Item *mkselect ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
static Express_Item *mkalias ( char *name, Express_Type *type );
static Express_Item *mkentity ( char *name, TColStd_HSequenceOfHAsciiString *inherit,
Express_HSequenceOfField *field, int isabstract );
static Express_Reference *mkrefs ( char *name, TColStd_HSequenceOfHAsciiString *items);
static TColStd_HSequenceOfHAsciiString *mktlist ( char *name, TColStd_HSequenceOfHAsciiString *tlist );
static TColStd_HSequenceOfHAsciiString *mktlists ( TColStd_HSequenceOfHAsciiString *tlist1, TColStd_HSequenceOfHAsciiString *tlist2 );
static Express_Type *mktstd ( int keyword );
static Express_Type *mktname ( char *name );
static Express_Type *mktset ( int keyword, int ilow, int ihigh, Express_Type *of );
static Express_Field *mkfield ( char *name, Express_Type *type, int optional );
static Express_HSequenceOfField *mkflist ( Express_Field *field, Express_HSequenceOfField *seq );
}
%code provides {
#if !defined(yyFlexLexer) && !defined(FlexLexerOnce)
#define yyFlexLexer exptocasFlexLexer
#include "FlexLexer.h"
#endif
namespace exptocas {
// To feed data back to bison, the yylex method needs yylval and
// yylloc parameters. Since the exptocasFlexLexer class is defined in the
// system header <FlexLexer.h> the signature of its yylex() method
// can not be changed anymore. This makes it necessary to derive a
// scanner class that provides a method with the desired signature:
class scanner : public exptocasFlexLexer
{
public:
explicit scanner(std::istream* in = 0, std::ostream* out = 0);
int lex(exptocas::parser::semantic_type* yylval);
};
};
}
/* Definition of possible types of expressions */
%union {
int num;
char *str;
TColStd_HSequenceOfHAsciiString *tlist;
Express_HSequenceOfField *flist;
Express_HSequenceOfItem *ilist;
Express_Field *field;
Express_Item *item;
Express_Type *type;
Express_Schema *schema;
Express_Reference *ref;
}
/* Definition of keywords */
%token <num> KSCHEM /* SCHEMA keyword */
%token <num> KENDS /* END_SCHEMA keyword */
%token <num> KTYP /* TYPE keyword */
%token <num> KENDT /* END_TYPE keyword */
%token <num> KENT /* ENTITY keyword */
%token <num> KENDE /* END_ENTITY keyword */
%token <num> KREF /* REFERENCE keyword */
%token <num> KFROM /* FROM keyword */
%token <num> KSEL /* SELECT keyword */
%token <num> KENUM /* ENUMERATION keyword */
%token <num> KLIST /* LIST keyword */
%token <num> KARR /* ARRAY keyword */
%token <num> KBAG /* BAG keyword */
%token <num> KSET /* SET keyword */
%token <num> KOF /* OF keyword */
%token <num> KNUM /* NUMBER keyword */
%token <num> KINT /* INTEGER keyword */
%token <num> KDBL /* REAL keyword */
%token <num> KSTR /* STRING keyword */
%token <num> KLOG /* LOGICAL keyword */
%token <num> KBOOL /* BOOLEAN keyword */
%token <num> KOPT /* OPTIONAL keyword */
%token <num> KUNIQ /* UNIQUE keyword */
%token <num> KSELF /* SELF keyword */
%token <num> KABSTR /* ABSTRACT keyword */
%token <num> KSUBT /* SUBTYPE keyword */
%token <num> KSPRT /* SUPERTYPE keyword */
%left <num> KANDOR /* ANDOR keyword (%left is for eliminating shift/reduce conflict on SUPLST) */
%left <num> K1OF /* ONEOF keyword */
%token <num> KAND /* AND keyword */
%token <num> NUMBER /* integer value */
%token <str> NAME /* name of type or entity */
%left ',' /* to eliminate shift/reduce conflict in SUPERTYPE */
/* Definition of expressions and their types */
%type <num> INDEX OPTNL OPTUNI SUPERT SUPLST REDEF SPCLST
%type <tlist> TLIST TLIST1 UNIQIT UNIQLS UNIQUE SUBT SPECIF
%type <type> TYPE TSTD TNAME TSET
%type <item> ENUM SELECT ALIAS ENTITY ITEM
%type <ilist> ILIST
%type <field> FIELD
%type <flist> FLIST FLIST1
%type <schema> SCHEMA
%type <ref> REFERENCE
%%
/************************************************/
/* Definition of parsing rules (expressions) */
/************************************************/
SCHEMA: KSCHEM NAME ';' ILIST KENDS ';' { $$ = mkschema ( $2, $4 ); /* Root: EXPRESS schema */ }
;
ILIST : ITEM { $$ = mkilist ( $1, 0 ); /* list of items for schema */ }
| ITEM ILIST { $$ = mkilist ( $1, $2 ); }
;
ITEM : ENUM
| SELECT
| ALIAS
| REFERENCE
| ENTITY { $$ = $1; /* item of schema (type definition) */ }
;
ENUM : KTYP NAME '=' KENUM KOF TLIST1 ';' KENDT ';' { $$ = mkenum ( $2, $6 ); /* TYPE ENUMERATION definition */ }
;
SELECT: KTYP NAME '=' KSEL TLIST1 ';' KENDT ';' { $$ = mkselect ( $2, $5 ); /* TYPE SELECT definition */ }
;
ALIAS : KTYP NAME '=' TYPE ';' KENDT ';' { $$ = mkalias ( $2, $4 ); /* TYPE '=' definition (alias) */ }
;
ENTITY: KENT NAME SUPERT SUBT ';' FLIST1 UNIQUE KENDE ';' { $$ = mkentity ( $2, $4, $6, 0 ); /* ENTITY definition */ }
| KENT NAME KABSTR SUPERT SUBT ';' FLIST1 UNIQUE KENDE ';' { $$ = mkentity ( $2, $5, $7, 1 ); /* ENTITY definition */ }
;
REFERENCE: KREF KFROM NAME TLIST1 ';' { $$ = mkrefs ( $3, $4 ); /* REFERENCE FROM definition */ }
;
TLIST : NAME { $$ = mktlist ( $1, 0 ); /* list of (type) names */ }
| NAME ',' TLIST { $$ = mktlist ( $1, $3 ); }
;
TLIST1: '(' TLIST ')' { $$ = $2; /* TLIST in brackets */ }
;
TYPE : TSTD
| TNAME
| TSET { $$ = $1; /* type, simple or complex */ }
;
TSTD : KINT { $$ = mktstd ( $1 ); /* predefined type: INTEGER */ }
| KNUM { $$ = mktstd ( $1 ); /* predefined type: NUMBER */ }
| KDBL { $$ = mktstd ( $1 ); /* predefined type: REAL */ }
| KSTR { $$ = mktstd ( $1 ); /* predefined type: STRING */ }
| KLOG { $$ = mktstd ( $1 ); /* predefined type: LOGICAL */ }
| KBOOL { $$ = mktstd ( $1 ); /* predefined type: BOOLEAN */ }
;
TNAME : NAME { $$ = mktname ( $1 ); /* named type */ }
;
TSET : KLIST '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: LIST */ }
| KARR '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: ARRAY */ }
| KSET '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: SET */ }
| KBAG '[' INDEX ':' INDEX ']' KOF OPTUNI TYPE { $$ = mktset ( $1, $3, $5, $9 ); /* complex type: BAG */ }
;
INDEX : NUMBER { $$ = $1; /* index for array, set, bag, list range */ }
| '?' { $$ = -1; /* undefined */ }
| NAME '(' NAME ')' {$$ = -1; printf ( "Warning at line %d: index function %s(%s) ignored\n", ec_curline(), $1, $3 ); /* some function.. */ }
;
OPTUNI: /* empty */ { $$ = 0; /* UNIQUE keyword for complex type definition */ }
| KUNIQ { $$ = 1; }
;
SUBT : /* empty */ { $$ = NULL; /* no subtype clause */ }
| KSUBT KOF TLIST1 { $$ = $3; /* subtype clause */ }
;
SUPERT: /* empty */ { $$ = 0; /* no supertype clause */ }
| KSPRT { $$ = 0; /* supertype clause (ignored) */ }
| KSPRT KOF SUPLST { $$ = 0; /* supertype clause (ignored) */ }
;
SUPLST: NAME { $$ = 0; /* simple list of supertypes */ }
| '(' SUPLST ')' { $$ = 0; /* allow bracketing */ }
| NAME ',' SUPLST { $$ = 0; /* ... */ }
| K1OF SUPLST { $$ = 0; /* ONEOF construct */ }
| SUPLST KANDOR SUPLST { $$ = 0; /* ANDOR construct */ }
;
FLIST : FIELD { $$ = mkflist ( $1, 0 ); /* list of fields of ENTITY item */ }
| FIELD FLIST { $$ = mkflist ( $1, $2 ); }
| REDEF { $$ = 0; /* redefinition of inherited field, just skip */ }
| REDEF FLIST { $$ = $2; /* ignore redefinition of inherited field, take trailing list */ }
;
FLIST1: /* empty */ { $$ = NULL; /* empty list of fields */ }
| FLIST { $$ = $1; /* or not empty.. just to fix reduce/reduce conflict */ }
;
FIELD : NAME ':' OPTNL TYPE ';' { $$ = mkfield ( $1, $4, $3 ); }
;
REDEF : KSELF '\\' SPECIF ':' TYPE ';' { $$ = 0; printf ( "Warning at line %d: field redefinition ignored\n", ec_curline() ); /* redefinition of inherited field */ }
;
SPECIF: NAME { $$ = mktlist ( $1, 0 ); /* inherited field specification */ }
| NAME '.' SPECIF { $$ = mktlist ( $1, $3 ); }
;
OPTNL : /* empty */ { $$ = 0; }
| KOPT { $$ = 1; }
;
UNIQIT: NAME ':' TLIST ';' { $$ = $3; /* UNIQUE statement */ }
| NAME ':' SPCLST ';' { $$ = NULL; /* UNIQUE statement */ }
;
UNIQLS: UNIQIT { $$ = NULL; /* list of 1 UNIQUE statements */ }
| UNIQIT UNIQLS { $$ = mktlists ( $1, $2 );/* list of UNIQUE statements */ }
;
UNIQUE: /* empty */ { $$ = NULL; /* no UNIQUE clause in ENTITY */ }
| KUNIQ UNIQLS { $$ = $2; /* UNIQUE clause in ENTITY */ }
;
SPCLST: KSELF '\\' SPECIF { $$ = 0; /* list of specifications */ }
| KSELF '\\' SPECIF ',' SPCLST { $$ = 0; }
| NAME ',' SPCLST { $$ = 0; }
;
%%
/************************************************/
/* FUNCTIONS FOR CREATING SCHEMA REPRESENTATION */
static Express_Schema *mkschema ( char *name, Express_HSequenceOfItem *ilist )
{
Express_Schema *sch = new Express_Schema ( name, ilist );
Express::Schema() = sch;
return sch;
}
static Express_HSequenceOfItem *mkilist ( Express_Item *item, Express_HSequenceOfItem *seq )
{
if ( ! seq ) {
seq = new Express_HSequenceOfItem;
seq->Append ( item );
}
else seq->Prepend ( item );
return seq;
}
static Express_Item *mkenum ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
{
return new Express_Enum ( name, tlist );
}
static Express_Item *mkselect ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
{
return new Express_Select ( name, tlist );
}
static Express_Item *mkalias ( char *name, Express_Type *type )
{
return new Express_Alias ( name, type );
}
static Express_Item *mkentity ( char *name, TColStd_HSequenceOfHAsciiString *inherit,
Express_HSequenceOfField *field, int isabstract )
{
Express_Entity *ent = new Express_Entity ( name, inherit, field );
if ( isabstract ) ent->SetAbstractFlag ( Standard_True );
return ent;
}
static Express_Reference *mkrefs ( char *name, TColStd_HSequenceOfHAsciiString *items)
{
return new Express_Reference ( name, items );
}
static TColStd_HSequenceOfHAsciiString *mktlist ( char *name, TColStd_HSequenceOfHAsciiString *tlist )
{
Handle(TCollection_HAsciiString) str = new TCollection_HAsciiString ( name );
if ( tlist ) tlist->Prepend ( str );
else {
tlist = new TColStd_HSequenceOfHAsciiString;
tlist->Append ( str );
}
return tlist;
}
static TColStd_HSequenceOfHAsciiString *mktlists ( TColStd_HSequenceOfHAsciiString *tlist1,
TColStd_HSequenceOfHAsciiString *tlist2 )
{
if ( ! tlist1 ) return tlist2;
if ( ! tlist2 ) return tlist1;
for ( int i=1; i <= tlist2->Length(); i++ )
tlist1->Append ( tlist2->Value(i) );
return tlist1;
}
static Express_Type *mktstd ( int keyword )
{
switch ( keyword ) {
case exptocas::parser::token::KINT : return new Express_Integer;
case exptocas::parser::token::KNUM : return new Express_Number;
case exptocas::parser::token::KDBL : return new Express_Real;
case exptocas::parser::token::KSTR : return new Express_String;
case exptocas::parser::token::KBOOL: return new Express_Boolean;
case exptocas::parser::token::KLOG : return new Express_Logical;
default : ec_error ( "Predefined type not treated!", "" );
return NULL;
}
}
static Express_Type *mktname ( char *name )
{
return new Express_NamedType ( name );
}
static Express_Type *mktset ( int keyword, int ilow, int ihigh, Express_Type *of )
{
switch ( keyword ) {
case exptocas::parser::token::KLIST: return new Express_List ( ilow, ihigh, of );
case exptocas::parser::token::KARR : return new Express_Array ( ilow, ihigh, of );
case exptocas::parser::token::KBAG : return new Express_Bag ( ilow, ihigh, of );
case exptocas::parser::token::KSET : return new Express_Set ( ilow, ihigh, of );
default : ec_error ( "Complex type not treated!", "" );
return NULL;
}
}
static Express_Field *mkfield ( char *name, Express_Type *type, int optional )
{
return new Express_Field ( name, type, optional );
}
static Express_HSequenceOfField *mkflist ( Express_Field *field, Express_HSequenceOfField *seq )
{
if ( seq ) seq->Prepend ( field );
else {
seq = new Express_HSequenceOfField;
seq->Append ( field );
}
return seq;
}
/*******************************************************************/
/* MAIN & co */
/*
void tlistfree ( struct tlist *list )
{
if ( ! list ) return;
tlistfree ( list->next );
list->next = 0;
free ( list->str );
list->str = 0;
}
* /
int printtlist ( struct ec_tlist *tl )
{
int num=0;
while ( tl ) {
num++;
printf ( "%s\n", tl->name );
tl = tl->next;
}
return num;
}
int main ( void )
{
int num = 0;
yyparse();
printf ( "\nFinished\n" );
if ( schema ) {
struct ec_item *it;
it = schema->items;
printf ( "\nSchema %s", schema->name );
printf ( "\nItems:" );
while ( it ) {
num++;
printf ( "\n%s", it->name );
it = it->next;
}
// num = printtlist ( res );
printf ( "\nTotal %d", num );
}
// tlistfree ( yylval.tlist );
return num;
}
*/
void exptocas::parser::error(const std::string& s)
{
printf("\nParse error at line %d: %s\n", scanner->lineno(), s.c_str());
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,942 +0,0 @@
# Last update 27.10.2021
#===============================================
# package StepAP203
#===============================================
ApprovedItem StepAP203
CcDesignApproval StepAP203
CcDesignCertification StepAP203
CcDesignContract StepAP203
CcDesignDateAndTimeAssignment StepAP203
CcDesignPersonAndOrganizationAssignment StepAP203
CcDesignSecurityClassification StepAP203
CcDesignSpecificationReference StepAP203
CertifiedItem StepAP203
Change StepAP203
ChangeRequest StepAP203
ChangeRequestItem StepAP203
ClassifiedItem StepAP203
ContractedItem StepAP203
DateTimeItem StepAP203
PersonOrganizationItem StepAP203
SpecifiedItem StepAP203
StartRequest StepAP203
StartRequestItem StepAP203
StartWork StepAP203
WorkItem StepAP203
#===============================================
# package StepAP214
#===============================================
AppliedApprovalAssignment StepAP214
AppliedDateAndTimeAssignment StepAP214
AppliedDateAssignment StepAP214
AppliedDocumentReference StepAP214
AppliedExternalIdentificationAssignment StepAP214
AppliedGroupAssignment StepAP214
AppliedOrganizationAssignment StepAP214
AppliedPersonAndOrganizationAssignment StepAP214
AppliedPresentedItem StepAP214
AppliedSecurityClassificationAssignment StepAP214
ApprovalItem StepAP214
AutoDesignActualDateAndTimeAssignment StepAP214
AutoDesignActualDateAssignment StepAP214
AutoDesignApprovalAssignment StepAP214
AutoDesignDateAndPersonAssignment StepAP214
AutoDesignDateAndPersonItem StepAP214
AutoDesignDateAndTimeItem StepAP214
AutoDesignDatedItem StepAP214
AutoDesignDocumentReference StepAP214
AutoDesignGeneralOrgItem StepAP214
AutoDesignGroupAssignment StepAP214
AutoDesignGroupedItem StepAP214
AutoDesignNominalDateAndTimeAssignment StepAP214
AutoDesignNominalDateAssignment StepAP214
AutoDesignOrganizationAssignment StepAP214
AutoDesignOrganizationItem StepAP214
AutoDesignPersonAndOrganizationAssignment StepAP214
AutoDesignPresentedItem StepAP214
AutoDesignPresentedItemSelect StepAP214
AutoDesignReferencingItem StepAP214
AutoDesignSecurityClassificationAssignment StepAP214
Class StepAP214
DateAndTimeItem StepAP214
DateItem StepAP214
DocumentReferenceItem StepAP214
ExternalIdentificationItem StepAP214
ExternallyDefinedClass StepAP214
ExternallyDefinedGeneralProperty StepAP214
GroupItem StepAP214
OrganizationItem StepAP214
PersonAndOrganizationItem StepAP214
PresentedItemSelect StepAP214
Protocol StepAP214
RepItemGroup StepAP214
SecurityClassificationItem StepAP214
#===============================================
# package StepAP242
#===============================================
DraughtingModelItemAssociation StepAP242
GeometricItemSpecificUsage StepAP242
IdAttribute StepAP242
IdAttributeSelect StepAP242
ItemIdentifiedRepresentationUsage StepAP242
ItemIdentifiedRepresentationUsageDefinition StepAP242
#===============================================
# package StepBasic
#===============================================
Action StepBasic
ActionAssignment StepBasic
ActionMethod StepBasic
ActionRequestAssignment StepBasic
ActionRequestSolution StepBasic
Address StepBasic
AheadOrBehind StepBasic
ApplicationContext StepBasic
ApplicationContextElement StepBasic
ApplicationProtocolDefinition StepBasic
Approval StepBasic
ApprovalAssignment StepBasic
ApprovalDateTime StepBasic
ApprovalPersonOrganization StepBasic
ApprovalRelationship StepBasic
ApprovalRole StepBasic
ApprovalStatus StepBasic
AreaUnit StepBasic
CalendarDate StepBasic
Certification StepBasic
CertificationAssignment StepBasic
CertificationType StepBasic
CharacterizedObject StepBasic
Contract StepBasic
ContractAssignment StepBasic
ContractType StepBasic
ConversionBasedUnit StepBasic
ConversionBasedUnitAndAreaUnit StepBasic
ConversionBasedUnitAndLengthUnit StepBasic
ConversionBasedUnitAndMassUnit StepBasic
ConversionBasedUnitAndPlaneAngleUnit StepBasic
ConversionBasedUnitAndRatioUnit StepBasic
ConversionBasedUnitAndSolidAngleUnit StepBasic
ConversionBasedUnitAndTimeUnit StepBasic
ConversionBasedUnitAndVolumeUnit StepBasic
CoordinatedUniversalTimeOffset StepBasic
Date StepBasic
DateAndTime StepBasic
DateAndTimeAssignment StepBasic
DateAssignment StepBasic
DateRole StepBasic
DateTimeRole StepBasic
DateTimeSelect StepBasic
DerivedUnit StepBasic
DerivedUnitElement StepBasic
DesignContext StepBasic
DigitalDocument StepBasic
DimensionalExponents StepBasic
Document StepBasic
DocumentFile StepBasic
DocumentProductAssociation StepBasic
DocumentProductEquivalence StepBasic
DocumentReference StepBasic
DocumentRelationship StepBasic
DocumentRepresentationType StepBasic
DocumentType StepBasic
DocumentUsageConstraint StepBasic
Effectivity StepBasic
EffectivityAssignment StepBasic
EulerAngles StepBasic
ExternalIdentificationAssignment StepBasic
ExternallyDefinedItem StepBasic
ExternalSource StepBasic
GeneralProperty StepBasic
Group StepBasic
GroupAssignment StepBasic
GroupRelationship StepBasic
IdentificationAssignment StepBasic
IdentificationRole StepBasic
LengthMeasureWithUnit StepBasic
LengthUnit StepBasic
LocalTime StepBasic
MassMeasureWithUnit StepBasic
MassUnit StepBasic
MeasureValueMember StepBasic
MeasureWithUnit StepBasic
MechanicalContext StepBasic
NameAssignment StepBasic
NamedUnit StepBasic
ObjectRole StepBasic
OrdinalDate StepBasic
Organization StepBasic
OrganizationalAddress StepBasic
OrganizationAssignment StepBasic
OrganizationRole StepBasic
Person StepBasic
PersonalAddress StepBasic
PersonAndOrganization StepBasic
PersonAndOrganizationAssignment StepBasic
PersonAndOrganizationRole StepBasic
PersonOrganizationSelect StepBasic
PhysicallyModeledProductDefinition StepBasic
PlaneAngleMeasureWithUnit StepBasic
PlaneAngleUnit StepBasic
Product StepBasic
ProductCategory StepBasic
ProductCategoryRelationship StepBasic
ProductConceptContext StepBasic
ProductContext StepBasic
ProductDefinition StepBasic
ProductDefinitionContext StepBasic
ProductDefinitionEffectivity StepBasic
ProductDefinitionFormation StepBasic
ProductDefinitionFormationRelationship StepBasic
ProductDefinitionFormationWithSpecifiedSource StepBasic
ProductDefinitionOrReference StepBasic
ProductDefinitionReference StepBasic
ProductDefinitionReferenceWithLocalRepresentation StepBasic
ProductDefinitionRelationship StepBasic
ProductDefinitionWithAssociatedDocuments StepBasic
ProductOrFormationOrDefinition StepBasic
ProductRelatedProductCategory StepBasic
ProductType StepBasic
RatioMeasureWithUnit StepBasic
RatioUnit StepBasic
RoleAssociation StepBasic
RoleSelect StepBasic
SecurityClassification StepBasic
SecurityClassificationAssignment StepBasic
SecurityClassificationLevel StepBasic
SiPrefix StepBasic
SiUnit StepBasic
SiUnitAndAreaUnit StepBasic
SiUnitAndLengthUnit StepBasic
SiUnitAndMassUnit StepBasic
SiUnitAndPlaneAngleUnit StepBasic
SiUnitAndRatioUnit StepBasic
SiUnitAndSolidAngleUnit StepBasic
SiUnitAndThermodynamicTemperatureUnit StepBasic
SiUnitAndTimeUnit StepBasic
SiUnitAndVolumeUnit StepBasic
SiUnitName StepBasic
SizeMember StepBasic
SizeSelect StepBasic
SolidAngleMeasureWithUnit StepBasic
SolidAngleUnit StepBasic
Source StepBasic
SourceItem StepBasic
ThermodynamicTemperatureUnit StepBasic
TimeMeasureWithUnit StepBasic
TimeUnit StepBasic
UncertaintyMeasureWithUnit StepBasic
Unit StepBasic
VersionedActionRequest StepBasic
VolumeUnit StepBasic
WeekOfYearAndDayDate StepBasic
#===============================================
# package StepDimTol
#===============================================
AngularityTolerance StepDimTol
AreaUnitType StepDimTol
CircularRunoutTolerance StepDimTol
CoaxialityTolerance StepDimTol
CommonDatum StepDimTol
ConcentricityTolerance StepDimTol
CylindricityTolerance StepDimTol
Datum StepDimTol
DatumFeature StepDimTol
DatumOrCommonDatum StepDimTol
DatumReference StepDimTol
DatumReferenceCompartment StepDimTol
DatumReferenceElement StepDimTol
DatumReferenceModifier StepDimTol
DatumReferenceModifierType StepDimTol
DatumReferenceModifierWithValue StepDimTol
DatumSystem StepDimTol
DatumSystemOrReference StepDimTol
DatumTarget StepDimTol
FlatnessTolerance StepDimTol
GeneralDatumReference StepDimTol
GeometricTolerance StepDimTol
GeometricToleranceModifier StepDimTol
GeometricToleranceRelationship StepDimTol
GeometricToleranceTarget StepDimTol
GeometricToleranceType StepDimTol
GeometricToleranceWithDatumReference StepDimTol
GeometricToleranceWithDefinedAreaUnit StepDimTol
GeometricToleranceWithDefinedUnit StepDimTol
GeometricToleranceWithMaximumTolerance StepDimTol
GeometricToleranceWithModifiers StepDimTol
GeoTolAndGeoTolWthDatRef StepDimTol
GeoTolAndGeoTolWthDatRefAndGeoTolWthMaxTol StepDimTol
GeoTolAndGeoTolWthDatRefAndGeoTolWthMod StepDimTol
GeoTolAndGeoTolWthDatRefAndModGeoTolAndPosTol StepDimTol
GeoTolAndGeoTolWthDatRefAndUneqDisGeoTol StepDimTol
GeoTolAndGeoTolWthMaxTol StepDimTol
GeoTolAndGeoTolWthMod StepDimTol
LimitCondition StepDimTol
LineProfileTolerance StepDimTol
ModifiedGeometricTolerance StepDimTol
NonUniformZoneDefinition StepDimTol
ParallelismTolerance StepDimTol
PerpendicularityTolerance StepDimTol
PlacedDatumTargetFeature StepDimTol
PositionTolerance StepDimTol
ProjectedZoneDefinition StepDimTol
RoundnessTolerance StepDimTol
RunoutZoneDefinition StepDimTol
RunoutZoneOrientation StepDimTol
ShapeToleranceSelect StepDimTol
SimpleDatumReferenceModifier StepDimTol
SimpleDatumReferenceModifierMember StepDimTol
StraightnessTolerance StepDimTol
SurfaceProfileTolerance StepDimTol
SymmetryTolerance StepDimTol
ToleranceZone StepDimTol
ToleranceZoneDefinition StepDimTol
ToleranceZoneForm StepDimTol
ToleranceZoneTarget StepDimTol
TotalRunoutTolerance StepDimTol
UnequallyDisposedGeometricTolerance StepDimTol
#===============================================
# package StepElement
#===============================================
AnalysisItemWithinRepresentation StepElement
Curve3dElementDescriptor StepElement
CurveEdge StepElement
CurveElementEndReleasePacket StepElement
CurveElementFreedom StepElement
CurveElementFreedomMember StepElement
CurveElementPurpose StepElement
CurveElementPurposeMember StepElement
CurveElementSectionDefinition StepElement
CurveElementSectionDerivedDefinitions StepElement
Element2dShape StepElement
ElementAspect StepElement
ElementAspectMember StepElement
ElementDescriptor StepElement
ElementMaterial StepElement
ElementOrder StepElement
ElementVolume StepElement
EnumeratedCurveElementFreedom StepElement
EnumeratedCurveElementPurpose StepElement
EnumeratedSurfaceElementPurpose StepElement
EnumeratedVolumeElementPurpose StepElement
MeasureOrUnspecifiedValue StepElement
MeasureOrUnspecifiedValueMember StepElement
Surface3dElementDescriptor StepElement
SurfaceElementProperty StepElement
SurfaceElementPurpose StepElement
SurfaceElementPurposeMember StepElement
SurfaceSection StepElement
SurfaceSectionField StepElement
SurfaceSectionFieldConstant StepElement
SurfaceSectionFieldVarying StepElement
UniformSurfaceSection StepElement
UnspecifiedValue StepElement
Volume3dElementDescriptor StepElement
Volume3dElementShape StepElement
VolumeElementPurpose StepElement
VolumeElementPurposeMember StepElement
#===============================================
# package StepFEA
#===============================================
AlignedCurve3dElementCoordinateSystem StepFEA
AlignedSurface3dElementCoordinateSystem StepFEA
ArbitraryVolume3dElementCoordinateSystem StepFEA
ConstantSurface3dElementCoordinateSystem StepFEA
CoordinateSystemType StepFEA
Curve3dElementProperty StepFEA
Curve3dElementRepresentation StepFEA
CurveEdge StepFEA
CurveElementEndCoordinateSystem StepFEA
CurveElementEndOffset StepFEA
CurveElementEndRelease StepFEA
CurveElementInterval StepFEA
CurveElementIntervalConstant StepFEA
CurveElementIntervalLinearlyVarying StepFEA
CurveElementLocation StepFEA
DegreeOfFreedom StepFEA
DegreeOfFreedomMember StepFEA
DummyNode StepFEA
ElementGeometricRelationship StepFEA
ElementGroup StepFEA
ElementOrElementGroup StepFEA
ElementRepresentation StepFEA
ElementVolume StepFEA
EnumeratedDegreeOfFreedom StepFEA
FeaAreaDensity StepFEA
FeaAxis2Placement3d StepFEA
FeaCurveSectionGeometricRelationship StepFEA
FeaGroup StepFEA
FeaLinearElasticity StepFEA
FeaMassDensity StepFEA
FeaMaterialPropertyRepresentation StepFEA
FeaMaterialPropertyRepresentationItem StepFEA
FeaModel StepFEA
FeaModel3d StepFEA
FeaModelDefinition StepFEA
FeaMoistureAbsorption StepFEA
FeaParametricPoint StepFEA
FeaRepresentationItem StepFEA
FeaSecantCoefficientOfLinearThermalExpansion StepFEA
FeaShellBendingStiffness StepFEA
FeaShellMembraneBendingCouplingStiffness StepFEA
FeaShellMembraneStiffness StepFEA
FeaShellShearStiffness StepFEA
FeaSurfaceSectionGeometricRelationship StepFEA
FeaTangentialCoefficientOfLinearThermalExpansion StepFEA
FreedomAndCoefficient StepFEA
FreedomsList StepFEA
GeometricNode StepFEA
Node StepFEA
NodeDefinition StepFEA
NodeGroup StepFEA
NodeRepresentation StepFEA
NodeSet StepFEA
NodeWithSolutionCoordinateSystem StepFEA
NodeWithVector StepFEA
ParametricCurve3dElementCoordinateDirection StepFEA
ParametricCurve3dElementCoordinateSystem StepFEA
ParametricSurface3dElementCoordinateSystem StepFEA
Surface3dElementRepresentation StepFEA
SymmetricTensor22d StepFEA
SymmetricTensor23d StepFEA
SymmetricTensor23dMember StepFEA
SymmetricTensor42d StepFEA
SymmetricTensor43d StepFEA
SymmetricTensor43dMember StepFEA
UnspecifiedValue StepFEA
Volume3dElementRepresentation StepFEA
#===============================================
# package StepGeom
#===============================================
Axis1Placement StepGeom
Axis2Placement StepGeom
Axis2Placement2d StepGeom
Axis2Placement3d StepGeom
BezierCurve StepGeom
BezierCurveAndRationalBSplineCurve StepGeom
BezierSurface StepGeom
BezierSurfaceAndRationalBSplineSurface StepGeom
BoundaryCurve StepGeom
BoundedCurve StepGeom
BoundedSurface StepGeom
BSplineCurve StepGeom
BSplineCurveForm StepGeom
BSplineCurveWithKnots StepGeom
BSplineCurveWithKnotsAndRationalBSplineCurve StepGeom
BSplineSurface StepGeom
BSplineSurfaceForm StepGeom
BSplineSurfaceWithKnots StepGeom
BSplineSurfaceWithKnotsAndRationalBSplineSurface StepGeom
CartesianPoint StepGeom
CartesianTransformationOperator StepGeom
CartesianTransformationOperator2d StepGeom
CartesianTransformationOperator3d StepGeom
Circle StepGeom
CompositeCurve StepGeom
CompositeCurveOnSurface StepGeom
CompositeCurveSegment StepGeom
Conic StepGeom
ConicalSurface StepGeom
Curve StepGeom
CurveBoundedSurface StepGeom
CurveOnSurface StepGeom
CurveReplica StepGeom
CylindricalSurface StepGeom
DegeneratePcurve StepGeom
DegenerateToroidalSurface StepGeom
Direction StepGeom
ElementarySurface StepGeom
Ellipse StepGeom
EvaluatedDegeneratePcurve StepGeom
GeometricRepresentationContext StepGeom
GeometricRepresentationContextAndGlobalUnitAssignedContext StepGeom
GeometricRepresentationContextAndParametricRepresentationContext StepGeom
GeometricRepresentationItem StepGeom
GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx StepGeom
Hyperbola StepGeom
IntersectionCurve StepGeom
KnotType StepGeom
Line StepGeom
OffsetCurve3d StepGeom
OffsetSurface StepGeom
OrientedSurface StepGeom
OuterBoundaryCurve StepGeom
Parabola StepGeom
Pcurve StepGeom
PcurveOrSurface StepGeom
Placement StepGeom
Plane StepGeom
Point StepGeom
PointOnCurve StepGeom
PointOnSurface StepGeom
PointReplica StepGeom
Polyline StepGeom
PreferredSurfaceCurveRepresentation StepGeom
QuasiUniformCurve StepGeom
QuasiUniformCurveAndRationalBSplineCurve StepGeom
QuasiUniformSurface StepGeom
QuasiUniformSurfaceAndRationalBSplineSurface StepGeom
RationalBSplineCurve StepGeom
RationalBSplineSurface StepGeom
RectangularCompositeSurface StepGeom
RectangularTrimmedSurface StepGeom
ReparametrisedCompositeCurveSegment StepGeom
SeamCurve StepGeom
SphericalSurface StepGeom
SuParameters StepGeom
Surface StepGeom
SurfaceBoundary StepGeom
SurfaceCurve StepGeom
SurfaceCurveAndBoundedCurve StepGeom
SurfaceOfLinearExtrusion StepGeom
SurfaceOfRevolution StepGeom
SurfacePatch StepGeom
SurfaceReplica StepGeom
SweptSurface StepGeom
ToroidalSurface StepGeom
TransitionCode StepGeom
TrimmedCurve StepGeom
TrimmingMember StepGeom
TrimmingPreference StepGeom
TrimmingSelect StepGeom
UniformCurve StepGeom
UniformCurveAndRationalBSplineCurve StepGeom
UniformSurface StepGeom
UniformSurfaceAndRationalBSplineSurface StepGeom
Vector StepGeom
VectorOrDirection StepGeom
#===============================================
# package StepKinematics
#===============================================
ActuatedDirection StepKinematics
ActuatedKinematicPair StepKinematics
ActuatedKinPairAndOrderKinPair StepKinematics
ContextDependentKinematicLinkRepresentation StepKinematics
CylindricalPair StepKinematics
CylindricalPairValue StepKinematics
CylindricalPairWithRange StepKinematics
FullyConstrainedPair StepKinematics
GearPair StepKinematics
GearPairValue StepKinematics
GearPairWithRange StepKinematics
HighOrderKinematicPair StepKinematics
HomokineticPair StepKinematics
KinematicJoint StepKinematics
KinematicLink StepKinematics
KinematicLinkRepresentation StepKinematics
KinematicLinkRepresentationAssociation StepKinematics
KinematicPair StepKinematics
KinematicPropertyDefinitionRepresentation StepKinematics
KinematicPropertyMechanismRepresentation StepKinematics
KinematicTopologyDirectedStructure StepKinematics
KinematicTopologyNetworkStructure StepKinematics
KinematicTopologyRepresentationSelect StepKinematics
KinematicTopologyStructure StepKinematics
LinearFlexibleAndPinionPair StepKinematics
LinearFlexibleAndPlanarCurvePair StepKinematics
LinearFlexibleLinkRepresentation StepKinematics
LowOrderKinematicPair StepKinematics
LowOrderKinematicPairValue StepKinematics
LowOrderKinematicPairWithMotionCoupling StepKinematics
LowOrderKinematicPairWithRange StepKinematics
MechanismRepresentation StepKinematics
MechanismStateRepresentation StepKinematics
OrientedJoint StepKinematics
PairRepresentationRelationship StepKinematics
PairValue StepKinematics
PlanarCurvePair StepKinematics
PlanarCurvePairRange StepKinematics
PlanarPair StepKinematics
PlanarPairValue StepKinematics
PlanarPairWithRange StepKinematics
PointOnPlanarCurvePair StepKinematics
PointOnPlanarCurvePairValue StepKinematics
PointOnPlanarCurvePairWithRange StepKinematics
PointOnSurfacePair StepKinematics
PointOnSurfacePairValue StepKinematics
PointOnSurfacePairWithRange StepKinematics
PrismaticPair StepKinematics
PrismaticPairValue StepKinematics
PrismaticPairWithRange StepKinematics
ProductDefinitionKinematics StepKinematics
ProductDefinitionRelationshipKinematics StepKinematics
RackAndPinionPair StepKinematics
RackAndPinionPairValue StepKinematics
RackAndPinionPairWithRange StepKinematics
RevolutePair StepKinematics
RevolutePairValue StepKinematics
RevolutePairWithRange StepKinematics
RigidLinkRepresentation StepKinematics
RigidPlacement StepKinematics
RollingCurvePair StepKinematics
RollingCurvePairValue StepKinematics
RollingSurfacePair StepKinematics
RollingSurfacePairValue StepKinematics
RotationAboutDirection StepKinematics
ScrewPair StepKinematics
ScrewPairValue StepKinematics
ScrewPairWithRange StepKinematics
SlidingCurvePair StepKinematics
SlidingCurvePairValue StepKinematics
SlidingSurfacePair StepKinematics
SlidingSurfacePairValue StepKinematics
SpatialRotation StepKinematics
SphericalPair StepKinematics
SphericalPairSelect StepKinematics
SphericalPairValue StepKinematics
SphericalPairWithPin StepKinematics
SphericalPairWithPinAndRange StepKinematics
SphericalPairWithRange StepKinematics
SurfacePair StepKinematics
SurfacePairWithRange StepKinematics
UnconstrainedPair StepKinematics
UnconstrainedPairValue StepKinematics
UniversalPair StepKinematics
UniversalPairValue StepKinematics
UniversalPairWithRange StepKinematics
#===============================================
# package StepRepr
#===============================================
AllAroundShapeAspect StepRepr
Apex StepRepr
AssemblyComponentUsage StepRepr
AssemblyComponentUsageSubstitute StepRepr
BetweenShapeAspect StepRepr
CentreOfSymmetry StepRepr
CharacterizedDefinition StepRepr
CharacterizedRepresentation StepRepr
CompGroupShAspAndCompShAspAndDatumFeatAndShAsp StepRepr
CompositeGroupShapeAspect StepRepr
CompositeShapeAspect StepRepr
CompoundRepresentationItem StepRepr
CompShAspAndDatumFeatAndShAsp StepRepr
ConfigurationDesign StepRepr
ConfigurationDesignItem StepRepr
ConfigurationEffectivity StepRepr
ConfigurationItem StepRepr
ConstructiveGeometryRepresentation StepRepr
ConstructiveGeometryRepresentationRelationship StepRepr
ContinuosShapeAspect StepRepr
DataEnvironment StepRepr
DefinitionalRepresentation StepRepr
DerivedShapeAspect StepRepr
DescriptiveRepresentationItem StepRepr
Extension StepRepr
ExternallyDefinedRepresentation StepRepr
FeatureForDatumTargetRelationship StepRepr
FunctionallyDefinedTransformation StepRepr
GeometricAlignment StepRepr
GlobalUncertaintyAssignedContext StepRepr
GlobalUnitAssignedContext StepRepr
IntegerRepresentationItem StepRepr
ItemDefinedTransformation StepRepr
MakeFromUsageOption StepRepr
MappedItem StepRepr
MaterialDesignation StepRepr
MaterialProperty StepRepr
MaterialPropertyRepresentation StepRepr
MeasureRepresentationItem StepRepr
NextAssemblyUsageOccurrence StepRepr
ParallelOffset StepRepr
ParametricRepresentationContext StepRepr
PerpendicularTo StepRepr
ProductConcept StepRepr
ProductDefinitionShape StepRepr
ProductDefinitionUsage StepRepr
PromissoryUsageOccurrence StepRepr
PropertyDefinition StepRepr
PropertyDefinitionRelationship StepRepr
PropertyDefinitionRepresentation StepRepr
QuantifiedAssemblyComponentUsage StepRepr
Representation StepRepr
RepresentationContext StepRepr
RepresentationContextReference StepRepr
RepresentationItem StepRepr
RepresentationMap StepRepr
RepresentationOrRepresentationReference StepRepr
RepresentationReference StepRepr
RepresentationRelationship StepRepr
RepresentationRelationshipWithTransformation StepRepr
RepresentedDefinition StepRepr
ReprItemAndLengthMeasureWithUnit StepRepr
ReprItemAndLengthMeasureWithUnitAndQRI StepRepr
ReprItemAndMeasureWithUnit StepRepr
ReprItemAndMeasureWithUnitAndQRI StepRepr
ReprItemAndPlaneAngleMeasureWithUnit StepRepr
ReprItemAndPlaneAngleMeasureWithUnitAndQRI StepRepr
ShapeAspect StepRepr
ShapeAspectDerivingRelationship StepRepr
ShapeAspectRelationship StepRepr
ShapeAspectTransition StepRepr
ShapeDefinition StepRepr
ShapeRepresentationRelationship StepRepr
ShapeRepresentationRelationshipWithTransformation StepRepr
SpecifiedHigherUsageOccurrence StepRepr
StructuralResponseProperty StepRepr
StructuralResponsePropertyDefinitionRepresentation StepRepr
SuppliedPartRelationship StepRepr
Tangent StepRepr
Transformation StepRepr
ValueRange StepRepr
ValueRepresentationItem StepRepr
#===============================================
# package StepShape
#===============================================
AdvancedBrepShapeRepresentation StepShape
AdvancedFace StepShape
AngleRelator StepShape
AngularLocation StepShape
AngularSize StepShape
Block StepShape
BooleanOperand StepShape
BooleanOperator StepShape
BooleanResult StepShape
BoxDomain StepShape
BoxedHalfSpace StepShape
BrepWithVoids StepShape
ClosedShell StepShape
CompoundShapeRepresentation StepShape
ConnectedEdgeSet StepShape
ConnectedFaceSet StepShape
ConnectedFaceShapeRepresentation StepShape
ConnectedFaceSubSet StepShape
ContextDependentShapeRepresentation StepShape
CsgPrimitive StepShape
CsgSelect StepShape
CsgShapeRepresentation StepShape
CsgSolid StepShape
DefinitionalRepresentationAndShapeRepresentation StepShape
DimensionalCharacteristic StepShape
DimensionalCharacteristicRepresentation StepShape
DimensionalLocation StepShape
DimensionalLocationWithPath StepShape
DimensionalSize StepShape
DimensionalSizeWithPath StepShape
DirectedDimensionalLocation StepShape
Edge StepShape
EdgeBasedWireframeModel StepShape
EdgeBasedWireframeShapeRepresentation StepShape
EdgeCurve StepShape
EdgeLoop StepShape
ExtrudedAreaSolid StepShape
ExtrudedFaceSolid StepShape
Face StepShape
FaceBasedSurfaceModel StepShape
FaceBound StepShape
FaceOuterBound StepShape
FaceSurface StepShape
FacetedBrep StepShape
FacetedBrepAndBrepWithVoids StepShape
FacetedBrepShapeRepresentation StepShape
GeometricallyBoundedSurfaceShapeRepresentation StepShape
GeometricallyBoundedWireframeShapeRepresentation StepShape
GeometricCurveSet StepShape
GeometricSet StepShape
GeometricSetSelect StepShape
HalfSpaceSolid StepShape
LimitsAndFits StepShape
Loop StepShape
LoopAndPath StepShape
ManifoldSolidBrep StepShape
ManifoldSurfaceShapeRepresentation StepShape
MeasureQualification StepShape
MeasureRepresentationItemAndQualifiedRepresentationItem StepShape
NonManifoldSurfaceShapeRepresentation StepShape
OpenShell StepShape
OrientedClosedShell StepShape
OrientedEdge StepShape
OrientedFace StepShape
OrientedOpenShell StepShape
OrientedPath StepShape
Path StepShape
PlusMinusTolerance StepShape
PointRepresentation StepShape
PolyLoop StepShape
PrecisionQualifier StepShape
QualifiedRepresentationItem StepShape
ReversibleTopologyItem StepShape
RevolvedAreaSolid StepShape
RevolvedFaceSolid StepShape
RightAngularWedge StepShape
RightCircularCone StepShape
RightCircularCylinder StepShape
SeamEdge StepShape
ShapeDefinitionRepresentation StepShape
ShapeDimensionRepresentation StepShape
ShapeDimensionRepresentationItem StepShape
ShapeRepresentation StepShape
ShapeRepresentationWithParameters StepShape
Shell StepShape
ShellBasedSurfaceModel StepShape
SolidModel StepShape
SolidReplica StepShape
Sphere StepShape
Subedge StepShape
Subface StepShape
SurfaceModel StepShape
SweptAreaSolid StepShape
SweptFaceSolid StepShape
ToleranceMethodDefinition StepShape
ToleranceValue StepShape
TopologicalRepresentationItem StepShape
Torus StepShape
TransitionalShapeRepresentation StepShape
TypeQualifier StepShape
ValueFormatTypeQualifier StepShape
ValueQualifier StepShape
Vertex StepShape
VertexLoop StepShape
VertexPoint StepShape
#===============================================
# package StepVisual
#===============================================
AnnotationCurveOccurrence StepVisual
AnnotationCurveOccurrenceAndGeomReprItem StepVisual
AnnotationFillArea StepVisual
AnnotationFillAreaOccurrence StepVisual
AnnotationOccurrence StepVisual
AnnotationPlane StepVisual
AnnotationPlaneElement StepVisual
AnnotationText StepVisual
AnnotationTextOccurrence StepVisual
AreaInSet StepVisual
AreaOrView StepVisual
BackgroundColour StepVisual
BoxCharacteristicSelect StepVisual
CameraImage StepVisual
CameraImage2dWithScale StepVisual
CameraImage3dWithScale StepVisual
CameraModel StepVisual
CameraModelD2 StepVisual
CameraModelD3 StepVisual
CameraModelD3MultiClipping StepVisual
CameraModelD3MultiClippingInterectionSelect StepVisual
CameraModelD3MultiClippingIntersection StepVisual
CameraModelD3MultiClippingUnion StepVisual
CameraModelD3MultiClippingUnionSelect StepVisual
CameraUsage StepVisual
CentralOrParallel StepVisual
CharacterizedObjAndRepresentationAndDraughtingModel StepVisual
Colour StepVisual
ColourRgb StepVisual
ColourSpecification StepVisual
ComplexTriangulatedFace StepVisual
ComplexTriangulatedSurfaceSet StepVisual
CompositeText StepVisual
CompositeTextWithExtent StepVisual
ContextDependentInvisibility StepVisual
ContextDependentOverRidingStyledItem StepVisual
CoordinatesList StepVisual
CubicBezierTessellatedEdge StepVisual
CubicBezierTriangulatedFace StepVisual
CurveStyle StepVisual
CurveStyleFont StepVisual
CurveStyleFontPattern StepVisual
CurveStyleFontSelect StepVisual
DirectionCountSelect StepVisual
DraughtingAnnotationOccurrence StepVisual
DraughtingCallout StepVisual
DraughtingCalloutElement StepVisual
DraughtingModel StepVisual
DraughtingPreDefinedColour StepVisual
DraughtingPreDefinedCurveFont StepVisual
EdgeOrCurve StepVisual
ExternallyDefinedCurveFont StepVisual
ExternallyDefinedTextFont StepVisual
FaceOrSurface StepVisual
FillAreaStyle StepVisual
FillAreaStyleColour StepVisual
FillStyleSelect StepVisual
FontSelect StepVisual
Invisibility StepVisual
InvisibilityContext StepVisual
InvisibleItem StepVisual
LayeredItem StepVisual
MarkerMember StepVisual
MarkerSelect StepVisual
MarkerType StepVisual
MechanicalDesignGeometricPresentationArea StepVisual
MechanicalDesignGeometricPresentationRepresentation StepVisual
NullStyle StepVisual
NullStyleMember StepVisual
OverRidingStyledItem StepVisual
PathOrCompositeCurve StepVisual
PlanarBox StepVisual
PlanarExtent StepVisual
PointStyle StepVisual
PreDefinedColour StepVisual
PreDefinedCurveFont StepVisual
PreDefinedItem StepVisual
PreDefinedTextFont StepVisual
PresentationArea StepVisual
PresentationLayerAssignment StepVisual
PresentationLayerUsage StepVisual
PresentationRepresentation StepVisual
PresentationRepresentationSelect StepVisual
PresentationSet StepVisual
PresentationSize StepVisual
PresentationSizeAssignmentSelect StepVisual
PresentationStyleAssignment StepVisual
PresentationStyleByContext StepVisual
PresentationStyleSelect StepVisual
PresentationView StepVisual
PresentedItem StepVisual
PresentedItemRepresentation StepVisual
RenderingPropertiesSelect StepVisual
RepositionedTessellatedGeometricSet StepVisual
RepositionedTessellatedItem StepVisual
ShadingSurfaceMethod StepVisual
StyleContextSelect StepVisual
StyledItem StepVisual
StyledItemTarget StepVisual
SurfaceSide StepVisual
SurfaceSideStyle StepVisual
SurfaceStyleBoundary StepVisual
SurfaceStyleControlGrid StepVisual
SurfaceStyleElementSelect StepVisual
SurfaceStyleFillArea StepVisual
SurfaceStyleParameterLine StepVisual
SurfaceStyleReflectanceAmbient StepVisual
SurfaceStyleRendering StepVisual
SurfaceStyleRenderingWithProperties StepVisual
SurfaceStyleSegmentationCurve StepVisual
SurfaceStyleSilhouette StepVisual
SurfaceStyleTransparent StepVisual
SurfaceStyleUsage StepVisual
Template StepVisual
TemplateInstance StepVisual
TessellatedAnnotationOccurrence StepVisual
TessellatedConnectingEdge StepVisual
TessellatedCurveSet StepVisual
TessellatedEdge StepVisual
TessellatedEdgeOrVertex StepVisual
TessellatedFace StepVisual
TessellatedGeometricSet StepVisual
TessellatedItem StepVisual
TessellatedPointSet StepVisual
TessellatedShapeRepresentation StepVisual
TessellatedShapeRepresentationWithAccuracyParameters StepVisual
TessellatedShell StepVisual
TessellatedSolid StepVisual
TessellatedStructuredItem StepVisual
TessellatedSurfaceSet StepVisual
TessellatedVertex StepVisual
TessellatedWire StepVisual
TextLiteral StepVisual
TextOrCharacter StepVisual
TextPath StepVisual
TextStyle StepVisual
TextStyleForDefinedFont StepVisual
TextStyleWithBoxCharacteristics StepVisual
TriangulatedFace StepVisual
ViewVolume StepVisual

View File

@@ -1,129 +0,0 @@
// Created: Wed Nov 3 14:39:28 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express.hxx>
#include <Express_Schema.hxx>
#include <OSD_Process.hxx>
#include <OSD_Environment.hxx>
#include <Quantity_Date.hxx>
#include <TCollection_AsciiString.hxx>
//=======================================================================
// function : Schema
// purpose :
//=======================================================================
Handle(Express_Schema)& Express::Schema()
{
static Handle(Express_Schema) aSchema;
return aSchema;
}
//=======================================================================
// function : WriteFileStamp
// purpose : Write header of HXX or CXX file
//=======================================================================
void Express::WriteFileStamp (Standard_OStream& theOS)
{
static const char* EC_VERSION = "2.0";
OSD_Process aProcess;
Quantity_Date aCurTime = aProcess.SystemDate();
OSD_Environment anEnv ("EXPTOCAS_TIME");
TCollection_AsciiString aTimeString = anEnv.Value();
if (aTimeString.IsEmpty())
{
aTimeString += aCurTime.Year();
aTimeString += "-";
aTimeString += aCurTime.Month();
aTimeString += "-";
aTimeString += aCurTime.Day();
}
theOS << "// Created on : " << aTimeString << "\n"
"// Created by: " << aProcess.UserName() << "\n"
"// Generator: ExpToCasExe (EXPRESS -> CASCADE/XSTEP Translator) V" << EC_VERSION << "\n"
"// Copyright (c) Open CASCADE " << aCurTime.Year() << "\n"
"//\n"
"// This file is part of Open CASCADE Technology software library.\n"
"//\n"
"// This library is free software; you can redistribute it and/or modify it under\n"
"// the terms of the GNU Lesser General Public License version 2.1 as published\n"
"// by the Free Software Foundation, with special exception defined in the file\n"
"// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT\n"
"// distribution for complete text of the license and disclaimer of any warranty.\n"
"//\n"
"// Alternatively, this file may be used under the terms of Open CASCADE\n"
"// commercial license or contractual agreement.\n"
"\n";
}
//=======================================================================
// function : WriteMethodStamp
// purpose :
//=======================================================================
void Express::WriteMethodStamp (Standard_OStream& theOS, const TCollection_AsciiString& theName)
{
theOS << "\n"
"//=======================================================================\n"
"// function : " << theName << "\n"
"// purpose :\n"
"//=======================================================================\n"
"\n";
}
//=======================================================================
// function : ToStepName
// purpose :
//=======================================================================
TCollection_AsciiString Express::ToStepName (const TCollection_AsciiString& theName)
{
TCollection_AsciiString aStepName(theName);
for (Standard_Integer i = 2; i <= aStepName.Length(); i++)
{
if (isupper (aStepName.Value (i)))
{
aStepName.Insert (i++, '_');
}
}
aStepName.LowerCase();
return aStepName;
}
//=======================================================================
// function : GetPrefixEnum
// purpose :
//=======================================================================
TCollection_AsciiString Express::EnumPrefix (const TCollection_AsciiString& theName)
{
TCollection_AsciiString aStepName;
for (Standard_Integer i = 1; i <= theName.Length(); i++)
{
if (isupper (theName.Value (i)))
{
aStepName += theName.Value (i);
}
}
aStepName.LowerCase();
return aStepName;
}

View File

@@ -1,52 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_HeaderFile
#define _Express_HeaderFile
#include <Standard_Boolean.hxx>
#include <Standard_Type.hxx>
#include <Standard_OStream.hxx>
class Express_Schema;
class TCollection_AsciiString;
//! Provides data structures for representation of EXPRESS schema
//! (items, types, entities etc.)
//! and tools for generating XSTEP classes (HXX and CXX) from
//! items of the schema
class Express
{
public:
DEFINE_STANDARD_ALLOC
//! Returns (modifiable) handle to static schema object
Standard_EXPORT static Handle(Express_Schema)& Schema();
//! Writes standard copyright stamp (creation date/time, user, etc.)
Standard_EXPORT static void WriteFileStamp (Standard_OStream& theOS);
//! Writes standard comment for method in CXX file
Standard_EXPORT static void WriteMethodStamp (Standard_OStream& theOS, const TCollection_AsciiString& theName);
//! Converts item name from CASCADE to STEP style
//! e.g. BoundedCurve -> bounded_curve
Standard_EXPORT static TCollection_AsciiString ToStepName (const TCollection_AsciiString& theName);
//! Converts item name from CASCADE to STEP style
//! e.g. BoundedCurve -> bounded_curve
Standard_EXPORT static TCollection_AsciiString EnumPrefix (const TCollection_AsciiString& theName);
};
#endif // _Express_HeaderFile

View File

@@ -1,71 +0,0 @@
// Created: Tue Nov 2 14:40:06 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Alias.hxx>
#include <Message.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Alias, Express_Item)
//=======================================================================
// function : Express_Alias
// purpose :
//=======================================================================
Express_Alias::Express_Alias (const Standard_CString theName, const Handle(Express_Type)& theType)
: Express_Item (theName), myType (theType)
{
}
//=======================================================================
// function : Type
// purpose :
//=======================================================================
const Handle(Express_Type)& Express_Alias::Type() const
{
return myType;
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_Alias::CPPName() const
{
return myType->CPPName();
}
//=======================================================================
// function : GenerateClass
// purpose :
//=======================================================================
Standard_Boolean Express_Alias::GenerateClass() const
{
Message::SendInfo() << "ALIAS " << Name() << " = " << Type()->CPPName() << " used; no generation is needed";
return Standard_False;
}
//=======================================================================
// function : PropagateUse
// purpose :
//=======================================================================
void Express_Alias::PropagateUse() const
{
}

View File

@@ -1,55 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Alias_HeaderFile
#define _Express_Alias_HeaderFile
#include <Express_Item.hxx>
#include <Express_Type.hxx>
#include <Standard_Type.hxx>
class TCollection_AsciiString;
//! Implements TYPE = type (alias) item of the EXPRESS
//! schema, with interface for deferred Item class.
class Express_Alias : public Express_Item
{
public:
//! Create ALIAS item and initialize it
Standard_EXPORT Express_Alias (const Standard_CString theName, const Handle(Express_Type)& theType);
//! Returns aliased type
Standard_EXPORT const Handle(Express_Type)& Type() const;
//! Returns name of aliased type
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
//! Create HXX/CXX files from item
Standard_EXPORT virtual Standard_Boolean GenerateClass() const Standard_OVERRIDE;
//! Propagates the calls of Use function
Standard_EXPORT virtual void PropagateUse() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_Alias, Express_Item)
protected:
private:
Handle(Express_Type) myType;
};
#endif // _Express_Alias_HeaderFile

View File

@@ -1,21 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Array_HeaderFile
#define _Express_Array_HeaderFile
#include <Express_ComplexType.hxx>
typedef Express_ComplexType Express_Array;
#endif // _Express_Array_HeaderFile

View File

@@ -1,21 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Bag_HeaderFile
#define _Express_Bag_HeaderFile
#include <Express_ComplexType.hxx>
typedef Express_ComplexType Express_Bag;
#endif // _Express_Bag_HeaderFile

View File

@@ -1,39 +0,0 @@
// Created: Tue Nov 2 15:27:26 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Boolean.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Boolean, Express_PredefinedType)
//=======================================================================
// function : Express_Boolean
// purpose :
//=======================================================================
Express_Boolean::Express_Boolean()
{
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_Boolean::CPPName() const
{
return "Standard_Boolean";
}

View File

@@ -1,42 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Boolean_HeaderFile
#define _Express_Boolean_HeaderFile
#include <Express_PredefinedType.hxx>
#include <Standard_Type.hxx>
class TCollection_AsciiString;
//! Implements EXPRESS type 'BOOLEAN'
class Express_Boolean : public Express_PredefinedType
{
public:
//! Empty constructor
Standard_EXPORT Express_Boolean();
//! Returns "Standard_Boolean"
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_Boolean, Express_PredefinedType)
protected:
private:
};
#endif // _Express_Boolean_HeaderFile

View File

@@ -1,114 +0,0 @@
// Created: Tue Nov 2 15:13:31 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_ComplexType.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_ComplexType, Express_Type)
//=======================================================================
// function : Express_ComplexType
// purpose :
//=======================================================================
Express_ComplexType::Express_ComplexType (const Standard_Integer theImin,
const Standard_Integer theImax,
const Handle(Express_Type)& theType)
{
myMin = theImin;
myMax = theImax;
myType = theType;
}
//=======================================================================
// function : Type
// purpose :
//=======================================================================
const Handle(Express_Type)& Express_ComplexType::Type() const
{
return myType;
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_ComplexType::CPPName() const
{
// check if array 2
Handle(Express_Type) aType = myType;
if (aType->IsKind (STANDARD_TYPE(Express_ComplexType)))
{
Handle(Express_ComplexType) aType2 = Handle(Express_ComplexType)::DownCast (aType);
aType = aType2->Type();
}
// parse name of array argument
TCollection_AsciiString aName = aType->CPPName();
Standard_Integer aSplitIdx = aName.Location (1, '_', 1, aName.Length());
TCollection_AsciiString aClassName;
if (aSplitIdx)
{
aClassName = aName.Split (aSplitIdx);
}
else
{
aClassName = aName;
}
Standard_Integer anIdx = aName.Location ("TCollection", 1, aName.Length());
if (anIdx)
{
aName = "Interface_";
}
// generate name
if (aType->IsStandard() || !aSplitIdx)
{
aName = "TColStd_";
}
if (aType == myType)
{
aName += "HArray1Of";
}
else
{
aName += "HArray2Of";
}
aName += aClassName;
return aName;
}
//=======================================================================
// function : Use
// purpose :
//=======================================================================
Standard_Boolean Express_ComplexType::Use() const
{
return myType->Use();
}
//=======================================================================
// function : Use2
// purpose :
//=======================================================================
void Express_ComplexType::Use2 (const TCollection_AsciiString& theRefName, const TCollection_AsciiString& theRefPack) const
{
myType->Use2 (theRefName, theRefPack);
}

View File

@@ -1,61 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_ComplexType_HeaderFile
#define _Express_ComplexType_HeaderFile
#include <Express_Type.hxx>
#include <Standard_Type.hxx>
class TCollection_AsciiString;
//! Base class for complex types (ARRAY, LIST, BAG, SET)
//! in EXPRESS schema
//! Stores type of elements and
class Express_ComplexType : public Express_Type
{
public:
//! Creates an object and initializes fields
Standard_EXPORT Express_ComplexType (const Standard_Integer theImin,
const Standard_Integer theImax,
const Handle(Express_Type)& theType);
//! Returns type of complex type items
Standard_EXPORT const Handle(Express_Type)& Type() const;
//! Returns CPP-style name of the type
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
//! Declares type as used by some item being generated.
//! Calls Use() for type of elements
Standard_EXPORT virtual Standard_Boolean Use() const Standard_OVERRIDE;
//! Declares type as used by some item being generated.
//! Calls Use() for type of elements
Standard_EXPORT virtual void Use2 (const TCollection_AsciiString& theRefName, const TCollection_AsciiString& theRefPack) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_ComplexType, Express_Type)
protected:
private:
Standard_Integer myMin;
Standard_Integer myMax;
Handle(Express_Type) myType;
};
#endif // _Express_ComplexType_HeaderFile

View File

@@ -1,24 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef Express_DataMapOfAsciiStringItem_HeaderFile
#define Express_DataMapOfAsciiStringItem_HeaderFile
#include <Express_Item.hxx>
#include <NCollection_DataMap.hxx>
#include <TCollection_AsciiString.hxx>
typedef NCollection_DataMap<TCollection_AsciiString, Handle(Express_Item),
TCollection_AsciiString> Express_DataMapOfAsciiStringItem;
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,114 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Entity_HeaderFile
#define _Express_Entity_HeaderFile
#include <Express_Item.hxx>
#include <Standard_OStream.hxx>
#include <Standard_Type.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
#include <NCollection_DataMap.hxx>
class Express_HSequenceOfEntity;
class Express_HSequenceOfField;
class Dico_DictionaryOfInteger;
//! Implements ENTITY item of the EXPRESS
//! schema, with interface for deferred Item class.
class Express_Entity : public Express_Item
{
public:
//! Create ENTITY item and initialize it
//! flags hasCheck and hasFillShared mark if generated class has
//! methods Check and FillShared correspondingly.
Standard_EXPORT Express_Entity (const Standard_CString theName,
const Handle(TColStd_HSequenceOfHAsciiString)& theInherit,
const Handle(Express_HSequenceOfField)& theFields);
//! Returns sequence of inherited classes (names)
Standard_EXPORT const Handle(TColStd_HSequenceOfHAsciiString)& SuperTypes() const;
//! Returns sequence of inherited items
Standard_EXPORT const Handle(Express_HSequenceOfEntity)& Inherit() const;
//! Returns sequence of fields
Standard_EXPORT const Handle(Express_HSequenceOfField)& Fields() const;
//! Returns number of fields (only own fields if inherited is False
//! and including fields of all supertypes if it is True)
Standard_EXPORT Standard_Integer NbFields (const Standard_Boolean theInherited = Standard_False) const;
//! Sets abstruct flag for entity;
Standard_EXPORT void SetAbstractFlag (const Standard_Boolean theIsAbstract);
//! Returns abstract flag.
Standard_EXPORT inline Standard_Boolean AbstractFlag() const;
DEFINE_STANDARD_RTTIEXT(Express_Entity, Express_Item)
protected:
private:
typedef NCollection_DataMap<TCollection_AsciiString, Standard_Integer, TCollection_AsciiString> DataMapOfStringInteger;
//! Create HXX/CXX files from item
Standard_EXPORT virtual Standard_Boolean GenerateClass() const Standard_OVERRIDE;
//! Propagates the calls of Use function
Standard_EXPORT virtual void PropagateUse() const Standard_OVERRIDE;
//! Writes includes section of HXX
Standard_EXPORT Standard_Boolean writeIncludes (Standard_OStream& theOS) const;
//! Writes code for reading all fields
Standard_EXPORT Standard_Integer writeRWReadCode (Standard_OStream& theOS,
const Standard_Integer theStart,
const Standard_Integer theOwn) const;
//! Writes code for writing all fields
Standard_EXPORT Standard_Integer writeRWWriteCode (Standard_OStream& theOS,
const Standard_Integer theStart,
const Standard_Integer theOwn) const;
//! Writes code for adding shared entities to the graph
Standard_EXPORT Standard_Integer writeRWShareCode (Standard_OStream& theOS,
const Standard_Integer theStart,
const Standard_Integer theOwn) const;
//! Writes arguments and code for method Init()
//! Mode identifies what code is being written:
//! 0 - HXX declaration
//! 1 - CXX declaration
//! 2 - call (argument list)
//! 3 - implementation
//! 4 - call (argument list for RW)
Standard_EXPORT Standard_Integer makeInit (Standard_OStream& theOS,
const Standard_Integer theShift,
const Standard_Integer theOwn,
const Standard_Integer theMode) const;
private:
Handle(TColStd_HSequenceOfHAsciiString) mySupers;
Handle(Express_HSequenceOfEntity) myInherit;
Handle(Express_HSequenceOfField) myFields;
Standard_Boolean myIsAbstract;
};
#endif // _Express_Entity_HeaderFile

View File

@@ -1,107 +0,0 @@
// Created: Tue Nov 2 14:40:06 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Enum.hxx>
#include <Express.hxx>
#include <Message.hxx>
#include <OSD_Directory.hxx>
#include <OSD_FileSystem.hxx>
#include <OSD_Path.hxx>
#include <OSD_Protection.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Enum, Express_Item)
//=======================================================================
// function : Express_Enum
// purpose :
//=======================================================================
Express_Enum::Express_Enum (const Standard_CString theName, const Handle(TColStd_HSequenceOfHAsciiString)& theNames)
: Express_Item (theName), myNames (theNames)
{
}
//=======================================================================
// function : Names
// purpose :
//=======================================================================
const Handle(TColStd_HSequenceOfHAsciiString)& Express_Enum::Names() const
{
return myNames;
}
//=======================================================================
// function : GenerateClass
// purpose :
//=======================================================================
Standard_Boolean Express_Enum::GenerateClass() const
{
const TCollection_AsciiString aCPPName = CPPName();
Message::SendInfo() << "Generating ENUMERATION " << aCPPName;
// create a package directory (if not yet exist)
OSD_Protection aProt (OSD_RWXD, OSD_RWXD, OSD_RX, OSD_RX);
TCollection_AsciiString aPack = GetPackageName();
OSD_Path aPath (aPack);
OSD_Directory aDir (aPath);
aDir.Build (aProt);
aPack += "/";
aPack += aCPPName;
const Handle(OSD_FileSystem)& aFileSystem = OSD_FileSystem::DefaultFileSystem();
// Open HXX file
std::shared_ptr<std::ostream> aStreamPtr = aFileSystem->OpenOStream (aPack.Cat (".hxx"), std::ios::out | std::ios::ate);
Standard_OStream& anOS = *aStreamPtr;
// write header
Express::WriteFileStamp (anOS);
// write defines
anOS << "#ifndef _" << aCPPName << "_HeaderFile\n"
"#define _" << aCPPName << "_HeaderFile\n"
"\n"
"enum " << aCPPName << "\n"
"{\n";
TCollection_AsciiString aPrefix = Express::EnumPrefix (Name());
for (Standard_Integer i = 1; i <= myNames->Length(); i++)
{
if (i > 1)
{
anOS << ",\n";
}
anOS << " " << GetPackageName() << "_" << aPrefix << myNames->Value (i)->String();
}
anOS << "\n"
"};\n"
"\n"
"#endif // _" << aCPPName << "_HeaderFile\n";
aStreamPtr.reset();
return Standard_False;
}
//=======================================================================
// function : PropagateUse
// purpose :
//=======================================================================
void Express_Enum::PropagateUse() const
{
}

View File

@@ -1,50 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Enum_HeaderFile
#define _Express_Enum_HeaderFile
#include <Express_Item.hxx>
#include <Standard_Type.hxx>
#include <TColStd_HSequenceOfHAsciiString.hxx>
//! Implements TYPE ENUMERATION item of the EXPRESS
//! schema, with interface for deferred Item class.
class Express_Enum : public Express_Item
{
public:
//! Create ENUM item and initialize it
Standard_EXPORT Express_Enum (const Standard_CString theName, const Handle(TColStd_HSequenceOfHAsciiString)& theNames);
//! Returns names of enumeration variants
Standard_EXPORT const Handle(TColStd_HSequenceOfHAsciiString)& Names() const;
//! Create HXX/CXX files from item
Standard_EXPORT virtual Standard_Boolean GenerateClass() const Standard_OVERRIDE;
//! Propagates the calls of Use function
Standard_EXPORT virtual void PropagateUse() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_Enum, Express_Item)
protected:
private:
Handle(TColStd_HSequenceOfHAsciiString) myNames;
};
#endif // _Express_Enum_HeaderFile

View File

@@ -1,89 +0,0 @@
// Created: Tue Nov 2 16:40:51 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Field.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Field, Standard_Transient)
//=======================================================================
// function : Express_Field
// purpose :
//=======================================================================
Express_Field::Express_Field (const Standard_CString theName,
const Handle(Express_Type)& theType,
const Standard_Boolean theOpt)
{
myName = new TCollection_HAsciiString (theName);
myType = theType;
myOpt = theOpt;
}
//=======================================================================
// function : Express_Field
// purpose :
//=======================================================================
Express_Field::Express_Field (const Handle(TCollection_HAsciiString)& theName,
const Handle(Express_Type)& theType,
const Standard_Boolean theOpt)
{
myName = theName;
myType = theType;
myOpt = theOpt;
}
//=======================================================================
// function : Name
// purpose :
//=======================================================================
const TCollection_AsciiString& Express_Field::Name() const
{
return myName->String();
}
//=======================================================================
// function : HName
// purpose :
//=======================================================================
Handle(TCollection_HAsciiString) Express_Field::HName() const
{
return myName;
}
//=======================================================================
// function : Type
// purpose :
//=======================================================================
const Handle(Express_Type)& Express_Field::Type() const
{
return myType;
}
//=======================================================================
// function : IsOptional
// purpose :
//=======================================================================
Standard_Boolean Express_Field::IsOptional() const
{
return myOpt;
}

View File

@@ -1,63 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Field_HeaderFile
#define _Express_Field_HeaderFile
#include <Standard_Type.hxx>
class Express_Type;
class TCollection_HAsciiString;
class TCollection_AsciiString;
//! Represents field of the ENTITY item in the EXPRESS schema
class Express_Field : public Standard_Transient
{
public:
//! Create object and initialize it
Standard_EXPORT Express_Field (const Standard_CString theName,
const Handle(Express_Type)& theType,
const Standard_Boolean theOpt);
//! Create object and initialize it
Standard_EXPORT Express_Field (const Handle(TCollection_HAsciiString)& theName,
const Handle(Express_Type)& theType,
const Standard_Boolean theOpt);
//! Returns field name
Standard_EXPORT const TCollection_AsciiString& Name() const;
//! Returns a pointer to the field name to modify it
Standard_EXPORT Handle(TCollection_HAsciiString) HName() const;
//! Returns field type
Standard_EXPORT const Handle(Express_Type)& Type() const;
//! Returns True if field is optional
Standard_EXPORT Standard_Boolean IsOptional() const;
DEFINE_STANDARD_RTTIEXT(Express_Field, Standard_Transient)
protected:
private:
Handle(TCollection_HAsciiString) myName;
Handle(Express_Type) myType;
Standard_Boolean myOpt;
};
#endif // _Express_Field_HeaderFile

View File

@@ -1,22 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef Express_HSequenceOfEntity_HeaderFile
#define Express_HSequenceOfEntity_HeaderFile
#include <Express_SequenceOfEntity.hxx>
#include <NCollection_DefineHSequence.hxx>
DEFINE_HSEQUENCE(Express_HSequenceOfEntity, Express_SequenceOfEntity)
#endif

View File

@@ -1,22 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef Express_HSequenceOfField_HeaderFile
#define Express_HSequenceOfField_HeaderFile
#include <Express_SequenceOfField.hxx>
#include <NCollection_DefineHSequence.hxx>
DEFINE_HSEQUENCE(Express_HSequenceOfField, Express_SequenceOfField)
#endif

View File

@@ -1,22 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef Express_HSequenceOfItem_HeaderFile
#define Express_HSequenceOfItem_HeaderFile
#include <Express_SequenceOfItem.hxx>
#include <NCollection_DefineHSequence.hxx>
DEFINE_HSEQUENCE(Express_HSequenceOfItem, Express_SequenceOfItem)
#endif

View File

@@ -1,39 +0,0 @@
// Created: Tue Nov 2 15:27:26 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Integer.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Integer, Express_PredefinedType)
//=======================================================================
// function : Express_Integer
// purpose :
//=======================================================================
Express_Integer::Express_Integer()
{
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_Integer::CPPName() const
{
return "Standard_Integer";
}

View File

@@ -1,42 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Integer_HeaderFile
#define _Express_Integer_HeaderFile
#include <Express_PredefinedType.hxx>
#include <Standard_Type.hxx>
class TCollection_AsciiString;
//! Implements EXPRESS type 'INTEGER'
class Express_Integer : public Express_PredefinedType
{
public:
//! Empty constructor
Standard_EXPORT Express_Integer();
//! Returns "Standard_Integer"
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_Integer, Express_PredefinedType)
protected:
private:
};
#endif // _Express_Integer_HeaderFile

View File

@@ -1,335 +0,0 @@
// Created: Tue Nov 2 13:14:31 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Item.hxx>
#include <Message.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_HAsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Item, Standard_Transient)
Standard_Integer Express_Item::myIndex = -1;
//=======================================================================
// function : Express_Item
// purpose :
//=======================================================================
Express_Item::Express_Item (const Standard_CString theName)
{
myName = new TCollection_HAsciiString (theName);
myGenMode = GM_Undefined;
myShortName = new TCollection_HAsciiString;
myCategory = new TCollection_HAsciiString;
myhasCheck = Standard_False;
myhasFillShared = Standard_False;
myLoopFlag = Standard_False;
}
//=======================================================================
// function : Express_Item
// purpose :
//=======================================================================
Express_Item::Express_Item (const Handle(TCollection_HAsciiString)& theName)
{
myName = theName;
myGenMode = GM_Undefined;
myShortName = new TCollection_HAsciiString;
myCategory = new TCollection_HAsciiString;
myhasCheck = Standard_False;
myhasFillShared = Standard_False;
myLoopFlag = Standard_False;
}
//=======================================================================
// function : Name
// purpose :
//=======================================================================
const TCollection_AsciiString& Express_Item::Name() const
{
return myName->String();
}
//=======================================================================
// function : HName
// purpose :
//=======================================================================
Handle(TCollection_HAsciiString) Express_Item::HName() const
{
return myName;
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_Item::CPPName() const
{
TCollection_AsciiString aName = GetPackageName();
aName += "_";
aName += Name();
return aName;
}
//=======================================================================
// function : SetPackageName
// purpose :
//=======================================================================
void Express_Item::SetPackageName (const TCollection_AsciiString& thePack)
{
myPack = new TCollection_HAsciiString(thePack);
}
//=======================================================================
// function : GetPackageName
// purpose :
//=======================================================================
const TCollection_AsciiString& Express_Item::GetPackageName() const
{
if (myPack.IsNull())
{
Message::SendWarning() << "Warning: item " << Name() << " still has no package assigned, used " << GetUnknownPackageName();
return GetUnknownPackageName();
}
return myPack->String();
}
//=======================================================================
// function : IsPackageNameSet
// purpose :
//=======================================================================
Standard_Boolean Express_Item::IsPackageNameSet() const
{
return !myPack.IsNull();
}
//=======================================================================
// function : GetUnknownPackageName
// purpose :
//=======================================================================
TCollection_AsciiString& Express_Item::GetUnknownPackageName()
{
static TCollection_AsciiString aUnknownPackageName = "StepStep";
return aUnknownPackageName;
}
//=======================================================================
// function : GetGenMode
// purpose :
//=======================================================================
Express_Item::GenMode Express_Item::GetGenMode() const
{
return myGenMode;
}
//=======================================================================
// function : SetGenMode
// purpose :
//=======================================================================
void Express_Item::SetGenMode (const Express_Item::GenMode theGenMode)
{
myGenMode = theGenMode;
}
//=======================================================================
// function : ResetLoopFlag
// purpose :
//=======================================================================
void Express_Item::ResetLoopFlag()
{
myLoopFlag = Standard_False;
}
//=======================================================================
// function : Generate
// purpose :
//=======================================================================
Standard_Boolean Express_Item::Generate()
{
// skip items without "generate" mark
GenMode aMode = GetGenMode();
if (!(aMode == GM_GenByUser || aMode == GM_GenByAlgo))
{
return Standard_False;
}
// manage indent for cout in order to mark structure of calls
static Standard_Integer aShift = -1;
aShift++;
for (Standard_Integer i = 0; i < aShift; i++)
{
std::cout << " ";
}
// sets the mode to generated before "GenerateClass" function to avoid looping
SetGenMode (GM_Generated);
Standard_Boolean aRes = GenerateClass();
aShift--;
return aRes;
}
//=======================================================================
// function : Use
// purpose :
//=======================================================================
Standard_Boolean Express_Item::Use()
{
// if Item is not mentioned by the user but is used, then it is necessary to generate
if (GetGenMode() != GM_Undefined)
{
return Standard_False;
}
SetGenMode (GM_GenByAlgo);
return Generate();
}
//=======================================================================
// function : Use2
// purpose :
//=======================================================================
void Express_Item::Use2 (const TCollection_AsciiString& theRefName, const TCollection_AsciiString& theRefPack)
{
if (myLoopFlag)
{
return;
}
else
{
myLoopFlag = Standard_True;
}
// issue a warning message if item does not have package assigned
if (!IsPackageNameSet())
{
Message::SendWarning() << "Warning: item " << Name() << " has no package assigned but used by " << theRefName << ", setting " << theRefPack;
SetPackageName (theRefPack);
}
PropagateUse();
}
//=======================================================================
// function : SetCategory
// purpose :
//=======================================================================
void Express_Item::SetCategory (const Handle(TCollection_HAsciiString)& theCateg)
{
myCategory = theCateg;
}
//=======================================================================
// function : Cartegory
// purpose :
//=======================================================================
const TCollection_AsciiString& Express_Item::Category() const
{
return myCategory->String();
}
//=======================================================================
// function : SetShortName
// purpose :
//=======================================================================
void Express_Item::SetShortName (const Handle(TCollection_HAsciiString)& theShName)
{
myShortName = theShName;
}
//=======================================================================
// function : ShortName
// purpose :
//=======================================================================
Handle(TCollection_HAsciiString) Express_Item::ShortName() const
{
return myShortName;
}
//=======================================================================
// function : SetCheckFlag
// purpose :
//=======================================================================
void Express_Item::SetCheckFlag (const Standard_Boolean theCheckFlag)
{
myhasCheck = theCheckFlag;
}
//=======================================================================
// function : CheckFlag
// purpose :
//=======================================================================
Standard_Boolean Express_Item::CheckFlag() const
{
return myhasCheck;
}
//=======================================================================
// function : SetFillSharedFlag
// purpose :
//=======================================================================
void Express_Item::SetFillSharedFlag (const Standard_Boolean theFillSharedFlag)
{
myhasFillShared = theFillSharedFlag;
}
//=======================================================================
// function : FillSharedFlag
// purpose :
//=======================================================================
Standard_Boolean Express_Item::FillSharedFlag() const
{
return myhasFillShared;
}
//=======================================================================
// function : SetIndex
// purpose :
//=======================================================================
void Express_Item::SetIndex (const Standard_Integer theIndex)
{
myIndex = theIndex;
}
//=======================================================================
// function : Index
// purpose :
//=======================================================================
Standard_Integer Express_Item::Index()
{
return myIndex;
}

View File

@@ -1,150 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Item_HeaderFile
#define _Express_Item_HeaderFile
#include <Standard.hxx>
#include <Standard_Boolean.hxx>
#include <Standard_CString.hxx>
#include <Standard_DefineHandle.hxx>
#include <Standard_Transient.hxx>
class TCollection_AsciiString;
class TCollection_HAsciiString;
//! Base class for items of the schema. Stores a name of the class,
//! package name and flag used to mark items for generation.
//! Provides interface for writing generated class definitions to HXX
//! and CXX files.
class Express_Item : public Standard_Transient
{
public:
enum GenMode
{
GM_NoGen, // Item in existed list - no need to generate
GM_GenByUser, // Item in new list - need to generate
GM_GenByAlgo, // Item isn't in any list but is used by needed item
GM_Undefined, // Item isn't in any list
GM_Generated // Item has been generated
};
//! Returns item name
Standard_EXPORT const TCollection_AsciiString& Name() const;
//! Returns a pointer to the item name to modify it
Standard_EXPORT Handle(TCollection_HAsciiString) HName() const;
//! Returns (generated) name for the item in CXX-style (Package_Class)
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const;
//! Returns package name
//! If not defined, returns unknown package name: "StepStep"
Standard_EXPORT const TCollection_AsciiString& GetPackageName() const;
//! Returns whether the package name is set.
Standard_EXPORT Standard_Boolean IsPackageNameSet() const;
//! Returns unknown package name: "StepStep"
Standard_EXPORT static TCollection_AsciiString& GetUnknownPackageName();
//! Sets package name
Standard_EXPORT void SetPackageName (const TCollection_AsciiString& thePack);
//! Returns item generation mode
Standard_EXPORT GenMode GetGenMode() const;
//! Change generation mode for item
Standard_EXPORT void SetGenMode (const GenMode theGenMode);
//! Reset loop flag
Standard_EXPORT void ResetLoopFlag();
//! General interface for creating HXX/CXX files from item
Standard_EXPORT virtual Standard_Boolean GenerateClass() const = 0;
//! Propagates the calls of Use function
Standard_EXPORT virtual void PropagateUse() const = 0;
//! Checks that item is marked for generation and if yes,
//! generate it by calling GenerateClass. But firstly define
//! PackageName to "StepStep" if not yet defined and drop Mark flag.
Standard_EXPORT Standard_Boolean Generate();
//! Declares item as used by other item being generated
//! If Item is not mentioned by the user (as new or existed) but is used,
//! then it sets GenMode to GM_GenByAlgo and Calls Generate().
Standard_EXPORT Standard_Boolean Use();
//! Mark Item as visited in PropagateUse flow and defined the package name if not set.
Standard_EXPORT void Use2 (const TCollection_AsciiString& theRefName, const TCollection_AsciiString& theRefPack);
//! Set category for item
Standard_EXPORT void SetCategory (const Handle(TCollection_HAsciiString)& theCateg);
//! Get item category
Standard_EXPORT const TCollection_AsciiString& Category() const;
//! Set short name for item
Standard_EXPORT void SetShortName (const Handle(TCollection_HAsciiString)& theShName);
//! Get item short name
Standard_EXPORT Handle(TCollection_HAsciiString) ShortName() const;
//! Set flag for presence of method Check in the class
Standard_EXPORT void SetCheckFlag (const Standard_Boolean theCheckFlag);
//! Get flag resposible for presence of method Check in the class
Standard_EXPORT Standard_Boolean CheckFlag() const;
//! Set flag for presence of method FillShared in the class
Standard_EXPORT void SetFillSharedFlag (const Standard_Boolean theFillSharedFlag);
//! Get flag resposible for presence of method FillShared in the class
Standard_EXPORT Standard_Boolean FillSharedFlag() const;
//! Set start entity index
Standard_EXPORT static void SetIndex (const Standard_Integer theIndex);
//! Get current entity index
Standard_EXPORT static Standard_Integer Index();
DEFINE_STANDARD_RTTIEXT(Express_Item, Standard_Transient)
protected:
//! Creates object and initializes fields PackageName and
//! CreateFlag by 0
Standard_EXPORT Express_Item (const Standard_CString theName);
//! Creates object and initializes fields PackageName and
//! CreateFlag by 0
Standard_EXPORT Express_Item (const Handle(TCollection_HAsciiString)& theName);
private:
Handle(TCollection_HAsciiString) myName;
Handle(TCollection_HAsciiString) myPack;
// "Generate" mark. If is TRUE a class will be generated for the item
GenMode myGenMode;
// Flag to avoid looping
Standard_Boolean myLoopFlag;
Handle(TCollection_HAsciiString) myShortName;
Handle(TCollection_HAsciiString) myCategory;
Standard_Boolean myhasCheck;
Standard_Boolean myhasFillShared;
static Standard_Integer myIndex;
};
#endif // _Express_Item_HeaderFile

View File

@@ -1,21 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_List_HeaderFile
#define _Express_List_HeaderFile
#include <Express_ComplexType.hxx>
typedef Express_ComplexType Express_List;
#endif // _Express_List_HeaderFile

View File

@@ -1,70 +0,0 @@
// Created: Tue Nov 2 15:27:26 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Logical.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Logical, Express_PredefinedType)
//=======================================================================
// function : Express_Logical
// purpose :
//=======================================================================
Express_Logical::Express_Logical()
{
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_Logical::CPPName() const
{
return "StepData_Logical";
}
//=======================================================================
// function : IsStandard
// purpose :
//=======================================================================
Standard_Boolean Express_Logical::IsStandard() const
{
return Standard_False;
}
//=======================================================================
// function : IsSimple
// purpose :
//=======================================================================
Standard_Boolean Express_Logical::IsSimple() const
{
return Standard_True;
}
//=======================================================================
// function : IsHandle
// purpose :
//=======================================================================
Standard_Boolean Express_Logical::IsHandle() const
{
return Standard_False;
}

View File

@@ -1,51 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Logical_HeaderFile
#define _Express_Logical_HeaderFile
#include <Express_PredefinedType.hxx>
#include <Standard_Type.hxx>
class TCollection_AsciiString;
//! Implements EXPRESS type 'LOGICAL'
class Express_Logical : public Express_PredefinedType
{
public:
//! Empty constructor
Standard_EXPORT Express_Logical();
//! Returns "StepData_Logical"
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
//! Return False
Standard_EXPORT virtual Standard_Boolean IsStandard() const Standard_OVERRIDE;
//! Return False
Standard_EXPORT virtual Standard_Boolean IsSimple() const Standard_OVERRIDE;
//! Return False
Standard_EXPORT virtual Standard_Boolean IsHandle() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_Logical, Express_PredefinedType)
protected:
private:
};
#endif // _Express_Logical_HeaderFile

View File

@@ -1,167 +0,0 @@
// Created: Tue Nov 2 15:13:31 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_NamedType.hxx>
#include <Express_Alias.hxx>
#include <Express_Entity.hxx>
#include <Express_Enum.hxx>
#include <Express_Item.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_NamedType, Express_Type)
//=======================================================================
// function : Express_NamedType
// purpose :
//=======================================================================
Express_NamedType::Express_NamedType (const Standard_CString theName)
{
myName = new TCollection_HAsciiString (theName);
}
//=======================================================================
// function : Express_NamedType
// purpose :
//=======================================================================
Express_NamedType::Express_NamedType (const Handle(TCollection_HAsciiString)& theName)
{
myName = theName;
}
//=======================================================================
// function : Name
// purpose :
//=======================================================================
const TCollection_AsciiString& Express_NamedType::Name() const
{
return myName->String();
}
//=======================================================================
// function : HName
// purpose :
//=======================================================================
Handle(TCollection_HAsciiString) Express_NamedType::HName() const
{
return myName;
}
//=======================================================================
// function : Item
// purpose :
//=======================================================================
const Handle(Express_Item)& Express_NamedType::Item() const
{
return myItem;
}
//=======================================================================
// function : SetItem
// purpose :
//=======================================================================
void Express_NamedType::SetItem (const Handle(Express_Item)& theItem)
{
myItem = theItem;
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_NamedType::CPPName() const
{
return myItem->CPPName();
}
//=======================================================================
// function : IsStandard
// purpose :
//=======================================================================
Standard_Boolean Express_NamedType::IsStandard() const
{
if (myItem->IsKind (STANDARD_TYPE(Express_Alias)))
{
Handle(Express_Alias) anAlias = Handle(Express_Alias)::DownCast (myItem);
return anAlias->Type()->IsStandard();
}
return Standard_False;
}
//=======================================================================
// function : IsSimple
// purpose :
//=======================================================================
Standard_Boolean Express_NamedType::IsSimple() const
{
if (myItem->IsKind (STANDARD_TYPE(Express_Alias)))
{
Handle(Express_Alias) anAlias = Handle(Express_Alias)::DownCast (myItem);
return anAlias->Type()->IsSimple();
}
if (myItem->IsKind (STANDARD_TYPE(Express_Enum)))
{
return Standard_True;
}
return Standard_False; // SELECT & ENTITY
}
//=======================================================================
// function : IsHandle
// purpose :
//=======================================================================
Standard_Boolean Express_NamedType::IsHandle() const
{
if (myItem->IsKind (STANDARD_TYPE(Express_Alias)))
{
Handle(Express_Alias) alias = Handle(Express_Alias)::DownCast (myItem);
return alias->Type()->IsHandle();
}
if (myItem->IsKind (STANDARD_TYPE(Express_Entity)))
{
return Standard_True;
}
return Standard_False; // SELECT & ENUMERATION
}
//=======================================================================
// function : Use
// purpose :
//=======================================================================
Standard_Boolean Express_NamedType::Use() const
{
return myItem->Use();
}
//=======================================================================
// function : Use2
// purpose :
//=======================================================================
void Express_NamedType::Use2 (const TCollection_AsciiString& theRefName, const TCollection_AsciiString& theRefPack) const
{
myItem->Use2 (theRefName, theRefPack);
}

View File

@@ -1,81 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_NamedType_HeaderFile
#define _Express_NamedType_HeaderFile
#include <Express_Type.hxx>
#include <Standard_Type.hxx>
class Express_Item;
class TCollection_AsciiString;
class TCollection_HAsciiString;
//! Base class for complex types (ARRAY, LIST, BAG, SET)
//! in EXPRESS schema
//! Stores type of elements and
class Express_NamedType : public Express_Type
{
public:
//! Creates an object and initializes by name
Standard_EXPORT Express_NamedType (const Standard_CString theName);
//! Creates an object and initializes by name
Standard_EXPORT Express_NamedType (const Handle(TCollection_HAsciiString)& theName);
//! Returns name of type (item in schema)
Standard_EXPORT const TCollection_AsciiString& Name() const;
//! Returns a pointer to the type name to modify it
Standard_EXPORT Handle(TCollection_HAsciiString) HName() const;
//! Returns handle to referred item in schema
Standard_EXPORT const Handle(Express_Item)& Item() const;
//! Sets handle to referred item in schema
Standard_EXPORT void SetItem (const Handle(Express_Item)& theItem);
//! Returns CPP-style name of the type
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
//! Return True if type is defined in package Standard
Standard_EXPORT virtual Standard_Boolean IsStandard() const Standard_OVERRIDE;
//! Return True if type is simple (not a class)
Standard_EXPORT virtual Standard_Boolean IsSimple() const Standard_OVERRIDE;
//! Return True if type is inherited from Transient
Standard_EXPORT virtual Standard_Boolean IsHandle() const Standard_OVERRIDE;
//! Declares type as used by some item being generated.
//! Calls Use() for referred item (found by name).
Standard_EXPORT virtual Standard_Boolean Use() const Standard_OVERRIDE;
//! Declares type as used by some item being generated.
//! Calls Use() for referred item (found by name).
Standard_EXPORT virtual void Use2 (const TCollection_AsciiString& theRefName, const TCollection_AsciiString& theRefPack) const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_NamedType, Express_Type)
protected:
private:
Handle(TCollection_HAsciiString) myName;
Handle(Express_Item) myItem;
};
#endif // _Express_NamedType_HeaderFile

View File

@@ -1,21 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Number_HeaderFile
#define _Express_Number_HeaderFile
#include <Express_Integer.hxx>
typedef Express_Integer Express_Number;
#endif // _Express_Number_HeaderFile

View File

@@ -1,38 +0,0 @@
// Created: Tue Nov 2 15:13:31 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_PredefinedType.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_PredefinedType, Express_Type)
//=======================================================================
// function : Express_PredefinedType
// purpose :
//=======================================================================
Express_PredefinedType::Express_PredefinedType()
{
}
//=======================================================================
// function : IsStandard
// purpose :
//=======================================================================
Standard_Boolean Express_PredefinedType::IsStandard() const
{
return Standard_True;
}

View File

@@ -1,41 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_PredefinedType_HeaderFile
#define _Express_PredefinedType_HeaderFile
#include <Standard_Type.hxx>
#include <Express_Type.hxx>
//! Base class for predefined types (like NUMBER or STRING)
//! in EXPRESS schema
class Express_PredefinedType : public Express_Type
{
public:
//! Returns True
Standard_EXPORT virtual Standard_Boolean IsStandard() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_PredefinedType, Express_Type)
protected:
//! Empty constructor
Standard_EXPORT Express_PredefinedType();
private:
};
#endif // _Express_PredefinedType_HeaderFile

View File

@@ -1,39 +0,0 @@
// Created: Tue Nov 2 15:27:26 1999
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Real.hxx>
#include <TCollection_AsciiString.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Real,Express_PredefinedType)
//=======================================================================
// function : Express_Real
// purpose :
//=======================================================================
Express_Real::Express_Real()
{
}
//=======================================================================
// function : CPPName
// purpose :
//=======================================================================
const TCollection_AsciiString Express_Real::CPPName() const
{
return "Standard_Real";
}

View File

@@ -1,42 +0,0 @@
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Express_Real_HeaderFile
#define _Express_Real_HeaderFile
#include <Express_PredefinedType.hxx>
#include <Standard_Type.hxx>
class TCollection_AsciiString;
//! Implements EXPRESS type 'REAL'
class Express_Real : public Express_PredefinedType
{
public:
//! Empty constructor
Standard_EXPORT Express_Real();
//! Returns "Standard_Real"
Standard_EXPORT virtual const TCollection_AsciiString CPPName() const Standard_OVERRIDE;
DEFINE_STANDARD_RTTIEXT(Express_Real, Express_PredefinedType)
protected:
private:
};
#endif // _Express_Real_HeaderFile

View File

@@ -1,49 +0,0 @@
// Created: Fri Nov 22 13:32:26 2002
// Author: Andrey BETENEV
// Copyright (c) 1999-2020 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Express_Reference.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Express_Reference, Express_Item)
//=======================================================================
// function : Express_Reference
// purpose :
//=======================================================================
Express_Reference::Express_Reference (const Standard_CString theName,
const Handle(TColStd_HSequenceOfHAsciiString)& theTypes)
: Express_Item (theName)
{
myTypes = theTypes;
}
//=======================================================================
// function : GenerateClass
// purpose : dummy method
//=======================================================================
Standard_Boolean Express_Reference::GenerateClass() const
{
return Standard_False;
}
//=======================================================================
// function : PropagateUse
// purpose : dummy method
//=======================================================================
void Express_Reference::PropagateUse() const
{
}

Some files were not shown because too many files have changed in this diff Show More