mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-19 13:40:49 +03:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3f53006c35 |
@@ -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 TKMeshVS TKIVtk TKD3DHost
|
||||
ApplicationFramework TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF
|
||||
DataExchange TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh
|
||||
DataExchange TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF
|
||||
Draw TKDraw TKTopTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
|
||||
|
@@ -439,5 +439,3 @@ n Geom2dEvaluator
|
||||
t TKVCAF
|
||||
n XCAFView
|
||||
n XCAFNoteObjects
|
||||
t TKRWMesh
|
||||
n RWMesh
|
||||
|
@@ -133,7 +133,7 @@ macro (THIRDPARTY_PRODUCT PRODUCT_NAME HEADER_NAME LIBRARY_CSF_NAME LIBRARY_NAME
|
||||
# set 3RDPARTY_${PRODUCT_NAME}_LIBRARY as notfound, otherwise find_library can't assign a new value to 3RDPARTY_${PRODUCT_NAME}_LIBRARY
|
||||
set (3RDPARTY_${PRODUCT_NAME}_LIBRARY_${LIBRARY_NAME_SUFFIX} "3RDPARTY_${PRODUCT_NAME}_LIBRARY_${LIBRARY_NAME_SUFFIX}-NOTFOUND" CACHE FILEPATH "The path to ${PRODUCT_NAME} library \"${LIBRARY_NAME}\"" FORCE)
|
||||
|
||||
if ((3RDPARTY_${PRODUCT_NAME}_DIR AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DIR}") OR (3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR_${LIBRARY_NAME}}"))
|
||||
if (3RDPARTY_${PRODUCT_NAME}_DIR AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DIR}")
|
||||
find_library (3RDPARTY_${PRODUCT_NAME}_LIBRARY_${LIBRARY_NAME_SUFFIX} NAMES ${LIBRARY_NAME}
|
||||
PATHS "${3RDPARTY_${PRODUCT_NAME}_LIBRARY_DIR_${LIBRARY_NAME}}" "${3RDPARTY_${PRODUCT_NAME}_DIR}"
|
||||
PATH_SUFFIXES ${${PRODUCT_NAME}_PATH_SUFFIXES}
|
||||
@@ -181,9 +181,9 @@ macro (THIRDPARTY_PRODUCT PRODUCT_NAME HEADER_NAME LIBRARY_CSF_NAME LIBRARY_NAME
|
||||
# set 3RDPARTY_${PRODUCT_NAME}_DLL as notfound, otherwise find_library can't assign a new value to 3RDPARTY_${PRODUCT_NAME}_DLL
|
||||
set (3RDPARTY_${PRODUCT_NAME}_DLL_${LIBRARY_NAME_SUFFIX} "3RDPARTY_${PRODUCT_NAME}_DLL_${LIBRARY_NAME_SUFFIX}-NOTFOUND" CACHE FILEPATH "The path to ${PRODUCT_NAME} shared library \"${LIBRARY_NAME}\"" FORCE)
|
||||
|
||||
if ((3RDPARTY_${PRODUCT_NAME}_DIR AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DIR}") OR (3RDPARTY_${PRODUCT_NAME}_DLL_DIR_${LIBRARY_NAME} AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR_${LIBRARY_NAME}}"))
|
||||
if (3RDPARTY_${PRODUCT_NAME}_DIR AND EXISTS "${3RDPARTY_${PRODUCT_NAME}_DIR}")
|
||||
find_library (3RDPARTY_${PRODUCT_NAME}_DLL_${LIBRARY_NAME_SUFFIX} NAMES ${LIBRARY_NAME}
|
||||
PATHS "${3RDPARTY_${PRODUCT_NAME}_DLL_DIR_${LIBRARY_NAME}}" "${3RDPARTY_${PRODUCT_NAME}_DIR}"
|
||||
PATHS "${3RDPARTY_${PRODUCT_NAME}_DIR}"
|
||||
PATH_SUFFIXES bin win${COMPILER_BITNESS}/${COMPILER}/bin
|
||||
NO_DEFAULT_PATH)
|
||||
if (3RDPARTY_${PRODUCT_NAME}_DLL_${LIBRARY_NAME_SUFFIX} STREQUAL "3RDPARTY_${PRODUCT_NAME}_DLL_${LIBRARY_NAME_SUFFIX}-NOTFOUND")
|
||||
|
@@ -79,29 +79,22 @@ if (WIN32)
|
||||
set (CSF_objc "objc")
|
||||
|
||||
# frameworks
|
||||
if (IOS)
|
||||
find_library (Appkit_LIB NAMES UIKit)
|
||||
set (CSF_Appkit ${Appkit_LIB})
|
||||
else()
|
||||
find_library (Appkit_LIB NAMES AppKit)
|
||||
set (CSF_Appkit ${Appkit_LIB})
|
||||
endif()
|
||||
OCCT_CHECK_AND_UNSET (Appkit_LIB)
|
||||
find_library (Appkit_LIB NAMES AppKit)
|
||||
set (CSF_Appkit ${Appkit_LIB})
|
||||
|
||||
find_library (IOKit_LIB NAMES IOKit)
|
||||
set (CSF_IOKit ${IOKit_LIB})
|
||||
|
||||
OCCT_CHECK_AND_UNSET (Appkit_LIB)
|
||||
OCCT_CHECK_AND_UNSET (IOKit_LIB)
|
||||
|
||||
if (IOS)
|
||||
find_library (OpenGlLibs_LIB NAMES OpenGLES)
|
||||
set (CSF_OpenGlLibs ${OpenGlLibs_LIB})
|
||||
OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
|
||||
elseif (USE_GLX)
|
||||
if (USE_GLX)
|
||||
set (CSF_OpenGlLibs GL)
|
||||
set (CSF_XwLibs "X11 Xext Xmu Xi")
|
||||
else()
|
||||
find_library (OpenGlLibs_LIB NAMES OpenGL)
|
||||
set (CSF_OpenGlLibs ${OpenGlLibs_LIB})
|
||||
|
||||
OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
|
||||
endif()
|
||||
|
||||
|
@@ -163,18 +163,13 @@ function (FIND_PRODUCT_DIR ROOT_DIR PRODUCT_NAME RESULT)
|
||||
OCCT_MAKE_COMPILER_BITNESS()
|
||||
|
||||
string (TOLOWER "${PRODUCT_NAME}" lower_PRODUCT_NAME)
|
||||
if ("${lower_PRODUCT_NAME}" STREQUAL "egl")
|
||||
string (SUBSTRING "${lower_PRODUCT_NAME}" 1 -1 lower_PRODUCT_NAME)
|
||||
list (APPEND SEARCH_TEMPLATES "[^gl]+${lower_PRODUCT_NAME}.*")
|
||||
else()
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*${COMPILER}.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+.*${COMPILER}.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[a-zA-Z]*[0-9]*-${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+.*${COMPILER}.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*")
|
||||
endif()
|
||||
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*${COMPILER}.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+.*${COMPILER}.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*.*${COMPILER_BITNESS}")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*[0-9.]+")
|
||||
list (APPEND SEARCH_TEMPLATES "^[^a-zA-Z]*${lower_PRODUCT_NAME}[^a-zA-Z]*")
|
||||
|
||||
SUBDIRECTORY_NAMES ("${ROOT_DIR}" SUBDIR_NAME_LIST)
|
||||
|
||||
|
@@ -1167,41 +1167,26 @@ proc wokdep:SaveCustom {} {
|
||||
}
|
||||
|
||||
set aStringInc [join $::CSF_OPT_INC $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringInc [regsub -all "$::PRODUCTS_PATH" $aStringInc "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional headers search paths"
|
||||
puts $aFile "set \"CSF_OPT_INC=$aStringInc\""
|
||||
|
||||
set aStringLib32 [join $::CSF_OPT_LIB32 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib32 [regsub -all "$::PRODUCTS_PATH" $aStringLib32 "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional libraries (32-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_LIB32=$aStringLib32\""
|
||||
|
||||
set aStringLib64 [join $::CSF_OPT_LIB64 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib64 [regsub -all "$::PRODUCTS_PATH" $aStringLib64 "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional libraries (64-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_LIB64=$aStringLib64\""
|
||||
|
||||
set aStringBin32 [join $::CSF_OPT_BIN32 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin32 [regsub -all "$::PRODUCTS_PATH" $aStringBin32 "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional (32-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_BIN32=$aStringBin32\""
|
||||
|
||||
set aStringBin64 [join $::CSF_OPT_BIN64 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin64 [regsub -all "$::PRODUCTS_PATH" $aStringBin64 "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional (64-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_BIN64=$aStringBin64\""
|
||||
@@ -1232,36 +1217,25 @@ proc wokdep:SaveCustom {} {
|
||||
}
|
||||
|
||||
set aStringInc [join $::CSF_OPT_INC $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringInc [regsub -all "$::PRODUCTS_PATH" $aStringInc "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional headers search paths"
|
||||
puts $aFile "export CSF_OPT_INC=\"$aStringInc\""
|
||||
|
||||
set aStringLib [join [set ::CSF_OPT_LIB$::ARCH] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib [regsub -all "$::PRODUCTS_PATH" $aStringLib "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
set aStringLib$::ARCH [join [set ::CSF_OPT_LIB$::ARCH] $::SYS_PATH_SPLITTER]
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional libraries ($::ARCH-bit) search paths"
|
||||
puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib]\""
|
||||
puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib$::ARCH]\""
|
||||
|
||||
set aStringBin [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin [regsub -all "$::PRODUCTS_PATH" $aStringBin "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
set aStringBin$::ARCH [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER]
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional ($::ARCH-bit) search paths"
|
||||
puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin]\""
|
||||
puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin$::ARCH]\""
|
||||
|
||||
close $aFile
|
||||
}
|
||||
puts "Configuration saved to file '$aCustomFilePath'"
|
||||
|
||||
# generate custom.auto.pri
|
||||
set toExportCustomPri 1
|
||||
if { $toExportCustomPri == 1 } {
|
||||
if { "$::PRJFMT" == "pro" } {
|
||||
set aCasVer [wokdep:DetectCasVersion]
|
||||
set aCustomFilePath "./adm/qmake/custom.auto.pri"
|
||||
set aFile [open $aCustomFilePath "w"]
|
||||
@@ -1286,18 +1260,12 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional headers search paths"
|
||||
foreach anIncPath $::CSF_OPT_INC {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set anIncPath [regsub -all "$::PRODUCTS_PATH" $anIncPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile "INCLUDEPATH += \"${anIncPath}\""
|
||||
}
|
||||
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional libraries search paths"
|
||||
foreach aLibPath [set ::CSF_OPT_LIB$::ARCH] {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aLibPath [regsub -all "$::PRODUCTS_PATH" $aLibPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile "LIBS += -L\"${aLibPath}\""
|
||||
}
|
||||
|
||||
@@ -1305,9 +1273,6 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional DLLs search paths"
|
||||
foreach aDllPath [set ::CSF_OPT_BIN$::ARCH] {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aDllPath [regsub -all "$::PRODUCTS_PATH" $aDllPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile "LIBS += -L\"${aDllPath}\""
|
||||
}
|
||||
}
|
||||
|
@@ -1377,16 +1377,11 @@ proc osutils:csfList { theOS theCsfLibsMap theCsfFrmsMap } {
|
||||
set aLibsMap(CSF_TBB) ""
|
||||
} else {
|
||||
set aLibsMap(CSF_dl) "dl"
|
||||
if { "$theOS" == "mac" || "$theOS" == "ios" } {
|
||||
if { "$theOS" == "mac" } {
|
||||
set aLibsMap(CSF_objc) "objc"
|
||||
if { "$theOS" == "ios" } {
|
||||
set aFrmsMap(CSF_Appkit) "UIKit"
|
||||
set aFrmsMap(CSF_OpenGlLibs) "OpenGLES"
|
||||
} else {
|
||||
set aFrmsMap(CSF_Appkit) "AppKit"
|
||||
set aFrmsMap(CSF_OpenGlLibs) "OpenGL"
|
||||
}
|
||||
set aFrmsMap(CSF_Appkit) "AppKit"
|
||||
set aFrmsMap(CSF_IOKit) "IOKit"
|
||||
set aFrmsMap(CSF_OpenGlLibs) "OpenGL"
|
||||
set aFrmsMap(CSF_TclLibs) "Tcl"
|
||||
set aLibsMap(CSF_TclLibs) ""
|
||||
set aFrmsMap(CSF_TclTkLibs) "Tk"
|
||||
@@ -2675,7 +2670,7 @@ proc OS:xcodeproj { theModules theOutDir theGuidsMap theLibType thePlatform} {
|
||||
}
|
||||
|
||||
# Generates dependencies section for Xcode project files.
|
||||
proc osutils:xcdtk:deps {theToolKit theTargetType theGuidsMap theFileRefSection theDepsGuids theDepsRefGuids thePlatform theIsStatic} {
|
||||
proc osutils:xcdtk:deps {theToolKit theTargetType theGuidsMap theFileRefSection theDepsGuids theDepsRefGuids theIsStatic} {
|
||||
upvar $theGuidsMap aGuidsMap
|
||||
upvar $theFileRefSection aFileRefSection
|
||||
upvar $theDepsGuids aDepsGuids
|
||||
@@ -2699,7 +2694,7 @@ proc osutils:xcdtk:deps {theToolKit theTargetType theGuidsMap theFileRefSection
|
||||
}
|
||||
}
|
||||
|
||||
osutils:usedOsLibs $theToolKit $thePlatform aLibs aFrameworks
|
||||
osutils:usedOsLibs $theToolKit "mac" aLibs aFrameworks
|
||||
set aUsedLibs [concat $aUsedLibs $aLibs]
|
||||
set aUsedLibs [concat $aUsedLibs $aFrameworks]
|
||||
foreach tkx $aUsedLibs {
|
||||
@@ -2914,7 +2909,7 @@ proc osutils:xcdtk { theOutDir theToolKit theGuidsMap theIsStatic thePlatform {t
|
||||
}
|
||||
|
||||
puts $aPbxprojFile [osutils:xcdtk:sources $theToolKit $theTargetType aSrcFileRefSection aGroupSection aPackagesGuids aSrcFileGuids aGuidsMap anIncPaths]
|
||||
puts $aPbxprojFile [osutils:xcdtk:deps $theToolKit $theTargetType aGuidsMap aDepsFileRefSection aDepsGuids aDepsRefGuids $thePlatform $theIsStatic]
|
||||
puts $aPbxprojFile [osutils:xcdtk:deps $theToolKit $theTargetType aGuidsMap aDepsFileRefSection aDepsGuids aDepsRefGuids $theIsStatic]
|
||||
# End PBXBuildFile section
|
||||
|
||||
# Begin PBXFileReference section
|
||||
|
@@ -12,11 +12,13 @@ CONFIG -= debug_and_release
|
||||
OccGitRoot = $$_PRO_FILE_PWD_/../../../..
|
||||
|
||||
# Define compilation flags
|
||||
CONFIG += warn_on
|
||||
QMAKE_CFLAGS_WARN_ON = -Wall
|
||||
QMAKE_CXXFLAGS_WARN_ON = -Wall
|
||||
win32 {
|
||||
QMAKE_CFLAGS_WARN_ON = -W4
|
||||
!win32 { DEFINES += OCC_CONVERT_SIGNALS }
|
||||
android {
|
||||
CONFIG += warn_off
|
||||
QMAKE_CFLAGS += -fexceptions -Wno-ignored-qualifiers -Wall
|
||||
QMAKE_CXXFLAGS += -fexceptions -Wno-ignored-qualifiers -Wall
|
||||
#android-g++ { QMAKE_CXXFLAGS += -Wno-strict-overflow }
|
||||
} else:win32 {
|
||||
QMAKE_CXXFLAGS_WARN_ON = -W4
|
||||
QMAKE_CXXFLAGS_EXCEPTIONS_ON = /EHa
|
||||
QMAKE_CXXFLAGS_STL_ON = /EHa
|
||||
@@ -37,27 +39,15 @@ win32 {
|
||||
DEFINES += _CRT_SECURE_NO_WARNINGS
|
||||
DEFINES += _CRT_NONSTDC_NO_DEPRECATE
|
||||
DEFINES += _SCL_SECURE_NO_WARNINGS
|
||||
} else {
|
||||
} else:mac {
|
||||
CONFIG += c++11
|
||||
QMAKE_CFLAGS += -fexceptions
|
||||
QMAKE_CXXFLAGS += -fexceptions
|
||||
CONFIG += warn_off
|
||||
QMAKE_CXXFLAGS += -Wall
|
||||
QMAKE_CXXFLAGS += -fvisibility=default
|
||||
DEFINES += OCC_CONVERT_SIGNALS
|
||||
mac {
|
||||
iphoneos {
|
||||
QMAKE_IOS_DEPLOYMENT_TARGET = 8.0
|
||||
} else {
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.14
|
||||
}
|
||||
}
|
||||
}
|
||||
!CONFIG(debug, debug|release) {
|
||||
# disable exceptions in Release builds
|
||||
DEFINES += No_Exception
|
||||
HAVE_RelWithDebInfo {
|
||||
win32 {
|
||||
CONFIG += force_debug_info
|
||||
}
|
||||
iphoneos {
|
||||
QMAKE_IOS_DEPLOYMENT_TARGET = 8.0
|
||||
} else {
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,6 +126,9 @@ win32 {
|
||||
QMAKE_SUBSTITUTES += occtkgen_libfolder
|
||||
|
||||
LIBS += -L$$aLibDest
|
||||
HAVE_RelWithDebInfo {
|
||||
!CONFIG(debug, debug|release) { CONFIG += force_debug_info }
|
||||
}
|
||||
equals(TEMPLATE, lib) {
|
||||
QMAKE_CLEAN += $$DESTDIR/$${TARGET}.dll
|
||||
QMAKE_CLEAN += $$aLibDest/$${TARGET}.lib
|
||||
|
@@ -38,7 +38,6 @@ win32 {
|
||||
CSF_OpenGlLibs = -lopengl32
|
||||
HAVE_GLES2 { CSF_OpenGlLibs = -llibEGL -llibGLESv2 }
|
||||
CSF_psapi = -lPsapi
|
||||
CSF_winmm = -lwinmm
|
||||
CSF_d3d9 = -ld3d9
|
||||
CSF_TclLibs = -ltcl86
|
||||
CSF_TclTkLibs = -ltk86
|
||||
@@ -46,14 +45,9 @@ win32 {
|
||||
} else:mac {
|
||||
CSF_dl = -ldl
|
||||
CSF_objc = -lobjc
|
||||
iphoneos {
|
||||
CSF_Appkit = -framework UIKit
|
||||
CSF_OpenGlLibs = -framework OpenGLES
|
||||
} else {
|
||||
CSF_Appkit = -framework AppKit
|
||||
CSF_OpenGlLibs = -framework OpenGL
|
||||
}
|
||||
CSF_Appkit = -framework AppKit
|
||||
CSF_IOKit = -framework IOKit
|
||||
CSF_OpenGlLibs = -framework OpenGL
|
||||
CSF_TclLibs = -framework Tcl
|
||||
CSF_TclTkLibs = -framework Tk
|
||||
} else {
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 5.6 KiB |
@@ -1738,26 +1738,8 @@ or updating presentation without recomputation (see *AIS_InteractiveObject::Sync
|
||||
* *Aspect_IS_HIDDENLINE* does not implicitly enables drawing mesh edges anymore.
|
||||
Specify Graphic3d_AspectFillArea3d::SetDrawEdges(true) with Graphic3d_AspectFillArea3d::SetInteriorStyle(Aspect_IS_HIDDENLINE) to get previous behavior of Aspect_IS_HIDDENLINE style.
|
||||
|
||||
@subsection upgrade_740_modedprs PrsMgr and SelectMgr hierarchy clean up
|
||||
|
||||
Proxy classes *Prs3d_Presentation*, *PrsMgr_ModedPresentation* and *PrsMgr_Prs* have been removed.
|
||||
Code iterating through the list of low-level structures AIS_InteractiveObject::Presentations() should be updated to access PrsMgr_Presentation directly.
|
||||
Forward declarations of *Prs3d_Presentation* should be corrected, since it is now a typedef to *Graphic3d_Structure*.
|
||||
|
||||
Proxy classes *SelectBasics_SensitiveEntity* and *SelectBasics_EntityOwner* have been removed - *Select3D_SensitiveEntity* and *SelectMgr_EntityOwner* should be now used directly instead.
|
||||
|
||||
@subsection upgrade_740_geproj Custom defines within env.bat
|
||||
|
||||
*env.bat* produced by Visual Studio project generator *genproj.bat* has been modified so that *%CSF_DEFINES%* variable is reset to initial state.
|
||||
Custom building environment relying on old behavior and setting extra macros within *%CSF_DEFINES%* before env.bat should be updated
|
||||
to either modify custom.bat or setup new variable *%CSF_DEFINES_EXTRA%* instead.
|
||||
|
||||
@subsection upgrade_740_BVH_in_BOP Switching Boolean Operations algorithm to use BVH tree instead of UB tree
|
||||
|
||||
Since OCCT 7.4.0 Boolean Operations algorithm uses BVH tree instead of UBTree to find the pairs of entities with interfering bounding boxes.
|
||||
The following API changes have been made:
|
||||
* BOPTools_BoxBndTree and BOPTools_BoxBndTreeSelector have been removed. Use the BOPTools_BoxTree and BOPTools_BoxTreeSelector instead.
|
||||
* BOPTools_BoxSelector::SetBox() method now accepts the BVH_Box instead of Bnd_Box.
|
||||
* Methods BOPTools_BoxSelector::Reject and BOPTools_BoxSelector::Accept have been removed as unused.
|
||||
* The RunParallel flag has been removed from the list of parameters of BOPAlgo_Tools::IntersectVertices method. Earlier, it performed selection from the UB tree in parallel mode. Now all interfering pairs are found in one pass, using pair traverse of the same BVH tree.
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Draw Test Harness {#occt_user_guides__test_harness}
|
||||
Draw Test Harness {#occt_user_guides__test_harness}
|
||||
===============================
|
||||
|
||||
@tableofcontents
|
||||
@@ -5593,8 +5593,7 @@ Draw provides command to create curves and surfaces by approximation.
|
||||
|
||||
* **2dapprox** fits a curve through 2d points;
|
||||
* **appro** fits a curve through 3d points;
|
||||
* **surfapp** and **grilapp** fit a surface through 3d points by approximation;
|
||||
* **surfint** fit a surface through 3d points by interpolation;
|
||||
* **surfapp** and **grilapp** fit a surface through 3d points;
|
||||
* **2dinterpolate** interpolates a curve.
|
||||
|
||||
@subsubsection occt_draw_6_8_1 appro, dapprox
|
||||
@@ -5615,28 +5614,17 @@ Let us pick points and they will be fitted
|
||||
2dapprox c 10
|
||||
~~~~~
|
||||
|
||||
@subsubsection occt_draw_6_8_2 surfapp, grilapp, surfint
|
||||
@subsubsection occt_draw_6_8_2 surfapp, grilapp
|
||||
|
||||
|
||||
Syntax:
|
||||
~~~~~
|
||||
surfapp name nbupoints nbvpoints x y z ....
|
||||
or
|
||||
surfapp name nbupoints nbvpoints surf [periodic_flag = 0]
|
||||
grilapp name nbupoints nbvpoints xo dx yo dy z11 z12 ...
|
||||
surfint name surf nbupoints nbvpoints [periodic_flag = 0]
|
||||
~~~~~
|
||||
|
||||
* **surfapp** fits a surface through an array of u and v points, nbupoints*nbvpoints.
|
||||
* **grilapp** has the same function, but the x,y coordinates of the points are on a grid starting at x0,y0 with steps dx,dy.
|
||||
* **surfapp** can take array of points from other input surface, if alternative syntax
|
||||
**surfapp** name nbupoints nbvpoints surf [periodic_flag = 0]
|
||||
is used.
|
||||
Both command use for fitting approximation algorithm.
|
||||
**surfint** uses interpolation algorithm and can take array of point only from other input surface.
|
||||
Optional parameter **periodic_flag** allows to get correct periodical surfaces in U direction.
|
||||
U direction of result surface corresponds colums of initial array of points.
|
||||
If **periodic_flag** = 1, algorithm uses first row of array as last row and builds periodical surface.
|
||||
|
||||
**Example:**
|
||||
~~~~~
|
||||
|
@@ -226,6 +226,8 @@ Selection is implemented as a combination of various algorithms divided among se
|
||||
#### SelectBasics
|
||||
|
||||
*SelectBasics* package contains basic classes and interfaces for selection. The most notable are:
|
||||
- *SelectBasics_SensitiveEntity* -- the base definition of a sensitive entity;
|
||||
- *SelectBasics_EntityOwner* -- the base definition of the an entity owner -- the link between the sensitive entity and the object to be selected;
|
||||
- *SelectBasics_PickResult* -- the structure for storing quantitative results of detection procedure, for example, depth and distance to the center of geometry;
|
||||
- *SelectBasics_SelectingVolumeManager* -- the interface for interaction with the current selection frustum.
|
||||
|
||||
@@ -245,11 +247,9 @@ Each custom sensitive entity must inherit at least *SelectBasics_SensitiveEntity
|
||||
- triangulation;
|
||||
- wire.
|
||||
|
||||
Each basic sensitive entity inherits *Select3D_SensitiveEntity*.
|
||||
Each basic sensitive entity inherits *Select3D_SensitiveEntity*, which is a child class of *SelectBasics_SensitiveEntity*.
|
||||
The package also contains two auxiliary classes, *Select3D_SensitivePoly* and *Select3D_SensitiveSet*.
|
||||
|
||||
*Select3D_SensitiveEntity* -- the base definition of a sensitive entity.
|
||||
|
||||
*Select3D_SensitiveSet* -- a base class for all complex sensitive entities that require the third level BVH usage. It implements traverse of the tree and defines an interface for the methods that check sub-entities.
|
||||
|
||||
*Select3D_SensitivePoly* -- describes an arbitrary point set and implements basic functions for selection. It is important to know that this class does not perform any internal data checks. Hence, custom implementations of sensitive entity inherited from *Select3D_SensitivePoly* must satisfy the terms of Separating Axis Theorem to use standard OCCT overlap detection methods.
|
||||
|
@@ -155,6 +155,7 @@ class ISession2D_InteractiveObject;
|
||||
class V3d_Viewer;
|
||||
class SelectMgr_SelectableObject;
|
||||
class TCollection_AsciiString;
|
||||
class SelectBasics_EntityOwner;
|
||||
class gp_Pnt2d;
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
|
@@ -264,11 +264,11 @@ bfuse _model _model t_s
|
||||
explode _model e
|
||||
|
||||
# Make a weld at joint edges of platform and wedge
|
||||
blend _model _model 2 _model_26
|
||||
blend _model _model 2 _model_27
|
||||
blend _model _model 2 _model_28
|
||||
blend _model _model 2 _model_29
|
||||
blend _model _model 2 _model_30
|
||||
blend _model _model 2 _model_32
|
||||
blend _model _model 2 _model_31
|
||||
|
||||
# Cylinder on wedge
|
||||
blend result _model 2 _model_161
|
||||
@@ -276,7 +276,7 @@ blend result _model 2 _model_161
|
||||
# Show result
|
||||
pload VISUALIZATION
|
||||
vinit Driver1/Viewer1/View1
|
||||
vbackground -color 0.784314 0.784314 1
|
||||
vsetcolorbg 200 200 255
|
||||
vdisplay -dispMode 1 result
|
||||
vfit
|
||||
vaspects result -setFaceBoundaryDraw 1 -mostContinuity c2
|
||||
|
@@ -262,7 +262,7 @@ unifysamedom result p_1
|
||||
# Show result
|
||||
pload VISUALIZATION
|
||||
vinit Driver1/Viewer1/View1
|
||||
vbackground -color 0.784314 0.784314 1
|
||||
vsetcolorbg 200 200 255
|
||||
vdisplay -dispMode 1 result
|
||||
vfit
|
||||
vaspects result -setFaceBoundaryDraw 1
|
||||
|
@@ -53,7 +53,7 @@ for {set i 1} {$i <= 1} {incr i} {
|
||||
|
||||
# prepare a view
|
||||
vinit Penrose w=1024 h=512
|
||||
vbackground -color WHITE
|
||||
vsetcolorbg 255 255 255
|
||||
vrenderparams -rayTrace -fsaa on -reflections off -shadows off
|
||||
|
||||
# set camera position and adjust lights
|
||||
|
@@ -19,7 +19,7 @@ restore $aBotLoc b
|
||||
vinit View1 w=768 h=768
|
||||
vclear
|
||||
vsetdispmode 0
|
||||
vbackground -color WHITE
|
||||
vsetcolorbg 255 255 255
|
||||
vbottom
|
||||
|
||||
puts "Getting cut projection..."
|
||||
|
@@ -69,7 +69,7 @@ vclose ALL
|
||||
vinit View1 w=768 h=768
|
||||
vtop
|
||||
vglinfo
|
||||
vbackground -gradient 0.705882 0.784314 1 0.705882 0.705882 0.705882 -gradientMode VERTICAL
|
||||
vsetgradientbg 180 200 255 180 180 180 2
|
||||
|
||||
vlight -change 0 -dir 0.577 -0.577 -0.577
|
||||
vrenderparams -msaa 8
|
||||
|
@@ -59,7 +59,7 @@ XShow D
|
||||
vfit
|
||||
vsetdispmode 1
|
||||
vrenderparams -msaa 8
|
||||
vbackground -color WHITE
|
||||
vsetcolorbg 255 255 255
|
||||
|
||||
#param write.iges.brep.mode 1
|
||||
#WriteIges D d:/pencil3.igs
|
||||
|
@@ -30,7 +30,7 @@ vsettransparency glass 0.6
|
||||
vlight new spot pos -100 -100 300
|
||||
|
||||
# set white background and fit view
|
||||
vbackground -color WHITE
|
||||
vsetcolorbg 255 255 255
|
||||
vfit
|
||||
|
||||
# set ray tracing
|
||||
|
@@ -129,7 +129,7 @@ vrenderparams -msaa 8
|
||||
vsetcolor snowflake 0 0 0
|
||||
vsetcolor lines 0 0 0
|
||||
vsetcolor text 0 0 0
|
||||
vbackground -color WHITE
|
||||
vsetcolorbg 255 255 255
|
||||
vtop
|
||||
vfit
|
||||
|
||||
|
@@ -14,10 +14,10 @@
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#include <AIS.hxx>
|
||||
|
||||
#include <Adaptor3d_HCurve.hxx>
|
||||
#include <Adaptor3d_HSurface.hxx>
|
||||
#include <AIS.hxx>
|
||||
#include <Bnd_Box.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <BRepAdaptor_Curve.hxx>
|
||||
|
@@ -17,26 +17,73 @@
|
||||
#ifndef _AIS_HeaderFile
|
||||
#define _AIS_HeaderFile
|
||||
|
||||
#include <AIS_KindOfSurface.hxx>
|
||||
#include <Aspect_TypeOfLine.hxx>
|
||||
#include <Aspect_TypeOfMarker.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <Quantity_NameOfColor.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Prs3d_Presentation.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_DefineAlloc.hxx>
|
||||
#include <Standard_Handle.hxx>
|
||||
|
||||
class Bnd_Box;
|
||||
class Geom_Curve;
|
||||
class Geom_Plane;
|
||||
class Geom_Surface;
|
||||
class TopoDS_Edge;
|
||||
class TopoDS_Face;
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <AIS_KindOfSurface.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Quantity_NameOfColor.hxx>
|
||||
#include <Aspect_TypeOfLine.hxx>
|
||||
#include <Aspect_TypeOfMarker.hxx>
|
||||
class gp_Pnt;
|
||||
class TopoDS_Shape;
|
||||
class gp_Lin;
|
||||
class Geom_Curve;
|
||||
class TopoDS_Edge;
|
||||
class Geom_Plane;
|
||||
class TopoDS_Vertex;
|
||||
class TopoDS_Face;
|
||||
class gp_Pln;
|
||||
class Geom_Surface;
|
||||
class gp_Dir;
|
||||
class Bnd_Box;
|
||||
class gp_Elips;
|
||||
class Prs3d_Presentation;
|
||||
class AIS_Triangulation;
|
||||
class AIS_InteractiveContext;
|
||||
class AIS_GraphicTool;
|
||||
class AIS_GlobalStatus;
|
||||
class AIS_InteractiveObject;
|
||||
class AIS_Point;
|
||||
class AIS_Axis;
|
||||
class AIS_Trihedron;
|
||||
class AIS_PlaneTrihedron;
|
||||
class AIS_Line;
|
||||
class AIS_Circle;
|
||||
class AIS_Plane;
|
||||
class AIS_Shape;
|
||||
class AIS_ConnectedInteractive;
|
||||
class AIS_MultipleConnectedInteractive;
|
||||
class AIS_DimensionOwner;
|
||||
class AIS_Relation;
|
||||
class AIS_EllipseRadiusDimension;
|
||||
class AIS_MaxRadiusDimension;
|
||||
class AIS_MinRadiusDimension;
|
||||
class AIS_Chamf2dDimension;
|
||||
class AIS_Chamf3dDimension;
|
||||
class AIS_OffsetDimension;
|
||||
class AIS_FixRelation;
|
||||
class AIS_PerpendicularRelation;
|
||||
class AIS_ParallelRelation;
|
||||
class AIS_TangentRelation;
|
||||
class AIS_ConcentricRelation;
|
||||
class AIS_IdenticRelation;
|
||||
class AIS_SymmetricRelation;
|
||||
class AIS_MidPointRelation;
|
||||
class AIS_EqualRadiusRelation;
|
||||
class AIS_EqualDistanceRelation;
|
||||
class AIS_TypeFilter;
|
||||
class AIS_SignatureFilter;
|
||||
class AIS_ExclusionFilter;
|
||||
class AIS_AttributeFilter;
|
||||
class AIS_C0RegularityFilter;
|
||||
class AIS_BadEdgeFilter;
|
||||
class AIS_Selection;
|
||||
|
||||
|
||||
//! Application Interactive Services provide the means to create links between an application GUI viewer and
|
||||
//! the packages which are used to manage selection and presentation.
|
||||
|
@@ -34,8 +34,10 @@
|
||||
#include <Prs3d_Projector.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Select3D_SensitiveSegment.hxx>
|
||||
#include <SelectBasics_EntityOwner.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <StdPrs_Curve.hxx>
|
||||
#include <TColgp_Array1OfPnt.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
@@ -197,7 +199,8 @@ void AIS_Axis::Compute(const Handle(Prs3d_Projector)& aProjector, const Handle(G
|
||||
void AIS_Axis::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection,
|
||||
const Standard_Integer)
|
||||
{
|
||||
Handle(SelectMgr_EntityOwner) eown = new SelectMgr_EntityOwner (this, 3);
|
||||
Handle(SelectMgr_EntityOwner) eown = new SelectMgr_EntityOwner(this);
|
||||
eown -> SelectBasics_EntityOwner::Set(3);
|
||||
Handle(Select3D_SensitiveSegment) seg = new Select3D_SensitiveSegment(eown,
|
||||
myPfirst,
|
||||
myPlast);
|
||||
|
@@ -17,13 +17,29 @@
|
||||
#ifndef _AIS_Chamf2dDimension_HeaderFile
|
||||
#define _AIS_Chamf2dDimension_HeaderFile
|
||||
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class TCollection_ExtendedString;
|
||||
class gp_Pnt;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_Chamf2dDimension;
|
||||
DEFINE_STANDARD_HANDLE(AIS_Chamf2dDimension, AIS_Relation)
|
||||
|
||||
//! A framework to define display of 2D chamfers.
|
||||
@@ -32,9 +48,10 @@ DEFINE_STANDARD_HANDLE(AIS_Chamf2dDimension, AIS_Relation)
|
||||
//! chamfer, or the angle if it is not.
|
||||
class AIS_Chamf2dDimension : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Chamf2dDimension, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs the display object for 2D chamfers.
|
||||
//! This object is defined by the face aFShape, the
|
||||
//! dimension aVal, the plane aPlane and the text aText.
|
||||
@@ -62,7 +79,18 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Chamf2dDimension,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
@@ -73,8 +101,14 @@ private:
|
||||
gp_Pnt myPntAttach;
|
||||
gp_Dir myDir;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_Chamf2dDimension.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_Chamf2dDimension_HeaderFile
|
||||
|
@@ -17,11 +17,28 @@
|
||||
#ifndef _AIS_Chamf3dDimension_HeaderFile
|
||||
#define _AIS_Chamf3dDimension_HeaderFile
|
||||
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class TCollection_ExtendedString;
|
||||
class gp_Pnt;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_Chamf3dDimension;
|
||||
DEFINE_STANDARD_HANDLE(AIS_Chamf3dDimension, AIS_Relation)
|
||||
|
||||
//! A framework to define display of 3D chamfers.
|
||||
@@ -30,9 +47,10 @@ DEFINE_STANDARD_HANDLE(AIS_Chamf3dDimension, AIS_Relation)
|
||||
//! chamfer, or the angle if it is not.
|
||||
class AIS_Chamf3dDimension : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Chamf3dDimension, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs a display object for 3D chamfers.
|
||||
//! This object is defined by the shape aFShape, the
|
||||
//! dimension aVal and the text aText.
|
||||
@@ -60,8 +78,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Chamf3dDimension,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -71,8 +100,14 @@ private:
|
||||
gp_Pnt myPntAttach;
|
||||
gp_Dir myDir;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_Chamf3dDimension.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_Chamf3dDimension_HeaderFile
|
||||
|
@@ -512,8 +512,8 @@ void AIS_ColoredShape::ComputeSelection (const Handle(SelectMgr_Selection)& theS
|
||||
Handle(SelectMgr_SelectableObject) aThis (this);
|
||||
for (NCollection_Vector<Handle(SelectMgr_SensitiveEntity)>::Iterator aSelEntIter (theSelection->Entities()); aSelEntIter.More(); aSelEntIter.Next())
|
||||
{
|
||||
const Handle(SelectMgr_EntityOwner)& anOwner = aSelEntIter.Value()->BaseSensitive()->OwnerId();
|
||||
anOwner->SetSelectable (aThis);
|
||||
Handle(SelectMgr_EntityOwner) anOwner = Handle(SelectMgr_EntityOwner)::DownCast (aSelEntIter.Value()->BaseSensitive()->OwnerId());
|
||||
anOwner->Set (aThis);
|
||||
}
|
||||
|
||||
StdSelect_BRepSelectionTool::PreBuildBVH (theSelection);
|
||||
@@ -633,9 +633,6 @@ void AIS_ColoredShape::addShapesWithCustomProps (const Handle(Prs3d_Presentation
|
||||
{
|
||||
aShadedGroup = thePrs->NewGroup();
|
||||
aShadedGroup->SetClosed (isClosed);
|
||||
if (isClosed
|
||||
&& !myCappingStyle.IsNull())
|
||||
aShadedGroup->SetGroupPrimitivesAspect (myCappingStyle);
|
||||
}
|
||||
aShadedGroup->SetPrimitivesAspect (aDrawer->ShadingAspect()->Aspect());
|
||||
aShadedGroup->AddPrimitiveArray (aTriangles);
|
||||
|
@@ -17,11 +17,24 @@
|
||||
#ifndef _AIS_ConcentricRelation_HeaderFile
|
||||
#define _AIS_ConcentricRelation_HeaderFile
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_ConcentricRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_ConcentricRelation, AIS_Relation)
|
||||
|
||||
//! A framework to define a constraint by a relation of
|
||||
@@ -31,9 +44,10 @@ DEFINE_STANDARD_HANDLE(AIS_ConcentricRelation, AIS_Relation)
|
||||
//! relation of concentricity can be extended.
|
||||
class AIS_ConcentricRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_ConcentricRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs the display object for concentric relations
|
||||
//! between shapes.
|
||||
//! This object is defined by the two shapes, aFShape
|
||||
@@ -51,8 +65,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_ConcentricRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -70,6 +95,13 @@ private:
|
||||
gp_Dir myDir;
|
||||
gp_Pnt myPnt;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_ConcentricRelation_HeaderFile
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include <Precision.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Prs3d_Projector.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <Select3D_SensitiveEntity.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
@@ -91,12 +92,12 @@ void AIS_ConnectedInteractive::connect (const Handle(AIS_InteractiveObject)& the
|
||||
|
||||
void AIS_ConnectedInteractive::Disconnect()
|
||||
{
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (myPresentations); aPrsIter.More(); aPrsIter.Next())
|
||||
for(Standard_Integer aPrsIter = 1; aPrsIter <= myPresentations.Length(); ++aPrsIter)
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs = aPrsIter.Value();
|
||||
const Handle(PrsMgr_Presentation)& aPrs = myPresentations (aPrsIter).Presentation();
|
||||
if (!aPrs.IsNull())
|
||||
{
|
||||
aPrs->DisconnectAll (Graphic3d_TOC_DESCENDANT);
|
||||
aPrs->Presentation()->DisconnectAll (Graphic3d_TOC_DESCENDANT);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -111,7 +112,7 @@ void AIS_ConnectedInteractive::Compute (const Handle(PrsMgr_PresentationManager3
|
||||
if (HasConnection())
|
||||
{
|
||||
thePrs->Clear (Standard_False);
|
||||
thePrs->DisconnectAll (Graphic3d_TOC_DESCENDANT);
|
||||
thePrs->RemoveAll();
|
||||
|
||||
if (!myReference->HasInteractiveContext())
|
||||
{
|
||||
@@ -233,7 +234,7 @@ void AIS_ConnectedInteractive::ComputeSelection (const Handle(SelectMgr_Selectio
|
||||
|
||||
for (NCollection_Vector<Handle(SelectMgr_SensitiveEntity)>::Iterator aSelEntIter (TheRefSel->Entities()); aSelEntIter.More(); aSelEntIter.Next())
|
||||
{
|
||||
if (const Handle(Select3D_SensitiveEntity)& aSensitive = aSelEntIter.Value()->BaseSensitive())
|
||||
if (Handle(Select3D_SensitiveEntity) aSensitive = Handle(Select3D_SensitiveEntity)::DownCast (aSelEntIter.Value()->BaseSensitive()))
|
||||
{
|
||||
// Get the copy of SE3D
|
||||
if (Handle(Select3D_SensitiveEntity) aNewSensitive = aSensitive->GetConnected())
|
||||
@@ -271,7 +272,7 @@ void AIS_ConnectedInteractive::computeSubShapeSelection (const Handle(SelectMgr_
|
||||
Shapes2EntitiesMap aShapes2EntitiesMap;
|
||||
for (NCollection_Vector<Handle(SelectMgr_SensitiveEntity)>::Iterator aSelEntIter (aRefSel->Entities()); aSelEntIter.More(); aSelEntIter.Next())
|
||||
{
|
||||
if (const Handle(Select3D_SensitiveEntity)& aSE = aSelEntIter.Value()->BaseSensitive())
|
||||
if (Handle(Select3D_SensitiveEntity) aSE = Handle(Select3D_SensitiveEntity)::DownCast (aSelEntIter.Value()->BaseSensitive()))
|
||||
{
|
||||
if (Handle(StdSelect_BRepOwner) anOwner = Handle(StdSelect_BRepOwner)::DownCast (aSE->OwnerId()))
|
||||
{
|
||||
|
@@ -335,31 +335,31 @@ TCollection_ExtendedString AIS_Dimension::GetValueString (Standard_Real& theWidt
|
||||
if (myDrawer->DimensionAspect()->IsText3d())
|
||||
{
|
||||
// text width produced by BRepFont
|
||||
Font_BRepFont aFont;
|
||||
if (aFont.FindAndInit (aTextAspect->Aspect()->Font(), aTextAspect->Aspect()->GetTextFontAspect(), aTextAspect->Height(), Font_StrictLevel_Any))
|
||||
Font_BRepFont aFont (aTextAspect->Aspect()->Font().ToCString(),
|
||||
aTextAspect->Aspect()->GetTextFontAspect(),
|
||||
aTextAspect->Height());
|
||||
|
||||
for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
|
||||
{
|
||||
for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
|
||||
{
|
||||
Standard_Utf32Char aCurrChar = *anIter;
|
||||
Standard_Utf32Char aNextChar = *(++anIter);
|
||||
theWidth += aFont.AdvanceX (aCurrChar, aNextChar);
|
||||
}
|
||||
Standard_Utf32Char aCurrChar = *anIter;
|
||||
Standard_Utf32Char aNextChar = *(++anIter);
|
||||
theWidth += aFont.AdvanceX (aCurrChar, aNextChar);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Text width for 1:1 scale 2D case
|
||||
Font_FTFontParams aFontParams;
|
||||
aFontParams.PointSize = (unsigned int )aTextAspect->Height();
|
||||
aFontParams.Resolution = THE_2D_TEXT_RESOLUTION;
|
||||
if (Handle(Font_FTFont) aFont = Font_FTFont::FindAndCreate (aTextAspect->Aspect()->Font(), aTextAspect->Aspect()->GetTextFontAspect(), aFontParams, Font_StrictLevel_Any))
|
||||
Handle(Font_FTFont) aFont = new Font_FTFont();
|
||||
aFont->Init (aTextAspect->Aspect()->Font().ToCString(),
|
||||
aTextAspect->Aspect()->GetTextFontAspect(),
|
||||
(unsigned int )aTextAspect->Height(),
|
||||
THE_2D_TEXT_RESOLUTION);
|
||||
|
||||
for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
|
||||
{
|
||||
for (NCollection_Utf8Iter anIter = anUTFString.Iterator(); *anIter != 0; )
|
||||
{
|
||||
Standard_Utf32Char aCurrChar = *anIter;
|
||||
Standard_Utf32Char aNextChar = *(++anIter);
|
||||
theWidth += (Standard_Real) aFont->AdvanceX (aCurrChar, aNextChar);
|
||||
}
|
||||
Standard_Utf32Char aCurrChar = *anIter;
|
||||
Standard_Utf32Char aNextChar = *(++anIter);
|
||||
theWidth += (Standard_Real) aFont->AdvanceX (aCurrChar, aNextChar);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -17,12 +17,32 @@
|
||||
#ifndef _AIS_EqualDistanceRelation_HeaderFile
|
||||
#define _AIS_EqualDistanceRelation_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <AIS_TypeOfDist.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
|
||||
#include <AIS_TypeOfDist.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
class TopoDS_Edge;
|
||||
class Bnd_Box;
|
||||
class gp_Pnt;
|
||||
class TopoDS_Vertex;
|
||||
|
||||
|
||||
class AIS_EqualDistanceRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_EqualDistanceRelation, AIS_Relation)
|
||||
|
||||
//! A framework to display equivalent distances between
|
||||
@@ -32,9 +52,10 @@ DEFINE_STANDARD_HANDLE(AIS_EqualDistanceRelation, AIS_Relation)
|
||||
//! These distances are used to compare shapes by this vector alone.
|
||||
class AIS_EqualDistanceRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_EqualDistanceRelation,AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs a framework to display equivalent
|
||||
//! distances between the shapes aShape1, aShape2,
|
||||
//! aShape3, aShape4 and the plane aPlane.
|
||||
@@ -84,8 +105,19 @@ public:
|
||||
//! a line or a circle.
|
||||
Standard_EXPORT static void ComputeOneEdgeOneVertexLength (const Handle(Prs3d_Presentation)& aPresentation, const Handle(Prs3d_Drawer)& aDrawer, const Standard_Real ArrowSize, const TopoDS_Shape& FirstShape, const TopoDS_Shape& SecondShape, const Handle(Geom_Plane)& Plane, const Standard_Boolean AutomaticPos, const Standard_Boolean IsSetBndBox, const Bnd_Box& BndBox, gp_Pnt& Position, gp_Pnt& FirstAttach, gp_Pnt& SecondAttach, gp_Pnt& FirstExtreme, gp_Pnt& SecondExtreme, DsgPrs_ArrowSide& SymbolPrs);
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_EqualDistanceRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -103,8 +135,14 @@ private:
|
||||
gp_Pnt myPoint3;
|
||||
gp_Pnt myPoint4;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_EqualDistanceRelation.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_EqualDistanceRelation_HeaderFile
|
||||
|
@@ -17,17 +17,31 @@
|
||||
#ifndef _AIS_EqualRadiusRelation_HeaderFile
|
||||
#define _AIS_EqualRadiusRelation_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Edge;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_EqualRadiusRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_EqualRadiusRelation, AIS_Relation)
|
||||
|
||||
|
||||
class AIS_EqualRadiusRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_EqualRadiusRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Creates equal relation of two arc's radiuses.
|
||||
//! If one of edges is not in the given plane,
|
||||
//! the presentation method projects it onto the plane.
|
||||
@@ -42,8 +56,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_EqualRadiusRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -57,6 +82,13 @@ private:
|
||||
gp_Pnt myFirstPoint;
|
||||
gp_Pnt mySecondPoint;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_EqualRadiusRelation_HeaderFile
|
||||
|
@@ -17,11 +17,32 @@
|
||||
#ifndef _AIS_FixRelation_HeaderFile
|
||||
#define _AIS_FixRelation_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <TopoDS_Wire.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class TopoDS_Wire;
|
||||
class gp_Pnt;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
class TopoDS_Vertex;
|
||||
class Geom_Curve;
|
||||
class TopoDS_Edge;
|
||||
class gp_Lin;
|
||||
class gp_Circ;
|
||||
|
||||
|
||||
class AIS_FixRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_FixRelation, AIS_Relation)
|
||||
|
||||
//! Constructs and manages a constraint by a fixed
|
||||
@@ -34,8 +55,9 @@ DEFINE_STANDARD_HANDLE(AIS_FixRelation, AIS_Relation)
|
||||
//! object.
|
||||
class AIS_FixRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_FixRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! initializes the vertex aShape, the
|
||||
//! plane aPlane and the wire aWire, which connects
|
||||
@@ -76,6 +98,16 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_FixRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -109,6 +141,11 @@ private:
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_FixRelation.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_FixRelation_HeaderFile
|
||||
|
@@ -17,14 +17,21 @@
|
||||
#ifndef _AIS_IdenticRelation_HeaderFile
|
||||
#define _AIS_IdenticRelation_HeaderFile
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <TColStd_ListOfTransient.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
class Geom_Line;
|
||||
class gp_Pnt;
|
||||
class Geom_Circle;
|
||||
@@ -33,6 +40,8 @@ class TopoDS_Wire;
|
||||
class TopoDS_Vertex;
|
||||
class gp_Dir;
|
||||
|
||||
|
||||
class AIS_IdenticRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_IdenticRelation, AIS_Relation)
|
||||
|
||||
//! Constructs a constraint by a relation of identity
|
||||
|
@@ -37,6 +37,7 @@
|
||||
#include <Prs3d_PlaneAspect.hxx>
|
||||
#include <Prs3d_PointAspect.hxx>
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <PrsMgr_PresentableObject.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
@@ -106,6 +107,7 @@ AIS_InteractiveContext::AIS_InteractiveContext(const Handle(V3d_Viewer)& MainVie
|
||||
myMainPM(new PrsMgr_PresentationManager3d(MainViewer->StructureManager())),
|
||||
myMainVwr(MainViewer),
|
||||
myMainSel(new StdSelect_ViewerSelector3d()),
|
||||
myWasLastMain(Standard_False),
|
||||
myToHilightSelected(Standard_True),
|
||||
mySelection(new AIS_Selection()),
|
||||
myFilters(new SelectMgr_OrFilter()),
|
||||
@@ -424,7 +426,8 @@ void AIS_InteractiveContext::Display (const Handle(AIS_InteractiveObject)& theIO
|
||||
setContextToObject (theIObj);
|
||||
if (!myObjects.IsBound (theIObj))
|
||||
{
|
||||
setObjectStatus (theIObj, AIS_DS_Displayed, theDispMode, theSelectionMode);
|
||||
Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
|
||||
myObjects.Bind (theIObj, aStatus);
|
||||
myMainVwr->StructureManager()->RegisterObject (theIObj);
|
||||
myMainPM->Display(theIObj, theDispMode);
|
||||
if (theSelectionMode != -1)
|
||||
@@ -501,7 +504,8 @@ void AIS_InteractiveContext::Load (const Handle(AIS_InteractiveObject)& theIObj,
|
||||
{
|
||||
Standard_Integer aDispMode, aHiMod, aSelModeDef;
|
||||
GetDefModes (theIObj, aDispMode, aHiMod, aSelModeDef);
|
||||
setObjectStatus (theIObj, AIS_DS_Erased, aDispMode, theSelMode != -1 ? theSelMode : aSelModeDef);
|
||||
Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Erased, aDispMode, theSelMode != -1 ? theSelMode : aSelModeDef);
|
||||
myObjects.Bind (theIObj, aStatus);
|
||||
myMainVwr->StructureManager()->RegisterObject (theIObj);
|
||||
}
|
||||
|
||||
@@ -752,9 +756,7 @@ Standard_Boolean AIS_InteractiveContext::IsHilighted (const Handle(SelectMgr_Ent
|
||||
return myObjects (anObj)->IsHilighted();
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Drawer)& aStyle = getSelStyle (anObj, theOwner);
|
||||
const Standard_Integer aHiMode = getHilightMode (anObj, aStyle, -1);
|
||||
return theOwner->IsHilighted (myMainPM, aHiMode);
|
||||
return theOwner->IsSelected();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -1661,20 +1663,20 @@ void AIS_InteractiveContext::SetWidth (const Handle(AIS_InteractiveObject)& theI
|
||||
setContextToObject (theIObj);
|
||||
theIObj->SetWidth (theWidth);
|
||||
theIObj->UpdatePresentations();
|
||||
if (!myLastPicked.IsNull() && myLastPicked->IsSameSelectable (theIObj))
|
||||
if (!myLastinMain.IsNull() && myLastinMain->IsSameSelectable (theIObj))
|
||||
{
|
||||
if (myLastPicked->IsAutoHilight())
|
||||
if (myLastinMain->IsAutoHilight())
|
||||
{
|
||||
const Standard_Integer aHiMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
|
||||
myLastPicked->HilightWithColor (myMainPM,
|
||||
myLastPicked->IsSelected() ? getSelStyle (theIObj, myLastPicked) : getHiStyle (theIObj, myLastPicked),
|
||||
myLastinMain->HilightWithColor (myMainPM,
|
||||
myLastinMain->IsSelected() ? getSelStyle (theIObj, myLastinMain) : getHiStyle (theIObj, myLastinMain),
|
||||
aHiMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
theIObj->HilightOwnerWithColor (myMainPM,
|
||||
myLastPicked->IsSelected() ? getSelStyle (theIObj, myLastPicked) : getHiStyle (theIObj, myLastPicked),
|
||||
myLastPicked);
|
||||
myLastinMain->IsSelected() ? getSelStyle (theIObj, myLastinMain) : getHiStyle (theIObj, myLastinMain),
|
||||
myLastinMain);
|
||||
}
|
||||
}
|
||||
if (theToUpdateViewer)
|
||||
@@ -1805,7 +1807,6 @@ void AIS_InteractiveContext::UnsetTransparency (const Handle(AIS_InteractiveObje
|
||||
void AIS_InteractiveContext::SetSelectedAspect (const Handle(Prs3d_BasicAspect)& theAspect,
|
||||
const Standard_Boolean theToUpdateViewer)
|
||||
{
|
||||
Standard_DISABLE_DEPRECATION_WARNINGS
|
||||
Standard_Boolean isFound = Standard_False;
|
||||
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
|
||||
{
|
||||
@@ -1813,7 +1814,6 @@ void AIS_InteractiveContext::SetSelectedAspect (const Handle(Prs3d_BasicAspect)&
|
||||
Handle(AIS_InteractiveObject) anObj = Handle(AIS_InteractiveObject)::DownCast (aSelIter.Value()->Selectable());
|
||||
anObj->SetAspect (theAspect);
|
||||
}
|
||||
Standard_ENABLE_DEPRECATION_WARNINGS
|
||||
|
||||
if (isFound && theToUpdateViewer)
|
||||
{
|
||||
@@ -1936,18 +1936,42 @@ void AIS_InteractiveContext::GetDefModes (const Handle(AIS_InteractiveObject)& t
|
||||
void AIS_InteractiveContext::EraseGlobal (const Handle(AIS_InteractiveObject)& theIObj,
|
||||
const Standard_Boolean theToUpdateviewer)
|
||||
{
|
||||
Handle(AIS_GlobalStatus) aStatus;
|
||||
if (theIObj.IsNull()
|
||||
|| !myObjects.Find (theIObj, aStatus)
|
||||
|| aStatus->GraphicStatus() == AIS_DS_Erased)
|
||||
|| !myObjects.IsBound (theIObj))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
|
||||
|
||||
const Standard_Integer aDispMode = theIObj->HasHilightMode() ? theIObj->HilightMode() : 0;
|
||||
unhighlightOwners (theIObj);
|
||||
if (aStatus->GraphicStatus() == AIS_DS_Erased)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (aStatus->IsHilighted())
|
||||
{
|
||||
Standard_DISABLE_DEPRECATION_WARNINGS
|
||||
if (IsCurrent (theIObj))
|
||||
{
|
||||
AddOrRemoveCurrentObject (theIObj, Standard_False);
|
||||
}
|
||||
else if (myMainPM->IsHighlighted (theIObj, aStatus->DisplayMode()))
|
||||
{
|
||||
unhighlightGlobal (theIObj);
|
||||
}
|
||||
Standard_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
|
||||
myMainPM->SetVisibility (theIObj, aStatus->DisplayMode(), Standard_False);
|
||||
|
||||
if (aStatus->IsHilighted()
|
||||
&& theIObj->HasHilightMode())
|
||||
{
|
||||
unhighlightGlobal (theIObj);
|
||||
}
|
||||
|
||||
if (!myLastPicked.IsNull()
|
||||
&& myLastPicked->IsSameSelectable (theIObj))
|
||||
{
|
||||
@@ -2003,9 +2027,8 @@ void AIS_InteractiveContext::unhighlightOwners (const Handle(AIS_InteractiveObje
|
||||
void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& theIObj,
|
||||
const Standard_Boolean theToUpdateviewer)
|
||||
{
|
||||
Handle(AIS_GlobalStatus) aStatus;
|
||||
if (theIObj.IsNull()
|
||||
|| !myObjects.Find (theIObj, aStatus))
|
||||
|| !myObjects.IsBound (theIObj))
|
||||
{
|
||||
// for cases when reference shape of connected interactives was not displayed
|
||||
// but its selection primitives were calculated
|
||||
@@ -2014,6 +2037,7 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
|
||||
return;
|
||||
}
|
||||
|
||||
Handle(AIS_GlobalStatus) aStatus = myObjects (theIObj);
|
||||
unhighlightOwners (theIObj);
|
||||
|
||||
myMainPM->Erase (theIObj, -1);
|
||||
@@ -2054,7 +2078,7 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
|
||||
const Handle(SelectMgr_SelectableObject)& anObj = theIObj; // to avoid ambiguity
|
||||
mgrSelector->Remove (anObj);
|
||||
|
||||
setObjectStatus (theIObj, AIS_DS_None, -1, -1);
|
||||
myObjects.UnBind (theIObj);
|
||||
myMainVwr->StructureManager()->UnregisterObject (theIObj);
|
||||
|
||||
for (V3d_ListOfViewIterator aDefViewIter (myMainVwr->DefinedViewIterator()); aDefViewIter.More(); aDefViewIter.Next())
|
||||
@@ -2062,11 +2086,13 @@ void AIS_InteractiveContext::ClearGlobal (const Handle(AIS_InteractiveObject)& t
|
||||
aDefViewIter.Value()->View()->ChangeHiddenObjects()->Remove (theIObj.get());
|
||||
}
|
||||
|
||||
if (!myLastPicked.IsNull())
|
||||
if (!myLastinMain.IsNull())
|
||||
{
|
||||
if (myLastPicked->IsSameSelectable (theIObj))
|
||||
if (myLastinMain->IsSameSelectable (theIObj)
|
||||
|| myLastPicked->IsSameSelectable(theIObj))
|
||||
{
|
||||
clearDynamicHighlight();
|
||||
myLastinMain.Nullify();
|
||||
myLastPicked.Nullify();
|
||||
}
|
||||
}
|
||||
@@ -2120,12 +2146,15 @@ Standard_Boolean AIS_InteractiveContext::ClearDetected (Standard_Boolean theToRe
|
||||
myCurDetected = 0;
|
||||
myCurHighlighted = 0;
|
||||
myDetectedSeq.Clear();
|
||||
myLastPicked = myLastinMain;
|
||||
myWasLastMain = Standard_True;
|
||||
Standard_Boolean toUpdate = Standard_False;
|
||||
if (!myLastPicked.IsNull() && myLastPicked->HasSelectable())
|
||||
{
|
||||
toUpdate = Standard_True;
|
||||
clearDynamicHighlight();
|
||||
}
|
||||
myLastinMain.Nullify();
|
||||
myLastPicked.Nullify();
|
||||
myMainSel->ClearPicked();
|
||||
if (toUpdate && theToRedrawImmediate)
|
||||
@@ -2416,13 +2445,6 @@ void AIS_InteractiveContext::Disconnect (const Handle(AIS_InteractiveObject)& th
|
||||
{
|
||||
Handle(AIS_MultipleConnectedInteractive) theObj (Handle(AIS_MultipleConnectedInteractive)::DownCast (theAssembly));
|
||||
theObj->Disconnect (theObjToDisconnect);
|
||||
if (!myObjects.IsBound (theObjToDisconnect))
|
||||
{
|
||||
// connected presentation might contain displayed presentations
|
||||
myMainPM->Erase (theObjToDisconnect, -1);
|
||||
theObjToDisconnect->ErasePresentations (true);
|
||||
}
|
||||
|
||||
const Handle(SelectMgr_SelectableObject)& anObj = theObjToDisconnect; // to avoid ambiguity
|
||||
mgrSelector->Remove (anObj);
|
||||
}
|
||||
@@ -2522,38 +2544,3 @@ void AIS_InteractiveContext::SetTransformPersistence (const Handle(AIS_Interacti
|
||||
anActiveViewIter.Value()->View()->InvalidateZLayerBoundingBox (aLayerId);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GravityPoint
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
gp_Pnt AIS_InteractiveContext::GravityPoint (const Handle(V3d_View)& theView) const
|
||||
{
|
||||
return theView->GravityPoint();
|
||||
}
|
||||
//=======================================================================
|
||||
//function : setObjectStatus
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveContext::setObjectStatus (const Handle(AIS_InteractiveObject)& theIObj,
|
||||
const AIS_DisplayStatus theStatus,
|
||||
const Standard_Integer theDispMode,
|
||||
const Standard_Integer theSelectionMode)
|
||||
{
|
||||
if (theStatus != AIS_DS_None)
|
||||
{
|
||||
Handle(AIS_GlobalStatus) aStatus = new AIS_GlobalStatus (AIS_DS_Displayed, theDispMode, theSelectionMode);
|
||||
myObjects.Bind (theIObj, aStatus);
|
||||
}
|
||||
else
|
||||
myObjects.UnBind (theIObj);
|
||||
|
||||
for (PrsMgr_ListOfPresentableObjectsIter aPrsIter (theIObj->Children()); aPrsIter.More(); aPrsIter.Next())
|
||||
{
|
||||
Handle(AIS_InteractiveObject) aChild (Handle(AIS_InteractiveObject)::DownCast (aPrsIter.Value()));
|
||||
if (aChild.IsNull())
|
||||
continue;
|
||||
|
||||
setObjectStatus (aChild, theStatus, theDispMode, theSelectionMode);
|
||||
}
|
||||
}
|
||||
|
@@ -454,7 +454,6 @@ public: //! @name iteration through detected entities
|
||||
public: //! @name Selection management
|
||||
|
||||
//! Sets the graphic basic aspect to the current presentation of ALL selected objects.
|
||||
Standard_DEPRECATED ("Deprecated method - presentation attributes should be assigned directly to object")
|
||||
Standard_EXPORT void SetSelectedAspect (const Handle(Prs3d_BasicAspect)& theAspect,
|
||||
const Standard_Boolean theToUpdateViewer);
|
||||
|
||||
@@ -557,14 +556,6 @@ public: //! @name Selection management
|
||||
Standard_EXPORT void AddOrRemoveSelected (const Handle(AIS_InteractiveObject)& theObject,
|
||||
const Standard_Boolean theToUpdateViewer);
|
||||
|
||||
//! Updates Selected state of specified owner without calling HilightSelected().
|
||||
//! Has no effect if Selected state is not changed, and redirects to AddOrRemoveSelected() otherwise.
|
||||
//! @param theOwner owner object to set selected state
|
||||
//! @param theIsSelected new selected state
|
||||
//! @return TRUE if Selected state has been changed
|
||||
Standard_EXPORT Standard_Boolean SetSelectedState (const Handle(SelectMgr_EntityOwner)& theOwner,
|
||||
const Standard_Boolean theIsSelected);
|
||||
|
||||
//! Highlights selected objects.
|
||||
Standard_EXPORT void HilightSelected (const Standard_Boolean theToUpdateViewer);
|
||||
|
||||
@@ -824,9 +815,6 @@ public: //! @name common properties
|
||||
//! returns the number of removed structures from the viewers.
|
||||
Standard_EXPORT Standard_Integer PurgeDisplay();
|
||||
|
||||
//! Return rotation gravity point.
|
||||
Standard_EXPORT virtual gp_Pnt GravityPoint (const Handle(V3d_View)& theView) const;
|
||||
|
||||
public: //! @name debug visualization
|
||||
|
||||
//! Visualization of sensitives - for debugging purposes!
|
||||
@@ -1351,27 +1339,19 @@ protected: //! @name internal methods
|
||||
//! Removes dynamic highlight draw
|
||||
void clearDynamicHighlight() const
|
||||
{
|
||||
if (myLastPicked.IsNull())
|
||||
if (myLastinMain.IsNull())
|
||||
return;
|
||||
|
||||
if (myLastPicked->IsAutoHilight())
|
||||
if (myLastinMain->IsAutoHilight())
|
||||
{
|
||||
myMainPM->ClearImmediateDraw();
|
||||
}
|
||||
else
|
||||
{
|
||||
myLastPicked->Selectable()->ClearDynamicHighlight (myMainPM);
|
||||
myLastinMain->Selectable()->ClearDynamicHighlight (myMainPM);
|
||||
}
|
||||
}
|
||||
|
||||
//! Bind/Unbind status to object and its children
|
||||
//! @param theObj [in] the object to change status
|
||||
//! @param theStatus status, if NULL, unbind object
|
||||
Standard_EXPORT void setObjectStatus (const Handle(AIS_InteractiveObject)& theIObj,
|
||||
const AIS_DisplayStatus theStatus,
|
||||
const Standard_Integer theDispyMode,
|
||||
const Standard_Integer theSelectionMode);
|
||||
|
||||
protected: //! @name internal fields
|
||||
|
||||
AIS_DataMapOfIOStatus myObjects;
|
||||
@@ -1380,6 +1360,8 @@ protected: //! @name internal fields
|
||||
Handle(V3d_Viewer) myMainVwr;
|
||||
Handle(StdSelect_ViewerSelector3d) myMainSel;
|
||||
Handle(SelectMgr_EntityOwner) myLastPicked;
|
||||
Handle(SelectMgr_EntityOwner) myLastinMain;
|
||||
Standard_Boolean myWasLastMain;
|
||||
Standard_Boolean myToHilightSelected;
|
||||
Handle(AIS_Selection) mySelection;
|
||||
Handle(SelectMgr_OrFilter) myFilters;
|
||||
|
@@ -30,7 +30,7 @@
|
||||
#include <Prs3d_LineAspect.hxx>
|
||||
#include <Prs3d_Presentation.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Select3D_SensitiveEntity.hxx>
|
||||
#include <SelectBasics_SensitiveEntity.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <SelectMgr_Filter.hxx>
|
||||
#include <SelectMgr_OrFilter.hxx>
|
||||
@@ -184,6 +184,7 @@ void AIS_InteractiveContext::unhighlightSelected (const Standard_Boolean theIsTo
|
||||
{
|
||||
anObjToClear.Add (anInteractive);
|
||||
}
|
||||
anOwner->SetSelected (Standard_False);
|
||||
if (anOwner == anInteractive->GlobalSelOwner())
|
||||
{
|
||||
myObjects.ChangeFind (anInteractive)->SetHilightStatus (Standard_False);
|
||||
@@ -327,6 +328,8 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
myDetectedSeq.Clear();
|
||||
|
||||
// preliminaires
|
||||
myLastPicked = myLastinMain;
|
||||
myWasLastMain = Standard_True;
|
||||
AIS_StatusOfDetection aStatus = AIS_SOD_Nothing;
|
||||
Standard_Boolean toUpdateViewer = Standard_False;
|
||||
|
||||
@@ -396,6 +399,7 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
|
||||
// initialize myLastPicked field with currently detected object
|
||||
myLastPicked = aNewPickedOwner;
|
||||
myLastinMain = myLastPicked;
|
||||
|
||||
// highlight detected object if it is not selected or myToHilightSelected flag is true
|
||||
if (myLastPicked->HasSelectable())
|
||||
@@ -436,6 +440,7 @@ AIS_StatusOfDetection AIS_InteractiveContext::MoveTo (const Standard_Integer th
|
||||
toUpdateViewer = Standard_True;
|
||||
}
|
||||
|
||||
myLastinMain.Nullify();
|
||||
myLastPicked.Nullify();
|
||||
}
|
||||
|
||||
@@ -495,6 +500,7 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMi
|
||||
// all objects detected by the selector are taken, previous current objects are emptied,
|
||||
// new objects are put...
|
||||
ClearSelected (Standard_False);
|
||||
myWasLastMain = Standard_True;
|
||||
myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
|
||||
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
|
||||
{
|
||||
@@ -503,6 +509,7 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Integer theXPMi
|
||||
continue;
|
||||
|
||||
mySelection->Select (aCurOwner);
|
||||
aCurOwner->SetSelected (Standard_True);
|
||||
}
|
||||
|
||||
if (myAutoHilight)
|
||||
@@ -534,6 +541,7 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& the
|
||||
// all objects detected by the selector are taken, previous current objects are emptied,
|
||||
// new objects are put...
|
||||
ClearSelected (Standard_False);
|
||||
myWasLastMain = Standard_True;
|
||||
myMainSel->Pick (thePolyline, theView);
|
||||
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
|
||||
{
|
||||
@@ -542,6 +550,7 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& the
|
||||
continue;
|
||||
|
||||
mySelection->Select (anOwner);
|
||||
anOwner->SetSelected (Standard_True);
|
||||
}
|
||||
|
||||
if (myAutoHilight)
|
||||
@@ -563,17 +572,17 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const TColgp_Array1OfPnt2d& the
|
||||
//=======================================================================
|
||||
AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdateViewer)
|
||||
{
|
||||
if (!myLastPicked.IsNull())
|
||||
if (myWasLastMain && !myLastinMain.IsNull())
|
||||
{
|
||||
if (myAutoHilight)
|
||||
{
|
||||
clearDynamicHighlight();
|
||||
}
|
||||
if (!myLastPicked->IsSelected()
|
||||
|| myLastPicked->IsForcedHilight()
|
||||
if (!myLastinMain->IsSelected()
|
||||
|| myLastinMain->IsForcedHilight()
|
||||
|| NbSelected() > 1)
|
||||
{
|
||||
SetSelected (myLastPicked, Standard_False);
|
||||
SetSelected (myLastinMain, Standard_False);
|
||||
if(toUpdateViewer)
|
||||
{
|
||||
UpdateCurrentViewer();
|
||||
@@ -602,9 +611,9 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Boolean toU
|
||||
{
|
||||
clearDynamicHighlight();
|
||||
}
|
||||
if (!myLastPicked.IsNull())
|
||||
if (myWasLastMain && !myLastinMain.IsNull())
|
||||
{
|
||||
AddOrRemoveSelected (myLastPicked, toUpdateViewer);
|
||||
AddOrRemoveSelected (myLastinMain, toUpdateViewer);
|
||||
}
|
||||
|
||||
Standard_Integer aSelNum = NbSelected();
|
||||
@@ -634,6 +643,7 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the
|
||||
{
|
||||
UnhilightSelected (Standard_False);
|
||||
}
|
||||
myWasLastMain = Standard_True;
|
||||
myMainSel->Pick (theXPMin, theYPMin, theXPMax, theYPMax, theView);
|
||||
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
|
||||
{
|
||||
@@ -641,7 +651,8 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const Standard_Integer the
|
||||
if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
|
||||
continue;
|
||||
|
||||
mySelection->Select (anOwner);
|
||||
AIS_SelectStatus aSelStatus = mySelection->Select (anOwner);
|
||||
anOwner->SetSelected (aSelStatus == AIS_SS_Added);
|
||||
}
|
||||
|
||||
if (myAutoHilight)
|
||||
@@ -674,6 +685,7 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d
|
||||
{
|
||||
UnhilightSelected (Standard_False);
|
||||
}
|
||||
myWasLastMain = Standard_True;
|
||||
myMainSel->Pick (thePolyline, theView);
|
||||
for (Standard_Integer aPickIter = 1; aPickIter <= myMainSel->NbPicked(); ++aPickIter)
|
||||
{
|
||||
@@ -681,7 +693,8 @@ AIS_StatusOfPick AIS_InteractiveContext::ShiftSelect (const TColgp_Array1OfPnt2d
|
||||
if (anOwner.IsNull() || !anOwner->HasSelectable() || !myFilters->IsOk (anOwner))
|
||||
continue;
|
||||
|
||||
mySelection->Select (anOwner);
|
||||
AIS_SelectStatus aSelStatus = mySelection->Select (anOwner);
|
||||
anOwner->SetSelected (aSelStatus == AIS_SS_Added);
|
||||
}
|
||||
|
||||
if (myAutoHilight)
|
||||
@@ -716,6 +729,7 @@ void AIS_InteractiveContext::HilightSelected (const Standard_Boolean theToUpdate
|
||||
aState->SetHilightStatus (Standard_True);
|
||||
aState->SetHilightStyle (anObjSelStyle);
|
||||
}
|
||||
anOwner->SetSelected (Standard_True);
|
||||
if (!anOwner->IsAutoHilight())
|
||||
{
|
||||
NCollection_Handle<SelectMgr_SequenceOfOwner> aSeq;
|
||||
@@ -765,6 +779,7 @@ void AIS_InteractiveContext::UnhilightSelected (const Standard_Boolean theToUpda
|
||||
myObjects.ChangeFind (anObj)->SetHilightStatus (Standard_False);
|
||||
}
|
||||
|
||||
anOwner->SetSelected (Standard_False);
|
||||
anOwner->Unhilight (myMainPM);
|
||||
}
|
||||
|
||||
@@ -786,6 +801,13 @@ void AIS_InteractiveContext::ClearSelected (const Standard_Boolean theToUpdateVi
|
||||
{
|
||||
unhighlightSelected();
|
||||
}
|
||||
else
|
||||
{
|
||||
for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
|
||||
{
|
||||
aSelIter.Value()->SetSelected (Standard_False);
|
||||
}
|
||||
}
|
||||
|
||||
mySelection->Clear();
|
||||
if (myAutoHilight)
|
||||
@@ -811,7 +833,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t
|
||||
|
||||
if (!myObjects.IsBound (theObject))
|
||||
{
|
||||
return;
|
||||
Display (theObject, Standard_False);
|
||||
}
|
||||
|
||||
Handle(SelectMgr_EntityOwner) anOwner = theObject->GlobalSelOwner();
|
||||
@@ -847,6 +869,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t
|
||||
{
|
||||
Unhilight (aSelectable, Standard_False);
|
||||
}
|
||||
aSelOwner->SetSelected (Standard_False);
|
||||
if (aSelOwner == aSelectable->GlobalSelOwner())
|
||||
{
|
||||
myObjects.ChangeFind (aSelectable)->SetHilightStatus (Standard_False);
|
||||
@@ -871,6 +894,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(AIS_InteractiveObject)& t
|
||||
HilightWithColor (theObject, anObjSelStyle, Standard_False);
|
||||
}
|
||||
}
|
||||
anOwner->SetSelected (Standard_True);
|
||||
|
||||
if (theToUpdateViewer)
|
||||
UpdateCurrentViewer();
|
||||
@@ -903,7 +927,7 @@ void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& t
|
||||
}
|
||||
|
||||
if (!myObjects.IsBound (anObject))
|
||||
return;
|
||||
Display (anObject, Standard_False);
|
||||
|
||||
if (myAutoHilight)
|
||||
{
|
||||
@@ -917,10 +941,12 @@ void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& t
|
||||
if (!HighlightStyle (theOwner, aCustomStyle) ||
|
||||
(!aCustomStyle.IsNull() && aCustomStyle != anObjSelStyle))
|
||||
{
|
||||
theOwner->SetSelected (Standard_True);
|
||||
highlightSelected (theOwner);
|
||||
}
|
||||
}
|
||||
|
||||
theOwner->SetSelected (Standard_True);
|
||||
if (myAutoHilight && theOwner == anObject->GlobalSelOwner())
|
||||
{
|
||||
Handle(AIS_GlobalStatus)& aState = myObjects.ChangeFind (anObject);
|
||||
@@ -969,7 +995,8 @@ void AIS_InteractiveContext::AddOrRemoveSelected (const Handle(SelectMgr_EntityO
|
||||
if (!myFilters->IsOk(theOwner) && !theOwner->IsSelected())
|
||||
return;
|
||||
|
||||
mySelection->Select (theOwner);
|
||||
AIS_SelectStatus aSelStat = mySelection->Select (theOwner);
|
||||
theOwner->SetSelected (aSelStat == AIS_SS_Added);
|
||||
|
||||
if (myAutoHilight)
|
||||
{
|
||||
@@ -1004,43 +1031,6 @@ void AIS_InteractiveContext::AddOrRemoveSelected (const Handle(SelectMgr_EntityO
|
||||
UpdateCurrentViewer();
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : SetSelectedState
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Standard_Boolean AIS_InteractiveContext::SetSelectedState (const Handle(SelectMgr_EntityOwner)& theEntity,
|
||||
const Standard_Boolean theIsSelected)
|
||||
{
|
||||
if (theEntity.IsNull())
|
||||
{
|
||||
throw Standard_ProgramError ("Internal error: AIS_InteractiveContext::SetSelectedState() called with NO object");
|
||||
}
|
||||
|
||||
if (!theEntity->HasSelectable()
|
||||
|| mySelection->IsSelected (theEntity) == theIsSelected)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (theEntity->IsAutoHilight())
|
||||
{
|
||||
AddOrRemoveSelected (theEntity, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (theIsSelected)
|
||||
{
|
||||
const AIS_SelectStatus aSelStatus = mySelection->AddSelect (theEntity);
|
||||
theEntity->SetSelected (true);
|
||||
return aSelStatus == AIS_SS_Added;
|
||||
}
|
||||
else
|
||||
{
|
||||
const AIS_SelectStatus aSelStatus = mySelection->Select (theEntity);
|
||||
theEntity->SetSelected (false);
|
||||
return aSelStatus == AIS_SS_Removed;
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : IsSelected
|
||||
@@ -1154,9 +1144,9 @@ void AIS_InteractiveContext::EntityOwners(Handle(SelectMgr_IndexedMapOfOwner)& t
|
||||
|
||||
for (NCollection_Vector<Handle(SelectMgr_SensitiveEntity)>::Iterator aSelEntIter (aSel->Entities()); aSelEntIter.More(); aSelEntIter.Next())
|
||||
{
|
||||
if (Handle(Select3D_SensitiveEntity) aEntity = aSelEntIter.Value()->BaseSensitive())
|
||||
if (Handle(SelectBasics_SensitiveEntity) aEntity = aSelEntIter.Value()->BaseSensitive())
|
||||
{
|
||||
if (const Handle(SelectMgr_EntityOwner)& aOwner = aEntity->OwnerId())
|
||||
if (Handle(SelectMgr_EntityOwner) aOwner = Handle(SelectMgr_EntityOwner)::DownCast(aEntity->OwnerId()))
|
||||
{
|
||||
theOwners->Add (aOwner);
|
||||
}
|
||||
@@ -1211,6 +1201,7 @@ Standard_Integer AIS_InteractiveContext::HilightNextDetected (const Handle(V3d_V
|
||||
|
||||
highlightWithColor (anOwner, theView->Viewer());
|
||||
myLastPicked = anOwner;
|
||||
myLastinMain = myLastPicked;
|
||||
|
||||
if (theToRedrawImmediate)
|
||||
{
|
||||
@@ -1246,6 +1237,7 @@ Standard_Integer AIS_InteractiveContext::HilightPreviousDetected (const Handle(V
|
||||
|
||||
highlightWithColor (anOwner, theView->Viewer());
|
||||
myLastPicked = anOwner;
|
||||
myLastinMain = myLastPicked;
|
||||
|
||||
if (theToRedrawImmediate)
|
||||
{
|
||||
|
@@ -419,7 +419,7 @@ Standard_Boolean AIS_InteractiveContext::ImmediateAdd (const Handle(AIS_Interact
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
myMainPM->AddToImmediateList (myMainPM->Presentation (theObj, theMode));
|
||||
myMainPM->AddToImmediateList (myMainPM->Presentation (theObj, theMode)->Presentation());
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
|
@@ -16,21 +16,32 @@
|
||||
|
||||
#include <AIS_InteractiveObject.hxx>
|
||||
|
||||
#include <AIS_GraphicTool.hxx>
|
||||
#include <AIS_InteractiveContext.hxx>
|
||||
#include <Aspect_PolygonOffsetMode.hxx>
|
||||
#include <Bnd_Box.hxx>
|
||||
#include <Graphic3d_AspectFillArea3d.hxx>
|
||||
#include <Graphic3d_AspectFillCapping.hxx>
|
||||
#include <Graphic3d_AspectLine3d.hxx>
|
||||
#include <Graphic3d_AspectMarker3d.hxx>
|
||||
#include <Graphic3d_AspectText3d.hxx>
|
||||
#include <Graphic3d_BndBox4f.hxx>
|
||||
#include <Graphic3d_CStructure.hxx>
|
||||
#include <Graphic3d_Group.hxx>
|
||||
#include <Graphic3d_MaterialAspect.hxx>
|
||||
#include <Graphic3d_Structure.hxx>
|
||||
#include <Prs3d_BasicAspect.hxx>
|
||||
#include <Prs3d_LineAspect.hxx>
|
||||
#include <Prs3d_PointAspect.hxx>
|
||||
#include <Prs3d_Presentation.hxx>
|
||||
#include <Prs3d_Root.hxx>
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <Prs3d_TextAspect.hxx>
|
||||
#include <PrsMgr_PresentationManager.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <TColStd_ListIteratorOfListOfInteger.hxx>
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(AIS_InteractiveObject,SelectMgr_SelectableObject)
|
||||
|
||||
@@ -40,9 +51,14 @@ IMPLEMENT_STANDARD_RTTIEXT(AIS_InteractiveObject,SelectMgr_SelectableObject)
|
||||
//=======================================================================
|
||||
AIS_InteractiveObject::AIS_InteractiveObject (const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d)
|
||||
: SelectMgr_SelectableObject (aTypeOfPresentation3d),
|
||||
myCTXPtr (NULL)
|
||||
myCTXPtr (NULL),
|
||||
myOwnWidth (0.0f),
|
||||
myCurrentFacingModel (Aspect_TOFM_BOTH_SIDE),
|
||||
myInfiniteState (Standard_False),
|
||||
hasOwnColor (Standard_False),
|
||||
hasOwnMaterial (Standard_False)
|
||||
{
|
||||
//
|
||||
SetCurrentFacingModel();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -57,6 +73,22 @@ void AIS_InteractiveObject::Redisplay (const Standard_Boolean AllModes)
|
||||
myCTXPtr->Redisplay (this, Standard_False, AllModes);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Type
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
AIS_KindOfInteractive AIS_InteractiveObject::Type() const
|
||||
{return AIS_KOI_None;}
|
||||
|
||||
//=======================================================================
|
||||
//function : Signature
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Integer AIS_InteractiveObject::Signature() const
|
||||
{return -1;}
|
||||
|
||||
//=======================================================================
|
||||
//function :
|
||||
//purpose :
|
||||
@@ -85,34 +117,249 @@ void AIS_InteractiveObject::SetContext (const Handle(AIS_InteractiveContext)& th
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetCappingStyle
|
||||
//function :
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetCappingStyle (const Handle(Graphic3d_AspectFillCapping)& theStyle)
|
||||
Standard_Boolean AIS_InteractiveObject::HasOwner() const
|
||||
{
|
||||
myCappingStyle = theStyle;
|
||||
return (!myOwner.IsNull());
|
||||
}
|
||||
|
||||
// Modify existing presentations
|
||||
for (Standard_Integer aPrsIter = 1, n = myPresentations.Length(); aPrsIter <= n; ++aPrsIter)
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function :
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::ClearOwner()
|
||||
{
|
||||
myOwner.Nullify();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetDisplayMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetDisplayMode (const Standard_Integer theMode)
|
||||
{
|
||||
if (AcceptDisplayMode (theMode))
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations (aPrsIter);
|
||||
if (!aPrs3d.IsNull())
|
||||
{
|
||||
const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
|
||||
if (!aStruct.IsNull())
|
||||
{
|
||||
const Graphic3d_SequenceOfGroup& aGroups = aStruct->Groups();
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aGroups); aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
Handle(Graphic3d_Group)& aGrp = aGroupIter.ChangeValue();
|
||||
if (aGrp.IsNull())
|
||||
continue;
|
||||
myDrawer->SetDisplayMode (theMode);
|
||||
}
|
||||
}
|
||||
|
||||
aGrp->SetGroupPrimitivesAspect (theStyle);
|
||||
}
|
||||
}
|
||||
//=======================================================================
|
||||
//function :
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetCurrentFacingModel(const Aspect_TypeOfFacingModel aModel) {
|
||||
myCurrentFacingModel = aModel;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : CurrentFacingModel
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Aspect_TypeOfFacingModel AIS_InteractiveObject::CurrentFacingModel() const {
|
||||
return myCurrentFacingModel;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetColor
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void AIS_InteractiveObject::SetColor(const Quantity_Color& theColor)
|
||||
{
|
||||
myDrawer->SetColor (theColor);
|
||||
hasOwnColor = Standard_True;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UnsetColor
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::UnsetColor()
|
||||
{
|
||||
hasOwnColor = Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function :
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetWidth(const Standard_Real aValue)
|
||||
{
|
||||
myOwnWidth = (Standard_ShortReal )aValue;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function :
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::UnsetWidth()
|
||||
{
|
||||
myOwnWidth = 0.0f;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Material
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Graphic3d_NameOfMaterial AIS_InteractiveObject::Material() const
|
||||
{
|
||||
return myDrawer->ShadingAspect()->Material().Name();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMaterial
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetMaterial (const Graphic3d_MaterialAspect& theMaterial)
|
||||
{
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
myDrawer->SetShadingAspect (new Prs3d_ShadingAspect());
|
||||
if (myDrawer->HasLink())
|
||||
{
|
||||
*myDrawer->ShadingAspect()->Aspect() = *myDrawer->Link()->ShadingAspect()->Aspect();
|
||||
}
|
||||
}
|
||||
|
||||
myDrawer->ShadingAspect()->SetMaterial (theMaterial);
|
||||
hasOwnMaterial = Standard_True;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UnsetMaterial
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::UnsetMaterial()
|
||||
{
|
||||
if (!HasMaterial())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (HasColor() || IsTransparent())
|
||||
{
|
||||
if(myDrawer->HasLink())
|
||||
{
|
||||
myDrawer->ShadingAspect()->SetMaterial (AIS_GraphicTool::GetMaterial (myDrawer->Link()));
|
||||
}
|
||||
|
||||
if (HasColor())
|
||||
{
|
||||
SetColor (myDrawer->Color());
|
||||
}
|
||||
|
||||
if (IsTransparent())
|
||||
{
|
||||
SetTransparency (myDrawer->Transparency());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Handle(Prs3d_ShadingAspect) anAspect;
|
||||
myDrawer->SetShadingAspect (anAspect);
|
||||
}
|
||||
|
||||
hasOwnMaterial = Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetTransparency
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetTransparency (const Standard_Real theValue)
|
||||
{
|
||||
if (!myDrawer->HasOwnShadingAspect())
|
||||
{
|
||||
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
|
||||
if(myDrawer->HasLink())
|
||||
myDrawer->ShadingAspect()->SetMaterial(AIS_GraphicTool::GetMaterial(myDrawer->Link()));
|
||||
}
|
||||
|
||||
myDrawer->ShadingAspect()->Aspect()->ChangeFrontMaterial().SetTransparency (Standard_ShortReal(theValue));
|
||||
myDrawer->ShadingAspect()->Aspect()->ChangeBackMaterial() .SetTransparency (Standard_ShortReal(theValue));
|
||||
myDrawer->SetTransparency (Standard_ShortReal(theValue));
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UnsetTransparency
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::UnsetTransparency()
|
||||
{
|
||||
if(HasColor() || HasMaterial() )
|
||||
{
|
||||
myDrawer->ShadingAspect()->Aspect()->ChangeFrontMaterial().SetTransparency (0.0f);
|
||||
myDrawer->ShadingAspect()->Aspect()->ChangeBackMaterial() .SetTransparency (0.0f);
|
||||
}
|
||||
else{
|
||||
Handle (Prs3d_ShadingAspect) SA;
|
||||
myDrawer->SetShadingAspect(SA);
|
||||
}
|
||||
myDrawer->SetTransparency (0.0f);
|
||||
}
|
||||
//=======================================================================
|
||||
//function : Transparency
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Real AIS_InteractiveObject::Transparency() const
|
||||
{
|
||||
return (myDrawer->Transparency() <= 0.005f ? 0.0 : myDrawer->Transparency());
|
||||
// Graphic3d_MaterialAspect Mat = myDrawer->ShadingAspect()->Aspect()->FrontMaterial();
|
||||
// return Mat.Transparency();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UnsetAttributes
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::UnsetAttributes()
|
||||
{
|
||||
SelectMgr_SelectableObject::UnsetAttributes();
|
||||
|
||||
hasOwnColor = Standard_False;
|
||||
hasOwnMaterial = Standard_False;
|
||||
myOwnWidth = 0.0f;
|
||||
myDrawer->SetTransparency (0.0f);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : AcceptDisplayMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Boolean AIS_InteractiveObject::AcceptDisplayMode(const Standard_Integer ) const
|
||||
{return Standard_True;}
|
||||
|
||||
//=======================================================================
|
||||
//function : DefaultDisplayMode
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Integer AIS_InteractiveObject::DefaultDisplayMode() const
|
||||
{return 0;}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : SetInfiniteState
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetInfiniteState(const Standard_Boolean aFlag)
|
||||
{
|
||||
myInfiniteState = aFlag;
|
||||
Handle(Prs3d_Presentation) P;
|
||||
|
||||
for(Standard_Integer i =1; i<=myPresentations.Length();i++)
|
||||
{
|
||||
P = myPresentations(i).Presentation()->Presentation();
|
||||
if(!P.IsNull())
|
||||
P->SetInfiniteState(myInfiniteState);
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -137,41 +384,214 @@ Handle(Prs3d_Presentation) AIS_InteractiveObject::Presentation() const
|
||||
}
|
||||
|
||||
Handle(PrsMgr_Presentation) aPrs = myCTXPtr->MainPrsMgr()->Presentation (this, myDrawer->DisplayMode(), false);
|
||||
return aPrs;
|
||||
return !aPrs.IsNull()
|
||||
? aPrs->Presentation()
|
||||
: Handle(Prs3d_Presentation)();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetAspect
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetAspect(const Handle(Prs3d_BasicAspect)& theAspect)
|
||||
void AIS_InteractiveObject::SetAspect(const Handle(Prs3d_BasicAspect)& anAspect)
|
||||
{
|
||||
|
||||
if (!HasPresentation())
|
||||
if( HasPresentation() ) {
|
||||
Handle(Prs3d_Presentation) prs = Presentation();
|
||||
{ Handle(Prs3d_ShadingAspect) aspect =
|
||||
Handle(Prs3d_ShadingAspect)::DownCast(anAspect);
|
||||
if( !aspect.IsNull() ) {
|
||||
Prs3d_Root::CurrentGroup(prs)->SetGroupPrimitivesAspect(aspect->Aspect());
|
||||
return;
|
||||
}
|
||||
}
|
||||
{ Handle(Prs3d_LineAspect) aspect =
|
||||
Handle(Prs3d_LineAspect)::DownCast(anAspect);
|
||||
if( !aspect.IsNull() ) {
|
||||
Prs3d_Root::CurrentGroup(prs)->SetGroupPrimitivesAspect(aspect->Aspect());
|
||||
return;
|
||||
}
|
||||
}
|
||||
{ Handle(Prs3d_PointAspect) aspect =
|
||||
Handle(Prs3d_PointAspect)::DownCast(anAspect);
|
||||
if( !aspect.IsNull() ) {
|
||||
Prs3d_Root::CurrentGroup(prs)->SetGroupPrimitivesAspect(aspect->Aspect());
|
||||
return;
|
||||
}
|
||||
}
|
||||
{ Handle(Prs3d_TextAspect) aspect =
|
||||
Handle(Prs3d_TextAspect)::DownCast(anAspect);
|
||||
if( !aspect.IsNull() ) {
|
||||
Prs3d_Root::CurrentGroup(prs)->SetGroupPrimitivesAspect(aspect->Aspect());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetPolygonOffsets
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetPolygonOffsets(const Standard_Integer aMode,
|
||||
const Standard_ShortReal aFactor,
|
||||
const Standard_ShortReal aUnits)
|
||||
{
|
||||
if ( !HasPolygonOffsets() )
|
||||
myDrawer->SetShadingAspect(new Prs3d_ShadingAspect());
|
||||
|
||||
myDrawer->ShadingAspect()->Aspect()->SetPolygonOffsets( aMode, aFactor, aUnits );
|
||||
SynchronizeAspects();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : HasPolygonOffsets
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean AIS_InteractiveObject::HasPolygonOffsets() const
|
||||
{
|
||||
return !( myDrawer->ShadingAspect().IsNull() ||
|
||||
( myDrawer->HasLink() &&
|
||||
myDrawer->ShadingAspect() == myDrawer->Link()->ShadingAspect() ) );
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : PolygonOffsets
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::PolygonOffsets(Standard_Integer& aMode,
|
||||
Standard_ShortReal& aFactor,
|
||||
Standard_ShortReal& aUnits) const
|
||||
{
|
||||
if( HasPolygonOffsets() )
|
||||
myDrawer->ShadingAspect()->Aspect()->PolygonOffsets( aMode, aFactor, aUnits );
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : BoundingBox
|
||||
//purpose : Returns bounding box of object correspondingly to its
|
||||
// current display mode
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::BoundingBox (Bnd_Box& theBndBox)
|
||||
{
|
||||
if (myDrawer->DisplayMode() == -1)
|
||||
{
|
||||
if (!myPresentations.IsEmpty())
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations.First().Presentation();
|
||||
const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
|
||||
const Graphic3d_BndBox3d& aBndBox = aStruct->CStructure()->BoundingBox();
|
||||
|
||||
if (!aBndBox.IsValid())
|
||||
{
|
||||
theBndBox.SetVoid();
|
||||
return;
|
||||
}
|
||||
|
||||
theBndBox.Update (aBndBox.CornerMin().x(), aBndBox.CornerMin().y(), aBndBox.CornerMin().z(),
|
||||
aBndBox.CornerMax().x(), aBndBox.CornerMax().y(), aBndBox.CornerMax().z());
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (PrsMgr_ListOfPresentableObjectsIter aPrsIter (Children()); aPrsIter.More(); aPrsIter.Next())
|
||||
{
|
||||
Handle(AIS_InteractiveObject) aChild (Handle(AIS_InteractiveObject)::DownCast (aPrsIter.Value()));
|
||||
if (aChild.IsNull())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
Bnd_Box aBox;
|
||||
aChild->BoundingBox (aBox);
|
||||
theBndBox.Add (aBox);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (Standard_Integer aPrsIter = 1; aPrsIter <= myPresentations.Length(); ++aPrsIter)
|
||||
{
|
||||
if (myPresentations (aPrsIter).Mode() == myDrawer->DisplayMode())
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations (aPrsIter).Presentation();
|
||||
const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
|
||||
const Graphic3d_BndBox3d& aBndBox = aStruct->CStructure()->BoundingBox();
|
||||
|
||||
if (!aBndBox.IsValid())
|
||||
{
|
||||
theBndBox.SetVoid();
|
||||
return;
|
||||
}
|
||||
|
||||
theBndBox.Update (aBndBox.CornerMin().x(), aBndBox.CornerMin().y(), aBndBox.CornerMin().z(),
|
||||
aBndBox.CornerMax().x(), aBndBox.CornerMax().y(), aBndBox.CornerMax().z());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetIsoOnTriangulation
|
||||
//purpose : Enables or disables isoline on triangulation building
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SetIsoOnTriangulation (const Standard_Boolean theIsEnabled)
|
||||
{
|
||||
myDrawer->SetIsoOnTriangulation (theIsEnabled);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SynchronizeAspects
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::SynchronizeAspects()
|
||||
{
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (myPresentations); aPrsIter.More(); aPrsIter.Next())
|
||||
{
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = aPrsIter.ChangeValue().Presentation();
|
||||
if (aPrs3d.IsNull()
|
||||
|| aPrs3d->Presentation().IsNull())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPrs3d->Presentation()->Groups()); aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
if (!aGroupIter.Value().IsNull())
|
||||
{
|
||||
aGroupIter.ChangeValue()->SynchronizeAspects();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : replaceAspects
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void AIS_InteractiveObject::replaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap)
|
||||
{
|
||||
if (theMap.IsEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Handle(Prs3d_Presentation) aPrs = Presentation();
|
||||
if (aPrs->Groups().IsEmpty())
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (myPresentations); aPrsIter.More(); aPrsIter.Next())
|
||||
{
|
||||
return;
|
||||
}
|
||||
const Handle(Graphic3d_Group)& aGroup = aPrs->Groups().Last();
|
||||
if (Handle(Prs3d_ShadingAspect) aShadingAspect = Handle(Prs3d_ShadingAspect)::DownCast(theAspect))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aShadingAspect->Aspect());
|
||||
}
|
||||
else if (Handle(Prs3d_LineAspect) aLineAspect = Handle(Prs3d_LineAspect)::DownCast(theAspect))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aLineAspect->Aspect());
|
||||
}
|
||||
else if (Handle(Prs3d_PointAspect) aPointAspect = Handle(Prs3d_PointAspect)::DownCast(theAspect))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aPointAspect->Aspect());
|
||||
}
|
||||
else if (Handle(Prs3d_TextAspect) aTextAspect = Handle(Prs3d_TextAspect)::DownCast(theAspect))
|
||||
{
|
||||
aGroup->SetGroupPrimitivesAspect (aTextAspect->Aspect());
|
||||
const Handle(PrsMgr_Presentation)& aPrs3d = aPrsIter.ChangeValue().Presentation();
|
||||
if (aPrs3d.IsNull()
|
||||
|| aPrs3d->Presentation().IsNull())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIter (aPrs3d->Presentation()->Groups()); aGroupIter.More(); aGroupIter.Next())
|
||||
{
|
||||
if (!aGroupIter.Value().IsNull())
|
||||
{
|
||||
aGroupIter.ChangeValue()->ReplaceAspects (theMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -17,48 +17,139 @@
|
||||
#ifndef _AIS_InteractiveObject_HeaderFile
|
||||
#define _AIS_InteractiveObject_HeaderFile
|
||||
|
||||
#include <Aspect_TypeOfFacingModel.hxx>
|
||||
#include <AIS_KindOfInteractive.hxx>
|
||||
#include <Graphic3d_NameOfMaterial.hxx>
|
||||
#include <PrsMgr_TypeOfPresentation3d.hxx>
|
||||
#include <SelectMgr_SelectableObject.hxx>
|
||||
#include <TColStd_ListOfInteger.hxx>
|
||||
#include <TColStd_ListOfTransient.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
|
||||
class AIS_InteractiveContext;
|
||||
class Graphic3d_MaterialAspect;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_BasicAspect;
|
||||
class Bnd_Box;
|
||||
|
||||
//! Defines a class of objects with display and selection services.
|
||||
//! Entities which are visualized and selected are Interactive Objects.
|
||||
//! Specific attributes of entities such as arrow aspect for dimensions must be loaded in a Prs3d_Drawer.
|
||||
//!
|
||||
//! You can make use of classes of standard Interactive Objects for which all necessary methods have already been programmed,
|
||||
//! or you can implement your own classes of Interactive Objects.
|
||||
//! Key interface methods to be implemented by every Interactive Object:
|
||||
//! * Presentable Object (PrsMgr_PresentableObject)
|
||||
//! Consider defining an enumeration of supported Display Mode indexes for particular Interactive Object or class of Interactive Objects.
|
||||
//! - AcceptDisplayMode() accepting display modes implemented by this object;
|
||||
//! - Compute() computing presentation for the given display mode index;
|
||||
//! * Selectable Object (SelectMgr_SelectableObject)
|
||||
//! Consider defining an enumeration of supported Selection Mode indexes for particular Interactive Object or class of Interactive Objects.
|
||||
//! - ComputeSelection() computing selectable entities for the given selection mode index.
|
||||
//! Entities which are visualized and selected are
|
||||
//! Interactive Objects. You can make use of classes of
|
||||
//! standard Interactive Objects for which all necessary
|
||||
//! methods have already been programmed, or you can
|
||||
//! implement your own classes of Interactive Objects.
|
||||
//! Specific attributes of entities such as arrow aspect for
|
||||
//! dimensions must be loaded in a Drawer. This Drawer
|
||||
//! is then applied to the Interactive Object in view.
|
||||
//! There are four types of Interactive Object in AIS: the
|
||||
//! construction element or Datum, the Relation, which
|
||||
//! includes both dimensions and constraints, the Object,
|
||||
//! and finally, when the object is of an unknown type, the None type.
|
||||
//! Inside these categories, a signature, or index,
|
||||
//! provides the possibility of additional characterization.
|
||||
//! By default, the Interactive Object has a None type
|
||||
//! and a signature of 0. If you want to give a particular
|
||||
//! type and signature to your interactive object, you must
|
||||
//! redefine the methods, Signature and Type.
|
||||
//! Warning
|
||||
//! In the case of attribute methods, methods for
|
||||
//! standard attributes are virtual. They must be
|
||||
//! redefined by the inheriting classes. Setcolor for a
|
||||
//! point and Setcolor for a plane, for example, do not
|
||||
//! affect the same attributes in the Drawer.
|
||||
class AIS_InteractiveObject : public SelectMgr_SelectableObject
|
||||
{
|
||||
friend class AIS_InteractiveContext;
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_InteractiveObject, SelectMgr_SelectableObject)
|
||||
public:
|
||||
|
||||
//! Returns the kind of Interactive Object; AIS_KOI_None by default.
|
||||
virtual AIS_KindOfInteractive Type() const { return AIS_KOI_None; }
|
||||
|
||||
//! Specifies additional characteristics of Interactive Object of Type(); -1 by default.
|
||||
//! Among the datums, this signature is attributed to the shape.
|
||||
//! Returns the kind of Interactive Object:
|
||||
//! - None
|
||||
//! - Datum
|
||||
//! - Relation
|
||||
//! - Object
|
||||
//! By default, the interactive object has a None type.
|
||||
//! Because specific shapes entail different behavior
|
||||
//! according to their sub-shapes, you may need to
|
||||
//! create a Local Context. This will allow you to
|
||||
//! specify the additional characteristics which you
|
||||
//! need to handle these shapes.
|
||||
Standard_EXPORT virtual AIS_KindOfInteractive Type() const;
|
||||
|
||||
//! Specifies additional characteristics of Interactive
|
||||
//! Objects. A signature is, in fact, an index with integer
|
||||
//! values assigned different properties.
|
||||
//! This method is frequently used in conjuction with
|
||||
//! Type to give a particular type and signature to an
|
||||
//! Interactive Object. By default, the Interactive Object
|
||||
//! has a None type and a signature of 0. Among the
|
||||
//! datums, this signature is attributed to the shape
|
||||
//! The remaining datums have the following default signatures:
|
||||
//! - Point signature 1
|
||||
//! - Axis signature 2
|
||||
//! - Trihedron signature 3
|
||||
//! - PlaneTrihedron signature 4
|
||||
//! - Line signature 5
|
||||
//! - Circle signature 6
|
||||
//! - Plane signature 7.
|
||||
virtual Standard_Integer Signature() const { return -1; }
|
||||
//! - Point signature 1
|
||||
//! - Axis signature 2
|
||||
//! - Trihedron signature 3
|
||||
//! - PlaneTrihedron signature 4
|
||||
//! - Line signature 5
|
||||
//! - Circle signature 6
|
||||
//! - Plane signature 7.
|
||||
Standard_EXPORT virtual Standard_Integer Signature() const;
|
||||
|
||||
//! Informs the graphic context that the interactive Object
|
||||
//! may be decomposed into sub-shapes for dynamic selection.
|
||||
//! The most used Interactive Object is AIS_Shape.
|
||||
//! Activation methods for standard selection modes are
|
||||
//! proposed in the Interactive Context. These include
|
||||
//! selection by vertex or by edges. For datums with the
|
||||
//! same behavior as AIS_Shape, such as vetices and
|
||||
//! edges, we must redefine the virtual method so that
|
||||
//! AcceptShapeDecomposition returns false.
|
||||
//! Rule for selection :
|
||||
//! Mode 0 : Selection of the interactive Object itself
|
||||
//! Mode 1 : Selection of vertices
|
||||
//! Mode 2 : Selection Of Edges
|
||||
//! Mode 3 : Selection Of Wires
|
||||
//! Mode 4 : Selection Of Faces ...
|
||||
virtual Standard_Boolean AcceptShapeDecomposition() const { return Standard_False; }
|
||||
|
||||
//! change the current facing model apply on polygons for
|
||||
//! SetColor(), SetTransparency(), SetMaterial() methods
|
||||
//! default facing model is Aspect_TOFM_TWO_SIDE. This mean that attributes is
|
||||
//! applying both on the front and back face.
|
||||
Standard_EXPORT void SetCurrentFacingModel (const Aspect_TypeOfFacingModel aModel = Aspect_TOFM_BOTH_SIDE);
|
||||
|
||||
//! Returns the current facing model which is in effect.
|
||||
Standard_EXPORT Aspect_TypeOfFacingModel CurrentFacingModel() const;
|
||||
|
||||
//! Only the interactive object knowns which Drawer attribute is affected by the color, if any
|
||||
//! (ex: for a wire,it's the wireaspect field of the drawer, but for a vertex, only the point aspect field is affected by the color).
|
||||
//! WARNING : Do not forget to set the corresponding fields here (hasOwnColor and myDrawer->SetColor())
|
||||
Standard_EXPORT virtual void SetColor (const Quantity_Color& theColor);
|
||||
|
||||
//! Removes color settings. Only the Interactive Object
|
||||
//! knows which Drawer attribute is affected by the color
|
||||
//! setting. For a wire, for example, wire aspect is the
|
||||
//! attribute affected. For a vertex, however, only point
|
||||
//! aspect is affected by the color setting.
|
||||
Standard_EXPORT virtual void UnsetColor();
|
||||
|
||||
//! Allows you to provide the setting aValue for width.
|
||||
//! Only the Interactive Object knows which Drawer
|
||||
//! attribute is affected by the width setting.
|
||||
Standard_EXPORT virtual void SetWidth (const Standard_Real aValue);
|
||||
|
||||
Standard_EXPORT virtual void UnsetWidth();
|
||||
|
||||
//! Returns true if the class of objects accepts the display mode aMode.
|
||||
//! The interactive context can have a default mode of
|
||||
//! representation for the set of Interactive Objects. This
|
||||
//! mode may not be accepted by a given class of
|
||||
//! objects. Consequently, this virtual method allowing us
|
||||
//! to get information about the class in question must be implemented.
|
||||
Standard_EXPORT virtual Standard_Boolean AcceptDisplayMode (const Standard_Integer aMode) const;
|
||||
|
||||
//! Returns the default display mode. This method is to
|
||||
//! be implemented when the main mode is not mode 0.
|
||||
Standard_EXPORT virtual Standard_Integer DefaultDisplayMode() const;
|
||||
|
||||
//! Updates the active presentation; if <AllModes> = Standard_True
|
||||
//! all the presentations inside are recomputed.
|
||||
@@ -67,20 +158,33 @@ public:
|
||||
//! is accessible. This method just redirects call to myCTXPtr,
|
||||
//! so this class field must be up to date for proper result.
|
||||
Standard_EXPORT void Redisplay (const Standard_Boolean AllModes = Standard_False);
|
||||
|
||||
//! Sets the infinite state flag aFlage.
|
||||
//! if <aFlag> = True , the interactiveObject is
|
||||
//! considered as infinite, i.e. its graphic presentations
|
||||
//! are not taken in account for View FitAll...
|
||||
Standard_EXPORT void SetInfiniteState (const Standard_Boolean aFlag = Standard_True);
|
||||
|
||||
//! Returns true if the interactive object is infinite. In this
|
||||
//! case, its graphic presentations are not taken into
|
||||
//! account in the fit-all view.
|
||||
Standard_Boolean IsInfinite() const { return myInfiniteState; }
|
||||
|
||||
//! Indicates whether the Interactive Object has a pointer to an interactive context.
|
||||
Standard_Boolean HasInteractiveContext() const { return myCTXPtr != NULL; }
|
||||
|
||||
//! Returns the context pointer to the interactive context.
|
||||
AIS_InteractiveContext* InteractiveContext() const { return myCTXPtr; }
|
||||
Standard_EXPORT Handle(AIS_InteractiveContext) GetContext() const;
|
||||
|
||||
//! Sets the interactive context aCtx and provides a link
|
||||
//! to the default drawing tool or "Drawer" if there is none.
|
||||
Standard_EXPORT virtual void SetContext (const Handle(AIS_InteractiveContext)& aCtx);
|
||||
|
||||
//! Returns true if the object has an owner attributed to it.
|
||||
//! The owner can be a shape for a set of sub-shapes or a sub-shape for sub-shapes which it is composed of, and takes the form of a transient.
|
||||
Standard_Boolean HasOwner() const { return !myOwner.IsNull(); }
|
||||
//! The owner can be a shape for a set of sub-shapes or
|
||||
//! a sub-shape for sub-shapes which it is composed of,
|
||||
//! and takes the form of a transient.
|
||||
Standard_EXPORT Standard_Boolean HasOwner() const;
|
||||
|
||||
//! Returns the owner of the Interactive Object.
|
||||
//! The owner can be a shape for a set of sub-shapes or
|
||||
@@ -99,42 +203,211 @@ public:
|
||||
//! is composed of. The owner takes the form of a transient.
|
||||
void SetOwner (const Handle(Standard_Transient)& theApplicativeEntity) { myOwner = theApplicativeEntity; }
|
||||
|
||||
//! Each Interactive Object has methods which allow us to attribute an Owner to it in the form of a Transient.
|
||||
//! Each Interactive Object has methods which allow us
|
||||
//! to attribute an Owner to it in the form of a Transient.
|
||||
//! This method removes the owner from the graphic entity.
|
||||
void ClearOwner() { myOwner.Nullify(); }
|
||||
Standard_EXPORT void ClearOwner();
|
||||
|
||||
public:
|
||||
//! Set style of filling capping section created by clipping planes.
|
||||
Standard_EXPORT virtual void SetCappingStyle (const Handle(Graphic3d_AspectFillCapping)& theStyle);
|
||||
//! Returns true if the Interactive Object has a display
|
||||
//! mode setting. Otherwise, it is displayed in Neutral Point.
|
||||
Standard_Boolean HasDisplayMode() const { return myDrawer->DisplayMode() != -1; }
|
||||
|
||||
//! Returns style for filling capping section created by clipping planes.
|
||||
const Handle(Graphic3d_AspectFillCapping)& CappingStyle() const { return myCappingStyle; }
|
||||
//! Sets the display mode aMode for the interactive object.
|
||||
//! An object can have its own temporary display mode,
|
||||
//! which is different from that proposed by the interactive context.
|
||||
//! The range of possibilities currently proposed is the following:
|
||||
//! - AIS_WireFrame
|
||||
//! - AIS_Shaded
|
||||
//! This range can, however, be extended through the creation of new display modes.
|
||||
Standard_EXPORT void SetDisplayMode (const Standard_Integer aMode);
|
||||
|
||||
//! Removes display mode settings from the interactive object.
|
||||
void UnsetDisplayMode() { myDrawer->SetDisplayMode (-1); }
|
||||
|
||||
//! Returns the context pointer to the interactive context.
|
||||
Standard_EXPORT Handle(AIS_InteractiveContext) GetContext() const;
|
||||
//! Returns the display mode setting of the Interactive Object.
|
||||
//! The range of possibilities is the following:
|
||||
//! - AIS_WireFrame
|
||||
//! - AIS_Shaded
|
||||
//! This range can, however, be extended through the
|
||||
//! creation of new display modes.
|
||||
Standard_Integer DisplayMode() const { return myDrawer->DisplayMode(); }
|
||||
|
||||
//! Returns TRUE when this object has a presentation in the current DisplayMode()
|
||||
//! Returns true if the Interactive Object is in highlight mode.
|
||||
Standard_Boolean HasHilightMode() const { return !myHilightDrawer.IsNull() && myHilightDrawer->DisplayMode() != -1; }
|
||||
|
||||
//! Returns highlight display mode.
|
||||
//! This is obsolete method for backward compatibility - use ::HilightAttributes() and ::DynamicHilightAttributes() instead.
|
||||
Standard_Integer HilightMode() const { return !myHilightDrawer.IsNull() ? myHilightDrawer->DisplayMode() : -1; }
|
||||
|
||||
//! Sets highlight display mode.
|
||||
//! This is obsolete method for backward compatibility - use ::HilightAttributes() and ::DynamicHilightAttributes() instead.
|
||||
void SetHilightMode (const Standard_Integer theMode)
|
||||
{
|
||||
if (myHilightDrawer.IsNull())
|
||||
{
|
||||
myHilightDrawer = new Prs3d_Drawer();
|
||||
myHilightDrawer->Link (myDrawer);
|
||||
myHilightDrawer->SetAutoTriangulation (Standard_False);
|
||||
myHilightDrawer->SetColor (Quantity_NOC_GRAY80);
|
||||
myHilightDrawer->SetZLayer(Graphic3d_ZLayerId_UNKNOWN);
|
||||
}
|
||||
if (myDynHilightDrawer.IsNull())
|
||||
{
|
||||
myDynHilightDrawer = new Prs3d_Drawer();
|
||||
myDynHilightDrawer->Link (myDrawer);
|
||||
myDynHilightDrawer->SetColor (Quantity_NOC_CYAN1);
|
||||
myDynHilightDrawer->SetAutoTriangulation (Standard_False);
|
||||
myDynHilightDrawer->SetZLayer(Graphic3d_ZLayerId_Top);
|
||||
}
|
||||
myHilightDrawer ->SetDisplayMode (theMode);
|
||||
myDynHilightDrawer->SetDisplayMode (theMode);
|
||||
}
|
||||
|
||||
//! Unsets highlight display mode.
|
||||
void UnsetHilightMode()
|
||||
{
|
||||
if (!myHilightDrawer.IsNull())
|
||||
{
|
||||
myHilightDrawer->SetDisplayMode (-1);
|
||||
}
|
||||
if (!myDynHilightDrawer.IsNull())
|
||||
{
|
||||
myDynHilightDrawer->SetDisplayMode (-1);
|
||||
}
|
||||
}
|
||||
|
||||
//! Returns true if the Interactive Object has color.
|
||||
Standard_Boolean HasColor() const { return hasOwnColor; }
|
||||
|
||||
//! Returns the color setting of the Interactive Object.
|
||||
virtual void Color (Quantity_Color& theColor) const { theColor = myDrawer->Color(); }
|
||||
|
||||
//! Returns true if the Interactive Object has width.
|
||||
Standard_Boolean HasWidth() const { return myOwnWidth != 0.0f; }
|
||||
|
||||
//! Returns the width setting of the Interactive Object.
|
||||
Standard_Real Width() const { return myOwnWidth; }
|
||||
|
||||
//! Returns true if the Interactive Object has a setting for material.
|
||||
Standard_Boolean HasMaterial() const { return hasOwnMaterial; }
|
||||
|
||||
//! Returns the current material setting.
|
||||
//! This will be on of the following materials:
|
||||
//! - Brass
|
||||
//! - Bronze
|
||||
//! - Gold
|
||||
//! - Pewter
|
||||
//! - Silver
|
||||
//! - Stone.
|
||||
Standard_EXPORT virtual Graphic3d_NameOfMaterial Material() const;
|
||||
|
||||
//! Sets the material aMat defining this display attribute
|
||||
//! for the interactive object.
|
||||
//! Material aspect determines shading aspect, color and
|
||||
//! transparency of visible entities.
|
||||
Standard_EXPORT virtual void SetMaterial (const Graphic3d_MaterialAspect& aName);
|
||||
|
||||
//! Removes the setting for material.
|
||||
Standard_EXPORT virtual void UnsetMaterial();
|
||||
|
||||
//! Attributes a setting aValue for transparency.
|
||||
//! The transparency value should be between 0.0 and 1.0.
|
||||
//! At 0.0 an object will be totally opaque, and at 1.0, fully transparent.
|
||||
//! Warning At a value of 1.0, there may be nothing visible.
|
||||
Standard_EXPORT virtual void SetTransparency (const Standard_Real aValue = 0.6);
|
||||
|
||||
//! Returns true if there is a transparency setting.
|
||||
Standard_Boolean IsTransparent() const { return myDrawer->Transparency() > 0.005f; }
|
||||
|
||||
//! Returns the transparency setting.
|
||||
//! This will be between 0.0 and 1.0.
|
||||
//! At 0.0 an object will be totally opaque, and at 1.0, fully transparent.
|
||||
Standard_EXPORT virtual Standard_Real Transparency() const;
|
||||
|
||||
//! Removes the transparency setting. The object is opaque by default.
|
||||
Standard_EXPORT virtual void UnsetTransparency();
|
||||
|
||||
//! Clears settings provided by the drawing tool aDrawer.
|
||||
Standard_EXPORT virtual void UnsetAttributes() Standard_OVERRIDE;
|
||||
|
||||
//! Returns TRUE when this object has a presentation
|
||||
//! in the current DisplayMode()
|
||||
Standard_EXPORT Standard_Boolean HasPresentation() const;
|
||||
|
||||
//! Returns the current presentation of this object according to the current DisplayMode()
|
||||
|
||||
//! Returns the current presentation of this object
|
||||
//! according to the current DisplayMode()
|
||||
Standard_EXPORT Handle(Prs3d_Presentation) Presentation() const;
|
||||
|
||||
//! Sets the graphic basic aspect to the current presentation.
|
||||
Standard_DEPRECATED("Deprecated method, results might be undefined")
|
||||
Standard_EXPORT void SetAspect (const Handle(Prs3d_BasicAspect)& anAspect);
|
||||
|
||||
//! Sets up polygon offsets for this object.
|
||||
//! It modifies all existing presentations of <anObj> (if any),
|
||||
//! so it is reasonable to call this method after <anObj> has been displayed.
|
||||
//! Otherwise, Compute() method should pass Graphic3d_AspectFillArea3d
|
||||
//! aspect from <myDrawer> to Graphic3d_Group to make polygon offsets work.
|
||||
//!
|
||||
//! <aMode> parameter can contain various combinations of
|
||||
//! Aspect_PolygonOffsetMode enumeration elements (Aspect_POM_None means
|
||||
//! that polygon offsets are not changed).
|
||||
//! If <aMode> is different from Aspect_POM_Off and Aspect_POM_None, then <aFactor> and <aUnits>
|
||||
//! arguments are used by graphic renderer to calculate a depth offset value:
|
||||
//!
|
||||
//! offset = <aFactor> * m + <aUnits> * r, where
|
||||
//! m - maximum depth slope for the polygon currently being displayed,
|
||||
//! r - minimum window coordinates depth resolution (implementation-specific).
|
||||
//!
|
||||
//! Deafult settings for OCC 3D viewer: mode = Aspect_POM_Fill, factor = 1., units = 0.
|
||||
//!
|
||||
//! Negative offset values move polygons closer to the viewport,
|
||||
//! while positive values shift polygons away.
|
||||
//! Consult OpenGL reference for details (glPolygonOffset function description).
|
||||
//!
|
||||
//! NOTE: This method has a side effect - it creates own shading aspect
|
||||
//! if not yet created, so it is better to set up object material,
|
||||
//! color, etc. first.
|
||||
Standard_EXPORT virtual void SetPolygonOffsets (const Standard_Integer aMode, const Standard_ShortReal aFactor = 1.0, const Standard_ShortReal aUnits = 0.0);
|
||||
|
||||
//! Returns Standard_True if <myDrawer> has non-null shading aspect
|
||||
Standard_EXPORT virtual Standard_Boolean HasPolygonOffsets() const;
|
||||
|
||||
//! Retrieves current polygon offsets settings from <myDrawer>.
|
||||
Standard_EXPORT virtual void PolygonOffsets (Standard_Integer& aMode, Standard_ShortReal& aFactor, Standard_ShortReal& aUnits) const;
|
||||
|
||||
//! Returns bounding box of object correspondingly to its current display mode.
|
||||
Standard_EXPORT virtual void BoundingBox (Bnd_Box& theBndBox) Standard_OVERRIDE;
|
||||
|
||||
//! Enables or disables on-triangulation build of isolines according to the flag given.
|
||||
Standard_EXPORT void SetIsoOnTriangulation (const Standard_Boolean theIsEnabled);
|
||||
|
||||
//! Synchronize presentation aspects after their modification.
|
||||
//!
|
||||
//! This method should be called after modifying primitive aspect properties (material, texture, shader)
|
||||
//! so that modifications will take effect on already computed presentation groups (thus avoiding re-displaying the object).
|
||||
Standard_EXPORT void SynchronizeAspects();
|
||||
|
||||
protected:
|
||||
|
||||
//! Replace aspects of existing (computed) presentation groups,
|
||||
//! so that the new aspects can be applied without recomputing presentation.
|
||||
//! It is NOT recommended approach, because user has to fill such map and then search for each occurrence in computed groups.
|
||||
//! The recommended approach is computing presentation with necessary customized aspects,
|
||||
//! and then modify them directly followed by SynchronizeAspects() call.
|
||||
Standard_EXPORT void replaceAspects (const Graphic3d_MapOfAspectsToAspects& theMap);
|
||||
|
||||
//! The TypeOfPresention3d means that the interactive object
|
||||
//! may have a presentation dependant of the view of Display.
|
||||
Standard_EXPORT AIS_InteractiveObject(const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d = PrsMgr_TOP_AllView);
|
||||
|
||||
protected:
|
||||
|
||||
AIS_InteractiveContext* myCTXPtr; //!< pointer to Interactive Context, where object is currently displayed; @sa SetContext()
|
||||
Handle(Standard_Transient) myOwner; //!< application-specific owner object
|
||||
Handle(Graphic3d_AspectFillCapping) myCappingStyle;
|
||||
AIS_InteractiveContext* myCTXPtr;
|
||||
Handle(Standard_Transient) myOwner;
|
||||
Standard_ShortReal myOwnWidth;
|
||||
Aspect_TypeOfFacingModel myCurrentFacingModel;
|
||||
Standard_Boolean myInfiniteState;
|
||||
Standard_Boolean hasOwnColor;
|
||||
Standard_Boolean hasOwnMaterial;
|
||||
|
||||
};
|
||||
|
||||
|
@@ -18,13 +18,37 @@
|
||||
#include <AIS_Dimension.hxx>
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <Geom_Plane.hxx>
|
||||
#include <Geom_Transformation.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <Prs3d_DimensionAspect.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Prs3d_Presentation.hxx>
|
||||
#include <Prs3d_Projector.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Macro.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Vertex.hxx>
|
||||
#include <TCollection_ExtendedString.hxx>
|
||||
|
||||
class TopoDS_Face;
|
||||
class TCollection_ExtendedString;
|
||||
class gp_Pnt;
|
||||
class TopoDS_Edge;
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
class SelectMgr_Selection;
|
||||
class Bnd_Box;
|
||||
class gp_Dir;
|
||||
class TopoDS_Vertex;
|
||||
class Standard_Transient;
|
||||
class AIS_LengthDimension;
|
||||
|
||||
DEFINE_STANDARD_HANDLE (AIS_LengthDimension, AIS_Dimension)
|
||||
|
||||
|
@@ -85,7 +85,7 @@ namespace
|
||||
{
|
||||
public:
|
||||
//! Main constructor.
|
||||
ManipSensCircle (const Handle(SelectMgr_EntityOwner)& theOwnerId,
|
||||
ManipSensCircle (const Handle(SelectBasics_EntityOwner)& theOwnerId,
|
||||
const Handle(Geom_Circle)& theCircle,
|
||||
const Standard_Integer theNbPnts)
|
||||
: Select3D_SensitiveCircle (theOwnerId, theCircle, Standard_False, theNbPnts),
|
||||
@@ -104,7 +104,7 @@ namespace
|
||||
class ManipSensTriangulation : public Select3D_SensitiveTriangulation, public ManipSensRotation
|
||||
{
|
||||
public:
|
||||
ManipSensTriangulation (const Handle(SelectMgr_EntityOwner)& theOwnerId,
|
||||
ManipSensTriangulation (const Handle(SelectBasics_EntityOwner)& theOwnerId,
|
||||
const Handle(Poly_Triangulation)& theTrg,
|
||||
const gp_Dir& thePlaneNormal)
|
||||
: Select3D_SensitiveTriangulation (theOwnerId, theTrg, TopLoc_Location(), Standard_True),
|
||||
@@ -702,20 +702,7 @@ void AIS_Manipulator::Transform (const gp_Trsf& theTrsf)
|
||||
NCollection_Sequence<gp_Trsf>::Iterator aTrsfIter (myStartTrsfs);
|
||||
for (; anObjIter.More(); anObjIter.Next(), aTrsfIter.Next())
|
||||
{
|
||||
const Handle(AIS_InteractiveObject)& anObj = anObjIter.ChangeValue();
|
||||
const gp_Trsf& anOldTrsf = aTrsfIter.Value();
|
||||
const Handle(Geom_Transformation)& aParentTrsf = anObj->CombinedParentTransformation();
|
||||
if (!aParentTrsf.IsNull()
|
||||
&& aParentTrsf->Form() != gp_Identity)
|
||||
{
|
||||
// recompute local transformation relative to parent transformation
|
||||
const gp_Trsf aNewLocalTrsf = aParentTrsf->Trsf().Inverted() * theTrsf * aParentTrsf->Trsf() * anOldTrsf;
|
||||
anObj->SetLocalTransformation (aNewLocalTrsf);
|
||||
}
|
||||
else
|
||||
{
|
||||
anObj->SetLocalTransformation (theTrsf * anOldTrsf);
|
||||
}
|
||||
anObjIter.ChangeValue()->SetLocalTransformation (theTrsf * aTrsfIter.Value());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -17,19 +17,38 @@
|
||||
#ifndef _AIS_MaxRadiusDimension_HeaderFile
|
||||
#define _AIS_MaxRadiusDimension_HeaderFile
|
||||
|
||||
#include <AIS_EllipseRadiusDimension.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_EllipseRadiusDimension.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class Standard_ConstructionError;
|
||||
class TopoDS_Shape;
|
||||
class TCollection_ExtendedString;
|
||||
class gp_Pnt;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_MaxRadiusDimension;
|
||||
DEFINE_STANDARD_HANDLE(AIS_MaxRadiusDimension, AIS_EllipseRadiusDimension)
|
||||
|
||||
|
||||
//! Ellipse Max radius dimension of a Shape which can be Edge
|
||||
//! or Face (planar or cylindrical(surface of extrusion or
|
||||
//! surface of offset))
|
||||
class AIS_MaxRadiusDimension : public AIS_EllipseRadiusDimension
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_MaxRadiusDimension, AIS_EllipseRadiusDimension)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Max Ellipse radius dimension
|
||||
//! Shape can be edge , planar face or cylindrical face
|
||||
Standard_EXPORT AIS_MaxRadiusDimension(const TopoDS_Shape& aShape, const Standard_Real aVal, const TCollection_ExtendedString& aText);
|
||||
@@ -47,8 +66,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_MaxRadiusDimension,AIS_EllipseRadiusDimension)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -63,6 +93,13 @@ private:
|
||||
gp_Pnt myApexN;
|
||||
gp_Pnt myEndOfArrow;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_MaxRadiusDimension_HeaderFile
|
||||
|
@@ -16,22 +16,37 @@
|
||||
#ifndef _AIS_MidPointRelation_HeaderFile
|
||||
#define _AIS_MidPointRelation_HeaderFile
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
class gp_Lin;
|
||||
class gp_Pnt;
|
||||
class gp_Circ;
|
||||
class gp_Elips;
|
||||
|
||||
|
||||
class AIS_MidPointRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_MidPointRelation, AIS_Relation)
|
||||
|
||||
//! presentation of equal distance to point myMidPoint
|
||||
class AIS_MidPointRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_MidPointRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
Standard_EXPORT AIS_MidPointRelation(const TopoDS_Shape& aSymmTool, const TopoDS_Shape& FirstShape, const TopoDS_Shape& SecondShape, const Handle(Geom_Plane)& aPlane);
|
||||
|
||||
virtual Standard_Boolean IsMovable() const Standard_OVERRIDE;
|
||||
@@ -49,8 +64,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_MidPointRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -92,8 +118,14 @@ private:
|
||||
gp_Pnt mySecondPnt1;
|
||||
gp_Pnt mySecondPnt2;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_MidPointRelation.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_MidPointRelation_HeaderFile
|
||||
|
@@ -17,9 +17,26 @@
|
||||
#ifndef _AIS_MinRadiusDimension_HeaderFile
|
||||
#define _AIS_MinRadiusDimension_HeaderFile
|
||||
|
||||
#include <AIS_EllipseRadiusDimension.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_EllipseRadiusDimension.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class Standard_ConstructionError;
|
||||
class TopoDS_Shape;
|
||||
class TCollection_ExtendedString;
|
||||
class gp_Pnt;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_MinRadiusDimension;
|
||||
DEFINE_STANDARD_HANDLE(AIS_MinRadiusDimension, AIS_EllipseRadiusDimension)
|
||||
|
||||
//! -- Ellipse Min radius dimension of a Shape which
|
||||
@@ -27,9 +44,10 @@ DEFINE_STANDARD_HANDLE(AIS_MinRadiusDimension, AIS_EllipseRadiusDimension)
|
||||
//! extrusion or surface of offset))
|
||||
class AIS_MinRadiusDimension : public AIS_EllipseRadiusDimension
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_MinRadiusDimension, AIS_EllipseRadiusDimension)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Max Ellipse radius dimension
|
||||
//! Shape can be edge , planar face or cylindrical face
|
||||
Standard_EXPORT AIS_MinRadiusDimension(const TopoDS_Shape& aShape, const Standard_Real aVal, const TCollection_ExtendedString& aText);
|
||||
@@ -47,7 +65,18 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_MinRadiusDimension,AIS_EllipseRadiusDimension)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
@@ -63,6 +92,13 @@ private:
|
||||
gp_Pnt myApexN;
|
||||
gp_Pnt myEndOfArrow;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_MinRadiusDimension_HeaderFile
|
||||
|
@@ -1,36 +0,0 @@
|
||||
// Copyright (c) 2019 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 _AIS_MouseGesture_HeaderFile
|
||||
#define _AIS_MouseGesture_HeaderFile
|
||||
|
||||
#include <NCollection_DataMap.hxx>
|
||||
|
||||
//! Mouse gesture - only one can be active at one moment.
|
||||
enum AIS_MouseGesture
|
||||
{
|
||||
AIS_MouseGesture_NONE, //!< no active gesture
|
||||
//
|
||||
AIS_MouseGesture_SelectRectangle, //!< rectangular selection
|
||||
AIS_MouseGesture_SelectLasso, //!< polygonal selection
|
||||
//
|
||||
AIS_MouseGesture_Zoom, //!< view zoom gesture
|
||||
AIS_MouseGesture_Pan, //!< view panning gesture
|
||||
AIS_MouseGesture_RotateOrbit, //!< orbit rotation gesture
|
||||
AIS_MouseGesture_RotateView, //!< view rotation gesture
|
||||
};
|
||||
|
||||
//! Map defining mouse gestures.
|
||||
typedef NCollection_DataMap<unsigned int, AIS_MouseGesture> AIS_MouseGestureMap;
|
||||
|
||||
#endif // _AIS_MouseGesture_HeaderFile
|
@@ -20,6 +20,7 @@
|
||||
#include <AIS_InteractiveContext.hxx>
|
||||
#include <AIS_InteractiveObject.hxx>
|
||||
#include <Prs3d_Projector.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <Select3D_SensitiveEntity.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <Standard_NotImplemented.hxx>
|
||||
|
@@ -1,31 +0,0 @@
|
||||
// Copyright (c) 2019 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 _AIS_NavigationMode_HeaderFile
|
||||
#define _AIS_NavigationMode_HeaderFile
|
||||
|
||||
//! Camera navigation mode.
|
||||
enum AIS_NavigationMode
|
||||
{
|
||||
AIS_NavigationMode_Orbit, //!< orbit rotation
|
||||
AIS_NavigationMode_FirstPersonFlight, //!< flight rotation (first person)
|
||||
AIS_NavigationMode_FirstPersonWalk, //!< walking mode (first person)
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
AIS_NavigationMode_LOWER = 0,
|
||||
AIS_NavigationMode_UPPER = AIS_NavigationMode_FirstPersonWalk
|
||||
};
|
||||
|
||||
#endif // _V3d_NavigationMode_HeaderFile
|
@@ -17,9 +17,28 @@
|
||||
#ifndef _AIS_OffsetDimension_HeaderFile
|
||||
#define _AIS_OffsetDimension_HeaderFile
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <gp_Trsf.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <AIS_KindOfDimension.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
class TopoDS_Shape;
|
||||
class TCollection_ExtendedString;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
class gp_Trsf;
|
||||
|
||||
|
||||
class AIS_OffsetDimension;
|
||||
DEFINE_STANDARD_HANDLE(AIS_OffsetDimension, AIS_Relation)
|
||||
|
||||
//! A framework to display dimensions of offsets.
|
||||
@@ -29,9 +48,10 @@ DEFINE_STANDARD_HANDLE(AIS_OffsetDimension, AIS_Relation)
|
||||
//! and the basis shape.
|
||||
class AIS_OffsetDimension : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_OffsetDimension, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs the offset display object defined by the
|
||||
//! first shape aFShape, the second shape aSShape, the
|
||||
//! dimension aVal, and the text aText.
|
||||
@@ -57,8 +77,19 @@ public:
|
||||
//! selection to a relative position.
|
||||
void SetRelativePos (const gp_Trsf& aTrsf);
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_OffsetDimension,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT virtual void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -77,8 +108,14 @@ private:
|
||||
gp_Dir myDirAttach2;
|
||||
gp_Trsf myRelativePos;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_OffsetDimension.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_OffsetDimension_HeaderFile
|
||||
|
@@ -17,9 +17,27 @@
|
||||
#ifndef _AIS_ParallelRelation_HeaderFile
|
||||
#define _AIS_ParallelRelation_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class gp_Pnt;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_ParallelRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_ParallelRelation, AIS_Relation)
|
||||
|
||||
//! A framework to display constraints of parallelism
|
||||
@@ -27,7 +45,7 @@ DEFINE_STANDARD_HANDLE(AIS_ParallelRelation, AIS_Relation)
|
||||
//! entities can be faces or edges.
|
||||
class AIS_ParallelRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_ParallelRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
@@ -55,8 +73,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_ParallelRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -71,8 +100,14 @@ private:
|
||||
gp_Pnt mySAttach;
|
||||
gp_Dir myDirAttach;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_ParallelRelation.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_ParallelRelation_HeaderFile
|
||||
|
@@ -17,8 +17,22 @@
|
||||
#ifndef _AIS_PerpendicularRelation_HeaderFile
|
||||
#define _AIS_PerpendicularRelation_HeaderFile
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_PerpendicularRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_PerpendicularRelation, AIS_Relation)
|
||||
|
||||
//! A framework to display constraints of perpendicularity
|
||||
@@ -26,9 +40,10 @@ DEFINE_STANDARD_HANDLE(AIS_PerpendicularRelation, AIS_Relation)
|
||||
//! datums can be edges or faces.
|
||||
class AIS_PerpendicularRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_PerpendicularRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs an object to display constraints of
|
||||
//! perpendicularity on shapes.
|
||||
//! This object is defined by a first shape aFShape, a
|
||||
@@ -53,6 +68,16 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_PerpendicularRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -69,6 +94,13 @@ private:
|
||||
gp_Pnt myFAttach;
|
||||
gp_Pnt mySAttach;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_PerpendicularRelation_HeaderFile
|
||||
|
@@ -43,6 +43,7 @@
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Select3D_SensitiveTriangulation.hxx>
|
||||
#include <SelectBasics_EntityOwner.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <StdPrs_Plane.hxx>
|
||||
|
@@ -31,6 +31,7 @@
|
||||
#include <Prs3d_Projector.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Select3D_SensitivePoint.hxx>
|
||||
#include <SelectBasics_EntityOwner.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <StdPrs_Point.hxx>
|
||||
@@ -123,6 +124,7 @@ void AIS_Point::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection,
|
||||
const Standard_Integer /*aMode*/)
|
||||
{
|
||||
Handle(SelectMgr_EntityOwner) eown = new SelectMgr_EntityOwner(this,10);
|
||||
// eown -> SelectBasics_EntityOwner::Set(5);
|
||||
Handle(Select3D_SensitivePoint) sp = new Select3D_SensitivePoint(eown,
|
||||
myComponent->Pnt());
|
||||
aSelection->Add(sp);
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include <Prs3d_Presentation.hxx>
|
||||
#include <Prs3d_Root.hxx>
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <PrsMgr_Presentations.hxx>
|
||||
#include <Select3D_SensitiveBox.hxx>
|
||||
#include <Select3D_SensitivePrimitiveArray.hxx>
|
||||
|
@@ -27,6 +27,7 @@
|
||||
#include <DsgPrs_ArrowSide.hxx>
|
||||
#include <gp_Pln.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <PrsMgr_TypeOfPresentation3d.hxx>
|
||||
#include <TCollection_ExtendedString.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
|
||||
|
@@ -1,33 +0,0 @@
|
||||
// Copyright (c) 2019 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 _AIS_RotationMode_HeaderFile
|
||||
#define _AIS_RotationMode_HeaderFile
|
||||
|
||||
//! Camera rotation mode.
|
||||
enum AIS_RotationMode
|
||||
{
|
||||
AIS_RotationMode_BndBoxActive, //!< default OCCT rotation
|
||||
AIS_RotationMode_PickLast, //!< rotate around last picked point
|
||||
AIS_RotationMode_PickCenter, //!< rotate around point at the center of window
|
||||
AIS_RotationMode_CameraAt, //!< rotate around camera center
|
||||
AIS_RotationMode_BndBoxScene, //!< rotate around scene center
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
AIS_RotationMode_LOWER = 0,
|
||||
AIS_RotationMode_UPPER = AIS_RotationMode_BndBoxScene,
|
||||
};
|
||||
|
||||
#endif // _AIS_RotationMode_HeaderFile
|
@@ -39,11 +39,6 @@ AIS_Selection::AIS_Selection()
|
||||
//=======================================================================
|
||||
void AIS_Selection::Clear()
|
||||
{
|
||||
for (AIS_NListOfEntityOwner::Iterator aSelIter (Objects()); aSelIter.More(); aSelIter.Next())
|
||||
{
|
||||
const Handle(SelectMgr_EntityOwner) anObject = aSelIter.Value();
|
||||
anObject->SetSelected (Standard_False);
|
||||
}
|
||||
myresult.Clear();
|
||||
myResultMap.Clear();
|
||||
myIterator = AIS_NListOfEntityOwner::Iterator();
|
||||
@@ -66,7 +61,6 @@ AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& the
|
||||
AIS_NListOfEntityOwner::Iterator aListIter;
|
||||
myresult.Append (theObject, aListIter);
|
||||
myResultMap.Bind (theObject, aListIter);
|
||||
theObject->SetSelected (Standard_True);
|
||||
return AIS_SS_Added;
|
||||
}
|
||||
|
||||
@@ -93,7 +87,6 @@ AIS_SelectStatus AIS_Selection::Select (const Handle(SelectMgr_EntityOwner)& the
|
||||
|
||||
myresult.Remove (aListIter);
|
||||
myResultMap.UnBind (theObject);
|
||||
theObject->SetSelected (Standard_False);
|
||||
|
||||
// update list iterator for next object in <myresult> list if any
|
||||
if (aListIter.More())
|
||||
@@ -127,6 +120,5 @@ AIS_SelectStatus AIS_Selection::AddSelect (const Handle(SelectMgr_EntityOwner)&
|
||||
AIS_NListOfEntityOwner::Iterator aListIter;
|
||||
myresult.Append (theObject, aListIter);
|
||||
myResultMap.Bind (theObject, aListIter);
|
||||
theObject->SetSelected (Standard_True);
|
||||
return AIS_SS_Added;
|
||||
}
|
||||
|
@@ -48,6 +48,7 @@
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
#include <StdPrs_BndBox.hxx>
|
||||
#include <StdPrs_ToolTriangulatedShape.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Select3D_SensitiveBox.hxx>
|
||||
#include <Select3D_SensitiveEntity.hxx>
|
||||
@@ -180,7 +181,10 @@ void AIS_Shape::Compute(const Handle(PrsMgr_PresentationManager3d)& /*aPresentat
|
||||
try
|
||||
{
|
||||
OCC_CATCH_SIGNALS
|
||||
StdPrs_ShadedShape::Add (aPrs, myshape, myDrawer, myCappingStyle);
|
||||
StdPrs_ShadedShape::Add (aPrs, myshape, myDrawer,
|
||||
myDrawer->ShadingAspect()->Aspect()->ToMapTexture()
|
||||
&& !myDrawer->ShadingAspect()->Aspect()->TextureMap().IsNull(),
|
||||
myUVOrigin, myUVRepeat, myUVScale);
|
||||
}
|
||||
catch (Standard_Failure const& anException)
|
||||
{
|
||||
|
@@ -17,11 +17,25 @@
|
||||
#ifndef _AIS_SymmetricRelation_HeaderFile
|
||||
#define _AIS_SymmetricRelation_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_SymmetricRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_SymmetricRelation, AIS_Relation)
|
||||
|
||||
//! A framework to display constraints of symmetricity
|
||||
@@ -30,9 +44,10 @@ DEFINE_STANDARD_HANDLE(AIS_SymmetricRelation, AIS_Relation)
|
||||
//! shapes of which the datums are parts.
|
||||
class AIS_SymmetricRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_SymmetricRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs an object to display constraints of symmetricity.
|
||||
//! This object is defined by a tool aSymmTool, a first
|
||||
//! shape FirstShape, a second shape SecondShape, and a plane aPlane.
|
||||
@@ -64,8 +79,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_SymmetricRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -84,8 +110,14 @@ private:
|
||||
gp_Dir myFDirAttach;
|
||||
gp_Dir myAxisDirAttach;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#include <AIS_SymmetricRelation.lxx>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_SymmetricRelation_HeaderFile
|
||||
|
@@ -17,8 +17,24 @@
|
||||
#ifndef _AIS_TangentRelation_HeaderFile
|
||||
#define _AIS_TangentRelation_HeaderFile
|
||||
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Dir.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <AIS_Relation.hxx>
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
class TopoDS_Shape;
|
||||
class Geom_Plane;
|
||||
class Prs3d_Presentation;
|
||||
class Prs3d_Projector;
|
||||
class Geom_Transformation;
|
||||
|
||||
|
||||
class AIS_TangentRelation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_TangentRelation, AIS_Relation)
|
||||
|
||||
//! A framework to display tangency constraints between
|
||||
@@ -26,9 +42,10 @@ DEFINE_STANDARD_HANDLE(AIS_TangentRelation, AIS_Relation)
|
||||
//! The datums are normally faces or edges.
|
||||
class AIS_TangentRelation : public AIS_Relation
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_TangentRelation, AIS_Relation)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! TwoFacesTangent or TwoEdgesTangent relation
|
||||
//! Constructs an object to display tangency constraints.
|
||||
//! This object is defined by the first shape aFShape, the
|
||||
@@ -62,8 +79,19 @@ public:
|
||||
//! to the object to display before computation !!!
|
||||
Standard_EXPORT virtual void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Geom_Transformation)& aTrsf, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_TangentRelation,AIS_Relation)
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT void Compute (const Handle(Prs3d_Projector)& aProjector, const Handle(Prs3d_Presentation)& aPresentation) Standard_OVERRIDE;
|
||||
@@ -79,6 +107,13 @@ private:
|
||||
Standard_Real myLength;
|
||||
Standard_Integer myExternRef;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_TangentRelation_HeaderFile
|
||||
|
@@ -263,14 +263,14 @@ void AIS_TextLabel::Compute (const Handle(PrsMgr_PresentationManager3d)& /*thePr
|
||||
if (myHasFlipping)
|
||||
{
|
||||
// Get width and height of text
|
||||
Font_FTFontParams aFontParams;
|
||||
aFontParams.PointSize = (unsigned int )anAsp->Height();
|
||||
aFontParams.Resolution = GetContext()->CurrentViewer()->DefaultRenderingParams().Resolution;
|
||||
if (Handle(Font_FTFont) aFont = Font_FTFont::FindAndCreate (anAsp->Aspect()->Font(), anAsp->Aspect()->GetTextFontAspect(), aFontParams))
|
||||
Font_FTFont aFont;
|
||||
unsigned int aResolution = GetContext()->CurrentViewer()->DefaultRenderingParams().Resolution;
|
||||
if (aFont.Init (anAsp->Aspect()->Font().ToCString(),
|
||||
anAsp->Aspect()->GetTextFontAspect(), (unsigned int)anAsp->Height(), aResolution))
|
||||
{
|
||||
isInit = Standard_True;
|
||||
const NCollection_String aText (myText.ToExtString());
|
||||
Font_Rect aBndBox = aFont->BoundingBox (aText, anAsp->HorizontalJustification(), anAsp->VerticalJustification());
|
||||
Font_Rect aBndBox = aFont.BoundingBox (aText, anAsp->HorizontalJustification(), anAsp->VerticalJustification());
|
||||
Standard_Real aWidth = Abs (aBndBox.Width());
|
||||
Standard_Real aHeight = Abs (aBndBox.Height());
|
||||
gp_Pnt aCenterOfLabel = aPosition;
|
||||
|
@@ -28,6 +28,7 @@
|
||||
#include <Precision.hxx>
|
||||
#include <Prs3d_Drawer.hxx>
|
||||
#include <Prs3d_Presentation.hxx>
|
||||
#include <PrsMgr_ModedPresentation.hxx>
|
||||
#include <Prs3d_Root.hxx>
|
||||
#include <Prs3d_LineAspect.hxx>
|
||||
#include <Prs3d_ShadingAspect.hxx>
|
||||
@@ -198,12 +199,14 @@ void AIS_TexturedShape::SetColor (const Quantity_Color& theColor)
|
||||
{
|
||||
AIS_Shape::SetColor (theColor);
|
||||
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (Presentations()); aPrsIter.More(); aPrsIter.Next())
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= Presentations().Length(); ++aPrsIt)
|
||||
{
|
||||
if (aPrsIter.Value()->Mode() == 3)
|
||||
{
|
||||
updateAttributes (aPrsIter.Value());
|
||||
}
|
||||
const PrsMgr_ModedPresentation& aPrsModed = Presentations().Value (aPrsIt);
|
||||
|
||||
if (aPrsModed.Mode() != 3)
|
||||
continue;
|
||||
|
||||
updateAttributes (aPrsModed.Presentation()->Presentation());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,12 +228,15 @@ void AIS_TexturedShape::UnsetColor()
|
||||
void AIS_TexturedShape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
{
|
||||
AIS_Shape::SetMaterial (theMat);
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (Presentations()); aPrsIter.More(); aPrsIter.Next())
|
||||
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= Presentations().Length(); ++aPrsIt)
|
||||
{
|
||||
if (aPrsIter.Value()->Mode() == 3)
|
||||
{
|
||||
updateAttributes (aPrsIter.Value());
|
||||
}
|
||||
const PrsMgr_ModedPresentation& aPrsModed = Presentations().Value (aPrsIt);
|
||||
|
||||
if (aPrsModed.Mode() != 3)
|
||||
continue;
|
||||
|
||||
updateAttributes (aPrsModed.Presentation()->Presentation());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,12 +247,15 @@ void AIS_TexturedShape::SetMaterial (const Graphic3d_MaterialAspect& theMat)
|
||||
void AIS_TexturedShape::UnsetMaterial()
|
||||
{
|
||||
AIS_Shape::UnsetMaterial();
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (Presentations()); aPrsIter.More(); aPrsIter.Next())
|
||||
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= Presentations().Length(); ++aPrsIt)
|
||||
{
|
||||
if (aPrsIter.Value()->Mode() == 3)
|
||||
{
|
||||
updateAttributes (aPrsIter.Value());
|
||||
}
|
||||
const PrsMgr_ModedPresentation& aPrsModed = Presentations().Value (aPrsIt);
|
||||
|
||||
if (aPrsModed.Mode() != 3)
|
||||
continue;
|
||||
|
||||
updateAttributes (aPrsModed.Presentation()->Presentation());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -95,14 +95,16 @@ void AIS_Triangulation::updatePresentation()
|
||||
// modify shading presentation without re-computation
|
||||
const PrsMgr_Presentations& aPrsList = Presentations();
|
||||
Handle(Graphic3d_AspectFillArea3d) anAreaAsp = myDrawer->ShadingAspect()->Aspect();
|
||||
for (PrsMgr_Presentations::Iterator aPrsIter (aPrsList); aPrsIter.More(); aPrsIter.Next())
|
||||
for (Standard_Integer aPrsIt = 1; aPrsIt <= aPrsList.Length(); ++aPrsIt)
|
||||
{
|
||||
if (aPrsIter.Value()->Mode() != AIS_WireFrame)
|
||||
const PrsMgr_ModedPresentation& aPrsModed = aPrsList.Value (aPrsIt);
|
||||
if (aPrsModed.Mode() != AIS_WireFrame)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsIter.Value();
|
||||
const Handle(Prs3d_Presentation)& aPrs = aPrsModed.Presentation()->Presentation();
|
||||
|
||||
for (Graphic3d_SequenceOfGroup::Iterator aGroupIt (aPrs->Groups()); aGroupIt.More(); aGroupIt.Next())
|
||||
{
|
||||
const Handle(Graphic3d_Group)& aGroup = aGroupIt.Value();
|
||||
|
@@ -16,11 +16,20 @@
|
||||
#ifndef _AIS_Triangulation_HeaderFile
|
||||
#define _AIS_Triangulation_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <TColStd_HArray1OfInteger.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <AIS_InteractiveObject.hxx>
|
||||
|
||||
#include <PrsMgr_PresentationManager3d.hxx>
|
||||
#include <SelectMgr_Selection.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
class Poly_Triangulation;
|
||||
class Prs3d_Presentation;
|
||||
|
||||
|
||||
class AIS_Triangulation;
|
||||
DEFINE_STANDARD_HANDLE(AIS_Triangulation, AIS_InteractiveObject)
|
||||
|
||||
//! Interactive object that draws data from Poly_Triangulation, optionally with colors associated
|
||||
@@ -29,9 +38,10 @@ DEFINE_STANDARD_HANDLE(AIS_Triangulation, AIS_InteractiveObject)
|
||||
//! Interactive selection of triangles and vertices is not yet implemented.
|
||||
class AIS_Triangulation : public AIS_InteractiveObject
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Triangulation, AIS_InteractiveObject)
|
||||
|
||||
public:
|
||||
|
||||
|
||||
//! Constructs the Triangulation display object
|
||||
Standard_EXPORT AIS_Triangulation(const Handle(Poly_Triangulation)& aTriangulation);
|
||||
|
||||
@@ -63,6 +73,8 @@ public:
|
||||
//! Removes the setting for transparency in the reconstructed compound shape.
|
||||
Standard_EXPORT virtual void UnsetTransparency() Standard_OVERRIDE;
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(AIS_Triangulation,AIS_InteractiveObject)
|
||||
|
||||
protected:
|
||||
|
||||
Standard_EXPORT void updatePresentation();
|
||||
@@ -89,6 +101,13 @@ private:
|
||||
Standard_Integer myNbNodes;
|
||||
Standard_Integer myNbTriangles;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif // _AIS_Triangulation_HeaderFile
|
||||
|
@@ -43,6 +43,7 @@
|
||||
#include <Select3D_SensitivePrimitiveArray.hxx>
|
||||
#include <Select3D_SensitiveSegment.hxx>
|
||||
#include <Select3D_SensitiveTriangle.hxx>
|
||||
#include <SelectBasics_EntityOwner.hxx>
|
||||
#include <SelectMgr_EntityOwner.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
@@ -731,14 +732,14 @@ void AIS_Trihedron::SetDrawArrows (const Standard_Boolean theToDraw)
|
||||
//function : createSensitiveEntity
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Handle(Select3D_SensitiveEntity) AIS_Trihedron::createSensitiveEntity (const Prs3d_DatumParts thePart,
|
||||
const Handle(SelectMgr_EntityOwner)& theOwner) const
|
||||
Handle(SelectBasics_SensitiveEntity) AIS_Trihedron::createSensitiveEntity (const Prs3d_DatumParts thePart,
|
||||
const Handle(SelectBasics_EntityOwner)& theOwner) const
|
||||
{
|
||||
Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect();
|
||||
Handle(Graphic3d_ArrayOfPrimitives) aPrimitives = arrayOfPrimitives (thePart);
|
||||
if (aPrimitives.IsNull())
|
||||
{
|
||||
return Handle(Select3D_SensitiveEntity)();
|
||||
return Handle(SelectBasics_SensitiveEntity)();
|
||||
}
|
||||
|
||||
if (thePart >= Prs3d_DP_XOYAxis
|
||||
@@ -768,7 +769,7 @@ Handle(Select3D_SensitiveEntity) AIS_Trihedron::createSensitiveEntity (const Prs
|
||||
const gp_Pnt anXYZ2 = aSegments->Vertice (2);
|
||||
return new Select3D_SensitiveSegment (theOwner, anXYZ1, anXYZ2);
|
||||
}
|
||||
return Handle(Select3D_SensitiveEntity)();
|
||||
return Handle(SelectBasics_SensitiveEntity)();
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
|
@@ -225,8 +225,8 @@ protected:
|
||||
protected:
|
||||
|
||||
//! Creates a sensitive entity for the datum part that will be used in selection owner creation.
|
||||
Standard_EXPORT Handle(Select3D_SensitiveEntity) createSensitiveEntity (const Prs3d_DatumParts thePart,
|
||||
const Handle(SelectMgr_EntityOwner)& theOwner) const;
|
||||
Standard_EXPORT Handle(SelectBasics_SensitiveEntity) createSensitiveEntity (const Prs3d_DatumParts thePart,
|
||||
const Handle(SelectBasics_EntityOwner)& theOwner) const;
|
||||
|
||||
//! Computes presentation for display mode equal 1.
|
||||
Standard_EXPORT void computePresentation (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr,
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,658 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 _AIS_ViewController_HeaderFile
|
||||
#define _AIS_ViewController_HeaderFile
|
||||
|
||||
#include <Aspect_VKeySet.hxx>
|
||||
#include <Aspect_TouchMap.hxx>
|
||||
#include <AIS_DragAction.hxx>
|
||||
#include <AIS_MouseGesture.hxx>
|
||||
#include <AIS_NavigationMode.hxx>
|
||||
#include <AIS_ViewInputBuffer.hxx>
|
||||
#include <AIS_RotationMode.hxx>
|
||||
#include <AIS_WalkDelta.hxx>
|
||||
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <Graphic3d_Vec3.hxx>
|
||||
#include <NCollection_Array1.hxx>
|
||||
#include <OSD_Timer.hxx>
|
||||
#include <Precision.hxx>
|
||||
#include <Standard_Mutex.hxx>
|
||||
|
||||
class AIS_InteractiveObject;
|
||||
class AIS_InteractiveContext;
|
||||
class AIS_Point;
|
||||
class AIS_RubberBand;
|
||||
class V3d_View;
|
||||
|
||||
//! Auxiliary structure for handling viewer events between GUI and Rendering threads.
|
||||
//!
|
||||
//! Class implements the following features:
|
||||
//! - Buffers storing the state of user input (mouse, touches and keyboard).
|
||||
//! - Mapping mouse/multi-touch input to View camera manipulations (panning/rotating/zooming).
|
||||
//! - Input events are not applied immediately but queued for separate processing from two working threads
|
||||
//! UI thread receiving user input and Rendering thread for OCCT 3D Viewer drawing.
|
||||
class AIS_ViewController
|
||||
{
|
||||
public:
|
||||
|
||||
//! Empty constructor.
|
||||
Standard_EXPORT AIS_ViewController();
|
||||
|
||||
//! Return input buffer.
|
||||
const AIS_ViewInputBuffer& InputBuffer (AIS_ViewInputBufferType theType) const { return theType == AIS_ViewInputBufferType_UI ? myUI : myGL; }
|
||||
|
||||
//! Return input buffer.
|
||||
AIS_ViewInputBuffer& ChangeInputBuffer (AIS_ViewInputBufferType theType) { return theType == AIS_ViewInputBufferType_UI ? myUI : myGL; }
|
||||
|
||||
public: //! @name global parameters
|
||||
|
||||
//! Return camera rotation mode, AIS_RotationMode_BndBoxActive by default.
|
||||
AIS_RotationMode RotationMode() const { return myRotationMode; }
|
||||
|
||||
//! Set camera rotation mode.
|
||||
void SetRotationMode (AIS_RotationMode theMode) { myRotationMode = theMode; }
|
||||
|
||||
//! Return camera navigation mode; AIS_NavigationMode_Orbit by default.
|
||||
AIS_NavigationMode NavigationMode() const { return myNavigationMode; }
|
||||
|
||||
//! Set camera navigation mode.
|
||||
Standard_EXPORT void SetNavigationMode (AIS_NavigationMode theMode);
|
||||
|
||||
//! Return mouse input acceleration ratio in First Person mode; 1.0 by default.
|
||||
float MouseAcceleration() const { return myMouseAccel; }
|
||||
|
||||
//! Set mouse input acceleration ratio.
|
||||
void SetMouseAcceleration (float theRatio) { myMouseAccel = theRatio; }
|
||||
|
||||
//! Return orbit rotation acceleration ratio; 1.0 by default.
|
||||
float OrbitAcceleration() const { return myOrbitAccel; }
|
||||
|
||||
//! Set orbit rotation acceleration ratio.
|
||||
void SetOrbitAcceleration (float theRatio) { myOrbitAccel = theRatio; }
|
||||
|
||||
//! Return TRUE if panning anchor point within perspective projection should be displayed in 3D Viewer; TRUE by default.
|
||||
bool ToShowPanAnchorPoint() const { return myToShowPanAnchorPoint; }
|
||||
|
||||
//! Set if panning anchor point within perspective projection should be displayed in 3D Viewer.
|
||||
void SetShowPanAnchorPoint (bool theToShow) { myToShowPanAnchorPoint = theToShow; }
|
||||
|
||||
//! Return TRUE if rotation point should be displayed in 3D Viewer; TRUE by default.
|
||||
bool ToShowRotateCenter() const { return myToShowRotateCenter; }
|
||||
|
||||
//! Set if rotation point should be displayed in 3D Viewer.
|
||||
void SetShowRotateCenter (bool theToShow) { myToShowRotateCenter = theToShow; }
|
||||
|
||||
//! Return TRUE if camera up orientation within AIS_NavigationMode_Orbit rotation mode should be forced Z up; FALSE by default.
|
||||
bool ToLockOrbitZUp() const { return myToLockOrbitZUp; }
|
||||
|
||||
//! Set if camera up orientation within AIS_NavigationMode_Orbit rotation mode should be forced Z up.
|
||||
void SetLockOrbitZUp (bool theToForceUp) { myToLockOrbitZUp = theToForceUp; }
|
||||
|
||||
//! Return TRUE if z-rotation via two-touches gesture is enabled; FALSE by default.
|
||||
bool ToAllowTouchZRotation() const { return myToAllowTouchZRotation; }
|
||||
|
||||
//! Set if z-rotation via two-touches gesture is enabled.
|
||||
void SetAllowTouchZRotation (bool theToEnable) { myToAllowTouchZRotation = theToEnable; }
|
||||
|
||||
//! Return TRUE if camera rotation is allowed; TRUE by default.
|
||||
bool ToAllowRotation() const { return myToAllowRotation; }
|
||||
|
||||
//! Set if camera rotation is allowed.
|
||||
void SetAllowRotation (bool theToEnable) { myToAllowRotation = theToEnable; }
|
||||
|
||||
//! Return TRUE if panning is allowed; TRUE by default.
|
||||
bool ToAllowPanning() const { return myToAllowPanning; }
|
||||
|
||||
//! Set if panning is allowed.
|
||||
void SetAllowPanning (bool theToEnable) { myToAllowPanning = theToEnable; }
|
||||
|
||||
//! Return TRUE if zooming is allowed; TRUE by default.
|
||||
bool ToAllowZooming() const { return myToAllowZooming; }
|
||||
|
||||
//! Set if zooming is allowed.
|
||||
void SetAllowZooming (bool theToEnable) { myToAllowZooming = theToEnable; }
|
||||
|
||||
//! Return TRUE if ZFocus change is allowed; TRUE by default.
|
||||
bool ToAllowZFocus() const { return myToAllowZFocus; }
|
||||
|
||||
//! Set if ZFocus change is allowed.
|
||||
void SetAllowZFocus (bool theToEnable) { myToAllowZFocus = theToEnable; }
|
||||
|
||||
//! Return TRUE if dynamic highlight on mouse move is allowed; TRUE by default.
|
||||
bool ToAllowHighlight() const { return myToAllowHighlight; }
|
||||
|
||||
//! Set if dragging object is allowed.
|
||||
void SetAllowHighlight (bool theToEnable) { myToAllowHighlight = theToEnable; }
|
||||
|
||||
//! Return TRUE if dragging object is allowed; TRUE by default.
|
||||
bool ToAllowDragging() const { return myToAllowDragging; }
|
||||
|
||||
//! Set if dynamic highlight on mouse move is allowed.
|
||||
void SetAllowDragging (bool theToEnable) { myToAllowDragging = theToEnable; }
|
||||
|
||||
//! Return TRUE if pitch direction should be inverted while processing Aspect_VKey_NavLookUp/Aspect_VKey_NavLookDown; FALSE by default.
|
||||
bool ToInvertPitch() const { return myToInvertPitch; }
|
||||
|
||||
//! Set flag inverting pitch direction.
|
||||
void SetInvertPitch (bool theToInvert) { myToInvertPitch = theToInvert; }
|
||||
|
||||
//! Return normal walking speed, in m/s; 1.5 by default.
|
||||
float WalkSpeedAbsolute() const { return myWalkSpeedAbsolute; }
|
||||
|
||||
//! Set normal walking speed, in m/s; 1.5 by default.
|
||||
void SetWalkSpeedAbsolute (float theSpeed) { myWalkSpeedAbsolute = theSpeed; }
|
||||
|
||||
//! Return walking speed relative to scene bounding box; 0.1 by default.
|
||||
float WalkSpeedRelative() const { return myWalkSpeedRelative; }
|
||||
|
||||
//! Set walking speed relative to scene bounding box.
|
||||
void SetWalkSpeedRelative (float theFactor) { myWalkSpeedRelative = theFactor; }
|
||||
|
||||
//! Return active thrust value; 0.0f by default.
|
||||
float ThrustSpeed() const { return myThrustSpeed; }
|
||||
|
||||
//! Set active thrust value.
|
||||
void SetThrustSpeed (float theSpeed) { myThrustSpeed = theSpeed; }
|
||||
|
||||
//! Return TRUE if previous position of MoveTo has been defined.
|
||||
bool HasPreviousMoveTo() const { return myPrevMoveTo != Graphic3d_Vec2i (-1); }
|
||||
|
||||
//! Return previous position of MoveTo event in 3D viewer.
|
||||
const Graphic3d_Vec2i& PreviousMoveTo() const { return myPrevMoveTo; }
|
||||
|
||||
//! Reset previous position of MoveTo.
|
||||
void ResetPreviousMoveTo() { myPrevMoveTo = Graphic3d_Vec2i (-1); }
|
||||
|
||||
public: //! @name keyboard input
|
||||
|
||||
//! Return keyboard state.
|
||||
const Aspect_VKeySet& Keys() const { return myKeys; }
|
||||
|
||||
//! Return keyboard state.
|
||||
Aspect_VKeySet& ChangeKeys() { return myKeys; }
|
||||
|
||||
//! Press key.
|
||||
//! @param theKey key pressed
|
||||
//! @param theTime event timestamp
|
||||
Standard_EXPORT virtual void KeyDown (Aspect_VKey theKey,
|
||||
double theTime,
|
||||
double thePressure = 1.0);
|
||||
|
||||
//! Release key.
|
||||
//! @param theKey key pressed
|
||||
//! @param theTime event timestamp
|
||||
Standard_EXPORT virtual void KeyUp (Aspect_VKey theKey,
|
||||
double theTime);
|
||||
|
||||
//! Simulate key up/down events from axis value.
|
||||
Standard_EXPORT virtual void KeyFromAxis (Aspect_VKey theNegative,
|
||||
Aspect_VKey thePositive,
|
||||
double theTime,
|
||||
double thePressure);
|
||||
|
||||
//! Fetch active navigation actions.
|
||||
Standard_EXPORT AIS_WalkDelta FetchNavigationKeys (Standard_Real theCrouchRatio,
|
||||
Standard_Real theRunRatio);
|
||||
|
||||
public: //! @name mouse input
|
||||
|
||||
//! Return map defining mouse gestures.
|
||||
const AIS_MouseGestureMap& MouseGestureMap() const { return myMouseGestureMap; }
|
||||
|
||||
//! Return map defining mouse gestures.
|
||||
AIS_MouseGestureMap& ChangeMouseGestureMap() { return myMouseGestureMap; }
|
||||
|
||||
//! Return double click interval in seconds; 0.4 by default.
|
||||
double MouseDoubleClickInterval() const { return myMouseDoubleClickInt; }
|
||||
|
||||
//! Set double click interval in seconds.
|
||||
void SetMouseDoubleClickInterval (double theSeconds) { myMouseDoubleClickInt = theSeconds; }
|
||||
|
||||
//! Perform selection in 3D viewer.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePnt picking point
|
||||
//! @param theIsXOR XOR selection flag
|
||||
Standard_EXPORT virtual void SelectInViewer (const Graphic3d_Vec2i& thePnt,
|
||||
const bool theIsXOR = false);
|
||||
|
||||
//! Perform selection in 3D viewer.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePnts picking point
|
||||
//! @param theIsXOR XOR selection flag
|
||||
Standard_EXPORT virtual void SelectInViewer (const NCollection_Sequence<Graphic3d_Vec2i>& thePnts,
|
||||
const bool theIsXOR = false);
|
||||
|
||||
//! Update rectangle selection tool.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePntFrom rectangle first corner
|
||||
//! @param thePntTo rectangle another corner
|
||||
//! @param theIsXOR XOR selection flag
|
||||
Standard_EXPORT virtual void UpdateRubberBand (const Graphic3d_Vec2i& thePntFrom,
|
||||
const Graphic3d_Vec2i& thePntTo,
|
||||
const bool theIsXOR = false);
|
||||
|
||||
//! Update polygonal selection tool.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePnt new point to add to polygon
|
||||
//! @param theToAppend append new point or update the last point
|
||||
Standard_EXPORT virtual void UpdatePolySelection (const Graphic3d_Vec2i& thePnt,
|
||||
bool theToAppend);
|
||||
|
||||
//! Update zoom event (e.g. from mouse scroll).
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param theDelta mouse cursor position to zoom at and zoom delta
|
||||
//! @return TRUE if new zoom event has been created or FALSE if existing one has been updated
|
||||
Standard_EXPORT virtual bool UpdateZoom (const Aspect_ScrollDelta& theDelta);
|
||||
|
||||
//! Update Z rotation event.
|
||||
//! @param theAngle rotation angle, in radians.
|
||||
//! @return TRUE if new zoom event has been created or FALSE if existing one has been updated
|
||||
Standard_EXPORT virtual bool UpdateZRotation (double theAngle);
|
||||
|
||||
//! Update mouse scroll event; redirects to UpdateZoom by default.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param theDelta mouse cursor position and delta
|
||||
//! @return TRUE if new event has been created or FALSE if existing one has been updated
|
||||
Standard_EXPORT virtual bool UpdateMouseScroll (const Aspect_ScrollDelta& theDelta);
|
||||
|
||||
//! Handle mouse button press/release event.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePoint mouse cursor position
|
||||
//! @param theButtons pressed buttons
|
||||
//! @param theModifiers key modifiers
|
||||
//! @param theIsEmulated if TRUE then mouse event comes NOT from real mouse
|
||||
//! but emulated from non-precise input like touch on screen
|
||||
//! @return TRUE if View should be redrawn
|
||||
Standard_EXPORT virtual bool UpdateMouseButtons (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButtons,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsEmulated);
|
||||
|
||||
//! Handle mouse cursor movement event.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePoint mouse cursor position
|
||||
//! @param theButtons pressed buttons
|
||||
//! @param theModifiers key modifiers
|
||||
//! @param theIsEmulated if TRUE then mouse event comes NOT from real mouse
|
||||
//! but emulated from non-precise input like touch on screen
|
||||
//! @return TRUE if View should be redrawn
|
||||
Standard_EXPORT virtual bool UpdateMousePosition (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButtons,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsEmulated);
|
||||
|
||||
//! Handle mouse button press event.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePoint mouse cursor position
|
||||
//! @param theButton pressed button
|
||||
//! @param theModifiers key modifiers
|
||||
//! @param theIsEmulated if TRUE then mouse event comes NOT from real mouse
|
||||
//! but emulated from non-precise input like touch on screen
|
||||
//! @return TRUE if View should be redrawn
|
||||
bool PressMouseButton (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButton,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsEmulated)
|
||||
{
|
||||
return UpdateMouseButtons (thePoint, myMousePressed | theButton, theModifiers, theIsEmulated);
|
||||
}
|
||||
|
||||
//! Handle mouse button release event.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePoint mouse cursor position
|
||||
//! @param theButton released button
|
||||
//! @param theModifiers key modifiers
|
||||
//! @param theIsEmulated if TRUE then mouse event comes NOT from real mouse
|
||||
//! but emulated from non-precise input like touch on screen
|
||||
//! @return TRUE if View should be redrawn
|
||||
bool ReleaseMouseButton (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButton,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsEmulated)
|
||||
{
|
||||
Aspect_VKeyMouse aButtons = myMousePressed & (~theButton);
|
||||
return UpdateMouseButtons (thePoint, aButtons, theModifiers, theIsEmulated);
|
||||
}
|
||||
|
||||
//! Handle mouse button click event (emulated by UpdateMouseButtons() while releasing single button).
|
||||
//! Note that as this method is called by UpdateMouseButtons(), it should be executed from UI thread.
|
||||
//! Default implementation redirects to SelectInViewer().
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param thePoint mouse cursor position
|
||||
//! @param theButton clicked button
|
||||
//! @param theModifiers key modifiers
|
||||
//! @param theIsDoubleClick flag indicating double mouse click
|
||||
//! @return TRUE if View should be redrawn
|
||||
Standard_EXPORT virtual bool UpdateMouseClick (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButton,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsDoubleClick);
|
||||
|
||||
//! Return currently pressed mouse buttons.
|
||||
Aspect_VKeyMouse PressedMouseButtons() const { return myMousePressed; }
|
||||
|
||||
//! Return active key modifiers passed with last mouse event.
|
||||
Aspect_VKeyFlags LastMouseFlags() const { return myMouseModifiers; }
|
||||
|
||||
//! Return last mouse position.
|
||||
const Graphic3d_Vec2i& LastMousePosition() const { return myMousePositionLast; }
|
||||
|
||||
public: //! @name multi-touch input
|
||||
|
||||
//! Return scale factor for adjusting tolerances for starting multi-touch gestures; 1.0 by default
|
||||
//! This scale factor is expected to be computed from touch screen resolution.
|
||||
float TouchToleranceScale() const { return myTouchToleranceScale; }
|
||||
|
||||
//! Set scale factor for adjusting tolerances for starting multi-touch gestures.
|
||||
void SetTouchToleranceScale (float theTolerance) { myTouchToleranceScale = theTolerance; }
|
||||
|
||||
//! Return TRUE if touches map is not empty.
|
||||
bool HasTouchPoints() const { return !myTouchPoints.IsEmpty(); }
|
||||
|
||||
//! Add touch point with the given ID.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param theId touch unique identifier
|
||||
//! @param thePnt touch coordinates
|
||||
//! @param theClearBefore if TRUE previously registered touches will be removed
|
||||
Standard_EXPORT virtual void AddTouchPoint (Standard_Size theId,
|
||||
const Graphic3d_Vec2d& thePnt,
|
||||
Standard_Boolean theClearBefore = false);
|
||||
|
||||
//! Remove touch point with the given ID.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param theId touch unique identifier
|
||||
//! @param theClearSelectPnts if TRUE will initiate clearing of selection points
|
||||
//! @return TRUE if point has been removed
|
||||
Standard_EXPORT virtual bool RemoveTouchPoint (Standard_Size theId,
|
||||
Standard_Boolean theClearSelectPnts = false);
|
||||
|
||||
//! Update touch point with the given ID.
|
||||
//! If point with specified ID was not registered before, it will be added.
|
||||
//! This method is expected to be called from UI thread.
|
||||
//! @param theId touch unique identifier
|
||||
//! @param thePnt touch coordinates
|
||||
Standard_EXPORT virtual void UpdateTouchPoint (Standard_Size theId,
|
||||
const Graphic3d_Vec2d& thePnt);
|
||||
|
||||
public:
|
||||
|
||||
//! Return event time (e.g. current time).
|
||||
double EventTime() const { return myEventTimer.ElapsedTime(); }
|
||||
|
||||
//! Reset input state (pressed keys, mouse buttons, etc.) e.g. on window focus loss.
|
||||
//! This method is expected to be called from UI thread.
|
||||
Standard_EXPORT virtual void ResetViewInput();
|
||||
|
||||
//! Reset view orientation.
|
||||
//! This method is expected to be called from UI thread.
|
||||
Standard_EXPORT virtual void UpdateViewOrientation (V3d_TypeOfOrientation theOrientation,
|
||||
bool theToFitAll);
|
||||
|
||||
//! Update buffer for rendering thread.
|
||||
//! This method is expected to be called within synchronization barrier between GUI
|
||||
//! and Rendering threads (e.g. GUI thread should be locked beforehand to avoid data races).
|
||||
//! @param theCtx interactive context
|
||||
//! @param theView active view
|
||||
//! @param theToHandle if TRUE, the HandleViewEvents() will be called
|
||||
Standard_EXPORT virtual void FlushViewEvents (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView,
|
||||
Standard_Boolean theToHandle = Standard_False);
|
||||
|
||||
//! Process events within rendering thread.
|
||||
Standard_EXPORT virtual void HandleViewEvents (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
public:
|
||||
|
||||
//! Callback called by handleMoveTo() on Selection in 3D Viewer.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void OnSelectionChanged (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Callback called by handleMoveTo() on dragging object in 3D Viewer.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void OnObjectDragged (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView,
|
||||
AIS_DragAction theAction);
|
||||
|
||||
//! Pick closest point under mouse cursor.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
//! @param thePnt [out] result point
|
||||
//! @param theCtx [in] interactive context
|
||||
//! @param theView [in] active view
|
||||
//! @param theCursor [in] mouse cursor
|
||||
//! @param theToStickToPickRay [in] when TRUE, the result point will lie on picking ray
|
||||
//! @return TRUE if result has been found
|
||||
Standard_EXPORT virtual bool PickPoint (gp_Pnt& thePnt,
|
||||
const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView,
|
||||
const Graphic3d_Vec2i& theCursor,
|
||||
bool theToStickToPickRay);
|
||||
|
||||
//! Compute rotation gravity center point depending on rotation mode.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual gp_Pnt GravityPoint (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
public:
|
||||
|
||||
//! Perform camera actions.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleCameraActions (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView,
|
||||
const AIS_WalkDelta& theWalk);
|
||||
|
||||
//! Perform moveto/selection/dragging.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleMoveTo (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Return TRUE if another frame should be drawn right after this one.
|
||||
bool toAskNextFrame() const { return myToAskNextFrame; }
|
||||
|
||||
//! Set if another frame should be drawn right after this one.
|
||||
void setAskNextFrame (bool theToDraw = true) { myToAskNextFrame = theToDraw; }
|
||||
|
||||
//! Return if panning anchor point has been defined.
|
||||
bool hasPanningAnchorPoint() const { return !Precision::IsInfinite (myPanPnt3d.X()); }
|
||||
|
||||
//! Return active panning anchor point.
|
||||
const gp_Pnt& panningAnchorPoint() const { return myPanPnt3d; }
|
||||
|
||||
//! Set active panning anchor point.
|
||||
void setPanningAnchorPoint (const gp_Pnt& thePnt) { myPanPnt3d = thePnt; }
|
||||
|
||||
//! Handle panning event myGL.Panning.
|
||||
Standard_EXPORT virtual void handlePanning (const Handle(V3d_View)& theView);
|
||||
|
||||
//! Handle Z rotation event myGL.ZRotate.
|
||||
Standard_EXPORT virtual void handleZRotate (const Handle(V3d_View)& theView);
|
||||
|
||||
//! Return minimal camera distance for zoom operation.
|
||||
double MinZoomDistance() const { return myMinCamDistance; }
|
||||
|
||||
//! Set minimal camera distance for zoom operation.
|
||||
void SetMinZoomDistance (double theDist) { myMinCamDistance = theDist; }
|
||||
|
||||
//! Handle zoom event myGL.ZoomActions.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleZoom (const Handle(V3d_View)& theView,
|
||||
const Aspect_ScrollDelta& theParams,
|
||||
const gp_Pnt* thePnt);
|
||||
|
||||
//! Handle ZScroll event myGL.ZoomActions.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleZFocusScroll (const Handle(V3d_View)& theView,
|
||||
const Aspect_ScrollDelta& theParams);
|
||||
|
||||
//! Handle orbital rotation events myGL.OrbitRotation.
|
||||
//! @param theView view to modify
|
||||
//! @param thePnt 3D point to rotate around
|
||||
//! @param theToLockZUp amend camera to exclude roll angle (put camera Up vector to plane containing global Z and view direction)
|
||||
Standard_EXPORT virtual void handleOrbitRotation (const Handle(V3d_View)& theView,
|
||||
const gp_Pnt& thePnt,
|
||||
bool theToLockZUp);
|
||||
|
||||
//! Handle view direction rotation events myGL.ViewRotation.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
//! @param theView camera to modify
|
||||
//! @param theYawExtra extra yaw increment
|
||||
//! @param thePitchExtra extra pitch increment
|
||||
//! @param theRoll roll value
|
||||
//! @param theToRestartOnIncrement flag indicating flight mode
|
||||
Standard_EXPORT virtual void handleViewRotation (const Handle(V3d_View)& theView,
|
||||
double theYawExtra,
|
||||
double thePitchExtra,
|
||||
double theRoll,
|
||||
bool theToRestartOnIncrement);
|
||||
|
||||
//! Handle view redraw.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleViewRedraw (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
protected:
|
||||
|
||||
//! Flush buffers.
|
||||
Standard_EXPORT virtual void flushBuffers (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Flush touch gestures.
|
||||
Standard_EXPORT virtual void flushGestures (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Return current and previously fetched event times.
|
||||
//! This callback is intended to compute delta between sequentially processed events.
|
||||
//! @param thePrevTime [out] events time fetched previous time by this method
|
||||
//! @param theCurrTime [out] actual events time
|
||||
void updateEventsTime (double& thePrevTime,
|
||||
double& theCurrTime)
|
||||
{
|
||||
thePrevTime = myLastEventsTime;
|
||||
myLastEventsTime = EventTime();
|
||||
theCurrTime = myLastEventsTime;
|
||||
}
|
||||
|
||||
//! Perform selection via mouse click.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleSelectionPick (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Perform dynamic highlight on mouse move.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleDynamicHighlight (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Perform rubber-band selection.
|
||||
//! This method is expected to be called from rendering thread.
|
||||
Standard_EXPORT virtual void handleSelectionPoly (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView);
|
||||
|
||||
//! Lazy AIS_InteractiveContext::MoveTo() with myPrevMoveTo check.
|
||||
Standard_EXPORT virtual void contextLazyMoveTo (const Handle(AIS_InteractiveContext)& theCtx,
|
||||
const Handle(V3d_View)& theView,
|
||||
const Graphic3d_Vec2i& thePnt);
|
||||
|
||||
protected:
|
||||
|
||||
AIS_ViewInputBuffer myUI; //!< buffer for UI thread
|
||||
AIS_ViewInputBuffer myGL; //!< buffer for rendering thread
|
||||
|
||||
OSD_Timer myEventTimer; //!< timer for timestamping events
|
||||
Standard_Real myLastEventsTime; //!< last fetched events timer value for computing delta/progress
|
||||
Standard_Boolean myToAskNextFrame; //!< flag indicating that another frame should be drawn right after this one
|
||||
|
||||
Standard_Real myMinCamDistance; //!< minimal camera distance for zoom operation
|
||||
AIS_RotationMode myRotationMode; //!< rotation mode
|
||||
AIS_NavigationMode myNavigationMode; //!< navigation mode (orbit rotation / first person)
|
||||
Standard_ShortReal myMouseAccel; //!< mouse input acceleration ratio in First Person mode
|
||||
Standard_ShortReal myOrbitAccel; //!< Orbit rotation acceleration ratio
|
||||
Standard_Boolean myToShowPanAnchorPoint; //!< option displaying panning anchor point
|
||||
Standard_Boolean myToShowRotateCenter; //!< option displaying rotation center point
|
||||
Standard_Boolean myToLockOrbitZUp; //!< force camera up orientation within AIS_NavigationMode_Orbit rotation mode
|
||||
Standard_Boolean myToInvertPitch; //!< flag inverting pitch direction while processing Aspect_VKey_NavLookUp/Aspect_VKey_NavLookDown
|
||||
Standard_Boolean myToAllowTouchZRotation; //!< enable z-rotation two-touches gesture; FALSE by default
|
||||
Standard_Boolean myToAllowRotation; //!< enable rotation; TRUE by default
|
||||
Standard_Boolean myToAllowPanning; //!< enable panning; TRUE by default
|
||||
Standard_Boolean myToAllowZooming; //!< enable zooming; TRUE by default
|
||||
Standard_Boolean myToAllowZFocus; //!< enable ZFocus change; TRUE by default
|
||||
Standard_Boolean myToAllowHighlight; //!< enable dynamic highlight on mouse move; TRUE by default
|
||||
Standard_Boolean myToAllowDragging; //!< enable dragging object; TRUE by default
|
||||
|
||||
Standard_ShortReal myWalkSpeedAbsolute; //!< normal walking speed, in m/s; 1.5 by default
|
||||
Standard_ShortReal myWalkSpeedRelative; //!< walking speed relative to scene bounding box; 0.1 by default
|
||||
Standard_ShortReal myThrustSpeed; //!< active thrust value
|
||||
Standard_Boolean myHasThrust; //!< flag indicating active thrust
|
||||
|
||||
Handle(AIS_RubberBand) myRubberBand; //!< Rubber-band presentation
|
||||
Handle(AIS_InteractiveObject) myDragObject; //!< currently dragged object
|
||||
Graphic3d_Vec2i myPrevMoveTo; //!< previous position of MoveTo event in 3D viewer
|
||||
Standard_Boolean myHasHlrOnBeforeRotation; //!< flag for restoring Computed mode after rotation
|
||||
|
||||
protected: //! @name keyboard input variables
|
||||
|
||||
Aspect_VKeySet myKeys; //!< keyboard state
|
||||
|
||||
protected: //! @name mouse input variables
|
||||
|
||||
Standard_Real myMouseClickThreshold; //!< mouse click threshold in pixels; 3 by default
|
||||
Standard_Real myMouseDoubleClickInt; //!< double click interval in seconds; 0.4 by default
|
||||
Standard_ShortReal myScrollZoomRatio; //!< distance ratio for mapping mouse scroll event to zoom; 15.0 by default
|
||||
|
||||
AIS_MouseGestureMap myMouseGestureMap; //!< map defining mouse gestures
|
||||
AIS_MouseGesture myMouseActiveGesture; //!< initiated mouse gesture (by pressing mouse button)
|
||||
Standard_Boolean myMouseActiveIdleRotation; //!< flag indicating view idle rotation state
|
||||
Graphic3d_Vec2i myMousePositionLast; //!< last mouse position
|
||||
Graphic3d_Vec2i myMousePressPoint; //!< mouse position where active gesture was been initiated
|
||||
Graphic3d_Vec2i myMouseProgressPoint; //!< gesture progress
|
||||
OSD_Timer myMouseClickTimer; //!< timer for handling double-click event
|
||||
Standard_Integer myMouseClickCounter; //!< counter for handling double-click event
|
||||
Aspect_VKeyMouse myMousePressed; //!< active mouse buttons
|
||||
Aspect_VKeyFlags myMouseModifiers; //!< active key modifiers passed with last mouse event
|
||||
Standard_Integer myMouseSingleButton; //!< index of mouse button pressed alone (>0)
|
||||
|
||||
protected: //! @name multi-touch input variables
|
||||
|
||||
Standard_ShortReal myTouchToleranceScale; //!< tolerance scale factor; 1.0 by default
|
||||
Standard_ShortReal myTouchRotationThresholdPx; //!< threshold for starting one-touch rotation gesture in pixels; 6 by default
|
||||
Standard_ShortReal myTouchZRotationThreshold; //!< threshold for starting two-touch Z-rotation gesture in radians; 2 degrees by default
|
||||
Standard_ShortReal myTouchPanThresholdPx; //!< threshold for starting two-touch panning gesture in pixels; 4 by default
|
||||
Standard_ShortReal myTouchZoomThresholdPx; //!< threshold for starting two-touch zoom (pitch) gesture in pixels; 6 by default
|
||||
Standard_ShortReal myTouchZoomRatio; //!< distance ratio for mapping two-touch zoom (pitch) gesture from pixels to zoom; 0.13 by default
|
||||
|
||||
Aspect_TouchMap myTouchPoints; //!< map of active touches
|
||||
Graphic3d_Vec2d myStartPanCoord; //!< touch coordinates at the moment of starting panning gesture
|
||||
Graphic3d_Vec2d myStartRotCoord; //!< touch coordinates at the moment of starting rotating gesture
|
||||
Standard_Integer myNbTouchesLast; //!< number of touches within previous gesture flush to track gesture changes
|
||||
Standard_Boolean myUpdateStartPointPan; //!< flag indicating that new anchor point should be picked for starting panning gesture
|
||||
Standard_Boolean myUpdateStartPointRot; //!< flag indicating that new gravity point should be picked for starting rotation gesture
|
||||
Standard_Boolean myUpdateStartPointZRot; //!< flag indicating that new gravity point should be picked for starting Z-rotation gesture
|
||||
|
||||
protected: //! @name rotation/panning transient state variables
|
||||
|
||||
Handle(AIS_Point) myAnchorPointPrs1; //!< anchor point presentation (Graphic3d_ZLayerId_Top)
|
||||
Handle(AIS_Point) myAnchorPointPrs2; //!< anchor point presentation (Graphic3d_ZLayerId_Topmost)
|
||||
gp_Pnt myPanPnt3d; //!< active panning anchor point
|
||||
gp_Pnt myRotatePnt3d; //!< active rotation center of gravity
|
||||
gp_Dir myCamStartOpUp; //!< camera Up direction at the beginning of rotation
|
||||
gp_Pnt myCamStartOpEye; //!< camera Eye position at the beginning of rotation
|
||||
gp_Pnt myCamStartOpCenter; //!< camera Center position at the beginning of rotation
|
||||
gp_Vec myCamStartOpToCenter; //!< vector from rotation gravity point to camera Center at the beginning of rotation
|
||||
gp_Vec myCamStartOpToEye; //!< vector from rotation gravity point to camera Eye at the beginning of rotation
|
||||
Graphic3d_Vec3d myRotateStartYawPitchRoll; //!< camera yaw pitch roll at the beginning of rotation
|
||||
|
||||
};
|
||||
|
||||
#endif // _AIS_ViewController_HeaderFile
|
@@ -1,153 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 _AIS_ViewInputBuffer_HeaderFile
|
||||
#define _AIS_ViewInputBuffer_HeaderFile
|
||||
|
||||
#include <Aspect_ScrollDelta.hxx>
|
||||
|
||||
#include <Graphic3d_Vec2.hxx>
|
||||
#include <NCollection_Sequence.hxx>
|
||||
#include <V3d_TypeOfOrientation.hxx>
|
||||
|
||||
//! Selection mode
|
||||
enum AIS_ViewSelectionTool
|
||||
{
|
||||
AIS_ViewSelectionTool_Picking, //!< pick to select
|
||||
AIS_ViewSelectionTool_RubberBand, //!< rubber-band to select
|
||||
AIS_ViewSelectionTool_Polygon //!< polyline to select
|
||||
};
|
||||
|
||||
//! Input buffer type.
|
||||
enum AIS_ViewInputBufferType
|
||||
{
|
||||
AIS_ViewInputBufferType_UI, //!< input buffer for filling from UI thread
|
||||
AIS_ViewInputBufferType_GL, //!< input buffer accessible from GL thread
|
||||
};
|
||||
|
||||
//! Auxiliary structure defining viewer events
|
||||
class AIS_ViewInputBuffer
|
||||
{
|
||||
public:
|
||||
|
||||
bool IsNewGesture; //!< transition from one action to another
|
||||
|
||||
NCollection_Sequence<Aspect_ScrollDelta> ZoomActions; //!< the queue with zoom actions
|
||||
|
||||
struct _orientation
|
||||
{
|
||||
bool ToFitAll; //!< perform FitAll operation
|
||||
bool ToSetViewOrient; //!< set new view orientation
|
||||
V3d_TypeOfOrientation ViewOrient; //!< new view orientation
|
||||
|
||||
_orientation() : ToFitAll (false), ToSetViewOrient (false), ViewOrient (V3d_Xpos) {}
|
||||
} Orientation;
|
||||
|
||||
struct _highlighting
|
||||
{
|
||||
bool ToHilight; //!< perform dynamic highlighting at specified point
|
||||
Graphic3d_Vec2i Point; //!< the new point for dynamic highlighting
|
||||
|
||||
_highlighting() : ToHilight (false) {}
|
||||
} MoveTo;
|
||||
|
||||
struct _selection
|
||||
{
|
||||
AIS_ViewSelectionTool Tool; //!< perform selection
|
||||
bool IsXOR; //!< perform shift selection
|
||||
NCollection_Sequence<Graphic3d_Vec2i>
|
||||
Points; //!< the points for selection
|
||||
bool ToApplyTool; //!< apply rubber-band selection tool
|
||||
|
||||
_selection() : Tool (AIS_ViewSelectionTool_Picking), IsXOR (false), ToApplyTool (false) {}
|
||||
} Selection;
|
||||
|
||||
struct _panningParams
|
||||
{
|
||||
bool ToStart; //!< start panning
|
||||
Graphic3d_Vec2i PointStart; //!< panning start point
|
||||
bool ToPan; //!< perform panning
|
||||
Graphic3d_Vec2i Delta; //!< panning delta
|
||||
|
||||
_panningParams() : ToStart (false), ToPan (false) {}
|
||||
} Panning;
|
||||
|
||||
struct _draggingParams
|
||||
{
|
||||
bool ToStart; //!< start dragging
|
||||
bool ToStop; //!< stop dragging
|
||||
bool ToAbort; //!< abort dragging (restore previous position)
|
||||
Graphic3d_Vec2i PointStart; //!< drag start point
|
||||
Graphic3d_Vec2i PointTo; //!< drag end point
|
||||
|
||||
_draggingParams() : ToStart (false), ToStop (false), ToAbort (false) {}
|
||||
} Dragging;
|
||||
|
||||
struct _orbitRotation
|
||||
{
|
||||
bool ToStart; //!< start orbit rotation
|
||||
Graphic3d_Vec2d PointStart; //!< orbit rotation start point
|
||||
bool ToRotate; //!< perform orbit rotation
|
||||
Graphic3d_Vec2d PointTo; //!< orbit rotation end point
|
||||
|
||||
_orbitRotation() : ToStart (false), ToRotate (false) {}
|
||||
} OrbitRotation;
|
||||
|
||||
struct _viewRotation
|
||||
{
|
||||
bool ToStart; //!< start view rotation
|
||||
Graphic3d_Vec2d PointStart; //!< view rotation start point
|
||||
bool ToRotate; //!< perform view rotation
|
||||
Graphic3d_Vec2d PointTo; //!< view rotation end point
|
||||
|
||||
_viewRotation() : ToStart (false), ToRotate (false) {}
|
||||
} ViewRotation;
|
||||
|
||||
struct _zrotateParams
|
||||
{
|
||||
Graphic3d_Vec2i Point; //!< Z rotation start point
|
||||
double Angle; //!< Z rotation angle
|
||||
bool ToRotate; //!< start Z rotation
|
||||
|
||||
_zrotateParams() : Angle (0.0), ToRotate (false) {}
|
||||
} ZRotate;
|
||||
|
||||
public:
|
||||
|
||||
AIS_ViewInputBuffer()
|
||||
: IsNewGesture (false) {}
|
||||
|
||||
//! Reset events buffer.
|
||||
void Reset()
|
||||
{
|
||||
Orientation.ToFitAll = false;
|
||||
Orientation.ToSetViewOrient = false;
|
||||
MoveTo.ToHilight = false;
|
||||
Selection.ToApplyTool = false;
|
||||
IsNewGesture = false;
|
||||
ZoomActions.Clear();
|
||||
Panning.ToStart = false;
|
||||
Panning.ToPan = false;
|
||||
Dragging.ToStart = false;
|
||||
Dragging.ToStop = false;
|
||||
Dragging.ToAbort = false;
|
||||
OrbitRotation.ToStart = false;
|
||||
OrbitRotation.ToRotate = false;
|
||||
ViewRotation.ToStart = false;
|
||||
ViewRotation.ToRotate = false;
|
||||
ZRotate.ToRotate = false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // _AIS_ViewInputBuffer_HeaderFile
|
@@ -1,115 +0,0 @@
|
||||
// Copyright (c) 2019 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 _AIS_WalkDelta_HeaderFile
|
||||
#define _AIS_WalkDelta_HeaderFile
|
||||
|
||||
#include <Standard_Real.hxx>
|
||||
|
||||
//! Walking translation components.
|
||||
enum AIS_WalkTranslation
|
||||
{
|
||||
AIS_WalkTranslation_Forward = 0, //!< translation delta, Forward walk
|
||||
AIS_WalkTranslation_Side, //!< translation delta, Side walk
|
||||
AIS_WalkTranslation_Up, //!< translation delta, Up walk
|
||||
};
|
||||
|
||||
//! Walking rotation components.
|
||||
enum AIS_WalkRotation
|
||||
{
|
||||
AIS_WalkRotation_Yaw = 0, //!< yaw rotation angle
|
||||
AIS_WalkRotation_Pitch, //!< pitch rotation angle
|
||||
AIS_WalkRotation_Roll, //!< roll rotation angle
|
||||
};
|
||||
|
||||
//! Walking value.
|
||||
struct AIS_WalkPart
|
||||
{
|
||||
Standard_Real Value; //!< value
|
||||
Standard_Real Pressure; //!< key pressure
|
||||
Standard_Real Duration; //!< duration
|
||||
|
||||
//! Return TRUE if delta is empty.
|
||||
bool IsEmpty() const { return Abs (Value) <= RealSmall(); }
|
||||
|
||||
//! Empty constructor.
|
||||
AIS_WalkPart() : Value (0.0), Pressure (1.0), Duration (0.0) {}
|
||||
};
|
||||
|
||||
//! Walking values.
|
||||
struct AIS_WalkDelta
|
||||
{
|
||||
//! Empty constructor.
|
||||
AIS_WalkDelta()
|
||||
: myIsJumping (false), myIsCrouching (false), myIsRunning (false) {}
|
||||
|
||||
//! Return translation component.
|
||||
const AIS_WalkPart& operator[] (AIS_WalkTranslation thePart) const { return myTranslation[thePart]; }
|
||||
|
||||
//! Return translation component.
|
||||
AIS_WalkPart& operator[] (AIS_WalkTranslation thePart) { return myTranslation[thePart]; }
|
||||
|
||||
//! Return rotation component.
|
||||
const AIS_WalkPart& operator[] (AIS_WalkRotation thePart) const { return myRotation[thePart]; }
|
||||
|
||||
//! Return rotation component.
|
||||
AIS_WalkPart& operator[] (AIS_WalkRotation thePart) { return myRotation[thePart]; }
|
||||
|
||||
//! Return jumping state.
|
||||
bool IsJumping() const { return myIsJumping; }
|
||||
|
||||
//! Set jumping state.
|
||||
void SetJumping (bool theIsJumping) { myIsJumping = theIsJumping; }
|
||||
|
||||
//! Return crouching state.
|
||||
bool IsCrouching() const { return myIsCrouching; }
|
||||
|
||||
//! Set crouching state.
|
||||
void SetCrouching (bool theIsCrouching) { myIsCrouching = theIsCrouching; }
|
||||
|
||||
//! Return running state.
|
||||
bool IsRunning() const { return myIsRunning; }
|
||||
|
||||
//! Set running state.
|
||||
void SetRunning (bool theIsRunning) { myIsRunning = theIsRunning; }
|
||||
|
||||
//! Return TRUE when both Rotation and Translation deltas are empty.
|
||||
bool IsEmpty() const { return !ToMove() && !ToRotate(); }
|
||||
|
||||
//! Return TRUE if translation delta is defined.
|
||||
bool ToMove() const
|
||||
{
|
||||
return !myTranslation[AIS_WalkTranslation_Forward].IsEmpty()
|
||||
|| !myTranslation[AIS_WalkTranslation_Side].IsEmpty()
|
||||
|| !myTranslation[AIS_WalkTranslation_Up].IsEmpty();
|
||||
}
|
||||
|
||||
//! Return TRUE if rotation delta is defined.
|
||||
bool ToRotate() const
|
||||
{
|
||||
return !myRotation[AIS_WalkRotation_Yaw].IsEmpty()
|
||||
|| !myRotation[AIS_WalkRotation_Pitch].IsEmpty()
|
||||
|| !myRotation[AIS_WalkRotation_Roll].IsEmpty();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
AIS_WalkPart myTranslation[3];
|
||||
AIS_WalkPart myRotation[3];
|
||||
bool myIsJumping;
|
||||
bool myIsCrouching;
|
||||
bool myIsRunning;
|
||||
|
||||
};
|
||||
|
||||
#endif // _AIS_WalkDelta_HeaderFile
|
@@ -56,7 +56,6 @@ AIS_DimensionSelectionMode.hxx
|
||||
AIS_DisplayMode.hxx
|
||||
AIS_DisplaySpecialSymbol.hxx
|
||||
AIS_DisplayStatus.hxx
|
||||
AIS_DragAction.hxx
|
||||
AIS_EllipseRadiusDimension.cxx
|
||||
AIS_EllipseRadiusDimension.hxx
|
||||
AIS_EqualDistanceRelation.cxx
|
||||
@@ -107,7 +106,6 @@ AIS_MaxRadiusDimension.cxx
|
||||
AIS_MaxRadiusDimension.hxx
|
||||
AIS_MediaPlayer.cxx
|
||||
AIS_MediaPlayer.hxx
|
||||
AIS_MouseGesture.hxx
|
||||
AIS_MidPointRelation.cxx
|
||||
AIS_MidPointRelation.hxx
|
||||
AIS_MidPointRelation.lxx
|
||||
@@ -116,7 +114,6 @@ AIS_MinRadiusDimension.hxx
|
||||
AIS_MultipleConnectedInteractive.cxx
|
||||
AIS_MultipleConnectedInteractive.hxx
|
||||
AIS_MultipleConnectedInteractive.lxx
|
||||
AIS_NavigationMode.hxx
|
||||
AIS_NListOfEntityOwner.hxx
|
||||
AIS_OffsetDimension.cxx
|
||||
AIS_OffsetDimension.hxx
|
||||
@@ -138,7 +135,6 @@ AIS_RadiusDimension.cxx
|
||||
AIS_RadiusDimension.hxx
|
||||
AIS_Relation.cxx
|
||||
AIS_Relation.hxx
|
||||
AIS_RotationMode.hxx
|
||||
AIS_RubberBand.hxx
|
||||
AIS_RubberBand.cxx
|
||||
AIS_Selection.cxx
|
||||
@@ -179,7 +175,3 @@ AIS_TypeOfAxis.hxx
|
||||
AIS_TypeOfDist.hxx
|
||||
AIS_TypeOfIso.hxx
|
||||
AIS_TypeOfPlane.hxx
|
||||
AIS_ViewController.cxx
|
||||
AIS_ViewController.hxx
|
||||
AIS_ViewInputBuffer.hxx
|
||||
AIS_WalkDelta.hxx
|
||||
|
@@ -458,7 +458,7 @@ GeomAbs_CurveType Adaptor2d_OffsetCurve::GetType() const {
|
||||
return GeomAbs_Circle;
|
||||
|
||||
default:
|
||||
return GeomAbs_OffsetCurve;
|
||||
return GeomAbs_OtherCurve;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -650,34 +650,3 @@ Handle(Geom2d_BSplineCurve) Adaptor2d_OffsetCurve::BSpline() const
|
||||
"Adaptor2d_OffsetCurve::BSpline() - wrong curve type");
|
||||
return myCurve->BSpline();
|
||||
}
|
||||
|
||||
static Standard_Integer nbPoints(const Handle(Adaptor2d_HCurve2d)& theCurve)
|
||||
{
|
||||
|
||||
Standard_Integer nbs = 20;
|
||||
|
||||
if (theCurve->GetType() == GeomAbs_Line)
|
||||
nbs = 2;
|
||||
else if (theCurve->GetType() == GeomAbs_BezierCurve)
|
||||
{
|
||||
nbs = 3 + theCurve->NbPoles();
|
||||
}
|
||||
else if (theCurve->GetType() == GeomAbs_BSplineCurve) {
|
||||
nbs = theCurve->NbKnots();
|
||||
nbs *= theCurve->Degree();
|
||||
}
|
||||
|
||||
if (nbs > 200)
|
||||
nbs = 200;
|
||||
return nbs;
|
||||
|
||||
}
|
||||
//=======================================================================
|
||||
//function : NbSamples
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
Standard_Integer Adaptor2d_OffsetCurve::NbSamples() const
|
||||
{
|
||||
return nbPoints(myCurve);
|
||||
}
|
||||
|
@@ -174,7 +174,6 @@ public:
|
||||
|
||||
Standard_EXPORT Handle(Geom2d_BSplineCurve) BSpline() const Standard_OVERRIDE;
|
||||
|
||||
Standard_EXPORT Standard_Integer NbSamples() const Standard_OVERRIDE;
|
||||
|
||||
|
||||
|
||||
|
@@ -954,10 +954,6 @@ Standard_Boolean Adaptor3d_CurveOnSurface::IsClosed() const
|
||||
|
||||
Standard_Boolean Adaptor3d_CurveOnSurface::IsPeriodic() const
|
||||
{
|
||||
if (myType == GeomAbs_Circle ||
|
||||
myType == GeomAbs_Ellipse)
|
||||
return Standard_True;
|
||||
|
||||
return myCurve->IsPeriodic();
|
||||
}
|
||||
|
||||
@@ -968,10 +964,6 @@ Standard_Boolean Adaptor3d_CurveOnSurface::IsPeriodic() const
|
||||
|
||||
Standard_Real Adaptor3d_CurveOnSurface::Period() const
|
||||
{
|
||||
if (myType == GeomAbs_Circle ||
|
||||
myType == GeomAbs_Ellipse)
|
||||
return (2.*M_PI);
|
||||
|
||||
return myCurve->Period();
|
||||
}
|
||||
|
||||
|
@@ -117,12 +117,6 @@ public:
|
||||
//! changes the first and the last constraint points.
|
||||
Standard_EXPORT void SetConstraints (const AppParCurves_Constraint firstC, const AppParCurves_Constraint lastC);
|
||||
|
||||
//! Sets periodic flag.
|
||||
//! If thePeriodic = Standard_True, algorith tries to build periodic
|
||||
//! multicurve using corresponding C1 boundary condition for first and last multipoints.
|
||||
//! Multiline must be closed.
|
||||
Standard_EXPORT void SetPeriodic(const Standard_Boolean thePeriodic);
|
||||
|
||||
//! returns False if at a moment of the approximation,
|
||||
//! the status NoApproximation has been sent by the user
|
||||
//! when more points were needed.
|
||||
@@ -205,7 +199,6 @@ private:
|
||||
Standard_Integer mycont;
|
||||
Standard_Real mylambda1;
|
||||
Standard_Real mylambda2;
|
||||
Standard_Boolean myPeriodic;
|
||||
|
||||
|
||||
};
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -25,8 +25,6 @@
|
||||
#include <Approx_Status.hxx>
|
||||
#include <Precision.hxx>
|
||||
|
||||
const static Standard_Integer MAXSEGM = 1000;
|
||||
|
||||
//=======================================================================
|
||||
//function : Approx_ComputeCLine
|
||||
//purpose : The MultiLine <Line> will be approximated until tolerances
|
||||
@@ -52,8 +50,7 @@ const AppParCurves_Constraint LastC)
|
||||
mycut = cutting;
|
||||
myfirstC = FirstC;
|
||||
mylastC = LastC;
|
||||
myMaxSegments = MAXSEGM;
|
||||
myInvOrder = Standard_True;
|
||||
myMaxSegments = IntegerLast();
|
||||
alldone = Standard_False;
|
||||
Perform(Line);
|
||||
}
|
||||
@@ -80,8 +77,7 @@ const AppParCurves_Constraint LastC)
|
||||
mycut = cutting;
|
||||
myfirstC = FirstC;
|
||||
mylastC = LastC;
|
||||
myMaxSegments = MAXSEGM;
|
||||
myInvOrder = Standard_True;
|
||||
myMaxSegments = IntegerLast();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -248,117 +244,33 @@ Standard_Boolean Approx_ComputeCLine::Compute(const MultiLine& Line,
|
||||
{
|
||||
|
||||
|
||||
const Standard_Integer NbPointsMax = 24;
|
||||
const Standard_Real aMinRatio = 0.05;
|
||||
const Standard_Integer aMaxDeg = 8;
|
||||
//
|
||||
Standard_Integer deg, NbPoints;
|
||||
Standard_Integer deg, NbPoints = 24;
|
||||
Standard_Boolean mydone;
|
||||
Standard_Real Fv;
|
||||
|
||||
AppParCurves_MultiCurve aPrevCurve;
|
||||
Standard_Real aPrevTol3d = RealLast(), aPrevTol2d = RealLast();
|
||||
Standard_Boolean aPrevIsOk = Standard_False;
|
||||
Standard_Boolean anInvOrder = myInvOrder;
|
||||
if (anInvOrder && mydegremax > aMaxDeg)
|
||||
{
|
||||
if ((Ulast - Ufirst) / (Line.LastParameter() - Line.FirstParameter()) < aMinRatio)
|
||||
{
|
||||
anInvOrder = Standard_False;
|
||||
}
|
||||
}
|
||||
if (anInvOrder)
|
||||
{
|
||||
for (deg = mydegremax; deg >= mydegremin; deg--) {
|
||||
NbPoints = Min(2 * deg + 1, NbPointsMax);
|
||||
AppCont_LeastSquare LSquare(Line, Ufirst, Ulast, myfirstC, mylastC, deg, NbPoints);
|
||||
mydone = LSquare.IsDone();
|
||||
if (mydone)
|
||||
{
|
||||
LSquare.Error(Fv, TheTol3d, TheTol2d);
|
||||
if (TheTol3d <= mytol3d && TheTol2d <= mytol2d)
|
||||
{
|
||||
if (deg == mydegremin)
|
||||
{
|
||||
// Stockage de la multicurve approximee.
|
||||
tolreached = Standard_True;
|
||||
myMultiCurves.Append(LSquare.Value());
|
||||
myfirstparam.Append(Ufirst);
|
||||
mylastparam.Append(Ulast);
|
||||
Tolers3d.Append(TheTol3d);
|
||||
Tolers2d.Append(TheTol2d);
|
||||
return Standard_True;
|
||||
}
|
||||
aPrevTol3d = TheTol3d;
|
||||
aPrevTol2d = TheTol2d;
|
||||
aPrevCurve = LSquare.Value();
|
||||
aPrevIsOk = Standard_True;
|
||||
continue;
|
||||
}
|
||||
else if (aPrevIsOk)
|
||||
{
|
||||
// Stockage de la multicurve approximee.
|
||||
tolreached = Standard_True;
|
||||
TheTol3d = aPrevTol3d;
|
||||
TheTol2d = aPrevTol2d;
|
||||
myMultiCurves.Append(aPrevCurve);
|
||||
myfirstparam.Append(Ufirst);
|
||||
mylastparam.Append(Ulast);
|
||||
Tolers3d.Append(aPrevTol3d);
|
||||
Tolers2d.Append(aPrevTol2d);
|
||||
return Standard_True;
|
||||
}
|
||||
}
|
||||
else if (aPrevIsOk)
|
||||
{
|
||||
for (deg = mydegremin; deg <= mydegremax; deg++) {
|
||||
|
||||
AppCont_LeastSquare LSquare(Line, Ufirst, Ulast, myfirstC, mylastC, deg, NbPoints);
|
||||
mydone = LSquare.IsDone();
|
||||
if (mydone) {
|
||||
LSquare.Error(Fv, TheTol3d, TheTol2d);
|
||||
if (TheTol3d <= mytol3d && TheTol2d <= mytol2d) {
|
||||
// Stockage de la multicurve approximee.
|
||||
tolreached = Standard_True;
|
||||
TheTol3d = aPrevTol3d;
|
||||
TheTol2d = aPrevTol2d;
|
||||
myMultiCurves.Append(aPrevCurve);
|
||||
myMultiCurves.Append(LSquare.Value());
|
||||
myfirstparam.Append(Ufirst);
|
||||
mylastparam.Append(Ulast);
|
||||
Tolers3d.Append(aPrevTol3d);
|
||||
Tolers2d.Append(aPrevTol2d);
|
||||
Tolers3d.Append(TheTol3d);
|
||||
Tolers2d.Append(TheTol2d);
|
||||
return Standard_True;
|
||||
}
|
||||
if (!aPrevIsOk && deg == mydegremax)
|
||||
{
|
||||
TheMultiCurve = LSquare.Value();
|
||||
currenttol3d = TheTol3d;
|
||||
currenttol2d = TheTol2d;
|
||||
aPrevTol3d = TheTol3d;
|
||||
aPrevTol2d = TheTol2d;
|
||||
aPrevCurve = TheMultiCurve;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (deg = mydegremin; deg <= mydegremax; deg++) {
|
||||
NbPoints = Min(2 * deg + 1, NbPointsMax);
|
||||
AppCont_LeastSquare LSquare(Line, Ufirst, Ulast, myfirstC, mylastC, deg, NbPoints);
|
||||
mydone = LSquare.IsDone();
|
||||
if (mydone) {
|
||||
LSquare.Error(Fv, TheTol3d, TheTol2d);
|
||||
if (TheTol3d <= mytol3d && TheTol2d <= mytol2d) {
|
||||
// Stockage de la multicurve approximee.
|
||||
tolreached = Standard_True;
|
||||
myMultiCurves.Append(LSquare.Value());
|
||||
myfirstparam.Append(Ufirst);
|
||||
mylastparam.Append(Ulast);
|
||||
Tolers3d.Append(TheTol3d);
|
||||
Tolers2d.Append(TheTol2d);
|
||||
return Standard_True;
|
||||
}
|
||||
}
|
||||
if (deg == mydegremax) {
|
||||
TheMultiCurve = LSquare.Value();
|
||||
currenttol3d = TheTol3d;
|
||||
currenttol2d = TheTol2d;
|
||||
}
|
||||
if (deg == mydegremax) {
|
||||
TheMultiCurve = LSquare.Value();
|
||||
currenttol3d = TheTol3d;
|
||||
currenttol2d = TheTol2d;
|
||||
}
|
||||
|
||||
}
|
||||
return Standard_False;
|
||||
}
|
||||
@@ -423,15 +335,6 @@ void Approx_ComputeCLine::SetMaxSegments(const Standard_Integer theMaxSegments)
|
||||
myMaxSegments = theMaxSegments;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetInvOrder
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void Approx_ComputeCLine::SetInvOrder(const Standard_Boolean theInvOrder)
|
||||
{
|
||||
myInvOrder = theInvOrder;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : IsAllApproximated
|
||||
//purpose : returns False if at a moment of the approximation,
|
||||
|
@@ -64,12 +64,6 @@ public:
|
||||
//! Changes the max number of segments, which is allowed for cutting.
|
||||
Standard_EXPORT void SetMaxSegments (const Standard_Integer theMaxSegments);
|
||||
|
||||
//! Set inverse order of degree selection:
|
||||
//! if theInvOrdr = true, current degree is chosen by inverse order -
|
||||
//! from maxdegree to mindegree.
|
||||
//! By default inverse order is used.
|
||||
Standard_EXPORT void SetInvOrder(const Standard_Boolean theInvOrder);
|
||||
|
||||
//! returns False if at a moment of the approximation,
|
||||
//! the status NoApproximation has been sent by the user
|
||||
//! when more points were needed.
|
||||
@@ -124,7 +118,6 @@ private:
|
||||
AppParCurves_Constraint myfirstC;
|
||||
AppParCurves_Constraint mylastC;
|
||||
Standard_Integer myMaxSegments;
|
||||
Standard_Boolean myInvOrder;
|
||||
|
||||
|
||||
};
|
||||
|
@@ -64,12 +64,6 @@ public:
|
||||
//! Changes the max number of segments, which is allowed for cutting.
|
||||
Standard_EXPORT void SetMaxSegments (const Standard_Integer theMaxSegments);
|
||||
|
||||
//! Set inverse order of degree selection:
|
||||
//! if theInvOrdr = true, current degree is chosen by inverse order -
|
||||
//! from maxdegree to mindegree.
|
||||
//! By default inverse order is used.
|
||||
Standard_EXPORT void SetInvOrder(const Standard_Boolean theInvOrder);
|
||||
|
||||
//! returns False if at a moment of the approximation,
|
||||
//! the status NoApproximation has been sent by the user
|
||||
//! when more points were needed.
|
||||
@@ -124,7 +118,7 @@ private:
|
||||
AppParCurves_Constraint myfirstC;
|
||||
AppParCurves_Constraint mylastC;
|
||||
Standard_Integer myMaxSegments;
|
||||
Standard_Boolean myInvOrder;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
@@ -1,59 +0,0 @@
|
||||
// Copyright (c) 2019 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 _Aspect_ScrollDelta_HeaderFile
|
||||
#define _Aspect_ScrollDelta_HeaderFile
|
||||
|
||||
#include <Aspect_VKeyFlags.hxx>
|
||||
#include <NCollection_Vec2.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
|
||||
//! Parameters for mouse scroll action.
|
||||
struct Aspect_ScrollDelta
|
||||
{
|
||||
|
||||
NCollection_Vec2<int> Point; //!< scale position
|
||||
Standard_Real Delta; //!< delta in pixels
|
||||
Aspect_VKeyFlags Flags; //!< key flags
|
||||
|
||||
//! Return true if action has point defined.
|
||||
bool HasPoint() const
|
||||
{
|
||||
return Point.x() >= 0
|
||||
&& Point.y() >= 0;
|
||||
}
|
||||
|
||||
//! Reset at point.
|
||||
void ResetPoint()
|
||||
{
|
||||
Point.SetValues (-1, -1);
|
||||
}
|
||||
|
||||
//! Empty constructor.
|
||||
Aspect_ScrollDelta()
|
||||
: Point (-1, -1), Delta (0.0), Flags (Aspect_VKeyFlags_NONE) {}
|
||||
|
||||
//! Constructor.
|
||||
Aspect_ScrollDelta (const NCollection_Vec2<int>& thePnt,
|
||||
Standard_Real theValue,
|
||||
Aspect_VKeyFlags theFlags = Aspect_VKeyFlags_NONE)
|
||||
: Point (thePnt), Delta (theValue), Flags (theFlags) {}
|
||||
|
||||
//! Constructor with undefined point.
|
||||
Aspect_ScrollDelta (Standard_Real theValue,
|
||||
Aspect_VKeyFlags theFlags = Aspect_VKeyFlags_NONE)
|
||||
: Point (-1, -1), Delta (theValue), Flags (theFlags) {}
|
||||
|
||||
};
|
||||
|
||||
#endif // _Aspect_ScrollDelta_HeaderFile
|
@@ -1,49 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 _Aspect_Touch_HeaderFile
|
||||
#define _Aspect_Touch_HeaderFile
|
||||
|
||||
#include <NCollection_Vec2.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
|
||||
//! Structure holding touch position - original and current location.
|
||||
class Aspect_Touch
|
||||
{
|
||||
public:
|
||||
|
||||
NCollection_Vec2<Standard_Real> From; //!< original touch position
|
||||
NCollection_Vec2<Standard_Real> To; //!< current touch position
|
||||
Standard_Boolean IsPreciseDevice; //!< precise device input (e.g. mouse cursor, NOT emulated from touch screen)
|
||||
|
||||
//! Return values delta.
|
||||
NCollection_Vec2<Standard_Real> Delta() const { return To - From; }
|
||||
|
||||
//! Empty constructor
|
||||
Aspect_Touch()
|
||||
: From (0.0, 0.0), To (0.0, 0.0), IsPreciseDevice (false) {}
|
||||
|
||||
//! Constructor with initialization.
|
||||
Aspect_Touch (const NCollection_Vec2<Standard_Real>& thePnt,
|
||||
Standard_Boolean theIsPreciseDevice)
|
||||
: From (thePnt), To (thePnt), IsPreciseDevice (theIsPreciseDevice) {}
|
||||
|
||||
//! Constructor with initialization.
|
||||
Aspect_Touch (Standard_Real theX, Standard_Real theY,
|
||||
Standard_Boolean theIsPreciseDevice)
|
||||
: From (theX, theY), To (theX, theY), IsPreciseDevice (theIsPreciseDevice) {}
|
||||
|
||||
};
|
||||
|
||||
#endif // _Aspect_Touch_HeaderFile
|
@@ -1,199 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 _Aspect_VKey_HeaderFile
|
||||
#define _Aspect_VKey_HeaderFile
|
||||
|
||||
#include <Aspect_VKeyFlags.hxx>
|
||||
|
||||
//! Define virtual key as integer number to allow extensions.
|
||||
typedef unsigned int Aspect_VKey;
|
||||
|
||||
//! Enumeration defining virtual keys irrelevant to current keyboard layout for simplified hot-keys management logic.
|
||||
enum Aspect_VKeyBasic
|
||||
{
|
||||
Aspect_VKey_UNKNOWN = 0,
|
||||
|
||||
// main latin alphabet keys
|
||||
Aspect_VKey_A = 1,
|
||||
Aspect_VKey_B,
|
||||
Aspect_VKey_C,
|
||||
Aspect_VKey_D,
|
||||
Aspect_VKey_E,
|
||||
Aspect_VKey_F,
|
||||
Aspect_VKey_G,
|
||||
Aspect_VKey_H,
|
||||
Aspect_VKey_I,
|
||||
Aspect_VKey_J,
|
||||
Aspect_VKey_K,
|
||||
Aspect_VKey_L,
|
||||
Aspect_VKey_M,
|
||||
Aspect_VKey_N,
|
||||
Aspect_VKey_O,
|
||||
Aspect_VKey_P,
|
||||
Aspect_VKey_Q,
|
||||
Aspect_VKey_R,
|
||||
Aspect_VKey_S,
|
||||
Aspect_VKey_T,
|
||||
Aspect_VKey_U,
|
||||
Aspect_VKey_V,
|
||||
Aspect_VKey_W,
|
||||
Aspect_VKey_X,
|
||||
Aspect_VKey_Y,
|
||||
Aspect_VKey_Z,
|
||||
|
||||
Aspect_VKey_0,
|
||||
Aspect_VKey_1,
|
||||
Aspect_VKey_2,
|
||||
Aspect_VKey_3,
|
||||
Aspect_VKey_4,
|
||||
Aspect_VKey_5,
|
||||
Aspect_VKey_6,
|
||||
Aspect_VKey_7,
|
||||
Aspect_VKey_8,
|
||||
Aspect_VKey_9,
|
||||
|
||||
Aspect_VKey_F1,
|
||||
Aspect_VKey_F2,
|
||||
Aspect_VKey_F3,
|
||||
Aspect_VKey_F4,
|
||||
Aspect_VKey_F5,
|
||||
Aspect_VKey_F6,
|
||||
Aspect_VKey_F7,
|
||||
Aspect_VKey_F8,
|
||||
Aspect_VKey_F9,
|
||||
Aspect_VKey_F10,
|
||||
Aspect_VKey_F11,
|
||||
Aspect_VKey_F12,
|
||||
|
||||
// standard keys
|
||||
Aspect_VKey_Up,
|
||||
Aspect_VKey_Down,
|
||||
Aspect_VKey_Left,
|
||||
Aspect_VKey_Right,
|
||||
Aspect_VKey_Plus, //!< '+'
|
||||
Aspect_VKey_Minus, //!< '-'
|
||||
Aspect_VKey_Equal, //!< '=+'
|
||||
Aspect_VKey_PageUp,
|
||||
Aspect_VKey_PageDown,
|
||||
Aspect_VKey_Home,
|
||||
Aspect_VKey_End,
|
||||
Aspect_VKey_Escape,
|
||||
Aspect_VKey_Back,
|
||||
Aspect_VKey_Enter,
|
||||
Aspect_VKey_Backspace,
|
||||
Aspect_VKey_Space,
|
||||
Aspect_VKey_Delete,
|
||||
Aspect_VKey_Tilde,
|
||||
Aspect_VKey_Tab,
|
||||
Aspect_VKey_Comma, //!< ','
|
||||
Aspect_VKey_Period, //!< '.'
|
||||
Aspect_VKey_Semicolon, //!< ';:'
|
||||
Aspect_VKey_Slash, //!< '/?'
|
||||
Aspect_VKey_BracketLeft, //!< '[{'
|
||||
Aspect_VKey_Backslash, //!< '\|'
|
||||
Aspect_VKey_BracketRight, //!< ']}'
|
||||
Aspect_VKey_Apostrophe, //!< ''"'
|
||||
Aspect_VKey_Numlock, //!< Num Lock key
|
||||
Aspect_VKey_Scroll, //!< Scroll Lock key
|
||||
|
||||
// numpad keys
|
||||
Aspect_VKey_Numpad0,
|
||||
Aspect_VKey_Numpad1,
|
||||
Aspect_VKey_Numpad2,
|
||||
Aspect_VKey_Numpad3,
|
||||
Aspect_VKey_Numpad4,
|
||||
Aspect_VKey_Numpad5,
|
||||
Aspect_VKey_Numpad6,
|
||||
Aspect_VKey_Numpad7,
|
||||
Aspect_VKey_Numpad8,
|
||||
Aspect_VKey_Numpad9,
|
||||
Aspect_VKey_NumpadMultiply, //!< numpad '*'
|
||||
Aspect_VKey_NumpadAdd, //!< numpad '+'
|
||||
Aspect_VKey_NumpadSubtract, //!< numpad '-'
|
||||
Aspect_VKey_NumpadDivide, //!< numpad '/'
|
||||
|
||||
// Multimedia keys
|
||||
Aspect_VKey_MediaNextTrack,
|
||||
Aspect_VKey_MediaPreviousTrack,
|
||||
Aspect_VKey_MediaStop,
|
||||
Aspect_VKey_MediaPlayPause,
|
||||
Aspect_VKey_VolumeMute,
|
||||
Aspect_VKey_VolumeDown,
|
||||
Aspect_VKey_VolumeUp,
|
||||
Aspect_VKey_BrowserBack,
|
||||
Aspect_VKey_BrowserForward,
|
||||
Aspect_VKey_BrowserRefresh,
|
||||
Aspect_VKey_BrowserStop,
|
||||
Aspect_VKey_BrowserSearch,
|
||||
Aspect_VKey_BrowserFavorites,
|
||||
Aspect_VKey_BrowserHome,
|
||||
|
||||
// modifier keys, @sa Aspect_VKey_ModifiersLower and Aspect_VKey_ModifiersUpper below
|
||||
Aspect_VKey_Shift,
|
||||
Aspect_VKey_Control,
|
||||
Aspect_VKey_Alt,
|
||||
Aspect_VKey_Menu,
|
||||
Aspect_VKey_Meta,
|
||||
|
||||
// virtual navigation keys, @sa Aspect_VKey_NavigationKeysLower and Aspect_VKey_NavigationKeysUpper below
|
||||
Aspect_VKey_NavInteract, //!< interact
|
||||
Aspect_VKey_NavForward, //!< go forward
|
||||
Aspect_VKey_NavBackward, //!< go backward
|
||||
Aspect_VKey_NavSlideLeft, //!< sidewalk, left
|
||||
Aspect_VKey_NavSlideRight, //!< sidewalk, right
|
||||
Aspect_VKey_NavSlideUp, //!< lift up
|
||||
Aspect_VKey_NavSlideDown, //!< fall down
|
||||
Aspect_VKey_NavRollCCW, //!< bank left (roll counter-clockwise)
|
||||
Aspect_VKey_NavRollCW, //!< bank right (roll clockwise)
|
||||
Aspect_VKey_NavLookLeft, //!< look left (yaw counter-clockwise)
|
||||
Aspect_VKey_NavLookRight, //!< look right (yaw clockwise)
|
||||
Aspect_VKey_NavLookUp, //!< look up (pitch clockwise)
|
||||
Aspect_VKey_NavLookDown, //!< look down (pitch counter-clockwise)
|
||||
Aspect_VKey_NavCrouch, //!< crouch walking
|
||||
Aspect_VKey_NavJump, //!< jump
|
||||
Aspect_VKey_NavThrustForward, //!< increase continuous velocity in forward direction
|
||||
Aspect_VKey_NavThrustBackward, //!< increase continuous velocity in reversed direction
|
||||
Aspect_VKey_NavThrustStop, //!< reset continuous velocity
|
||||
Aspect_VKey_NavSpeedIncrease, //!< increase navigation speed
|
||||
Aspect_VKey_NavSpeedDecrease, //!< decrease navigation speed
|
||||
};
|
||||
|
||||
//! Auxiliary ranges.
|
||||
enum
|
||||
{
|
||||
Aspect_VKey_Lower = 0,
|
||||
Aspect_VKey_ModifiersLower = Aspect_VKey_Shift,
|
||||
Aspect_VKey_ModifiersUpper = Aspect_VKey_Meta,
|
||||
Aspect_VKey_NavigationKeysLower = Aspect_VKey_NavInteract,
|
||||
Aspect_VKey_NavigationKeysUpper = Aspect_VKey_NavSpeedDecrease,
|
||||
Aspect_VKey_Upper = Aspect_VKey_NavSpeedDecrease,
|
||||
Aspect_VKey_NB = Aspect_VKey_Upper - Aspect_VKey_Lower + 1,
|
||||
Aspect_VKey_MAX = 255
|
||||
};
|
||||
|
||||
//! Return modifier flags for specified modifier key.
|
||||
inline Aspect_VKeyFlags Aspect_VKey2Modifier (Aspect_VKey theKey)
|
||||
{
|
||||
switch (theKey)
|
||||
{
|
||||
case Aspect_VKey_Shift: return Aspect_VKeyFlags_SHIFT;
|
||||
case Aspect_VKey_Control: return Aspect_VKeyFlags_CTRL;
|
||||
case Aspect_VKey_Alt: return Aspect_VKeyFlags_ALT;
|
||||
case Aspect_VKey_Menu: return Aspect_VKeyFlags_MENU;
|
||||
case Aspect_VKey_Meta: return Aspect_VKeyFlags_META;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // _Aspect_VKey_HeaderFile
|
@@ -1,49 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 _Aspect_VKeyFlags_HeaderFile
|
||||
#define _Aspect_VKeyFlags_HeaderFile
|
||||
|
||||
//! Key modifier, for combining with general key from Aspect_VKey.
|
||||
typedef unsigned int Aspect_VKeyFlags;
|
||||
|
||||
//! Key modifier, for combining with general key from Aspect_VKey.
|
||||
enum
|
||||
{
|
||||
Aspect_VKeyFlags_NONE = 0,
|
||||
// reserve first 8 bits to combine value with Aspect_VKey
|
||||
Aspect_VKeyFlags_SHIFT = 1 << 8, //!< Aspect_VKey_Shift
|
||||
Aspect_VKeyFlags_CTRL = 1 << 9, //!< Aspect_VKey_Control
|
||||
Aspect_VKeyFlags_ALT = 1 << 10, //!< Aspect_VKey_Alt
|
||||
Aspect_VKeyFlags_MENU = 1 << 11, //!< Aspect_VKey_Menu
|
||||
Aspect_VKeyFlags_META = 1 << 12, //!< Aspect_VKey_Meta
|
||||
|
||||
Aspect_VKeyFlags_ALL = Aspect_VKeyFlags_SHIFT | Aspect_VKeyFlags_CTRL | Aspect_VKeyFlags_ALT | Aspect_VKeyFlags_MENU | Aspect_VKeyFlags_META
|
||||
};
|
||||
|
||||
//! Mouse buttons, for combining with Aspect_VKey and Aspect_VKeyFlags.
|
||||
typedef unsigned int Aspect_VKeyMouse;
|
||||
|
||||
//! Mouse button bitmask
|
||||
enum
|
||||
{
|
||||
Aspect_VKeyMouse_NONE = 0, //!< no buttons
|
||||
|
||||
Aspect_VKeyMouse_LeftButton = 1 << 13, //!< mouse left button
|
||||
Aspect_VKeyMouse_MiddleButton = 1 << 14, //!< mouse middle button (scroll)
|
||||
Aspect_VKeyMouse_RightButton = 1 << 15, //!< mouse right button
|
||||
|
||||
Aspect_VKeyMouse_MainButtons = Aspect_VKeyMouse_LeftButton | Aspect_VKeyMouse_MiddleButton | Aspect_VKeyMouse_RightButton
|
||||
};
|
||||
|
||||
#endif // _Aspect_VKeyFlags_HeaderFile
|
@@ -1,150 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 "Aspect_VKeySet.hxx"
|
||||
|
||||
IMPLEMENT_STANDARD_RTTIEXT(Aspect_VKeySet, Standard_Transient)
|
||||
|
||||
// ================================================================
|
||||
// Function : As1pect_VKeySet
|
||||
// Purpose :
|
||||
// ================================================================
|
||||
Aspect_VKeySet::Aspect_VKeySet()
|
||||
: myKeys (0, Aspect_VKey_MAX),
|
||||
myModifiers (Aspect_VKeyFlags_NONE)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Function : Reset
|
||||
// Purpose :
|
||||
// ================================================================
|
||||
void Aspect_VKeySet::Reset()
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
myModifiers = 0;
|
||||
for (NCollection_Array1<KeyState>::Iterator aKeyIter (myKeys); aKeyIter.More(); aKeyIter.Next())
|
||||
{
|
||||
aKeyIter.ChangeValue().Reset();
|
||||
}
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Function : KeyDown
|
||||
// Purpose :
|
||||
// ================================================================
|
||||
void Aspect_VKeySet::KeyDown (Aspect_VKey theKey,
|
||||
double theTime,
|
||||
double thePressure)
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
if (myKeys[theKey].Status != KeyStatus_Pressed)
|
||||
{
|
||||
myKeys[theKey].Status = KeyStatus_Pressed;
|
||||
myKeys[theKey].TimeDown = theTime;
|
||||
}
|
||||
myKeys[theKey].Pressure = thePressure;
|
||||
|
||||
const unsigned int aModif = Aspect_VKey2Modifier (theKey);
|
||||
myModifiers = myModifiers | aModif;
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Function : KeyUp
|
||||
// Purpose :
|
||||
// ================================================================
|
||||
void Aspect_VKeySet::KeyUp (Aspect_VKey theKey,
|
||||
double theTime)
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
if (myKeys[theKey].Status == KeyStatus_Pressed)
|
||||
{
|
||||
myKeys[theKey].Status = KeyStatus_Released;
|
||||
myKeys[theKey].TimeUp = theTime;
|
||||
}
|
||||
|
||||
const unsigned int aModif = Aspect_VKey2Modifier (theKey);
|
||||
if (aModif != 0)
|
||||
{
|
||||
myModifiers = myModifiers & ~aModif;
|
||||
}
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Function : KeyFromAxis
|
||||
// Purpose :
|
||||
// ================================================================
|
||||
void Aspect_VKeySet::KeyFromAxis (Aspect_VKey theNegative,
|
||||
Aspect_VKey thePositive,
|
||||
double theTime,
|
||||
double thePressure)
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
if (thePressure != 0)
|
||||
{
|
||||
const Aspect_VKey aKeyDown = thePressure > 0 ? thePositive : theNegative;
|
||||
const Aspect_VKey aKeyUp = thePressure < 0 ? thePositive : theNegative;
|
||||
|
||||
KeyDown (aKeyDown, theTime, Abs (thePressure));
|
||||
if (myKeys[aKeyUp].Status == KeyStatus_Pressed)
|
||||
{
|
||||
KeyUp (aKeyUp, theTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (myKeys[theNegative].Status == KeyStatus_Pressed)
|
||||
{
|
||||
KeyUp (theNegative, theTime);
|
||||
}
|
||||
if (myKeys[thePositive].Status == KeyStatus_Pressed)
|
||||
{
|
||||
KeyUp (thePositive, theTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Function : HoldDuration
|
||||
// Purpose :
|
||||
// ================================================================
|
||||
bool Aspect_VKeySet::HoldDuration (Aspect_VKey theKey,
|
||||
double theTime,
|
||||
double& theDuration,
|
||||
double& thePressure)
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
switch (myKeys[theKey].Status)
|
||||
{
|
||||
case KeyStatus_Free:
|
||||
{
|
||||
theDuration = 0.0;
|
||||
return false;
|
||||
}
|
||||
case KeyStatus_Released:
|
||||
{
|
||||
myKeys[theKey].Status = KeyStatus_Free;
|
||||
theDuration = myKeys[theKey].TimeUp - myKeys[theKey].TimeDown;
|
||||
thePressure = myKeys[theKey].Pressure;
|
||||
return true;
|
||||
}
|
||||
case KeyStatus_Pressed:
|
||||
{
|
||||
theDuration = theTime - myKeys[theKey].TimeDown;
|
||||
thePressure = myKeys[theKey].Pressure;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
@@ -1,152 +0,0 @@
|
||||
// Copyright (c) 2016-2019 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 _Aspect_VKeySet_HeaderFile
|
||||
#define _Aspect_VKeySet_HeaderFile
|
||||
|
||||
#include <Aspect_VKey.hxx>
|
||||
|
||||
#include <NCollection_Array1.hxx>
|
||||
#include <OSD_Timer.hxx>
|
||||
#include <Standard_Mutex.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
|
||||
//! Structure defining key state.
|
||||
class Aspect_VKeySet : public Standard_Transient
|
||||
{
|
||||
DEFINE_STANDARD_RTTIEXT(Aspect_VKeySet, Standard_Transient)
|
||||
public:
|
||||
|
||||
//! Main constructor.
|
||||
Standard_EXPORT Aspect_VKeySet();
|
||||
|
||||
//! Return active modifiers.
|
||||
Aspect_VKeyFlags Modifiers() const
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
return myModifiers;
|
||||
}
|
||||
|
||||
//! Return timestamp of press event.
|
||||
double DownTime (Aspect_VKey theKey) const
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
return myKeys[theKey].TimeDown;
|
||||
}
|
||||
|
||||
//! Return timestamp of release event.
|
||||
double TimeUp (Aspect_VKey theKey) const
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
return myKeys[theKey].TimeUp;
|
||||
}
|
||||
|
||||
//! Return TRUE if key is in Free state.
|
||||
bool IsFreeKey (Aspect_VKey theKey) const
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
return myKeys[theKey].Status == KeyStatus_Free;
|
||||
}
|
||||
|
||||
//! Return TRUE if key is in Pressed state.
|
||||
bool IsKeyDown (Aspect_VKey theKey) const
|
||||
{
|
||||
Standard_Mutex::Sentry aLock (myLock);
|
||||
return myKeys[theKey].Status == KeyStatus_Pressed;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
//! Reset the key state into unpressed state.
|
||||
Standard_EXPORT void Reset();
|
||||
|
||||
//! Press key.
|
||||
//! @param theKey key pressed
|
||||
//! @param theTime event timestamp
|
||||
Standard_EXPORT void KeyDown (Aspect_VKey theKey,
|
||||
double theTime,
|
||||
double thePressure = 1.0);
|
||||
|
||||
//! Release key.
|
||||
//! @param theKey key pressed
|
||||
//! @param theTime event timestamp
|
||||
Standard_EXPORT void KeyUp (Aspect_VKey theKey,
|
||||
double theTime);
|
||||
|
||||
//! Simulate key up/down events from axis value.
|
||||
Standard_EXPORT void KeyFromAxis (Aspect_VKey theNegative,
|
||||
Aspect_VKey thePositive,
|
||||
double theTime,
|
||||
double thePressure);
|
||||
|
||||
//! Return duration of the button in pressed state.
|
||||
//! @param theKey key to check
|
||||
//! @param theTime current time (for computing duration from key down time)
|
||||
//! @param theDuration key press duration
|
||||
//! @return TRUE if key was in pressed state
|
||||
bool HoldDuration (Aspect_VKey theKey,
|
||||
double theTime,
|
||||
double& theDuration)
|
||||
{
|
||||
double aPressure = -1.0;
|
||||
return HoldDuration (theKey, theTime, theDuration, aPressure);
|
||||
}
|
||||
|
||||
//! Return duration of the button in pressed state.
|
||||
//! @param theKey key to check
|
||||
//! @param theTime current time (for computing duration from key down time)
|
||||
//! @param theDuration key press duration
|
||||
//! @param thePressure key pressure
|
||||
//! @return TRUE if key was in pressed state
|
||||
Standard_EXPORT bool HoldDuration (Aspect_VKey theKey,
|
||||
double theTime,
|
||||
double& theDuration,
|
||||
double& thePressure);
|
||||
|
||||
private:
|
||||
|
||||
//! Key state.
|
||||
enum KeyStatus
|
||||
{
|
||||
KeyStatus_Free, //!< free status
|
||||
KeyStatus_Pressed, //!< key is in pressed state
|
||||
KeyStatus_Released, //!< key has been just released (transient state before KeyStatus_Free)
|
||||
};
|
||||
|
||||
//! Structure defining key state.
|
||||
struct KeyState
|
||||
{
|
||||
KeyState() : TimeDown (0.0), TimeUp (0.0), Pressure (1.0), Status (KeyStatus_Free) {}
|
||||
void Reset()
|
||||
{
|
||||
Status = KeyStatus_Free;
|
||||
TimeDown = 0.0;
|
||||
TimeUp = 0.0;
|
||||
Pressure = 1.0;
|
||||
}
|
||||
|
||||
double TimeDown; //!< time of key press event
|
||||
double TimeUp; //!< time of key release event
|
||||
double Pressure; //!< key pressure
|
||||
KeyStatus Status; //!< key status
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
NCollection_Array1<KeyState> myKeys; //!< keys state
|
||||
mutable Standard_Mutex myLock; //!< mutex for thread-safe updates
|
||||
Aspect_VKeyFlags myModifiers; //!< active modifiers
|
||||
|
||||
};
|
||||
|
||||
#endif // _Aspect_VKeySet_HeaderFile
|
@@ -16,21 +16,28 @@
|
||||
#ifndef _Aspect_Window_HeaderFile
|
||||
#define _Aspect_Window_HeaderFile
|
||||
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
|
||||
#include <Aspect_Background.hxx>
|
||||
#include <Aspect_GradientBackground.hxx>
|
||||
#include <Aspect_FBConfig.hxx>
|
||||
#include <Aspect_FillMethod.hxx>
|
||||
#include <Standard_Boolean.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
#include <Quantity_Color.hxx>
|
||||
#include <Aspect_GradientFillMethod.hxx>
|
||||
#include <Aspect_TypeOfResize.hxx>
|
||||
#include <Standard_Integer.hxx>
|
||||
#include <Aspect_Drawable.hxx>
|
||||
#include <Standard.hxx>
|
||||
#include <Standard_Transient.hxx>
|
||||
#include <Standard_Type.hxx>
|
||||
#include <TCollection_AsciiString.hxx>
|
||||
|
||||
class Aspect_DisplayConnection;
|
||||
class Aspect_WindowDefinitionError;
|
||||
class Aspect_WindowError;
|
||||
class Aspect_Background;
|
||||
class Aspect_GradientBackground;
|
||||
|
||||
class Aspect_Window;
|
||||
DEFINE_STANDARD_HANDLE(Aspect_Window, Standard_Transient)
|
||||
|
||||
//! Defines a window.
|
||||
@@ -102,9 +109,6 @@ public:
|
||||
//! Returns native Window FB config (GLXFBConfig on Xlib)
|
||||
Standard_EXPORT virtual Aspect_FBConfig NativeFBConfig() const = 0;
|
||||
|
||||
//! Sets window title.
|
||||
virtual void SetTitle (const TCollection_AsciiString& theTitle) { (void )theTitle; }
|
||||
|
||||
//! Invalidate entire window content.
|
||||
//!
|
||||
//! Implementation is expected to allow calling this method from non-GUI thread,
|
||||
|
@@ -34,9 +34,6 @@ Aspect_RectangularGrid.cxx
|
||||
Aspect_RectangularGrid.hxx
|
||||
Aspect_RenderingContext.hxx
|
||||
Aspect_SequenceOfColor.hxx
|
||||
Aspect_ScrollDelta.hxx
|
||||
Aspect_Touch.hxx
|
||||
Aspect_TouchMap.hxx
|
||||
Aspect_TypeOfColorScaleData.hxx
|
||||
Aspect_TypeOfColorScaleOrientation.hxx
|
||||
Aspect_TypeOfColorScalePosition.hxx
|
||||
@@ -50,10 +47,6 @@ Aspect_TypeOfResize.hxx
|
||||
Aspect_TypeOfStyleText.hxx
|
||||
Aspect_TypeOfTriedronPosition.hxx
|
||||
Aspect_Units.hxx
|
||||
Aspect_VKey.hxx
|
||||
Aspect_VKeyFlags.hxx
|
||||
Aspect_VKeySet.cxx
|
||||
Aspect_VKeySet.hxx
|
||||
Aspect_WidthOfLine.hxx
|
||||
Aspect_Window.cxx
|
||||
Aspect_Window.hxx
|
||||
|
@@ -24,8 +24,7 @@
|
||||
#include <BOPAlgo_Alerts.hxx>
|
||||
#include <BOPTools_AlgoTools.hxx>
|
||||
#include <BOPTools_AlgoTools2D.hxx>
|
||||
#include <BOPTools_BoxTree.hxx>
|
||||
#include <Bnd_Tools.hxx>
|
||||
#include <BOPTools_BoxSelector.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <BRepBndLib.hxx>
|
||||
@@ -39,6 +38,7 @@
|
||||
#include <IntTools_Context.hxx>
|
||||
#include <IntTools_FClass2d.hxx>
|
||||
#include <NCollection_DataMap.hxx>
|
||||
#include <NCollection_UBTreeFiller.hxx>
|
||||
#include <TColStd_MapOfInteger.hxx>
|
||||
#include <TopAbs.hxx>
|
||||
#include <TopExp.hxx>
|
||||
@@ -448,28 +448,28 @@ void BOPAlgo_BuilderFace::PerformAreas()
|
||||
|
||||
// Classify holes relatively faces
|
||||
|
||||
// Prepare tree with the boxes of the hole faces
|
||||
BOPTools_Box2dTree aBoxTree;
|
||||
// Prepare tree filler with the boxes of the hole faces
|
||||
NCollection_UBTree<Standard_Integer, Bnd_Box2d> aBBTree;
|
||||
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box2d> aTreeFiller(aBBTree);
|
||||
|
||||
Standard_Integer i, aNbH = aHoleFaces.Extent();
|
||||
aBoxTree.SetSize (aNbH);
|
||||
for (i = 1; i <= aNbH; ++i)
|
||||
{
|
||||
const TopoDS_Face& aHFace = TopoDS::Face(aHoleFaces(i));
|
||||
//
|
||||
Bnd_Box2d aBox;
|
||||
BRepTools::AddUVBounds(aHFace, aBox);
|
||||
aBoxTree.Add(i, Bnd_Tools::Bnd2BVH (aBox));
|
||||
aTreeFiller.Add(i, aBox);
|
||||
}
|
||||
|
||||
// Build BVH
|
||||
aBoxTree.Build();
|
||||
// Shake TreeFiller
|
||||
aTreeFiller.Fill();
|
||||
|
||||
// Find outer growth face that is most close to each hole face
|
||||
TopTools_IndexedDataMapOfShapeShape aHoleFaceMap;
|
||||
|
||||
// Selector
|
||||
BOPTools_Box2dTreeSelector aSelector;
|
||||
aSelector.SetBVHSet (&aBoxTree);
|
||||
BOPTools_BoxSelector<Bnd_Box2d> aSelector;
|
||||
|
||||
TopTools_ListIteratorOfListOfShape aItLS(aNewFaces);
|
||||
for (; aItLS.More(); aItLS.Next())
|
||||
@@ -481,8 +481,8 @@ void BOPAlgo_BuilderFace::PerformAreas()
|
||||
BRepTools::AddUVBounds(aFace, aBox);
|
||||
|
||||
aSelector.Clear();
|
||||
aSelector.SetBox(Bnd_Tools::Bnd2BVH (aBox));
|
||||
aSelector.Select();
|
||||
aSelector.SetBox(aBox);
|
||||
aBBTree.Select(aSelector);
|
||||
|
||||
const TColStd_ListOfInteger& aLI = aSelector.Indices();
|
||||
TColStd_ListIteratorOfListOfInteger aItLI(aLI);
|
||||
@@ -590,8 +590,9 @@ void BOPAlgo_BuilderFace::PerformInternalShapes()
|
||||
// No edges left for classification
|
||||
return;
|
||||
|
||||
// Prepare tree with the boxes of the edges to classify
|
||||
BOPTools_Box2dTree aBoxTree;
|
||||
// Prepare tree filler with the boxes of the edges to classify
|
||||
NCollection_UBTree<Standard_Integer, Bnd_Box2d> aBBTree;
|
||||
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box2d> aTreeFiller(aBBTree);
|
||||
|
||||
// Map of edges to classify
|
||||
TopTools_IndexedMapOfShape anEdgesMap;
|
||||
@@ -610,13 +611,13 @@ void BOPAlgo_BuilderFace::PerformInternalShapes()
|
||||
BRepTools::AddUVBounds(myFace, aE, aBoxE);
|
||||
// Make sure the index of edge in the map and
|
||||
// of the box in the tree is the same
|
||||
aBoxTree.Add(anEdgesMap.Add(aE), Bnd_Tools::Bnd2BVH (aBoxE));
|
||||
aTreeFiller.Add(anEdgesMap.Add(aE), aBoxE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Build BVH
|
||||
aBoxTree.Build();
|
||||
// Shake the tree
|
||||
aTreeFiller.Fill();
|
||||
|
||||
// Fence map
|
||||
TColStd_MapOfInteger aMEDone;
|
||||
@@ -632,10 +633,9 @@ void BOPAlgo_BuilderFace::PerformInternalShapes()
|
||||
BRepTools::AddUVBounds(aF, aBoxF);
|
||||
|
||||
// Select edges for the classification
|
||||
BOPTools_Box2dTreeSelector aSelector;
|
||||
aSelector.SetBVHSet (&aBoxTree);
|
||||
aSelector.SetBox(Bnd_Tools::Bnd2BVH (aBoxF));
|
||||
if (!aSelector.Select())
|
||||
BOPTools_BoxSelector<Bnd_Box2d> aSelector;
|
||||
aSelector.SetBox(aBoxF);
|
||||
if (!aBBTree.Select(aSelector))
|
||||
continue;
|
||||
|
||||
// Collect edges inside the face
|
||||
|
@@ -21,10 +21,9 @@
|
||||
#include <BOPAlgo_Tools.hxx>
|
||||
#include <BOPTools_AlgoTools.hxx>
|
||||
#include <BOPTools_AlgoTools3D.hxx>
|
||||
#include <BOPTools_BoxTree.hxx>
|
||||
#include <BOPTools_BoxBndTree.hxx>
|
||||
#include <BOPTools_CoupleOfShape.hxx>
|
||||
#include <BOPTools_Parallel.hxx>
|
||||
#include <Bnd_Tools.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <BRepBndLib.hxx>
|
||||
@@ -40,6 +39,7 @@
|
||||
#include <IntTools_Context.hxx>
|
||||
#include <NCollection_DataMap.hxx>
|
||||
#include <NCollection_List.hxx>
|
||||
#include <NCollection_UBTreeFiller.hxx>
|
||||
#include <NCollection_Vector.hxx>
|
||||
#include <TColStd_MapIntegerHasher.hxx>
|
||||
#include <TopAbs.hxx>
|
||||
@@ -443,23 +443,24 @@ void BOPAlgo_BuilderSolid::PerformAreas()
|
||||
|
||||
// Classify holes relatively solids
|
||||
|
||||
// Prepare tree with the boxes of the hole shells
|
||||
BOPTools_BoxTree aBBTree;
|
||||
// Prepare tree filler with the boxes of the hole shells
|
||||
BOPTools_BoxBndTree aBBTree;
|
||||
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
|
||||
|
||||
Standard_Integer i, aNbH = aHoleShells.Extent();
|
||||
aBBTree.SetSize (aNbH);
|
||||
for (i = 1; i <= aNbH; ++i)
|
||||
{
|
||||
const TopoDS_Shape& aHShell = aHoleShells(i);
|
||||
//
|
||||
Bnd_Box aBox;
|
||||
BRepBndLib::Add(aHShell, aBox);
|
||||
aBBTree.Add(i, Bnd_Tools::Bnd2BVH(aBox));
|
||||
aTreeFiller.Add(i, aBox);
|
||||
|
||||
myBoxes.Bind(aHShell, aBox);
|
||||
}
|
||||
|
||||
// Build BVH
|
||||
aBBTree.Build();
|
||||
// Shake TreeFiller
|
||||
aTreeFiller.Fill();
|
||||
|
||||
// Find outer growth shell that is most close to each hole shell
|
||||
TopTools_IndexedDataMapOfShapeShape aHoleSolidMap;
|
||||
@@ -475,10 +476,9 @@ void BOPAlgo_BuilderSolid::PerformAreas()
|
||||
|
||||
myBoxes.Bind(aSolid, aBox);
|
||||
|
||||
BOPTools_BoxTreeSelector aSelector;
|
||||
aSelector.SetBox(Bnd_Tools::Bnd2BVH(aBox));
|
||||
aSelector.SetBVHSet (&aBBTree);
|
||||
aSelector.Select();
|
||||
BOPTools_BoxBndTreeSelector aSelector;
|
||||
aSelector.SetBox(aBox);
|
||||
aBBTree.Select(aSelector);
|
||||
|
||||
const TColStd_ListOfInteger& aLI = aSelector.Indices();
|
||||
TColStd_ListIteratorOfListOfInteger aItLI(aLI);
|
||||
|
@@ -294,11 +294,9 @@ void BOPAlgo_PaveFiller::PerformInternal()
|
||||
//
|
||||
UpdateBlocksWithSharedVertices();
|
||||
//
|
||||
myDS->RefineFaceInfoIn();
|
||||
//
|
||||
MakeSplitEdges();
|
||||
if (HasErrors()) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
//
|
||||
UpdatePaveBlocksWithSDVertices();
|
||||
@@ -361,7 +359,7 @@ void BOPAlgo_PaveFiller::RepeatIntersection()
|
||||
return;
|
||||
|
||||
// Update iterator of pairs of shapes with interfering boxes
|
||||
myIterator->IntersectExt(anExtraInterfMap);
|
||||
myIterator->PrepareExt(anExtraInterfMap);
|
||||
|
||||
// Perform intersections with vertices
|
||||
PerformVV();
|
||||
|
@@ -256,8 +256,7 @@ protected:
|
||||
|
||||
Standard_EXPORT void FillShrunkData (Handle(BOPDS_PaveBlock)& thePB);
|
||||
|
||||
Standard_EXPORT void FillShrunkData (const TopAbs_ShapeEnum theType1,
|
||||
const TopAbs_ShapeEnum theType2);
|
||||
Standard_EXPORT void FillShrunkData (const TopAbs_ShapeEnum theType1, const TopAbs_ShapeEnum theType2);
|
||||
|
||||
//! Analyzes the results of computation of the valid range for the
|
||||
//! pave block and in case of error adds the warning status, otherwise
|
||||
@@ -270,16 +269,11 @@ protected:
|
||||
const Handle(NCollection_BaseAllocator)& theAllocator,
|
||||
const Standard_Boolean theIsEEIntersection = Standard_True);
|
||||
|
||||
Standard_EXPORT Standard_Boolean CheckFacePaves (const TopoDS_Vertex& theVnew,
|
||||
const TColStd_MapOfInteger& theMIF);
|
||||
Standard_EXPORT Standard_Boolean CheckFacePaves (const TopoDS_Vertex& theVnew, const TColStd_MapOfInteger& theMIF);
|
||||
|
||||
Standard_EXPORT static Standard_Boolean CheckFacePaves (const Standard_Integer theN,
|
||||
const TColStd_MapOfInteger& theMIFOn,
|
||||
const TColStd_MapOfInteger& theMIFIn);
|
||||
Standard_EXPORT static Standard_Boolean CheckFacePaves (const Standard_Integer theN, const TColStd_MapOfInteger& theMIFOn, const TColStd_MapOfInteger& theMIFIn);
|
||||
|
||||
Standard_EXPORT Standard_Boolean IsExistingVertex (const gp_Pnt& theP,
|
||||
const Standard_Real theTol,
|
||||
const TColStd_MapOfInteger& theMVOn) const;
|
||||
Standard_EXPORT Standard_Boolean IsExistingVertex (const gp_Pnt& theP, const Standard_Real theTol, const TColStd_MapOfInteger& theMVOn) const;
|
||||
|
||||
|
||||
//! Checks and puts paves from <theMVOnIn> on the curve <theNC>.
|
||||
@@ -304,10 +298,7 @@ protected:
|
||||
//! 1 - checks only EE;
|
||||
//! 2 - checks only EF;
|
||||
//! other - checks both types of intersections.
|
||||
Standard_EXPORT Standard_Boolean ExtendedTolerance (const Standard_Integer nV,
|
||||
const TColStd_MapOfInteger& aMI,
|
||||
Standard_Real& aTolVExt,
|
||||
const Standard_Integer aType = 0);
|
||||
Standard_EXPORT Standard_Boolean ExtendedTolerance (const Standard_Integer nV, const TColStd_MapOfInteger& aMI, Standard_Real& aTolVExt, const Standard_Integer aType = 0);
|
||||
|
||||
Standard_EXPORT void PutBoundPaveOnCurve(const TopoDS_Face& theF1,
|
||||
const TopoDS_Face& theF2,
|
||||
@@ -340,52 +331,38 @@ protected:
|
||||
const TopTools_IndexedMapOfShape& theVertsOnRejectedPB,
|
||||
const Handle(NCollection_BaseAllocator)& theAllocator);
|
||||
|
||||
Standard_EXPORT void FindPaveBlocks (const Standard_Integer theV,
|
||||
const Standard_Integer theF,
|
||||
BOPDS_ListOfPaveBlock& theLPB);
|
||||
Standard_EXPORT void FindPaveBlocks (const Standard_Integer theV, const Standard_Integer theF, BOPDS_ListOfPaveBlock& theLPB);
|
||||
|
||||
Standard_EXPORT void FillPaves (const Standard_Integer theV,
|
||||
const Standard_Integer theE,
|
||||
const Standard_Integer theF,
|
||||
const BOPDS_ListOfPaveBlock& theLPB,
|
||||
const Handle(BOPDS_PaveBlock)& thePB);
|
||||
Standard_EXPORT void FillPaves (const Standard_Integer theV, const Standard_Integer theE, const Standard_Integer theF, const BOPDS_ListOfPaveBlock& theLPB, const Handle(BOPDS_PaveBlock)& thePB);
|
||||
|
||||
Standard_EXPORT void MakeSplitEdge (const Standard_Integer theV, const Standard_Integer theF);
|
||||
|
||||
Standard_EXPORT void GetEFPnts (const Standard_Integer nF1,
|
||||
const Standard_Integer nF2,
|
||||
IntSurf_ListOfPntOn2S& aListOfPnts);
|
||||
Standard_EXPORT void GetEFPnts (const Standard_Integer nF1, const Standard_Integer nF2, IntSurf_ListOfPntOn2S& aListOfPnts);
|
||||
|
||||
|
||||
//! Checks and puts paves created in EF intersections on the curve <theNC>.
|
||||
Standard_EXPORT void PutEFPavesOnCurve (const BOPDS_VectorOfCurve& theVC,
|
||||
const Standard_Integer theIndex,
|
||||
const TColStd_MapOfInteger& theMI,
|
||||
const TColStd_MapOfInteger& theMVEF,
|
||||
TColStd_DataMapOfIntegerReal& theMVTol,
|
||||
TColStd_DataMapOfIntegerListOfInteger& aDMVLV);
|
||||
Standard_EXPORT void PutEFPavesOnCurve (BOPDS_Curve& theNC,
|
||||
const TColStd_MapOfInteger& theMI,
|
||||
const TColStd_MapOfInteger& theMVEF,
|
||||
TColStd_DataMapOfIntegerReal& theMVTol,
|
||||
TColStd_DataMapOfIntegerListOfInteger& aDMVLV);
|
||||
|
||||
|
||||
//! Puts stick paves on the curve <theNC>
|
||||
Standard_EXPORT void PutStickPavesOnCurve (const TopoDS_Face& aF1,
|
||||
const TopoDS_Face& aF2,
|
||||
const TColStd_MapOfInteger& theMI,
|
||||
const BOPDS_VectorOfCurve& theVC,
|
||||
const Standard_Integer theIndex,
|
||||
const TColStd_MapOfInteger& theMVStick,
|
||||
TColStd_DataMapOfIntegerReal& theMVTol,
|
||||
TColStd_DataMapOfIntegerListOfInteger& aDMVLV);
|
||||
const TopoDS_Face& aF2,
|
||||
const TColStd_MapOfInteger& theMI,
|
||||
BOPDS_Curve& theNC,
|
||||
const TColStd_MapOfInteger& theMVStick,
|
||||
TColStd_DataMapOfIntegerReal& theMVTol,
|
||||
TColStd_DataMapOfIntegerListOfInteger& aDMVLV);
|
||||
|
||||
|
||||
//! Collects indices of vertices created in all intersections between
|
||||
//! two faces (<nF1> and <nF2>) to the map <theMVStick>.
|
||||
//! Also, it collects indices of EF vertices to the <theMVEF> map
|
||||
//! and indices of all subshapes of these two faces to the <theMI> map.
|
||||
Standard_EXPORT void GetStickVertices (const Standard_Integer nF1,
|
||||
const Standard_Integer nF2,
|
||||
TColStd_MapOfInteger& theMVStick,
|
||||
TColStd_MapOfInteger& theMVEF,
|
||||
TColStd_MapOfInteger& theMI);
|
||||
Standard_EXPORT void GetStickVertices (const Standard_Integer nF1, const Standard_Integer nF2, TColStd_MapOfInteger& theMVStick, TColStd_MapOfInteger& theMVEF, TColStd_MapOfInteger& theMI);
|
||||
|
||||
|
||||
//! Collects index nF and indices of all subshapes of the shape with index <nF>
|
||||
@@ -396,7 +373,7 @@ protected:
|
||||
//! Removes indices of vertices that are already on the
|
||||
//! curve <theNC> from the map <theMV>.
|
||||
//! It is used in PutEFPavesOnCurve and PutStickPavesOnCurve methods.
|
||||
Standard_EXPORT void RemoveUsedVertices (const BOPDS_VectorOfCurve& theVC, TColStd_MapOfInteger& theMV);
|
||||
Standard_EXPORT void RemoveUsedVertices (const BOPDS_Curve& theNC, TColStd_MapOfInteger& theMV);
|
||||
|
||||
|
||||
//! Puts the pave nV on the curve theNC.
|
||||
@@ -435,8 +412,7 @@ protected:
|
||||
const BOPAlgo_DataMapOfPaveBlockListOfInteger& thePBFacesMap);
|
||||
|
||||
//! Treatment of vertices that were created in EE intersections.
|
||||
Standard_EXPORT void TreatNewVertices(const BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& theMVCPB,
|
||||
TopTools_IndexedDataMapOfShapeListOfShape& theImages);
|
||||
Standard_EXPORT void TreatNewVertices(const BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& theMVCPB, TopTools_IndexedDataMapOfShapeListOfShape& theImages);
|
||||
|
||||
|
||||
//! Put paves on the curve <aBC> in case when <aBC>
|
||||
@@ -445,12 +421,7 @@ protected:
|
||||
|
||||
|
||||
//! Keeps data for post treatment
|
||||
Standard_EXPORT void PreparePostTreatFF (const Standard_Integer aInt,
|
||||
const Standard_Integer aCur,
|
||||
const Handle(BOPDS_PaveBlock)& aPB,
|
||||
BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& aMSCPB,
|
||||
TopTools_DataMapOfShapeInteger& aMVI,
|
||||
BOPDS_ListOfPaveBlock& aLPB);
|
||||
Standard_EXPORT void PreparePostTreatFF (const Standard_Integer aInt, const Standard_Integer aCur, const Handle(BOPDS_PaveBlock)& aPB, BOPDS_IndexedDataMapOfShapeCoupleOfPaveBlocks& aMSCPB, TopTools_DataMapOfShapeInteger& aMVI, BOPDS_ListOfPaveBlock& aLPB);
|
||||
|
||||
//! Updates the information about faces
|
||||
Standard_EXPORT void UpdateFaceInfo(BOPDS_DataMapOfPaveBlockListOfPaveBlock& theDME,
|
||||
@@ -476,11 +447,7 @@ protected:
|
||||
|
||||
//! Creates new edge from the edge nE with vertices nV1 and nV2
|
||||
//! and returns the index of that new edge in the DS.
|
||||
Standard_EXPORT Standard_Integer SplitEdge (const Standard_Integer nE,
|
||||
const Standard_Integer nV1,
|
||||
const Standard_Real aT1,
|
||||
const Standard_Integer nV2,
|
||||
const Standard_Real aT2);
|
||||
Standard_EXPORT Standard_Integer SplitEdge (const Standard_Integer nE, const Standard_Integer nV1, const Standard_Real aT1, const Standard_Integer nV2, const Standard_Real aT2);
|
||||
|
||||
|
||||
//! Updates pave blocks which have the paves with indices contained
|
||||
@@ -559,8 +526,7 @@ protected:
|
||||
Standard_EXPORT void CheckSelfInterference();
|
||||
|
||||
//! Adds the warning about failed intersection of pair of sub-shapes
|
||||
Standard_EXPORT void AddIntersectionFailedWarning(const TopoDS_Shape& theS1,
|
||||
const TopoDS_Shape& theS2);
|
||||
Standard_EXPORT void AddIntersectionFailedWarning(const TopoDS_Shape& theS1, const TopoDS_Shape& theS2);
|
||||
|
||||
//! Repeat intersection of sub-shapes with increased vertices.
|
||||
Standard_EXPORT void RepeatIntersection();
|
||||
|
@@ -595,7 +595,7 @@ void BOPAlgo_PaveFiller::TreatNewVertices
|
||||
//
|
||||
// Perform intersection
|
||||
TopTools_ListOfListOfShape aChains;
|
||||
BOPAlgo_Tools::IntersectVertices(aVerts, myFuzzyValue, aChains);
|
||||
BOPAlgo_Tools::IntersectVertices(aVerts, myRunParallel, myFuzzyValue, aChains);
|
||||
//
|
||||
// Treat the results - make new vertices for each chain
|
||||
TopTools_ListOfListOfShape::Iterator aItC(aChains);
|
||||
|
@@ -17,7 +17,6 @@
|
||||
|
||||
|
||||
#include <Bnd_Box.hxx>
|
||||
#include <Bnd_Tools.hxx>
|
||||
#include <BOPAlgo_PaveFiller.hxx>
|
||||
#include <BOPAlgo_Alerts.hxx>
|
||||
#include <BOPAlgo_Tools.hxx>
|
||||
@@ -32,6 +31,7 @@
|
||||
#include <BOPDS_PaveBlock.hxx>
|
||||
#include <BOPTools_AlgoTools.hxx>
|
||||
#include <BOPTools_AlgoTools2D.hxx>
|
||||
#include <BOPTools_BoxSelector.hxx>
|
||||
#include <BOPTools_Parallel.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
@@ -469,8 +469,12 @@ void BOPAlgo_PaveFiller::PerformEF()
|
||||
PerformNewVertices(aMVCPB, aAllocator, Standard_False);
|
||||
//
|
||||
// Update FaceInfoIn for all faces having EF common parts
|
||||
myDS->UpdateFaceInfoIn (aMIEFC);
|
||||
|
||||
TColStd_MapIteratorOfMapOfInteger aItMI;
|
||||
aItMI.Initialize(aMIEFC);
|
||||
for (; aItMI.More(); aItMI.Next()) {
|
||||
nF=aItMI.Value();
|
||||
myDS->UpdateFaceInfoIn(nF);
|
||||
}
|
||||
//-----------------------------------------------------scope t
|
||||
aMIEFC.Clear();
|
||||
aMVCPB.Clear();
|
||||
@@ -729,7 +733,8 @@ void BOPAlgo_PaveFiller::ForceInterfEF(const BOPDS_IndexedMapOfPaveBlock& theMPB
|
||||
return;
|
||||
|
||||
// Fill the tree with bounding boxes of the pave blocks
|
||||
BOPTools_BoxTree aBBTree;
|
||||
NCollection_UBTree<Standard_Integer, Bnd_Box> aBBTree;
|
||||
NCollection_UBTreeFiller<Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
|
||||
|
||||
Handle(NCollection_IncAllocator) anAlloc = new NCollection_IncAllocator;
|
||||
BOPDS_IndexedMapOfPaveBlock aPBMap(1, anAlloc);
|
||||
@@ -750,11 +755,11 @@ void BOPAlgo_PaveFiller::ForceInterfEF(const BOPDS_IndexedMapOfPaveBlock& theMPB
|
||||
Standard_Boolean isSplit;
|
||||
aPB->ShrunkData(f, l, aPBBox, isSplit);
|
||||
|
||||
aBBTree.Add(aPBMap.Add(aPB), Bnd_Tools::Bnd2BVH(aPBBox));
|
||||
aTreeFiller.Add(aPBMap.Add(aPB), aPBBox);
|
||||
}
|
||||
|
||||
// Shake the tree
|
||||
aBBTree.Build();
|
||||
aTreeFiller.Fill();
|
||||
|
||||
// Find pairs of Face/PaveBlock containing the same vertices
|
||||
// and prepare those pairs for intersection.
|
||||
@@ -773,10 +778,10 @@ void BOPAlgo_PaveFiller::ForceInterfEF(const BOPDS_IndexedMapOfPaveBlock& theMPB
|
||||
continue;
|
||||
|
||||
const Bnd_Box& aBoxF = aSI.Box();
|
||||
BOPTools_BoxTreeSelector aSelector;
|
||||
aSelector.SetBox(Bnd_Tools::Bnd2BVH(aBoxF));
|
||||
aSelector.SetBVHSet (&aBBTree);
|
||||
if (!aSelector.Select())
|
||||
BOPTools_BoxSelector<Bnd_Box> aSelector;
|
||||
aSelector.SetBox(aBoxF);
|
||||
|
||||
if (!aBBTree.Select(aSelector))
|
||||
continue;
|
||||
|
||||
const TopoDS_Face& aF = TopoDS::Face(aSI.Shape());
|
||||
|
@@ -200,18 +200,36 @@ void BOPAlgo_PaveFiller::PerformFF()
|
||||
for (; myIterator->More(); myIterator->Next()) {
|
||||
myIterator->Value(nF1, nF2);
|
||||
|
||||
aMIFence.Add (nF1);
|
||||
aMIFence.Add (nF2);
|
||||
}
|
||||
// Update face info
|
||||
myDS->UpdateFaceInfoOn (aMIFence);
|
||||
myDS->UpdateFaceInfoIn (aMIFence);
|
||||
|
||||
// Initialize interferences
|
||||
myIterator->Initialize(TopAbs_FACE, TopAbs_FACE);
|
||||
for (; myIterator->More(); myIterator->Next()) {
|
||||
myIterator->Value(nF1, nF2);
|
||||
// Update/Initialize FaceInfo structure for first face
|
||||
if (myDS->HasFaceInfo(nF1))
|
||||
{
|
||||
if (aMIFence.Add(nF1))
|
||||
{
|
||||
myDS->UpdateFaceInfoOn(nF1);
|
||||
myDS->UpdateFaceInfoIn(nF1);
|
||||
}
|
||||
}
|
||||
else if (myDS->HasInterfShapeSubShapes(nF2, nF1))
|
||||
{
|
||||
myDS->ChangeFaceInfo(nF1);
|
||||
aMIFence.Add(nF1);
|
||||
}
|
||||
|
||||
// Update/Initialize FaceInfo structure for second face
|
||||
if (myDS->HasFaceInfo(nF2))
|
||||
{
|
||||
if (aMIFence.Add(nF2))
|
||||
{
|
||||
myDS->UpdateFaceInfoOn(nF2);
|
||||
myDS->UpdateFaceInfoIn(nF2);
|
||||
}
|
||||
}
|
||||
else if (myDS->HasInterfShapeSubShapes(nF1, nF2))
|
||||
{
|
||||
myDS->ChangeFaceInfo(nF2);
|
||||
aMIFence.Add(nF2);
|
||||
}
|
||||
//
|
||||
if (myGlue == BOPAlgo_GlueOff)
|
||||
{
|
||||
const TopoDS_Face& aF1 = (*(TopoDS_Face *)(&myDS->Shape(nF1)));
|
||||
@@ -487,10 +505,10 @@ void BOPAlgo_PaveFiller::MakeBlocks()
|
||||
BOPDS_Curve& aNC=aVC.ChangeValue(j);
|
||||
const IntTools_Curve& aIC=aNC.Curve();
|
||||
//
|
||||
PutStickPavesOnCurve(aF1, aF2, aMI, aVC, j, aMVStick, aMVTol, aDMVLV);
|
||||
PutStickPavesOnCurve(aF1, aF2, aMI, aNC, aMVStick, aMVTol, aDMVLV);
|
||||
//904/F7
|
||||
if (aNbC == 1) {
|
||||
PutEFPavesOnCurve(aVC, j, aMI, aMVEF, aMVTol, aDMVLV);
|
||||
PutEFPavesOnCurve(aNC, aMI, aMVEF, aMVTol, aDMVLV);
|
||||
}
|
||||
//
|
||||
if (aIC.HasBounds()) {
|
||||
@@ -814,7 +832,12 @@ void BOPAlgo_PaveFiller::PostTreatFF
|
||||
TColStd_MapOfInteger aMV, aMVEF, aMI;
|
||||
GetStickVertices(nF1, nF2, aMV, aMVEF, aMI);
|
||||
BOPDS_VectorOfCurve& aVC = aFF.ChangeCurves();
|
||||
RemoveUsedVertices (aVC, aMV);
|
||||
Standard_Integer aNbC = aVC.Length();
|
||||
for (j = 0; j < aNbC; j++)
|
||||
{
|
||||
BOPDS_Curve& aNC = aVC.ChangeValue(j);
|
||||
RemoveUsedVertices(aNC, aMV);
|
||||
}
|
||||
|
||||
TColStd_MapIteratorOfMapOfInteger itmap(aMV);
|
||||
for(; itmap.More(); itmap.Next())
|
||||
@@ -1645,13 +1668,13 @@ Standard_Boolean BOPAlgo_PaveFiller::IsExistingPaveBlock
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
static void getBoundPaves(const BOPDS_DS* theDS,
|
||||
const BOPDS_Curve& theNC,
|
||||
BOPDS_Curve& theNC,
|
||||
Standard_Integer theNV[2])
|
||||
{
|
||||
theNV[0] = theNV[1] = -1;
|
||||
|
||||
// get extreme paves
|
||||
const Handle(BOPDS_PaveBlock)& aPB = theNC.PaveBlocks().First();
|
||||
Handle(BOPDS_PaveBlock)& aPB = theNC.ChangePaveBlock1();
|
||||
const BOPDS_ListOfPave& aLP = aPB->ExtPaves();
|
||||
Standard_Integer aNbEP = aLP.Extent();
|
||||
if (aNbEP == 0)
|
||||
@@ -2057,8 +2080,7 @@ void BOPAlgo_PaveFiller::GetEFPnts
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPAlgo_PaveFiller::PutEFPavesOnCurve
|
||||
(const BOPDS_VectorOfCurve& theVC,
|
||||
const Standard_Integer theIndex,
|
||||
(BOPDS_Curve& aNC,
|
||||
const TColStd_MapOfInteger& aMI,
|
||||
const TColStd_MapOfInteger& aMVEF,
|
||||
TColStd_DataMapOfIntegerReal& aMVTol,
|
||||
@@ -2068,7 +2090,6 @@ void BOPAlgo_PaveFiller::GetEFPnts
|
||||
return;
|
||||
}
|
||||
//
|
||||
const BOPDS_Curve& aNC = theVC.Value(theIndex);
|
||||
const IntTools_Curve& aIC=aNC.Curve();
|
||||
GeomAbs_CurveType aTypeC;
|
||||
aTypeC=aIC.Type();
|
||||
@@ -2080,7 +2101,7 @@ void BOPAlgo_PaveFiller::GetEFPnts
|
||||
TColStd_MapOfInteger aMV;
|
||||
//
|
||||
aMV.Assign(aMVEF);
|
||||
RemoveUsedVertices(theVC, aMV);
|
||||
RemoveUsedVertices(aNC, aMV);
|
||||
if (!aMV.Extent()) {
|
||||
return;
|
||||
}
|
||||
@@ -2114,13 +2135,11 @@ void BOPAlgo_PaveFiller::GetEFPnts
|
||||
(const TopoDS_Face& aF1,
|
||||
const TopoDS_Face& aF2,
|
||||
const TColStd_MapOfInteger& aMI,
|
||||
const BOPDS_VectorOfCurve& theVC,
|
||||
const Standard_Integer theIndex,
|
||||
BOPDS_Curve& aNC,
|
||||
const TColStd_MapOfInteger& aMVStick,
|
||||
TColStd_DataMapOfIntegerReal& aMVTol,
|
||||
TColStd_DataMapOfIntegerListOfInteger& aDMVLV)
|
||||
{
|
||||
const BOPDS_Curve& aNC = theVC.Value(theIndex);
|
||||
// Get numbers of vertices assigned to the ends of the curve
|
||||
Standard_Integer aBndNV[2];
|
||||
getBoundPaves(myDS, aNC, aBndNV);
|
||||
@@ -2131,7 +2150,7 @@ void BOPAlgo_PaveFiller::GetEFPnts
|
||||
}
|
||||
TColStd_MapOfInteger aMV;
|
||||
aMV.Assign(aMVStick);
|
||||
RemoveUsedVertices(theVC, aMV);
|
||||
RemoveUsedVertices(aNC, aMV);
|
||||
//
|
||||
if (!aMV.Extent()) {
|
||||
return;
|
||||
@@ -2141,6 +2160,7 @@ void BOPAlgo_PaveFiller::GetEFPnts
|
||||
Handle(Geom_Surface) aS2=BRep_Tool::Surface(aF2);
|
||||
//
|
||||
const IntTools_Curve& aIC=aNC.Curve();
|
||||
//if (aTypeC==GeomAbs_BezierCurve || aTypeC==GeomAbs_BSplineCurve) {
|
||||
Handle(Geom2d_Curve) aC2D[2];
|
||||
//
|
||||
aC2D[0]=aIC.FirstCurve2d();
|
||||
@@ -2235,7 +2255,6 @@ void BOPAlgo_PaveFiller::GetStickVertices(const Standard_Integer nF1,
|
||||
aInt->Indices(nS1, nS2);
|
||||
if(aMI.Contains(nS1) && aMI.Contains(nS2)) {
|
||||
nVNew = aInt->IndexNew();
|
||||
myDS->HasShapeSD (nVNew, nVNew);
|
||||
aMVStick.Add(nVNew);
|
||||
}
|
||||
}
|
||||
@@ -2248,7 +2267,6 @@ void BOPAlgo_PaveFiller::GetStickVertices(const Standard_Integer nF1,
|
||||
aInt.Indices(nS1, nS2);
|
||||
if(aMI.Contains(nS1) && aMI.Contains(nS2)) {
|
||||
nVNew = aInt.IndexNew();
|
||||
myDS->HasShapeSD (nVNew, nVNew);
|
||||
aMVStick.Add(nVNew);
|
||||
aMVEF.Add(nVNew);
|
||||
}
|
||||
@@ -2281,28 +2299,24 @@ void BOPAlgo_PaveFiller::GetFullShapeMap(const Standard_Integer nF,
|
||||
// function: RemoveUsedVertices
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
void BOPAlgo_PaveFiller::RemoveUsedVertices(const BOPDS_VectorOfCurve& aVC,
|
||||
void BOPAlgo_PaveFiller::RemoveUsedVertices(const BOPDS_Curve& aNC,
|
||||
TColStd_MapOfInteger& aMV)
|
||||
{
|
||||
if (aMV.IsEmpty())
|
||||
return;
|
||||
|
||||
for (Standard_Integer i = 0; i < aVC.Length(); ++i)
|
||||
const BOPDS_ListOfPaveBlock& aLPBC = aNC.PaveBlocks();
|
||||
BOPDS_ListIteratorOfListOfPaveBlock itPB(aLPBC);
|
||||
for (; itPB.More(); itPB.Next())
|
||||
{
|
||||
const BOPDS_Curve& aNC = aVC.Value(i);
|
||||
const BOPDS_ListOfPaveBlock& aLPBC = aNC.PaveBlocks();
|
||||
BOPDS_ListIteratorOfListOfPaveBlock itPB(aLPBC);
|
||||
for (; itPB.More(); itPB.Next())
|
||||
{
|
||||
const Handle(BOPDS_PaveBlock)& aPB = itPB.Value();
|
||||
const BOPDS_ListOfPave& aLP = aPB->ExtPaves();
|
||||
BOPDS_ListIteratorOfListOfPave itLP(aLP);
|
||||
for (; itLP.More(); itLP.Next())
|
||||
aMV.Remove(itLP.Value().Index());
|
||||
|
||||
aMV.Remove(aPB->Pave1().Index());
|
||||
aMV.Remove(aPB->Pave2().Index());
|
||||
}
|
||||
const Handle(BOPDS_PaveBlock)& aPB = itPB.Value();
|
||||
const BOPDS_ListOfPave& aLP = aPB->ExtPaves();
|
||||
BOPDS_ListIteratorOfListOfPave itLP(aLP);
|
||||
for (; itLP.More(); itLP.Next())
|
||||
aMV.Remove(itLP.Value().Index());
|
||||
|
||||
aMV.Remove(aPB->Pave1().Index());
|
||||
aMV.Remove(aPB->Pave2().Index());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -25,7 +25,7 @@
|
||||
#include <BOPDS_PaveBlock.hxx>
|
||||
#include <BOPTools_AlgoTools.hxx>
|
||||
#include <BOPTools_AlgoTools2D.hxx>
|
||||
#include <BOPTools_BoxTree.hxx>
|
||||
#include <BOPTools_BoxBndTree.hxx>
|
||||
#include <BOPTools_Parallel.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
@@ -33,7 +33,6 @@
|
||||
#include <BRepBndLib.hxx>
|
||||
#include <BRepBuilderAPI_MakeFace.hxx>
|
||||
#include <BRepLib.hxx>
|
||||
#include <Bnd_Tools.hxx>
|
||||
#include <GeomAPI_ProjectPointOnCurve.hxx>
|
||||
#include <GeomAPI_ProjectPointOnSurf.hxx>
|
||||
#include <gp_Circ.hxx>
|
||||
@@ -46,6 +45,7 @@
|
||||
#include <gp_Vec.hxx>
|
||||
#include <IntTools_Context.hxx>
|
||||
#include <NCollection_IncAllocator.hxx>
|
||||
#include <NCollection_UBTreeFiller.hxx>
|
||||
#include <NCollection_Vector.hxx>
|
||||
#include <Standard_ErrorHandler.hxx>
|
||||
#include <Standard_Failure.hxx>
|
||||
@@ -954,66 +954,78 @@ Standard_Boolean FindPlane(const TopoDS_Shape& theWire,
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//=======================================================================
|
||||
//class : BOPAlgo_PairVerticesSelector
|
||||
//class : BOPAlgo_TNV
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
class BOPAlgo_PairVerticesSelector : public BOPTools_BoxPairSelector
|
||||
{
|
||||
public:
|
||||
class BOPAlgo_TNV;
|
||||
typedef NCollection_Vector<BOPAlgo_TNV> BOPAlgo_VectorOfTNV;
|
||||
|
||||
BOPAlgo_PairVerticesSelector()
|
||||
: myVertices(NULL),
|
||||
myFuzzyValue(Precision::Confusion())
|
||||
{}
|
||||
|
||||
//! Sets the map of vertices with tolerances
|
||||
void SetMapOfVerticesTolerances (const TopTools_IndexedDataMapOfShapeReal& theVertices)
|
||||
{
|
||||
myVertices = &theVertices;
|
||||
//=======================================================================
|
||||
class BOPAlgo_TNV : public BOPTools_BoxBndTreeSelector{
|
||||
public:
|
||||
BOPAlgo_TNV()
|
||||
: BOPTools_BoxBndTreeSelector(),
|
||||
myTol (0.), myFuzzyValue(0.), myTree(NULL), myVecTNV(NULL) {
|
||||
};
|
||||
//
|
||||
~BOPAlgo_TNV(){
|
||||
};
|
||||
//
|
||||
void SetVertex(const TopoDS_Vertex& aV) {
|
||||
myV=aV;
|
||||
myPnt = BRep_Tool::Pnt(myV);
|
||||
}
|
||||
|
||||
//! Sets the fuzzy value
|
||||
void SetFuzzyValue (const Standard_Real theFuzzyValue)
|
||||
{
|
||||
//
|
||||
const TopoDS_Vertex& Vertex()const {
|
||||
return myV;
|
||||
}
|
||||
//
|
||||
void SetTree(BOPTools_BoxBndTree& aTree) {
|
||||
myTree=&aTree;
|
||||
}
|
||||
//
|
||||
void SetTolerance(const Standard_Real theTol) {
|
||||
myTol = theTol;
|
||||
}
|
||||
//
|
||||
Standard_Real Tolerance() const {
|
||||
return myTol;
|
||||
}
|
||||
//
|
||||
const gp_Pnt& Pnt() const {
|
||||
return myPnt;
|
||||
}
|
||||
//
|
||||
void SetFuzzyValue(const Standard_Real theFuzzyValue) {
|
||||
myFuzzyValue = theFuzzyValue;
|
||||
}
|
||||
|
||||
//! Checks and accepts the pair of elements.
|
||||
virtual Standard_Boolean Accept (const Standard_Integer theID1,
|
||||
const Standard_Integer theID2) Standard_OVERRIDE
|
||||
//
|
||||
void SetVectorOfTNV(const BOPAlgo_VectorOfTNV& theVec) {
|
||||
myVecTNV = &theVec;
|
||||
}
|
||||
//
|
||||
virtual Standard_Boolean Accept(const Standard_Integer& theIndex)
|
||||
{
|
||||
if (!RejectElement (theID1, theID2))
|
||||
{
|
||||
const Standard_Integer anID1 = this->myBVHSet1->Element (theID1);
|
||||
const TopoDS_Vertex& aV1 = TopoDS::Vertex (myVertices->FindKey (anID1));
|
||||
Standard_Real aTolV1 = BRep_Tool::Tolerance (aV1);
|
||||
if (aTolV1 < myVertices->FindFromIndex (anID1))
|
||||
aTolV1 = myVertices->FindFromIndex (anID1);
|
||||
gp_Pnt aP1 = BRep_Tool::Pnt (aV1);
|
||||
|
||||
const Standard_Integer anID2 = this->myBVHSet1->Element (theID2);
|
||||
const TopoDS_Vertex& aV2 = TopoDS::Vertex (myVertices->FindKey (anID2));
|
||||
Standard_Real aTolV2 = BRep_Tool::Tolerance (aV2);
|
||||
if (aTolV2 < myVertices->FindFromIndex (anID2))
|
||||
aTolV2 = myVertices->FindFromIndex (anID2);
|
||||
gp_Pnt aP2 = BRep_Tool::Pnt (aV2);
|
||||
|
||||
Standard_Real aTolSum2 = aTolV1 + aTolV2 + myFuzzyValue;
|
||||
aTolSum2 *= aTolSum2;
|
||||
|
||||
Standard_Real aD2 = aP1.SquareDistance (aP2);
|
||||
if (aD2 < aTolSum2)
|
||||
{
|
||||
myPairs.push_back (PairIDs (anID1, anID2));
|
||||
return Standard_True;
|
||||
}
|
||||
}
|
||||
const BOPAlgo_TNV& aTNV = myVecTNV->Value(theIndex - 1);
|
||||
Standard_Real aTolSum2 = myTol + aTNV.Tolerance() + myFuzzyValue;
|
||||
aTolSum2 *= aTolSum2;
|
||||
Standard_Real aD2 = myPnt.SquareDistance(aTNV.Pnt());
|
||||
if (aD2 < aTolSum2)
|
||||
return BOPTools_BoxBndTreeSelector::Accept(theIndex);
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
protected:
|
||||
const TopTools_IndexedDataMapOfShapeReal * myVertices;
|
||||
//
|
||||
void Perform() {
|
||||
myTree->Select(*this);
|
||||
}
|
||||
//
|
||||
protected:
|
||||
Standard_Real myTol;
|
||||
Standard_Real myFuzzyValue;
|
||||
gp_Pnt myPnt;
|
||||
TopoDS_Vertex myV;
|
||||
BOPTools_BoxBndTree *myTree;
|
||||
const BOPAlgo_VectorOfTNV *myVecTNV;
|
||||
};
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
@@ -1023,82 +1035,84 @@ protected:
|
||||
//purpose : Builds the chains of intersecting vertices
|
||||
//=======================================================================
|
||||
void BOPAlgo_Tools::IntersectVertices(const TopTools_IndexedDataMapOfShapeReal& theVertices,
|
||||
const Standard_Boolean theRunParallel,
|
||||
const Standard_Real theFuzzyValue,
|
||||
TopTools_ListOfListOfShape& theChains)
|
||||
{
|
||||
Standard_Integer aNbV = theVertices.Extent();
|
||||
Standard_Integer i, j, aNbV = theVertices.Extent();
|
||||
if (aNbV <= 1) {
|
||||
if (aNbV == 1) {
|
||||
theChains.Append(TopTools_ListOfShape()).Append(theVertices.FindKey(1));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Additional tolerance for intersection
|
||||
//
|
||||
// Use unbalanced binary tree of bounding boxes for sorting of the vertices.
|
||||
BOPTools_BoxBndTree aBBTree;
|
||||
NCollection_UBTreeFiller <Standard_Integer,
|
||||
Bnd_Box> aTreeFiller(aBBTree);
|
||||
// Perform intersection of the vertices
|
||||
BOPAlgo_VectorOfTNV aVTNV;
|
||||
//
|
||||
// Use additional tolerance for intersection
|
||||
Standard_Real aTolAdd = theFuzzyValue / 2.;
|
||||
|
||||
// Use BVH Tree for sorting the vertices
|
||||
BOPTools_BoxTree aBBTree;
|
||||
aBBTree.SetSize (aNbV);
|
||||
|
||||
for (Standard_Integer i = 1; i <= aNbV; ++i)
|
||||
{
|
||||
// Prepare the tree
|
||||
for (i = 1; i <= aNbV; ++i) {
|
||||
const TopoDS_Vertex& aV = TopoDS::Vertex(theVertices.FindKey(i));
|
||||
Standard_Real aTol = BRep_Tool::Tolerance(aV);
|
||||
if (aTol < theVertices(i))
|
||||
if (aTol < theVertices(i)) {
|
||||
aTol = theVertices(i);
|
||||
|
||||
}
|
||||
// Build bnd box for vertex
|
||||
Bnd_Box aBox;
|
||||
aBox.Add(BRep_Tool::Pnt(aV));
|
||||
aBox.SetGap(aTol + aTolAdd);
|
||||
aBBTree.Add(i, Bnd_Tools::Bnd2BVH(aBox));
|
||||
//
|
||||
aTreeFiller.Add(i, aBox);
|
||||
//
|
||||
BOPAlgo_TNV& aTNV=aVTNV.Appended();
|
||||
aTNV.SetTree(aBBTree);
|
||||
aTNV.SetBox(aBox);
|
||||
aTNV.SetVertex(aV);
|
||||
aTNV.SetTolerance(aTol);
|
||||
aTNV.SetFuzzyValue(theFuzzyValue);
|
||||
aTNV.SetVectorOfTNV(aVTNV);
|
||||
}
|
||||
|
||||
aBBTree.Build();
|
||||
|
||||
// Perform selection of the interfering vertices
|
||||
BOPAlgo_PairVerticesSelector aPairSelector;
|
||||
aPairSelector.SetBVHSets (&aBBTree, &aBBTree);
|
||||
aPairSelector.SetSame (Standard_True);
|
||||
aPairSelector.SetMapOfVerticesTolerances (theVertices);
|
||||
aPairSelector.SetFuzzyValue (theFuzzyValue);
|
||||
aPairSelector.Select();
|
||||
|
||||
// Treat the selected pairs
|
||||
const std::vector<BOPTools_BoxPairSelector::PairIDs>& aPairs = aPairSelector.Pairs();
|
||||
const Standard_Integer aNbPairs = static_cast<Standard_Integer> (aPairs.size());
|
||||
|
||||
// Collect interfering pairs
|
||||
Handle(NCollection_IncAllocator) anAlloc = new NCollection_IncAllocator;
|
||||
NCollection_IndexedDataMap<Standard_Integer, TColStd_ListOfInteger> aMILI (1, anAlloc);
|
||||
|
||||
for (Standard_Integer iPair = 0; iPair < aNbPairs; ++iPair)
|
||||
{
|
||||
const BOPTools_BoxPairSelector::PairIDs& aPair = aPairs[iPair];
|
||||
BOPAlgo_Tools::FillMap<Standard_Integer, TColStd_MapIntegerHasher> (aPair.ID1, aPair.ID2, aMILI, anAlloc);
|
||||
}
|
||||
|
||||
NCollection_List<TColStd_ListOfInteger> aBlocks (anAlloc);
|
||||
BOPAlgo_Tools::MakeBlocks<Standard_Integer, TColStd_MapIntegerHasher> (aMILI, aBlocks, anAlloc);
|
||||
|
||||
NCollection_List<TColStd_ListOfInteger>::Iterator itLI (aBlocks);
|
||||
for (; itLI.More(); itLI.Next())
|
||||
{
|
||||
const TColStd_ListOfInteger& aLI = itLI.Value();
|
||||
TopTools_ListOfShape &aChain = theChains.Append (TopTools_ListOfShape());
|
||||
|
||||
for (TColStd_ListOfInteger::Iterator itI (aLI); itI.More(); itI.Next())
|
||||
aChain.Append (theVertices.FindKey (itI.Value()));
|
||||
}
|
||||
|
||||
// Add not interfered vertices as a chain of 1 element
|
||||
for (Standard_Integer i = 1; i <= aNbV; ++i)
|
||||
{
|
||||
if (!aMILI.Contains (i))
|
||||
{
|
||||
TopTools_ListOfShape &aChain = theChains.Append (TopTools_ListOfShape());
|
||||
aChain.Append (theVertices.FindKey(i));
|
||||
// Shake the tree
|
||||
aTreeFiller.Fill();
|
||||
//
|
||||
// Perform intersection
|
||||
BOPTools_Parallel::Perform (theRunParallel, aVTNV);
|
||||
//
|
||||
// Fence map
|
||||
TColStd_MapOfInteger aMFence;
|
||||
// Build chains of intersecting vertices
|
||||
for (i = 1; i <= aNbV; ++i) {
|
||||
if (!aMFence.Add(i)) {
|
||||
continue;
|
||||
}
|
||||
// Start the chain
|
||||
TColStd_IndexedMapOfInteger aMChain;
|
||||
aMChain.Add(i);
|
||||
//
|
||||
for (j = 1; j <= aMChain.Extent(); ++j) {
|
||||
BOPAlgo_TNV& aTNV = aVTNV(aMChain(j) - 1);
|
||||
const TColStd_ListOfInteger& aLI = aTNV.Indices();
|
||||
// Add these vertices into the chain
|
||||
for (TColStd_ListIteratorOfListOfInteger aItLI(aLI); aItLI.More(); aItLI.Next()) {
|
||||
if (aMFence.Add(aItLI.Value())) {
|
||||
aMChain.Add(aItLI.Value());
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// Put vertices of the chain into the list
|
||||
TopTools_ListOfShape& aChain = theChains.Append(TopTools_ListOfShape());
|
||||
//
|
||||
Standard_Integer aNbVChain = aMChain.Extent();
|
||||
for (j = 1; j <= aNbVChain; ++j) {
|
||||
const TopoDS_Vertex& aVP = aVTNV(aMChain(j) - 1).Vertex();
|
||||
aChain.Append(aVP);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1222,9 +1236,9 @@ public:
|
||||
};
|
||||
|
||||
//! Sets the Bounding Box tree
|
||||
void SetBBTree(BOPTools_BoxTree* theBBTree)
|
||||
void SetBBTree(const BOPTools_BoxBndTree& theBBTree)
|
||||
{
|
||||
myBBTree = theBBTree;
|
||||
myBBTree = (BOPTools_BoxBndTree*)&theBBTree;
|
||||
};
|
||||
|
||||
//! Sets the ShapeBox structure
|
||||
@@ -1274,7 +1288,7 @@ private:
|
||||
TopTools_ListOfShape myOwnIF; //! Own INTERNAL faces of the solid
|
||||
TopTools_ListOfShape myInFaces; //! Faces classified as IN
|
||||
|
||||
BOPTools_BoxTree* myBBTree; //! BVH tree of bounding boxes
|
||||
BOPTools_BoxBndTree* myBBTree; //! UB tree of bounding boxes
|
||||
BOPAlgo_VectorOfShapeBox* myVShapeBox; //! ShapeBoxMap
|
||||
|
||||
TopoDS_Iterator myItF; //! Iterators
|
||||
@@ -1294,11 +1308,10 @@ void BOPAlgo_FillIn3DParts::Perform()
|
||||
myInFaces.Clear();
|
||||
|
||||
// 1. Select boxes of faces that are not out of aBoxS
|
||||
BOPTools_BoxTreeSelector aSelector;
|
||||
aSelector.SetBox(Bnd_Tools::Bnd2BVH(myBoxS));
|
||||
aSelector.SetBVHSet (myBBTree);
|
||||
BOPTools_BoxBndTreeSelector aSelector;
|
||||
aSelector.SetBox(myBoxS);
|
||||
//
|
||||
if (!aSelector.Select())
|
||||
if (!myBBTree->Select(aSelector))
|
||||
return;
|
||||
|
||||
const TColStd_ListOfInteger& aLIFP = aSelector.Indices();
|
||||
@@ -1546,18 +1559,19 @@ void BOPAlgo_Tools::ClassifyFaces(const TopTools_ListOfShape& theFaces,
|
||||
}
|
||||
}
|
||||
|
||||
// Prepare BVH tree of bounding boxes of the faces to classify
|
||||
// Prepare UB tree of bounding boxes of the faces to classify
|
||||
// taking the bounding boxes from the just prepared vector
|
||||
BOPTools_BoxTree aBBTree;
|
||||
BOPTools_BoxBndTree aBBTree;
|
||||
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
|
||||
|
||||
Standard_Integer aNbF = aVSB.Length();
|
||||
aBBTree.SetSize (aNbF);
|
||||
for (Standard_Integer i = 0; i < aNbF; ++i)
|
||||
{
|
||||
aBBTree.Add(i, Bnd_Tools::Bnd2BVH(aVSB(i).Box()));
|
||||
aTreeFiller.Add(i, aVSB(i).Box());
|
||||
}
|
||||
|
||||
// Shake tree filler
|
||||
aBBTree.Build();
|
||||
aTreeFiller.Fill();
|
||||
|
||||
// Prepare vector of solids to classify
|
||||
BOPAlgo_VectorOfFillIn3DParts aVFIP;
|
||||
@@ -1591,7 +1605,7 @@ void BOPAlgo_Tools::ClassifyFaces(const TopTools_ListOfShape& theFaces,
|
||||
if (pLIF)
|
||||
aFIP.SetOwnIF(*pLIF);
|
||||
|
||||
aFIP.SetBBTree(&aBBTree);
|
||||
aFIP.SetBBTree(aBBTree);
|
||||
aFIP.SetShapeBoxVector(aVSB);
|
||||
}
|
||||
|
||||
|
@@ -162,6 +162,7 @@ public:
|
||||
|
||||
//! Finds chains of intersecting vertices
|
||||
Standard_EXPORT static void IntersectVertices(const TopTools_IndexedDataMapOfShapeReal& theVertices,
|
||||
const Standard_Boolean theRunParallel,
|
||||
const Standard_Real theFuzzyValue,
|
||||
TopTools_ListOfListOfShape& theChains);
|
||||
|
||||
|
@@ -1203,33 +1203,9 @@ void BOPDS_DS::InitFaceInfo(const Standard_Integer theI)
|
||||
aSI.SetReference(iRef);
|
||||
//
|
||||
aFI.SetIndex(theI);
|
||||
InitFaceInfoIn(theI);
|
||||
UpdateFaceInfoIn(theI);
|
||||
UpdateFaceInfoOn(theI);
|
||||
}
|
||||
//=======================================================================
|
||||
//function : InitFaceInfoIn
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::InitFaceInfoIn (const Standard_Integer theI)
|
||||
{
|
||||
BOPDS_ShapeInfo& aSI = ChangeShapeInfo (theI);
|
||||
if (aSI.HasReference())
|
||||
{
|
||||
BOPDS_FaceInfo& aFI = myFaceInfoPool (aSI.Reference());
|
||||
const TopoDS_Shape& aF = Shape (theI);
|
||||
for (TopoDS_Iterator itS (aF); itS.More(); itS.Next())
|
||||
{
|
||||
const TopoDS_Shape& aV = itS.Value();
|
||||
if (aV.ShapeType() == TopAbs_VERTEX)
|
||||
{
|
||||
Standard_Integer nV = Index (aV);
|
||||
HasShapeSD (nV, nV);
|
||||
aFI.ChangeVerticesIn().Add (nV);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UpdateFaceInfoIn
|
||||
//purpose :
|
||||
@@ -1380,105 +1356,6 @@ void BOPDS_DS::FaceInfoIn(const Standard_Integer theF,
|
||||
}// for (i=0; i<aNbEF; ++i) {
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UpdateFaceInfoIn
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::UpdateFaceInfoIn (const TColStd_MapOfInteger& theFaces)
|
||||
{
|
||||
for (TColStd_MapOfInteger::Iterator itM (theFaces); itM.More(); itM.Next())
|
||||
{
|
||||
const Standard_Integer nF = itM.Value();
|
||||
BOPDS_ShapeInfo& aSI = ChangeShapeInfo (nF);
|
||||
if (!aSI.HasReference())
|
||||
{
|
||||
myFaceInfoPool.Appended().SetIndex (nF);
|
||||
aSI.SetReference (myFaceInfoPool.Length() - 1);
|
||||
}
|
||||
BOPDS_FaceInfo& aFI = myFaceInfoPool (aSI.Reference());
|
||||
aFI.ChangePaveBlocksIn().Clear();
|
||||
aFI.ChangeVerticesIn().Clear();
|
||||
|
||||
// 1. Add pure internal vertices on the face
|
||||
InitFaceInfoIn (nF);
|
||||
}
|
||||
|
||||
// 2. Analyze Vertex-Face interferences
|
||||
BOPDS_VectorOfInterfVF& aVFs = InterfVF();
|
||||
const Standard_Integer aNbVF = aVFs.Length();
|
||||
for (Standard_Integer iVF = 0; iVF < aNbVF; ++iVF)
|
||||
{
|
||||
BOPDS_InterfVF& aVF = aVFs (iVF);
|
||||
const Standard_Integer nF = aVF.Index2();
|
||||
if (theFaces.Contains (nF))
|
||||
{
|
||||
Standard_Integer nV = aVF.Index1();
|
||||
HasShapeSD (nV, nV);
|
||||
myFaceInfoPool (ShapeInfo (nF).Reference()).ChangeVerticesIn().Add (nV);
|
||||
}
|
||||
}
|
||||
//
|
||||
// 3. Analyze Edge-Face interferences
|
||||
BOPDS_VectorOfInterfEF& aEFs = InterfEF();
|
||||
const Standard_Integer aNbEF = aEFs.Length();
|
||||
for (Standard_Integer iEF = 0; iEF < aNbEF; ++iEF)
|
||||
{
|
||||
BOPDS_InterfEF& aEF = aEFs (iEF);
|
||||
const Standard_Integer nF = aEF.Index2();
|
||||
if (theFaces.Contains (nF))
|
||||
{
|
||||
BOPDS_FaceInfo& aFI = myFaceInfoPool (ShapeInfo (nF).Reference());
|
||||
Standard_Integer nVNew;
|
||||
if (aEF.HasIndexNew (nVNew))
|
||||
{
|
||||
HasShapeSD (nVNew, nVNew);
|
||||
aFI.ChangeVerticesIn().Add (nVNew);
|
||||
}
|
||||
else
|
||||
{
|
||||
const Standard_Integer nE = aEF.Index1();
|
||||
const BOPDS_ListOfPaveBlock& aLPB = PaveBlocks (nE);
|
||||
for (BOPDS_ListOfPaveBlock::Iterator itPB (aLPB); itPB.More(); itPB.Next())
|
||||
{
|
||||
const Handle(BOPDS_PaveBlock)& aPB = itPB.Value();
|
||||
const Handle(BOPDS_CommonBlock)& aCB = CommonBlock (aPB);
|
||||
if (!aCB.IsNull())
|
||||
{
|
||||
if (aCB->Contains (nF))
|
||||
{
|
||||
const Handle(BOPDS_PaveBlock)& aPBR = aCB->PaveBlock1();
|
||||
aFI.ChangePaveBlocksIn().Add(aPBR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : UpdateFaceInfoOn
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::UpdateFaceInfoOn (const TColStd_MapOfInteger& theFaces)
|
||||
{
|
||||
for (TColStd_MapOfInteger::Iterator itM (theFaces); itM.More(); itM.Next())
|
||||
{
|
||||
const Standard_Integer nF = itM.Value();
|
||||
BOPDS_ShapeInfo& aSI = ChangeShapeInfo (nF);
|
||||
if (!aSI.HasReference())
|
||||
{
|
||||
myFaceInfoPool.Appended().SetIndex (nF);
|
||||
aSI.SetReference (myFaceInfoPool.Length() - 1);
|
||||
}
|
||||
BOPDS_FaceInfo& aFI = myFaceInfoPool (aSI.Reference());
|
||||
aFI.ChangePaveBlocksOn().Clear();
|
||||
aFI.ChangeVerticesOn().Clear();
|
||||
|
||||
FaceInfoOn (nF, aFI.ChangePaveBlocksOn(), aFI.ChangeVerticesOn());
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : RefineFaceInfoOn
|
||||
//purpose :
|
||||
@@ -1508,44 +1385,6 @@ void BOPDS_DS::RefineFaceInfoOn()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : RefineFaceInfoIn
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BOPDS_DS::RefineFaceInfoIn()
|
||||
{
|
||||
for (Standard_Integer i = 0; i < myNbSourceShapes; ++i)
|
||||
{
|
||||
const BOPDS_ShapeInfo& aSI = ShapeInfo(i);
|
||||
if (aSI.ShapeType() != TopAbs_FACE)
|
||||
continue;
|
||||
|
||||
if (!aSI.HasReference())
|
||||
continue;
|
||||
|
||||
BOPDS_FaceInfo& aFI = ChangeFaceInfo(i);
|
||||
|
||||
const BOPDS_IndexedMapOfPaveBlock& aMPBOn = aFI.PaveBlocksOn();
|
||||
BOPDS_IndexedMapOfPaveBlock& aMPBIn = aFI.ChangePaveBlocksIn();
|
||||
|
||||
if (aMPBIn.IsEmpty() || aMPBOn.IsEmpty())
|
||||
continue;
|
||||
|
||||
BOPDS_IndexedMapOfPaveBlock aMPBInNew;
|
||||
|
||||
const Standard_Integer aNbPBIn = aMPBIn.Extent();
|
||||
for (Standard_Integer j = 1; j <= aNbPBIn; ++j)
|
||||
{
|
||||
if (!aMPBOn.Contains(aMPBIn(j)))
|
||||
aMPBInNew.Add(aMPBIn(j));
|
||||
}
|
||||
|
||||
if (aMPBInNew.Extent() < aNbPBIn)
|
||||
aMPBIn = aMPBInNew;
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : AloneVertices
|
||||
//purpose :
|
||||
|
@@ -274,14 +274,10 @@ Standard_EXPORT virtual ~BOPDS_DS();
|
||||
//! Update the state In of face with index theIndex
|
||||
Standard_EXPORT void UpdateFaceInfoIn (const Standard_Integer theIndex);
|
||||
|
||||
//! Update the state IN for all faces in the given map
|
||||
Standard_EXPORT void UpdateFaceInfoIn (const TColStd_MapOfInteger& theFaces);
|
||||
|
||||
//! Update the state On of face with index theIndex
|
||||
Standard_EXPORT void UpdateFaceInfoOn (const Standard_Integer theIndex);
|
||||
|
||||
//! Update the state ON for all faces in the given map
|
||||
Standard_EXPORT void UpdateFaceInfoOn (const TColStd_MapOfInteger& theFaces);
|
||||
|
||||
//! Selector
|
||||
//! Returns the state On
|
||||
@@ -307,8 +303,6 @@ Standard_EXPORT virtual ~BOPDS_DS();
|
||||
//! ++
|
||||
Standard_EXPORT void RefineFaceInfoOn();
|
||||
|
||||
//! Removes any pave block from list of having IN state if it has also the state ON.
|
||||
Standard_EXPORT void RefineFaceInfoIn();
|
||||
|
||||
//! Returns information about ON/IN sub-shapes of the given faces.
|
||||
//! @param theMVOnIn the indices of ON/IN vertices from both faces
|
||||
@@ -483,10 +477,6 @@ protected:
|
||||
|
||||
//! Initializes the state of face with index theIndex
|
||||
Standard_EXPORT void InitFaceInfo (const Standard_Integer theIndex);
|
||||
|
||||
//! Initializes the FaceInfo structure for face with index theIndex with elements
|
||||
//! having IN state for the face
|
||||
Standard_EXPORT void InitFaceInfoIn (const Standard_Integer theIndex);
|
||||
|
||||
Standard_EXPORT void InitShape (const Standard_Integer theIndex, const TopoDS_Shape& theS);
|
||||
|
||||
|
@@ -18,16 +18,16 @@
|
||||
|
||||
#include <Bnd_Box.hxx>
|
||||
#include <Bnd_OBB.hxx>
|
||||
#include <Bnd_Tools.hxx>
|
||||
#include <BOPDS_DS.hxx>
|
||||
#include <BOPDS_IndexRange.hxx>
|
||||
#include <BOPDS_Iterator.hxx>
|
||||
#include <BOPDS_Pair.hxx>
|
||||
#include <BOPDS_MapOfPair.hxx>
|
||||
#include <BOPDS_Tools.hxx>
|
||||
#include <BOPTools_BoxTree.hxx>
|
||||
#include <BOPTools_BoxBndTree.hxx>
|
||||
#include <BOPTools_Parallel.hxx>
|
||||
#include <IntTools_Context.hxx>
|
||||
#include <NCollection_UBTreeFiller.hxx>
|
||||
#include <NCollection_Vector.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <algorithm>
|
||||
@@ -37,12 +37,12 @@
|
||||
//class : BOPDS_TreeSelector
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
class BOPDS_TSR : public BOPTools_BoxTreeSelector
|
||||
{
|
||||
class BOPDS_TSR : public BOPTools_BoxBndTreeSelector{
|
||||
public:
|
||||
BOPDS_TSR() :
|
||||
BOPTools_BoxTreeSelector(),
|
||||
BOPTools_BoxBndTreeSelector(),
|
||||
myHasBRep(Standard_False),
|
||||
myTree(NULL),
|
||||
myIndex(-1) {}
|
||||
//
|
||||
virtual ~BOPDS_TSR() {
|
||||
@@ -52,18 +52,23 @@ class BOPDS_TSR : public BOPTools_BoxTreeSelector
|
||||
myHasBRep=bFlag;
|
||||
}
|
||||
//
|
||||
void SetTree(BOPTools_BoxBndTree& aTree) {
|
||||
myTree=&aTree;
|
||||
}
|
||||
//
|
||||
void SetIndex(const Standard_Integer theIndex) { myIndex = theIndex; }
|
||||
//
|
||||
Standard_Integer Index() const { return myIndex; }
|
||||
//
|
||||
void Perform() {
|
||||
if (myHasBRep) {
|
||||
Select();
|
||||
myTree->Select(*this);
|
||||
}
|
||||
}
|
||||
//
|
||||
protected:
|
||||
Standard_Boolean myHasBRep;
|
||||
BOPTools_BoxBndTree *myTree;
|
||||
Standard_Integer myIndex;
|
||||
};
|
||||
//
|
||||
@@ -71,6 +76,7 @@ class BOPDS_TSR : public BOPTools_BoxTreeSelector
|
||||
typedef NCollection_Vector<BOPDS_TSR> BOPDS_VectorOfTSR;
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function :
|
||||
//purpose :
|
||||
@@ -283,81 +289,142 @@ void BOPDS_Iterator::Intersect(const Handle(IntTools_Context)& theCtx,
|
||||
const Standard_Boolean theCheckOBB,
|
||||
const Standard_Real theFuzzyValue)
|
||||
{
|
||||
const Standard_Integer aNb = myDS->NbSourceShapes();
|
||||
|
||||
// Prepare BVH
|
||||
BOPTools_BoxTree aBoxTree;
|
||||
aBoxTree.SetSize (aNb);
|
||||
for (Standard_Integer i = 0; i < aNb; ++i)
|
||||
{
|
||||
const BOPDS_ShapeInfo& aSI = myDS->ShapeInfo(i);
|
||||
if (!aSI.HasBRep())
|
||||
Standard_Integer i, j, iX, i1, i2, iR, aNb, aNbR;
|
||||
Standard_Integer iTi, iTj;
|
||||
TopAbs_ShapeEnum aTi, aTj;
|
||||
//
|
||||
myBoxTree.Clear();
|
||||
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(myBoxTree);
|
||||
//
|
||||
aNb = myDS->NbSourceShapes();
|
||||
BOPDS_VectorOfTSR aVTSR(aNb);
|
||||
//
|
||||
for (i=0; i<aNb; ++i) {
|
||||
const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
|
||||
Standard_Boolean bHasBrep = aSI.IsInterfering() && !(aSI.ShapeType() == TopAbs_SOLID);
|
||||
//
|
||||
BOPDS_TSR& aTSR=aVTSR.Appended();
|
||||
//
|
||||
aTSR.SetHasBRep(bHasBrep);
|
||||
if (!bHasBrep) {
|
||||
continue;
|
||||
const Bnd_Box& aBox = aSI.Box();
|
||||
aBoxTree.Add (i, Bnd_Tools::Bnd2BVH (aBox));
|
||||
}
|
||||
|
||||
// Build BVH
|
||||
aBoxTree.Build();
|
||||
|
||||
// Select pairs of shapes with interfering bounding boxes
|
||||
BOPTools_BoxPairSelector aPairSelector;
|
||||
aPairSelector.SetBVHSets (&aBoxTree, &aBoxTree);
|
||||
aPairSelector.SetSame (Standard_True);
|
||||
aPairSelector.Select();
|
||||
aPairSelector.Sort();
|
||||
|
||||
// Treat the selected pairs
|
||||
const std::vector<BOPTools_BoxPairSelector::PairIDs>& aPairs = aPairSelector.Pairs();
|
||||
const Standard_Integer aNbPairs = static_cast<Standard_Integer> (aPairs.size());
|
||||
|
||||
Standard_Integer iPair = 0;
|
||||
|
||||
const Standard_Integer aNbR = myDS->NbRanges();
|
||||
for (Standard_Integer iR = 0; iR < aNbR; ++iR)
|
||||
{
|
||||
const BOPDS_IndexRange& aRange = myDS->Range(iR);
|
||||
|
||||
for (; iPair < aNbPairs; ++iPair)
|
||||
{
|
||||
const BOPTools_BoxPairSelector::PairIDs& aPair = aPairs[iPair];
|
||||
if (!aRange.Contains (aPair.ID1))
|
||||
// Go to the next range
|
||||
break;
|
||||
|
||||
if (aRange.Contains (aPair.ID2))
|
||||
// Go to the next pair
|
||||
continue;
|
||||
|
||||
const BOPDS_ShapeInfo& aSI1 = myDS->ShapeInfo (aPair.ID1);
|
||||
const BOPDS_ShapeInfo& aSI2 = myDS->ShapeInfo (aPair.ID2);
|
||||
|
||||
const TopAbs_ShapeEnum aType1 = aSI1.ShapeType();
|
||||
const TopAbs_ShapeEnum aType2 = aSI2.ShapeType();
|
||||
|
||||
Standard_Integer iType1 = BOPDS_Tools::TypeToInteger (aType1);
|
||||
Standard_Integer iType2 = BOPDS_Tools::TypeToInteger (aType2);
|
||||
|
||||
// avoid interfering of the shape with its sub-shapes
|
||||
if (((iType1 < iType2) && aSI1.HasSubShape (aPair.ID2)) ||
|
||||
((iType1 > iType2) && aSI2.HasSubShape (aPair.ID1)))
|
||||
continue;
|
||||
|
||||
if (theCheckOBB)
|
||||
{
|
||||
// Check intersection of Oriented bounding boxes of the shapes
|
||||
const Bnd_OBB& anOBB1 = theCtx->OBB (aSI1.Shape(), theFuzzyValue);
|
||||
const Bnd_OBB& anOBB2 = theCtx->OBB (aSI2.Shape(), theFuzzyValue);
|
||||
|
||||
if (anOBB1.IsOut (anOBB2))
|
||||
continue;
|
||||
}
|
||||
|
||||
Standard_Integer iX = BOPDS_Tools::TypeToInteger (aType1, aType2);
|
||||
myLists(iX).Append (BOPDS_Pair (Min (aPair.ID1, aPair.ID2),
|
||||
Max (aPair.ID1, aPair.ID2)));
|
||||
}
|
||||
//
|
||||
const Bnd_Box& aBoxEx=aSI.Box();
|
||||
aTSR.SetTree(myBoxTree);
|
||||
aTSR.SetBox(aBoxEx);
|
||||
aTSR.SetIndex(i);
|
||||
//
|
||||
aTreeFiller.Add(i, aBoxEx);
|
||||
}
|
||||
//
|
||||
aTreeFiller.Fill();
|
||||
//
|
||||
//===========================================
|
||||
BOPTools_Parallel::Perform (myRunParallel, aVTSR);
|
||||
//===========================================
|
||||
//
|
||||
BOPDS_MapOfPair aMPFence;
|
||||
//
|
||||
aNbR = myDS->NbRanges() - 1;
|
||||
for (iR = 0; iR < aNbR; ++iR) {
|
||||
const BOPDS_IndexRange& aR = myDS->Range(iR);
|
||||
i1 = aR.First();
|
||||
i2 = aR.Last();
|
||||
for (i = i1; i <= i2; ++i) {
|
||||
const BOPDS_ShapeInfo& aSI = myDS->ShapeInfo(i);
|
||||
//
|
||||
if (!aSI.IsInterfering() || (aSI.ShapeType() == TopAbs_SOLID)) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
BOPDS_TSR& aTSRi = aVTSR(i);
|
||||
const TColStd_ListOfInteger& aLI = aTSRi.Indices();
|
||||
Standard_Integer aNbSD = aLI.Extent();
|
||||
if (!aNbSD) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
aTi = aSI.ShapeType();
|
||||
iTi = BOPDS_Tools::TypeToInteger(aTi);
|
||||
//
|
||||
TColStd_ListIteratorOfListOfInteger aIt(aLI);
|
||||
for (; aIt.More(); aIt.Next()) {
|
||||
j = aIt.Value(); // DS index
|
||||
if (j >= i1 && j <= i2) {
|
||||
continue;// same range
|
||||
}
|
||||
//
|
||||
const BOPDS_ShapeInfo& aSJ = myDS->ShapeInfo(j);
|
||||
aTj = aSJ.ShapeType();
|
||||
iTj = BOPDS_Tools::TypeToInteger(aTj);
|
||||
//
|
||||
// avoid interfering of the same shapes and shape with its sub-shapes
|
||||
if (((iTi < iTj) && aSI.HasSubShape(j)) ||
|
||||
((iTi > iTj) && aSJ.HasSubShape(i))) {
|
||||
continue;
|
||||
}
|
||||
//
|
||||
BOPDS_Pair aPair(i, j);
|
||||
if (aMPFence.Add(aPair)) {
|
||||
if (theCheckOBB)
|
||||
{
|
||||
// Check intersection of Oriented bounding boxes of the shapes
|
||||
Bnd_OBB& anOBBi = theCtx->OBB(aSI.Shape(), theFuzzyValue);
|
||||
Bnd_OBB& anOBBj = theCtx->OBB(aSJ.Shape(), theFuzzyValue);
|
||||
|
||||
if (anOBBi.IsOut(anOBBj))
|
||||
continue;
|
||||
}
|
||||
|
||||
iX = BOPDS_Tools::TypeToInteger(aTi, aTj);
|
||||
myLists(iX).Append(aPair);
|
||||
}// if (aMPFence.Add(aPair)) {
|
||||
}// for (; aIt.More(); aIt.Next()) {
|
||||
}//for (i=i1; i<=i2; ++i) {
|
||||
}//for (iR=1; iR<aNbR; ++iR) {
|
||||
//
|
||||
aMPFence.Clear();
|
||||
aVTSR.Clear();
|
||||
//-----------------------------------------------------scope_1 t
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
// function: PrepareExt
|
||||
// purpose:
|
||||
//=======================================================================
|
||||
void BOPDS_Iterator::PrepareExt(const TColStd_MapOfInteger& theIndices)
|
||||
{
|
||||
if (!myDS)
|
||||
return;
|
||||
|
||||
// Update UB tree of bounding boxes with the increased shapes.
|
||||
// It is expected that not too many shapes will be modified during
|
||||
// the intersection, so after updating the tree it should not become
|
||||
// too unbalanced.
|
||||
TColStd_MapIteratorOfMapOfInteger itM(theIndices);
|
||||
for (; itM.More(); itM.Next())
|
||||
{
|
||||
Standard_Integer nV = itM.Value();
|
||||
myBoxTree.Remove(nV);
|
||||
|
||||
// Add with new box
|
||||
Standard_Integer nVSD = nV;
|
||||
myDS->HasShapeSD(nV, nVSD);
|
||||
const BOPDS_ShapeInfo& aSI = myDS->ShapeInfo(nVSD);
|
||||
const Bnd_Box& aBox = aSI.Box();
|
||||
myBoxTree.Add(nV, aBox);
|
||||
}
|
||||
|
||||
// Clear the extra lists
|
||||
const Standard_Integer aNbExt = BOPDS_Iterator::NbExtInterfs();
|
||||
myLength = 0;
|
||||
for (Standard_Integer i = 0; i < aNbExt; ++i)
|
||||
myExtLists(i).Clear();
|
||||
|
||||
IntersectExt(theIndices);
|
||||
|
||||
myUseExt = Standard_True;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
@@ -366,43 +433,24 @@ void BOPDS_Iterator::Intersect(const Handle(IntTools_Context)& theCtx,
|
||||
//=======================================================================
|
||||
void BOPDS_Iterator::IntersectExt(const TColStd_MapOfInteger& theIndices)
|
||||
{
|
||||
if (!myDS)
|
||||
return;
|
||||
|
||||
const Standard_Integer aNb = myDS->NbSourceShapes();
|
||||
|
||||
BOPTools_BoxTree aBoxTree;
|
||||
aBoxTree.SetSize (aNb);
|
||||
// Prepare vector for parallel selection
|
||||
BOPDS_VectorOfTSR aVTSR(theIndices.Extent());
|
||||
//
|
||||
for (Standard_Integer i = 0; i < aNb; ++i)
|
||||
|
||||
TColStd_MapIteratorOfMapOfInteger itM(theIndices);
|
||||
for (; itM.More(); itM.Next())
|
||||
{
|
||||
const BOPDS_ShapeInfo& aSI=myDS->ShapeInfo(i);
|
||||
if (!aSI.IsInterfering() || (aSI.ShapeType() == TopAbs_SOLID))
|
||||
continue;
|
||||
//
|
||||
if (theIndices.Contains (i))
|
||||
{
|
||||
Standard_Integer nVSD = i;
|
||||
myDS->HasShapeSD (i, nVSD);
|
||||
const BOPDS_ShapeInfo& aSISD = myDS->ShapeInfo (nVSD);
|
||||
const Bnd_Box& aBox = aSISD.Box ();
|
||||
aBoxTree.Add (i, Bnd_Tools::Bnd2BVH(aBox));
|
||||
|
||||
BOPDS_TSR& aTSR=aVTSR.Appended();
|
||||
aTSR.SetHasBRep(Standard_True);
|
||||
aTSR.SetBVHSet (&aBoxTree);
|
||||
aTSR.SetBox (Bnd_Tools::Bnd2BVH (aBox));
|
||||
aTSR.SetIndex (i);
|
||||
}
|
||||
else
|
||||
{
|
||||
aBoxTree.Add (i, Bnd_Tools::Bnd2BVH (aSI.Box ()));
|
||||
}
|
||||
Standard_Integer nV = itM.Value();
|
||||
Standard_Integer nVSD = nV;
|
||||
myDS->HasShapeSD(nV, nVSD);
|
||||
const BOPDS_ShapeInfo& aSI = myDS->ShapeInfo(nVSD);
|
||||
const Bnd_Box& aBox = aSI.Box();
|
||||
BOPDS_TSR& aTSR = aVTSR.Appended();
|
||||
aTSR.SetHasBRep(Standard_True);
|
||||
aTSR.SetTree(myBoxTree);
|
||||
aTSR.SetBox(aBox);
|
||||
aTSR.SetIndex(nV);
|
||||
}
|
||||
|
||||
aBoxTree.Build();
|
||||
|
||||
// Perform selection
|
||||
BOPTools_Parallel::Perform (myRunParallel, aVTSR);
|
||||
|
||||
@@ -411,8 +459,8 @@ void BOPDS_Iterator::IntersectExt(const TColStd_MapOfInteger& theIndices)
|
||||
// Fence map to avoid duplicating pairs
|
||||
BOPDS_MapOfPair aMPFence;
|
||||
|
||||
const Standard_Integer aNbV = aVTSR.Length();
|
||||
for (Standard_Integer k = 0; k < aNbV; ++k)
|
||||
const Standard_Integer aNb = aVTSR.Length();
|
||||
for (Standard_Integer k = 0; k < aNb; ++k)
|
||||
{
|
||||
BOPDS_TSR& aTSRi = aVTSR(k);
|
||||
const TColStd_ListOfInteger& aLI = aTSRi.Indices();
|
||||
@@ -437,7 +485,7 @@ void BOPDS_Iterator::IntersectExt(const TColStd_MapOfInteger& theIndices)
|
||||
const TopAbs_ShapeEnum aTJ = aSJ.ShapeType();
|
||||
const Standard_Integer iTJ = BOPDS_Tools::TypeToInteger(aTJ);
|
||||
|
||||
// avoid interfering of the shape with its sub-shapes
|
||||
// avoid interfering of the same shapes and shape with its sub-shapes
|
||||
if (((iTI < iTJ) && aSI.HasSubShape(j)) ||
|
||||
((iTI > iTJ) && aSJ.HasSubShape(i)))
|
||||
continue;
|
||||
@@ -451,6 +499,4 @@ void BOPDS_Iterator::IntersectExt(const TColStd_MapOfInteger& theIndices)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
myUseExt = Standard_True;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user