Compare commits
166 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f50111ec50 | ||
|
7109a4ae58 | ||
|
ff77ee8103 | ||
|
223ae699c7 | ||
|
9eee5ab7e4 | ||
|
5614b1369a | ||
|
33a4d46b28 | ||
|
d7dac7fc36 | ||
|
ba9548c55b | ||
|
2275caec09 | ||
|
ddb9ed4810 | ||
|
7073768338 | ||
|
71943b31f8 | ||
|
0101c6febe | ||
|
dfa2a6719c | ||
|
9ff36dac47 | ||
|
7e524fcbe1 | ||
|
d925497360 | ||
|
6cb968fd6f | ||
|
e2a956a633 | ||
|
16a263dc17 | ||
|
2ac4e1beee | ||
|
2f23e4e3a5 | ||
|
bcecb5832b | ||
|
f32cb549d8 | ||
|
ce7fe22d97 | ||
|
1bc34debc1 | ||
|
302ad26bff | ||
|
90eac74988 | ||
|
4d476dd2ed | ||
|
f291ad2528 | ||
|
468856bf4a | ||
|
2f195ab915 | ||
|
6ba81a695f | ||
|
e463b2f685 | ||
|
e3dae4a9f3 | ||
|
f4f9ce4b77 | ||
|
4af354e6ed | ||
|
8f7159cbaa | ||
|
bf2884afbe | ||
|
18c678759e | ||
|
340b2327b6 | ||
|
7ce8fe052d | ||
|
ccd3858e63 | ||
|
4ec4e4e8a8 | ||
|
90da038e9d | ||
|
9a52982920 | ||
|
68a8b15260 | ||
|
03eb96038e | ||
|
44f6e8d5e8 | ||
|
4f5e934445 | ||
|
65acdce54c | ||
|
30fa5f6713 | ||
|
740833a6a8 | ||
|
2009530611 | ||
|
250ad34d90 | ||
|
4a837ecec2 | ||
|
58c0958b50 | ||
|
323e88ada7 | ||
|
d0cf7e8f3c | ||
|
4e69a6ac05 | ||
|
b6b55c3d96 | ||
|
87b7b496ec | ||
|
e1aa4ee31f | ||
|
120dec9fb3 | ||
|
3bbcf114f0 | ||
|
d62df471b2 | ||
|
7ac3f543c7 | ||
|
7c3daf20d1 | ||
|
a81bd74a38 | ||
|
c1e15aa538 | ||
|
519c84b43e | ||
|
794b3d8936 | ||
|
c8365a1c28 | ||
|
45143b7a24 | ||
|
9eab1511b0 | ||
|
0ffecc2fc7 | ||
|
6eddc28410 | ||
|
97e80b8c30 | ||
|
57c5e9e895 | ||
|
2b40ee81d1 | ||
|
62874fa199 | ||
|
e77bcb6b57 | ||
|
d4edeaed31 | ||
|
80ffc5f84d | ||
|
d1069cad4b | ||
|
0c4931e873 | ||
|
3ea347e562 | ||
|
510d099d15 | ||
|
5bd54bef32 | ||
|
4f7ad5fb76 | ||
|
f706c128c2 | ||
|
209ae313a5 | ||
|
81f57d1135 | ||
|
9923f08703 | ||
|
5b756182c2 | ||
|
5f69cfa70c | ||
|
19da974edc | ||
|
bcb2a742a7 | ||
|
005caf39cf | ||
|
2c8c4b8086 | ||
|
7e63845c9e | ||
|
f8d8c3f2bc | ||
|
4e61131a1c | ||
|
4e2151f654 | ||
|
475da0f135 | ||
|
538700ffa2 | ||
|
eb78d737d4 | ||
|
c1638a8db8 | ||
|
0c9c466e9d | ||
|
16f9b46dbb | ||
|
34043fc845 | ||
|
56b495d93b | ||
|
96b92906de | ||
|
f1c209dc77 | ||
|
f9ae10ed21 | ||
|
956d91571c | ||
|
c2064b60e7 | ||
|
eba0379cde | ||
|
41fc11b056 | ||
|
0f05f21194 | ||
|
7d5e26eb2e | ||
|
5c38397303 | ||
|
ca65b1ae37 | ||
|
b4871a3b12 | ||
|
ff60d28357 | ||
|
307fef1dcd | ||
|
95c380d252 | ||
|
f277dcbbc0 | ||
|
af0cb16691 | ||
|
f72c595119 | ||
|
3e9cb80644 | ||
|
9af0d66b84 | ||
|
3be25c1170 | ||
|
ea99d048d7 | ||
|
c585f731eb | ||
|
c983176406 | ||
|
5dd92c395a | ||
|
296dbe8cc8 | ||
|
812ee2c9be | ||
|
92c1f9728e | ||
|
b878139461 | ||
|
5aa7b61083 | ||
|
eee6a80a90 | ||
|
58f2990bc5 | ||
|
7c6fecf9a8 | ||
|
13b36bb14f | ||
|
e2421df543 | ||
|
1e6b2065b5 | ||
|
e2d6f0e37a | ||
|
9ae883970d | ||
|
8019a482b5 | ||
|
36d21f1a1a | ||
|
8a17a8bb45 | ||
|
8dcb81ac82 | ||
|
cd4977383d | ||
|
801e67bc7b | ||
|
7d7541ceeb | ||
|
e8ae1c42a8 | ||
|
74a53b82dc | ||
|
efac173377 | ||
|
35ad04e78b | ||
|
8ab0b859df | ||
|
5e76328243 | ||
|
41e2eed0fc | ||
|
a1ae05e173 |
@@ -661,8 +661,10 @@ endif()
|
||||
if (CAN_USE_GLES2)
|
||||
if (USE_GLES2)
|
||||
add_definitions (-DHAVE_GLES2_EXT)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/egl")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/gles2")
|
||||
if (NOT IOS)
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/egl")
|
||||
OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/gles2")
|
||||
endif()
|
||||
else()
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_EGL")
|
||||
OCCT_CHECK_AND_UNSET_GROUP ("3RDPARTY_GLES2")
|
||||
@@ -1124,14 +1126,8 @@ if (BUILD_SAMPLES_MFC)
|
||||
add_subdirectory(samples/mfc/standard/mfcsample)
|
||||
add_subdirectory(samples/mfc/standard/01_Geometry)
|
||||
add_subdirectory(samples/mfc/standard/02_Modeling)
|
||||
add_subdirectory(samples/mfc/standard/03_Viewer2d)
|
||||
add_subdirectory(samples/mfc/standard/04_Viewer3d)
|
||||
add_subdirectory(samples/mfc/standard/05_ImportExport)
|
||||
add_subdirectory(samples/mfc/standard/06_Ocaf)
|
||||
add_subdirectory(samples/mfc/standard/07_Triangulation)
|
||||
add_subdirectory(samples/mfc/standard/08_HLR)
|
||||
add_subdirectory(samples/mfc/standard/09_Animation)
|
||||
add_subdirectory(samples/mfc/standard/10_Convert)
|
||||
add_subdirectory(samples/mfc/standard/03_ImportExport)
|
||||
add_subdirectory(samples/mfc/standard/04_HLR)
|
||||
|
||||
message (STATUS "Info: \(${CURRENT_TIME}\) MFC Sample projects added")
|
||||
endif()
|
||||
|
@@ -4,4 +4,4 @@ ModelingAlgorithms TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR TKFillet TKOffs
|
||||
Visualization TKService TKV3d TKOpenGl TKOpenGles TKMeshVS TKIVtk TKD3DHost
|
||||
ApplicationFramework TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF
|
||||
DataExchange TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh
|
||||
Draw TKDrawBase TKDraw TKTopTest TKOpenGlTest TKOpenGlesTest TKD3DHostTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
|
||||
Draw TKDraw TKTopTest TKOpenGlTest TKOpenGlesTest TKD3DHostTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw TKIVtkDraw DRAWEXE
|
||||
|
@@ -328,6 +328,7 @@ n RWStepDimTol
|
||||
n RWStepElement
|
||||
n RWStepFEA
|
||||
n RWStepGeom
|
||||
n RWStepKinematics
|
||||
n RWStepRepr
|
||||
n RWStepShape
|
||||
n RWStepVisual
|
||||
@@ -347,6 +348,7 @@ n StepDimTol
|
||||
n StepElement
|
||||
n StepFEA
|
||||
n StepGeom
|
||||
n StepKinematics
|
||||
n StepRepr
|
||||
n StepSelect
|
||||
n StepShape
|
||||
@@ -415,7 +417,6 @@ n XSDRAWSTEP
|
||||
n XSDRAWSTLVRML
|
||||
r DrawResources
|
||||
t TKDCAF
|
||||
t TKDrawBase
|
||||
t TKDraw
|
||||
t TKTObjDRAW
|
||||
t TKTopTest
|
||||
|
@@ -115,6 +115,9 @@ if (MSVC)
|
||||
endif()
|
||||
elseif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshorten-64-to-32")
|
||||
endif()
|
||||
if (BUILD_SHARED_LIBS)
|
||||
if (APPLE)
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "-lm ${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
|
401
adm/genconf.tcl
@@ -56,36 +56,52 @@ lappend ::SYS_PRJNAME_LIST "Qt Creator (.pro)"
|
||||
|
||||
set aPrjIndex [lsearch $::SYS_PRJFMT_LIST $::PRJFMT]
|
||||
set ::PRJNAME [lindex $::SYS_PRJNAME_LIST $aPrjIndex]
|
||||
set ::CONFIG "Release"
|
||||
|
||||
set SYS_VS_LIST {}
|
||||
set SYS_VC_LIST {}
|
||||
set SYS_VCVARS_LIST {}
|
||||
|
||||
# detect installed Visual Studio 2017+ instances by running vswhere.exe
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2017 (15, toolset v141)"
|
||||
lappend ::SYS_VC_LIST "vc141"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[15.0,15.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2017 (15, toolset v141) UWP"
|
||||
lappend ::SYS_VC_LIST "vc141-uwp"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2019 (16, toolset v142)"
|
||||
lappend ::SYS_VC_LIST "vc142"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2019 (16, toolset v142) UWP"
|
||||
lappend ::SYS_VC_LIST "vc142-uwp"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Component.VC.ClangCL -property installationPath} res] } {
|
||||
if { ! [catch {exec vswhere.exe -version "\[16.0,16.99\]" -latest -requires Microsoft.VisualStudio.Component.VC.ClangCL -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2019 (16, toolset ClangCL)"
|
||||
lappend ::SYS_VC_LIST "vclang"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\vcvarsall.bat"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[17.0,17.99\]" -latest -requires Microsoft.VisualStudio.Workload.NativeDesktop -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2022 (17, toolset v143)"
|
||||
lappend ::SYS_VC_LIST "vc143"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[17.0,17.99\]" -latest -requires Microsoft.VisualStudio.Workload.Universal -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2022 (17, toolset v143) UWP"
|
||||
lappend ::SYS_VC_LIST "vc143-uwp"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
if { ! [catch {exec vswhere.exe -version "\[17.0,17.99\]" -latest -requires Microsoft.VisualStudio.Component.VC.ClangCL -property installationPath} res] && "$res" != "" } {
|
||||
lappend ::SYS_VS_LIST "Visual Studio 2022 (17, toolset ClangCL)"
|
||||
lappend ::SYS_VC_LIST "vclang"
|
||||
lappend ::SYS_VCVARS_LIST "$res\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
||||
}
|
||||
|
||||
# detect installed Visual Studio instances from global environment
|
||||
@@ -138,6 +154,13 @@ proc wokdep:gui:Close {} {
|
||||
exit
|
||||
}
|
||||
|
||||
proc wokdep:gui:configSuffix {} {
|
||||
if { "$::CONFIG" == "Debug" } {
|
||||
return "D"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
proc wokdep:gui:SwitchConfig {} {
|
||||
set ::PRJFMT [lindex $::SYS_PRJFMT_LIST [.myFrame.myPrjFrame.myPrjCombo current]]
|
||||
set ::VCVER [lindex $::SYS_VC_LIST [.myFrame.myVsFrame.myVsCombo current]]
|
||||
@@ -148,16 +171,15 @@ proc wokdep:gui:SwitchConfig {} {
|
||||
set ::CSF_OPT_LIB64 {}
|
||||
set ::CSF_OPT_BIN32 {}
|
||||
set ::CSF_OPT_BIN64 {}
|
||||
set ::CSF_OPT_LIB32D {}
|
||||
set ::CSF_OPT_LIB64D {}
|
||||
set ::CSF_OPT_BIN32D {}
|
||||
set ::CSF_OPT_BIN64D {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:SwitchArch {} {
|
||||
if { "$::ARCH" == "32" } {
|
||||
wokdep:gui:Show32Bitness ::aRowIter
|
||||
}
|
||||
if { "$::ARCH" == "64" } {
|
||||
wokdep:gui:Show64Bitness ::aRowIter
|
||||
}
|
||||
wokdep:gui:Show3264Bitness ::aRowIter
|
||||
|
||||
if { [llength [grid info .myFrame.mySave]] != 0 } {
|
||||
grid forget .myFrame.mySave .myFrame.myClose
|
||||
@@ -168,6 +190,16 @@ proc wokdep:gui:SwitchArch {} {
|
||||
grid .myFrame.myClose -row $::aRowIter -column 6 -columnspan 2
|
||||
}
|
||||
|
||||
# update label text and visibility
|
||||
font create wokdep:gui:EmptyFont -size -1
|
||||
proc wokdep:gui:SetLabelText {theLabel theText} {
|
||||
set aFont TkDefaultFont
|
||||
if { $theText == "" } {
|
||||
set aFont wokdep:gui:EmptyFont
|
||||
}
|
||||
$theLabel configure -text $theText -font $aFont
|
||||
}
|
||||
|
||||
proc wokdep:gui:UpdateList {} {
|
||||
set anIncErrs {}
|
||||
set anLib32Errs {}
|
||||
@@ -244,11 +276,28 @@ proc wokdep:gui:UpdateList {} {
|
||||
wokdep:SearchJDK anIncErrs anLib32Errs anLib64Errs anBin32Errs anBin64Errs
|
||||
}
|
||||
|
||||
.myFrame.myIncErrLbl configure -text [join $anIncErrs "\n"]
|
||||
.myFrame.myLib32ErrLbl configure -text [join $anLib32Errs "\n"]
|
||||
.myFrame.myLib64ErrLbl configure -text [join $anLib64Errs "\n"]
|
||||
.myFrame.myBin32ErrLbl configure -text [join $anBin32Errs "\n"]
|
||||
.myFrame.myBin64ErrLbl configure -text [join $anBin64Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myIncErrLbl [join $anIncErrs "\n"]
|
||||
|
||||
wokdep:gui:SetLabelText .myFrame.myIncErrLbl [join $anIncErrs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myLib32_ErrLbl [join $anLib32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myLib64_ErrLbl [join $anLib64Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin32_ErrLbl [join $anBin32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin64_ErrLbl [join $anBin64Errs "\n"]
|
||||
|
||||
wokdep:gui:SetLabelText .myFrame.myLib32D_ErrLbl [join $anLib32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myLib64D_ErrLbl [join $anLib64Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin32D_ErrLbl [join $anBin32Errs "\n"]
|
||||
wokdep:gui:SetLabelText .myFrame.myBin64D_ErrLbl [join $anBin64Errs "\n"]
|
||||
|
||||
# merge duplicates
|
||||
set ::CSF_OPT_LIB32 [lsort -unique $::CSF_OPT_LIB32]
|
||||
set ::CSF_OPT_LIB64 [lsort -unique $::CSF_OPT_LIB64]
|
||||
set ::CSF_OPT_BIN32 [lsort -unique $::CSF_OPT_BIN32]
|
||||
set ::CSF_OPT_BIN64 [lsort -unique $::CSF_OPT_BIN64]
|
||||
set ::CSF_OPT_LIB32D [lsort -unique $::CSF_OPT_LIB32D]
|
||||
set ::CSF_OPT_LIB64D [lsort -unique $::CSF_OPT_LIB64D]
|
||||
set ::CSF_OPT_BIN32D [lsort -unique $::CSF_OPT_BIN32D]
|
||||
set ::CSF_OPT_BIN64D [lsort -unique $::CSF_OPT_BIN64D]
|
||||
}
|
||||
|
||||
proc wokdep:gui:BrowseVcVars {} {
|
||||
@@ -274,34 +323,20 @@ proc wokdep:gui:AddIncPath {} {
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddLib32Path {} {
|
||||
proc wokdep:gui:AddLibPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_LIB32 "$aResult"
|
||||
lappend ::CSF_OPT_LIB${::ARCH}${aCfg} "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddLib64Path {} {
|
||||
proc wokdep:gui:AddBinPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_LIB64 "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddBin32Path {} {
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_BIN32 "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
|
||||
proc wokdep:gui:AddBin64Path {} {
|
||||
set aResult [tk_chooseDirectory -title "Choose a directory"]
|
||||
if { "$aResult" != "" } {
|
||||
lappend ::CSF_OPT_BIN64 "$aResult"
|
||||
lappend ::CSF_OPT_BIN${::ARCH}${aCfg} "$aResult"
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
}
|
||||
@@ -314,34 +349,20 @@ proc wokdep:gui:RemoveIncPath {} {
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveLib32Path {} {
|
||||
set aSelIndices [.myFrame.myLib32List curselection]
|
||||
proc wokdep:gui:RemoveLibPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
set aSelIndices [.myFrame.myLib${::ARCH}${aCfg}_List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myLib32List delete [lindex $aSelIndices 0]
|
||||
.myFrame.myLib${::ARCH}${aCfg}_List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveLib64Path {} {
|
||||
set aSelIndices [.myFrame.myLib64List curselection]
|
||||
proc wokdep:gui:RemoveBinPath {} {
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
set aSelIndices [.myFrame.myBin${::ARCH}${aCfg}_List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myLib64List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveBin32Path {} {
|
||||
set aSelIndices [.myFrame.myBin32List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myBin32List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:RemoveBin64Path {} {
|
||||
set aSelIndices [.myFrame.myBin64List curselection]
|
||||
if { [llength $aSelIndices] != 0 } {
|
||||
.myFrame.myBin64List delete [lindex $aSelIndices 0]
|
||||
.myFrame.myBin${::ARCH}${aCfg}_List delete [lindex $aSelIndices 0]
|
||||
}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
@@ -351,109 +372,73 @@ proc wokdep:gui:ResetIncPath {} {
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetLib32Path {} {
|
||||
set ::CSF_OPT_LIB32 {}
|
||||
proc wokdep:gui:ResetLibPath {} {
|
||||
set ::CSF_OPT_LIB${::ARCH} {}
|
||||
set ::CSF_OPT_LIB${::ARCH}D {}
|
||||
set ::CSF_OPT_BIN${::ARCH} {}
|
||||
set ::CSF_OPT_BIN${::ARCH}D {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetLib64Path {} {
|
||||
set ::CSF_OPT_LIB64 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetBin32Path {} {
|
||||
set ::CSF_OPT_BIN32 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:ResetBin64Path {} {
|
||||
set ::CSF_OPT_BIN64 {}
|
||||
wokdep:gui:UpdateList
|
||||
}
|
||||
|
||||
proc wokdep:gui:Show32Bitness { theRowIter } {
|
||||
proc wokdep:gui:Show3264Bitness { theRowIter } {
|
||||
upvar $theRowIter aRowIter
|
||||
|
||||
if { [llength [grid info .myFrame.myLib64Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib64Lbl .myFrame.myLib64List .myFrame.myLib64Scrl
|
||||
grid forget .myFrame.myLib64Add .myFrame.myLib64Remove .myFrame.myLib64Clear .myFrame.myLib64ErrLbl
|
||||
grid forget .myFrame.myBin64Lbl .myFrame.myBin64List .myFrame.myBin64Scrl
|
||||
grid forget .myFrame.myBin64Add .myFrame.myBin64Remove .myFrame.myBin64Clear .myFrame.myBin64ErrLbl
|
||||
set aArchOld ""
|
||||
set aCfg [wokdep:gui:configSuffix]
|
||||
if { "$::ARCH" == "32" } {
|
||||
set aArchOld "64"
|
||||
} else {
|
||||
set aArchOld "32"
|
||||
}
|
||||
|
||||
# Additional libraries (32-bit) search paths
|
||||
grid .myFrame.myLib32Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib32List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myLib32Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myLib32Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myLib32Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib32Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib32Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib32ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
|
||||
# Additional executables (32-bit) search paths
|
||||
grid .myFrame.myBin32Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin32List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myBin32Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myBin32Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myBin32Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin32Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin32Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin32ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
}
|
||||
|
||||
proc wokdep:gui:Show64Bitness { theRowIter } {
|
||||
upvar $theRowIter aRowIter
|
||||
|
||||
if { [llength [grid info .myFrame.myLib32Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib32Lbl .myFrame.myLib32List .myFrame.myLib32Scrl
|
||||
grid forget .myFrame.myLib32Add .myFrame.myLib32Remove .myFrame.myLib32Clear .myFrame.myLib32ErrLbl
|
||||
grid forget .myFrame.myBin32Lbl .myFrame.myBin32List .myFrame.myBin32Scrl
|
||||
grid forget .myFrame.myBin32Add .myFrame.myBin32Remove .myFrame.myBin32Clear .myFrame.myBin32ErrLbl
|
||||
set aCfgOld "D"
|
||||
if { "$::CONFIG" == "Debug" } { set aCfgOld "" }
|
||||
set aDelArch ${aArchOld}${aCfg}
|
||||
if { [llength [grid info .myFrame.myLib${aDelArch}_Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib${aDelArch}_Lbl .myFrame.myLib${aDelArch}_List .myFrame.myLib${aDelArch}_Scrl
|
||||
grid forget .myFrame.myLib${aDelArch}_Add .myFrame.myLib${aDelArch}_Remove .myFrame.myLib${aDelArch}_Clear .myFrame.myLib${aDelArch}_ErrLbl
|
||||
grid forget .myFrame.myBin${aDelArch}_Lbl .myFrame.myBin${aDelArch}_List .myFrame.myBin${aDelArch}_Scrl
|
||||
grid forget .myFrame.myBin${aDelArch}_Add .myFrame.myBin${aDelArch}_Remove .myFrame.myBin${aDelArch}_Clear .myFrame.myBin${aDelArch}_ErrLbl
|
||||
}
|
||||
set aDelCfg ${::ARCH}${aCfgOld}
|
||||
if { [llength [grid info .myFrame.myLib${aDelCfg}_Lbl]] != 0 } {
|
||||
grid forget .myFrame.myLib${aDelCfg}_Lbl .myFrame.myLib${aDelCfg}_List .myFrame.myLib${aDelCfg}_Scrl
|
||||
grid forget .myFrame.myLib${aDelCfg}_Add .myFrame.myLib${aDelCfg}_Remove .myFrame.myLib${aDelCfg}_Clear .myFrame.myLib${aDelCfg}_ErrLbl
|
||||
grid forget .myFrame.myBin${aDelCfg}_Lbl .myFrame.myBin${aDelCfg}_List .myFrame.myBin${aDelCfg}_Scrl
|
||||
grid forget .myFrame.myBin${aDelCfg}_Add .myFrame.myBin${aDelCfg}_Remove .myFrame.myBin${aDelCfg}_Clear .myFrame.myBin${aDelCfg}_ErrLbl
|
||||
}
|
||||
|
||||
# Additional libraries (64-bit) search paths
|
||||
grid .myFrame.myLib64Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
set aNewCfg ${::ARCH}${aCfg}
|
||||
# Additional libraries search paths
|
||||
grid .myFrame.myLib${aNewCfg}_Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myLib64Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myLib64Add -row $aRowIter -column 6
|
||||
grid .myFrame.myLib${aNewCfg}_List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myLib${aNewCfg}_Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myLib${aNewCfg}_Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myLib64Edit -row $aRowIter -column 6
|
||||
#grid .myFrame.myLib${aNewCfg}_Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64Remove -row $aRowIter -column 6
|
||||
grid .myFrame.myLib${aNewCfg}_Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64Clear -row $aRowIter -column 6
|
||||
grid .myFrame.myLib${aNewCfg}_Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myLib64ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myLib${aNewCfg}_ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
|
||||
# Additional executables (64-bit) search paths
|
||||
grid .myFrame.myBin64Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
# Additional executables search paths
|
||||
grid .myFrame.myBin${aNewCfg}_Lbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myBin64Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myBin64Add -row $aRowIter -column 6
|
||||
grid .myFrame.myBin${aNewCfg}_List -row $aRowIter -column 0 -rowspan 4 -columnspan 5
|
||||
grid .myFrame.myBin${aNewCfg}_Scrl -row $aRowIter -column 5 -rowspan 4
|
||||
grid .myFrame.myBin${aNewCfg}_Add -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
#grid .myFrame.myBin64Edit -row $aRowIter -column 6
|
||||
#grid .myFrame.myBin${aNewCfg}_Edit -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64Remove -row $aRowIter -column 6
|
||||
grid .myFrame.myBin${aNewCfg}_Remove -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64Clear -row $aRowIter -column 6
|
||||
grid .myFrame.myBin${aNewCfg}_Clear -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
grid .myFrame.myBin64ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myBin${aNewCfg}_ErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
}
|
||||
|
||||
@@ -463,6 +448,7 @@ ttk::combobox .myFrame.myPrjFrame.myPrjCombo -values $SYS_PRJNAME_LIST -state
|
||||
ttk::label .myFrame.myVsFrame.myVsLbl -text "Visual Studio configuration:" -padding {5 5 20 5}
|
||||
ttk::combobox .myFrame.myVsFrame.myVsCombo -values $SYS_VS_LIST -state readonly -textvariable VSVER -width 40
|
||||
ttk::combobox .myFrame.myVsFrame.myArchCombo -values { {32} {64} } -textvariable ARCH -state readonly -width 6
|
||||
ttk::combobox .myFrame.myVsFrame.myConfigCombo -values { {Release} {Debug} } -textvariable CONFIG -state readonly -width 6
|
||||
entry .myFrame.myVcEntry -textvariable VCVER -width 10
|
||||
entry .myFrame.myVcVarsEntry -textvariable VCVARS -width 70
|
||||
ttk::button .myFrame.myVcBrowseBtn -text "Browse" -command wokdep:gui:BrowseVcVars
|
||||
@@ -535,44 +521,84 @@ ttk::button .myFrame.myIncClear -text "Reset" -command wokdep:gui:ResetIncP
|
||||
ttk::label .myFrame.myIncErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional libraries (32-bit) search paths
|
||||
ttk::label .myFrame.myLib32Lbl -text "Additional libraries (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib32Scrl -command ".myFrame.myLib32List yview"
|
||||
listbox .myFrame.myLib32List -listvariable CSF_OPT_LIB32 -width 80 -height 5 -yscrollcommand ".myFrame.myLib32Scrl set"
|
||||
ttk::button .myFrame.myLib32Add -text "Add" -command wokdep:gui:AddLib32Path
|
||||
ttk::button .myFrame.myLib32Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib32Remove -text "Remove" -command wokdep:gui:RemoveLib32Path
|
||||
ttk::button .myFrame.myLib32Clear -text "Reset" -command wokdep:gui:ResetLib32Path
|
||||
ttk::label .myFrame.myLib32ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myLib32_Lbl -text "Additional libraries (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib32_Scrl -command ".myFrame.myLib32_List yview"
|
||||
listbox .myFrame.myLib32_List -listvariable CSF_OPT_LIB32 -width 80 -height 5 -yscrollcommand ".myFrame.myLib32_Scrl set"
|
||||
ttk::button .myFrame.myLib32_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib32_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib32_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib32_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib32_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug libraries (32-bit) search paths
|
||||
ttk::label .myFrame.myLib32D_Lbl -text "Additional debug libraries (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib32D_Scrl -command ".myFrame.myLib32D_List yview"
|
||||
listbox .myFrame.myLib32D_List -listvariable CSF_OPT_LIB32D -width 80 -height 5 -yscrollcommand ".myFrame.myLib32D_Scrl set"
|
||||
ttk::button .myFrame.myLib32D_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib32D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib32D_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib32D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib32D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional libraries (64-bit) search paths
|
||||
ttk::label .myFrame.myLib64Lbl -text "Additional libraries (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib64Scrl -command ".myFrame.myLib64List yview"
|
||||
listbox .myFrame.myLib64List -listvariable CSF_OPT_LIB64 -width 80 -height 5 -yscrollcommand ".myFrame.myLib64Scrl set"
|
||||
ttk::button .myFrame.myLib64Add -text "Add" -command wokdep:gui:AddLib64Path
|
||||
ttk::button .myFrame.myLib64Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib64Remove -text "Remove" -command wokdep:gui:RemoveLib64Path
|
||||
ttk::button .myFrame.myLib64Clear -text "Reset" -command wokdep:gui:ResetLib64Path
|
||||
ttk::label .myFrame.myLib64ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myLib64_Lbl -text "Additional libraries (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib64_Scrl -command ".myFrame.myLib64_List yview"
|
||||
listbox .myFrame.myLib64_List -listvariable CSF_OPT_LIB64 -width 80 -height 5 -yscrollcommand ".myFrame.myLib64_Scrl set"
|
||||
ttk::button .myFrame.myLib64_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib64_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib64_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib64_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib64_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug libraries (64-bit) search paths
|
||||
ttk::label .myFrame.myLib64D_Lbl -text "Additional debug libraries (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myLib64D_Scrl -command ".myFrame.myLib64D_List yview"
|
||||
listbox .myFrame.myLib64D_List -listvariable CSF_OPT_LIB64D -width 80 -height 5 -yscrollcommand ".myFrame.myLib64D_Scrl set"
|
||||
ttk::button .myFrame.myLib64D_Add -text "Add" -command wokdep:gui:AddLibPath
|
||||
ttk::button .myFrame.myLib64D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myLib64D_Remove -text "Remove" -command wokdep:gui:RemoveLibPath
|
||||
ttk::button .myFrame.myLib64D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myLib64D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional executables (32-bit) search paths
|
||||
ttk::label .myFrame.myBin32Lbl -text "Additional executables (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin32Scrl -command ".myFrame.myBin32List yview"
|
||||
listbox .myFrame.myBin32List -listvariable CSF_OPT_BIN32 -width 80 -height 5 -yscrollcommand ".myFrame.myBin32Scrl set"
|
||||
ttk::button .myFrame.myBin32Add -text "Add" -command wokdep:gui:AddBin32Path
|
||||
ttk::button .myFrame.myBin32Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin32Remove -text "Remove" -command wokdep:gui:RemoveBin32Path
|
||||
ttk::button .myFrame.myBin32Clear -text "Reset" -command wokdep:gui:ResetBin32Path
|
||||
ttk::label .myFrame.myBin32ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myBin32_Lbl -text "Additional executables (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin32_Scrl -command ".myFrame.myBin32_List yview"
|
||||
listbox .myFrame.myBin32_List -listvariable CSF_OPT_BIN32 -width 80 -height 5 -yscrollcommand ".myFrame.myBin32_Scrl set"
|
||||
ttk::button .myFrame.myBin32_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin32_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin32_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin32_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin32_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug executables (32-bit) search paths
|
||||
ttk::label .myFrame.myBin32D_Lbl -text "Additional debug executables (32-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin32D_Scrl -command ".myFrame.myBin32D_List yview"
|
||||
listbox .myFrame.myBin32D_List -listvariable CSF_OPT_BIN32D -width 80 -height 5 -yscrollcommand ".myFrame.myBin32D_Scrl set"
|
||||
ttk::button .myFrame.myBin32D_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin32D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin32D_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin32D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin32D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional executables (64-bit) search paths
|
||||
ttk::label .myFrame.myBin64Lbl -text "Additional executables (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin64Scrl -command ".myFrame.myBin64List yview"
|
||||
listbox .myFrame.myBin64List -listvariable CSF_OPT_BIN64 -width 80 -height 5 -yscrollcommand ".myFrame.myBin64Scrl set"
|
||||
ttk::button .myFrame.myBin64Add -text "Add" -command wokdep:gui:AddBin64Path
|
||||
ttk::button .myFrame.myBin64Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin64Remove -text "Remove" -command wokdep:gui:RemoveBin64Path
|
||||
ttk::button .myFrame.myBin64Clear -text "Reset" -command wokdep:gui:ResetBin64Path
|
||||
ttk::label .myFrame.myBin64ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
ttk::label .myFrame.myBin64_Lbl -text "Additional executables (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin64_Scrl -command ".myFrame.myBin64_List yview"
|
||||
listbox .myFrame.myBin64_List -listvariable CSF_OPT_BIN64 -width 80 -height 5 -yscrollcommand ".myFrame.myBin64_Scrl set"
|
||||
ttk::button .myFrame.myBin64_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin64_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin64_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin64_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin64_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Additional debug executables (64-bit) search paths
|
||||
ttk::label .myFrame.myBin64D_Lbl -text "Additional debug executables (64-bit) search paths:" -padding {5 5 80 5}
|
||||
scrollbar .myFrame.myBin64D_Scrl -command ".myFrame.myBin64D_List yview"
|
||||
listbox .myFrame.myBin64D_List -listvariable CSF_OPT_BIN64D -width 80 -height 5 -yscrollcommand ".myFrame.myBin64D_Scrl set"
|
||||
ttk::button .myFrame.myBin64D_Add -text "Add" -command wokdep:gui:AddBinPath
|
||||
ttk::button .myFrame.myBin64D_Edit -text "Edit"
|
||||
ttk::button .myFrame.myBin64D_Remove -text "Remove" -command wokdep:gui:RemoveBinPath
|
||||
ttk::button .myFrame.myBin64D_Clear -text "Reset" -command wokdep:gui:ResetLibPath
|
||||
ttk::label .myFrame.myBin64D_ErrLbl -text "Error: " -foreground red -padding {5 5 5 5}
|
||||
|
||||
# Bottom
|
||||
ttk::button .myFrame.mySave -text "Save" -command wokdep:SaveCustom
|
||||
@@ -583,17 +609,22 @@ ttk::button .myFrame.myClose -text "Close" -command wokdep:gui:Close
|
||||
grid .myFrame.myPrjFrame -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myPrjFrame.myPrjLbl -row 0 -column 0
|
||||
grid .myFrame.myPrjFrame.myPrjCombo -row 0 -column 1
|
||||
incr aRowIter
|
||||
if { "$tcl_platform(platform)" == "windows" } {
|
||||
incr aRowIter
|
||||
grid .myFrame.myVsFrame -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
grid .myFrame.myVsFrame.myVsLbl -row 0 -column 0
|
||||
grid .myFrame.myVsFrame.myVsCombo -row 0 -column 1 -padx 5
|
||||
grid .myFrame.myVsFrame.myArchCombo -row 0 -column 2
|
||||
grid .myFrame.myVsFrame.myConfigCombo -row 0 -column 3
|
||||
incr aRowIter
|
||||
grid .myFrame.myVcEntry -row $aRowIter -column 0
|
||||
grid .myFrame.myVcVarsEntry -row $aRowIter -column 1 -columnspan 4 -sticky w
|
||||
grid .myFrame.myVcBrowseBtn -row $aRowIter -column 6
|
||||
incr aRowIter
|
||||
} else {
|
||||
grid .myFrame.myVsFrame -row $aRowIter -column 4 -sticky w
|
||||
grid .myFrame.myVsFrame.myConfigCombo -row 0 -column 0
|
||||
incr aRowIter
|
||||
}
|
||||
|
||||
#
|
||||
@@ -686,15 +717,8 @@ incr aRowIter
|
||||
grid .myFrame.myIncErrLbl -row $aRowIter -column 0 -columnspan 10 -sticky w
|
||||
incr aRowIter
|
||||
|
||||
# Additional 32-bit search paths
|
||||
if { "$ARCH" == "32" } {
|
||||
wokdep:gui:Show32Bitness aRowIter
|
||||
}
|
||||
|
||||
# Additional 64-bit search paths
|
||||
if { "$ARCH" == "64" } {
|
||||
wokdep:gui:Show64Bitness aRowIter
|
||||
}
|
||||
# Additional search paths
|
||||
wokdep:gui:Show3264Bitness aRowIter
|
||||
|
||||
# Bottom section
|
||||
grid .myFrame.mySave -row $aRowIter -column 4 -columnspan 2
|
||||
@@ -710,6 +734,9 @@ bind .myFrame.myVsFrame.myVsCombo <<ComboboxSelected>> {
|
||||
bind .myFrame.myVsFrame.myArchCombo <<ComboboxSelected>> {
|
||||
wokdep:gui:SwitchArch
|
||||
}
|
||||
bind .myFrame.myVsFrame.myConfigCombo <<ComboboxSelected>> {
|
||||
wokdep:gui:SwitchArch
|
||||
}
|
||||
|
||||
.myFrame.mySrchEntry configure -validate all -validatecommand {
|
||||
set ::PRODUCTS_PATH [file normalize "$::PRODUCTS_PATH_INPUT"]
|
||||
|
@@ -52,6 +52,10 @@ set CSF_OPT_LIB32 [list]
|
||||
set CSF_OPT_LIB64 [list]
|
||||
set CSF_OPT_BIN32 [list]
|
||||
set CSF_OPT_BIN64 [list]
|
||||
set CSF_OPT_LIB32D [list]
|
||||
set CSF_OPT_LIB64D [list]
|
||||
set CSF_OPT_BIN32D [list]
|
||||
set CSF_OPT_BIN64D [list]
|
||||
|
||||
if { "$tcl_platform(pointerSize)" == "4" } {
|
||||
set ARCH "32"
|
||||
@@ -116,6 +120,35 @@ if { [info exists ::env(CSF_OPT_BIN64)] } {
|
||||
set CSF_OPT_BIN64 [split "$::env(CSF_OPT_BIN64)" $::SYS_PATH_SPLITTER]
|
||||
}
|
||||
|
||||
if { [info exists ::env(CSF_OPT_LIB32D)] } {
|
||||
set CSF_OPT_LIB32D [split "$::env(CSF_OPT_LIB32D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_LIB32 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_LIB32D $aLibIter]
|
||||
set ::CSF_OPT_LIB32D [lreplace $::CSF_OPT_LIB32D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
if { [info exists ::env(CSF_OPT_LIB64D)] } {
|
||||
set CSF_OPT_LIB64D [split "$::env(CSF_OPT_LIB64D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_LIB64 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_LIB64D $aLibIter]
|
||||
set ::CSF_OPT_LIB64D [lreplace $::CSF_OPT_LIB64D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
if { [info exists ::env(CSF_OPT_BIN32D)] } {
|
||||
set CSF_OPT_BIN32D [split "$::env(CSF_OPT_BIN32D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_BIN32 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_BIN32D $aLibIter]
|
||||
set ::CSF_OPT_BIN32D [lreplace $::CSF_OPT_BIN32D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
if { [info exists ::env(CSF_OPT_BIN64D)] } {
|
||||
set CSF_OPT_BIN64D [split "$::env(CSF_OPT_BIN64D)" $::SYS_PATH_SPLITTER]
|
||||
foreach aLibIter $::CSF_OPT_BIN64 {
|
||||
set aPos [lsearch -exact $::CSF_OPT_BIN64D $aLibIter]
|
||||
set ::CSF_OPT_BIN64D [lreplace $::CSF_OPT_BIN64D $aPos $aPos]
|
||||
}
|
||||
}
|
||||
|
||||
# Search header file in $::CSF_OPT_INC and standard paths
|
||||
proc wokdep:SearchHeader {theHeader} {
|
||||
# search in custom paths
|
||||
@@ -316,6 +349,12 @@ proc wokdep:SearchStandardLibrary {theErrInc theErrLib32 theErrLib64 theErrBin32
|
||||
lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib"
|
||||
lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin"
|
||||
set hasLib true
|
||||
|
||||
set aLibDPath [wokdep:SearchLib "$theCheckLib" "$anArchIter" "$aPath/libd"]
|
||||
if { "$aLibDPath" != "" } {
|
||||
lappend ::CSF_OPT_LIB${anArchIter}D "$aPath/libd"
|
||||
lappend ::CSF_OPT_BIN${anArchIter}D "$aPath/bind"
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -1212,13 +1251,13 @@ proc wokdep:SearchX11 {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64
|
||||
return "$isFound"
|
||||
}
|
||||
|
||||
set aXmuLibPath [wokdep:SearchLib "Xmu" "$::ARCH"]
|
||||
if { "$aXmuLibPath" == "" } {
|
||||
set aXmuLibPath [wokdep:SearchLib "Xmu" "$::ARCH" "/usr/X11/lib"]
|
||||
if { "$aXmuLibPath" != "" } {
|
||||
set aX11LibPath [wokdep:SearchLib "X11" "$::ARCH"]
|
||||
if { "$aX11LibPath" == "" } {
|
||||
set aX11LibPath [wokdep:SearchLib "X11" "$::ARCH" "/usr/X11/lib"]
|
||||
if { "$aX11LibPath" != "" } {
|
||||
#lappend ::CSF_OPT_LIB$::ARCH "/usr/X11/lib"
|
||||
} else {
|
||||
lappend anErrLib$::ARCH "Error: '${::SYS_LIB_PREFIX}Xmu.${::SYS_LIB_SUFFIX}' not found (X11)"
|
||||
lappend anErrLib$::ARCH "Error: '${::SYS_LIB_PREFIX}X11.${::SYS_LIB_SUFFIX}' not found (X11)"
|
||||
set isFound "false"
|
||||
}
|
||||
}
|
||||
@@ -1287,6 +1326,18 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional libraries (32-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_LIB32=$aStringLib32\""
|
||||
|
||||
set aStringLib32d [join $::CSF_OPT_LIB32D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib32d [regsub -all "$::PRODUCTS_PATH" $aStringLib32d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug libraries (32-bit) search paths"
|
||||
if { "$aStringLib32d" != "" && "$aStringLib32" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_LIB32D=$aStringLib32d;%CSF_OPT_LIB32%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_LIB32D=$aStringLib32d\""
|
||||
}
|
||||
|
||||
set aStringLib64 [join $::CSF_OPT_LIB64 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib64 [regsub -all "$::PRODUCTS_PATH" $aStringLib64 "%PRODUCTS_PATH%"]
|
||||
@@ -1295,6 +1346,18 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional libraries (64-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_LIB64=$aStringLib64\""
|
||||
|
||||
set aStringLib64d [join $::CSF_OPT_LIB64D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLib64d [regsub -all "$::PRODUCTS_PATH" $aStringLib64d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug libraries (64-bit) search paths"
|
||||
if { "$aStringLib64d" != "" && "$aStringLib64" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_LIB64D=$aStringLib64d;%CSF_OPT_LIB64%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_LIB64D=$aStringLib64d\""
|
||||
}
|
||||
|
||||
set aStringBin32 [join $::CSF_OPT_BIN32 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin32 [regsub -all "$::PRODUCTS_PATH" $aStringBin32 "%PRODUCTS_PATH%"]
|
||||
@@ -1303,6 +1366,18 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional (32-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_BIN32=$aStringBin32\""
|
||||
|
||||
set aStringBin32d [join $::CSF_OPT_BIN32D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin32d [regsub -all "$::PRODUCTS_PATH" $aStringBin32d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug (32-bit) search paths"
|
||||
if { "$aStringBin32d" != "" && "$aStringBin32" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_BIN32D=$aStringBin32d;%CSF_OPT_BIN32%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_BIN32D=$aStringBin32d\""
|
||||
}
|
||||
|
||||
set aStringBin64 [join $::CSF_OPT_BIN64 $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin64 [regsub -all "$::PRODUCTS_PATH" $aStringBin64 "%PRODUCTS_PATH%"]
|
||||
@@ -1311,6 +1386,18 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "rem Additional (64-bit) search paths"
|
||||
puts $aFile "set \"CSF_OPT_BIN64=$aStringBin64\""
|
||||
|
||||
set aStringBin64d [join $::CSF_OPT_BIN64D $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin64d [regsub -all "$::PRODUCTS_PATH" $aStringBin64d "%PRODUCTS_PATH%"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "rem Additional debug (64-bit) search paths"
|
||||
if { "$aStringBin64d" != "" && "$aStringBin64" != "" } {
|
||||
puts $aFile "set \"CSF_OPT_BIN64D=$aStringBin64d;%CSF_OPT_BIN64%\""
|
||||
} else {
|
||||
puts $aFile "set \"CSF_OPT_BIN64D=$aStringBin64d\""
|
||||
}
|
||||
|
||||
close $aFile
|
||||
} else {
|
||||
set aCustomFilePath "./custom.sh"
|
||||
@@ -1352,6 +1439,18 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "# Additional libraries ($::ARCH-bit) search paths"
|
||||
puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib]\""
|
||||
|
||||
set aStringLibD [join [set ::CSF_OPT_LIB${::ARCH}D] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringLibD [regsub -all "$::PRODUCTS_PATH" $aStringLibD "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional debug libraries ($::ARCH-bit) search paths"
|
||||
if { "$aStringLibD" != "" && "$aStringLib" != "" } {
|
||||
puts $aFile "export CSF_OPT_LIB${::ARCH}D=\"[set aStringLibD]:\$CSF_OPT_LIB${::ARCH}\""
|
||||
} else {
|
||||
puts $aFile "export CSF_OPT_LIB${::ARCH}D=\"[set aStringLibD]\""
|
||||
}
|
||||
|
||||
set aStringBin [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBin [regsub -all "$::PRODUCTS_PATH" $aStringBin "\${PRODUCTS_PATH}"]
|
||||
@@ -1360,6 +1459,18 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "# Additional ($::ARCH-bit) search paths"
|
||||
puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin]\""
|
||||
|
||||
set aStringBinD [join [set ::CSF_OPT_BIN${::ARCH}D] $::SYS_PATH_SPLITTER]
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aStringBinD [regsub -all "$::PRODUCTS_PATH" $aStringBinD "\${PRODUCTS_PATH}"]
|
||||
}
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional debug ($::ARCH-bit) search paths"
|
||||
if { "$aStringBinD" != "" && "$aStringBin" != "" } {
|
||||
puts $aFile "export CSF_OPT_BIN${::ARCH}D=\"[set aStringBinD]:\$CSF_OPT_BIN${::ARCH}\""
|
||||
} else {
|
||||
puts $aFile "export CSF_OPT_BIN${::ARCH}D=\"[set aStringBinD]\""
|
||||
}
|
||||
|
||||
close $aFile
|
||||
}
|
||||
puts "Configuration saved to file '$aCustomFilePath'"
|
||||
@@ -1397,6 +1508,27 @@ proc wokdep:SaveCustom {} {
|
||||
puts $aFile "INCLUDEPATH += \"${anIncPath}\""
|
||||
}
|
||||
|
||||
puts $aFile ""
|
||||
puts $aFile "CONFIG(debug, debug|release) {"
|
||||
puts $aFile " # Additional debug libraries search paths"
|
||||
foreach aLibPath [set ::CSF_OPT_LIB${::ARCH}D] {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aLibPath [regsub -all "$::PRODUCTS_PATH" $aLibPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile " LIBS += -L\"${aLibPath}\""
|
||||
}
|
||||
if { "$::tcl_platform(platform)" == "windows" } {
|
||||
puts $aFile ""
|
||||
puts $aFile " # Additional debug DLLs search paths"
|
||||
foreach aDllPath [set ::CSF_OPT_BIN${::ARCH}D] {
|
||||
if { "$::PRODUCTS_PATH" != "" } {
|
||||
set aDllPath [regsub -all "$::PRODUCTS_PATH" $aDllPath "\$\$\{PRODUCTS_PATH\}"]
|
||||
}
|
||||
puts $aFile " LIBS += -L\"${aDllPath}\""
|
||||
}
|
||||
}
|
||||
puts $aFile "}"
|
||||
|
||||
puts $aFile ""
|
||||
puts $aFile "# Additional libraries search paths"
|
||||
foreach aLibPath [set ::CSF_OPT_LIB$::ARCH] {
|
||||
|
@@ -236,9 +236,11 @@ proc gendoc {args} {
|
||||
return -1
|
||||
}
|
||||
} elseif {$arg_n == "s"} {
|
||||
if { [ lsearch $args_names "pdf" ] == -1 } {
|
||||
if { [ lsearch $args_names "pdf" ] != -1 } {
|
||||
puts "Warning: search is not used with PDF and will be ignored."
|
||||
continue
|
||||
}
|
||||
|
||||
if {$args_values(s) != "NULL"} {
|
||||
set SEARCH_MODE $args_values(s)
|
||||
} else {
|
||||
@@ -247,16 +249,16 @@ proc gendoc {args} {
|
||||
}
|
||||
} elseif {$arg_n == "mathjax"} {
|
||||
if { [ lsearch $args_names "pdf" ] != -1 } {
|
||||
set possible_mathjax_loc $args_values(mathjax)
|
||||
if {[file exist [file join $possible_mathjax_loc $mathjax_js_name]]} {
|
||||
set MATHJAX_LOCATION $args_values(mathjax)
|
||||
puts "$MATHJAX_LOCATION"
|
||||
} else {
|
||||
puts "Warning: $mathjax_js_name is not found in $possible_mathjax_loc."
|
||||
puts " MathJax will be used from $MATHJAX_LOCATION"
|
||||
}
|
||||
puts "Warning: MathJax is not used with PDF and will be ignored."
|
||||
}
|
||||
|
||||
set possible_mathjax_loc $args_values(mathjax)
|
||||
if {[file exist [file join $possible_mathjax_loc $mathjax_js_name]]} {
|
||||
set MATHJAX_LOCATION $args_values(mathjax)
|
||||
puts "$MATHJAX_LOCATION"
|
||||
} else {
|
||||
puts "Warning: MathJax is not used with pdf and will be ignored."
|
||||
puts "Warning: $mathjax_js_name is not found in $possible_mathjax_loc."
|
||||
puts " MathJax will be used from $MATHJAX_LOCATION"
|
||||
}
|
||||
} else {
|
||||
puts "\nWrong argument: $arg_n"
|
||||
@@ -833,6 +835,7 @@ proc OCCDoc_MakeDoxyfile {docType outDir tagFileDir {doxyFileName} {generatorMod
|
||||
puts $doxyFile "PROJECT_NUMBER = $occt_version"
|
||||
puts $doxyFile "OUTPUT_DIRECTORY = $outDir/."
|
||||
puts $doxyFile "PROJECT_LOGO = [OCCDoc_GetDoxDir]/resources/occ_logo.png"
|
||||
puts $doxyFile "EXAMPLE_PATH = [OCCDoc_GetSourceDir $productsPath]"
|
||||
|
||||
set PARAM_INPUT "INPUT ="
|
||||
set PARAM_IMAGEPATH "IMAGE_PATH = [OCCDoc_GetDoxDir]/resources/ "
|
||||
|
@@ -260,7 +260,7 @@ proc genAllResources { theSrcDir } {
|
||||
|
||||
# Wrapper-function to generate VS project files
|
||||
proc genproj {theFormat args} {
|
||||
set aSupportedFormats { "vc7" "vc8" "vc9" "vc10" "vc11" "vc12" "vc14" "vc141" "vc142" "vclang" "cbp" "xcd" "pro"}
|
||||
set aSupportedFormats { "vc7" "vc8" "vc9" "vc10" "vc11" "vc12" "vc14" "vc141" "vc142" "vc143" "vclang" "cbp" "xcd" "pro"}
|
||||
set aSupportedPlatforms { "wnt" "uwp" "lin" "mac" "ios" "qnx" }
|
||||
set isHelpRequire false
|
||||
|
||||
@@ -324,6 +324,7 @@ proc genproj {theFormat args} {
|
||||
vc14 - Visual Studio 2015
|
||||
vc141 - Visual Studio 2017
|
||||
vc142 - Visual Studio 2019
|
||||
vc143 - Visual Studio 2022
|
||||
vclang - Visual Studio with ClangCL toolset
|
||||
cbp - CodeBlocks
|
||||
xcd - XCode
|
||||
@@ -560,6 +561,7 @@ proc OS:MKPRC { theOutDir theFormat theLibType thePlatform theCmpl theSolution }
|
||||
"vc14" -
|
||||
"vc141" -
|
||||
"vc142" -
|
||||
"vc143" -
|
||||
"vclang" { OS:MKVC $anOutDir $aModules $aTools $theSolution $theFormat $isUWP}
|
||||
"cbp" { OS:MKCBP $anOutDir $aModules $theSolution $thePlatform $theCmpl }
|
||||
"xcd" {
|
||||
@@ -1014,8 +1016,8 @@ proc osutils:vcsolution:header { vcversion } {
|
||||
append var \
|
||||
"Microsoft Visual Studio Solution File, Format Version 12.00\n" \
|
||||
"# Visual Studio 2013\n"
|
||||
} elseif { "$vcversion" == "vc14" || "$vcversion" == "vc141" ||
|
||||
"$vcversion" == "vc142" || "$vcversion" == "vclang" } {
|
||||
} elseif { "$vcversion" == "vc14" || "$vcversion" == "vc141" ||
|
||||
"$vcversion" == "vc142" || "$vcversion" == "vc143" || "$vcversion" == "vclang" } {
|
||||
append var \
|
||||
"Microsoft Visual Studio Solution File, Format Version 12.00\n" \
|
||||
"# Visual Studio 14\n"
|
||||
@@ -1290,6 +1292,9 @@ proc osutils:vcproj:readtemplate {theVcVer isUWP isExec} {
|
||||
} elseif { $theVcVer == "vc142" } {
|
||||
set aVCRTVer "vc14"
|
||||
set aToolset "v142"
|
||||
} elseif { $theVcVer == "vc143" } {
|
||||
set aVCRTVer "vc14"
|
||||
set aToolset "v143"
|
||||
} elseif { $theVcVer == "vclang" } {
|
||||
set aVCRTVer "vc14"
|
||||
set aToolset "ClangCL"
|
||||
|
@@ -39,6 +39,10 @@ win32 {
|
||||
DEFINES += _SCL_SECURE_NO_WARNINGS
|
||||
} else {
|
||||
CONFIG += c++11
|
||||
clang {
|
||||
QMAKE_CFLAGS_WARN_ON += -Wshorten-64-to-32
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wshorten-64-to-32
|
||||
}
|
||||
QMAKE_CFLAGS += -fexceptions
|
||||
QMAKE_CXXFLAGS += -fexceptions
|
||||
QMAKE_CXXFLAGS += -fvisibility=default
|
||||
|
@@ -26,6 +26,7 @@ HAVE_FFMPEG { CSF_FFmpeg = -lavcodec -lavformat -lswscale -lavutil }
|
||||
HAVE_TBB { CSF_TBB = -ltbb -ltbbmalloc }
|
||||
HAVE_ZLIB { CSF_ZLIB = -lzlib }
|
||||
HAVE_LIBLZMA { CSF_LIBLZMA = -lliblzma }
|
||||
HAVE_DRACO { CSF_Draco = -ldraco }
|
||||
win32 {
|
||||
CSF_kernel32 = -lkernel32
|
||||
CSF_advapi32 = -ladvapi32
|
||||
|
@@ -20,13 +20,13 @@ export aRapidJson=
|
||||
export aDraco=
|
||||
|
||||
# build stages to perform
|
||||
export toSimulator=0
|
||||
export isStatic=1
|
||||
export toCMake=1
|
||||
export toClean=1
|
||||
export toMake=1
|
||||
export toInstall=1
|
||||
export toPack=0
|
||||
export toPackFat=0
|
||||
export toDebug=0
|
||||
|
||||
export BUILD_ModelingData=ON
|
||||
@@ -41,13 +41,25 @@ export USE_RAPIDJSON=OFF
|
||||
export USE_DRACO=OFF
|
||||
|
||||
export IPHONEOS_DEPLOYMENT_TARGET=8.0
|
||||
export anAbi=arm64
|
||||
#export anAbi=x86_64
|
||||
#export anAbiList="iPhoneOS|arm64 iPhoneSimulator|arm64 iPhoneSimulator|x86_64"
|
||||
export anAbiList="iPhoneOS|arm64"
|
||||
|
||||
if [[ -f "${aScriptDir}/ios_custom.sh" ]]; then
|
||||
source "${aScriptDir}/ios_custom.sh"
|
||||
fi
|
||||
|
||||
anOcctVerSuffix=`grep -e "#define OCC_VERSION_DEVELOPMENT" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
anOcctVersion=`grep -e "#define OCC_VERSION_COMPLETE" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
aGitBranch=`git symbolic-ref --short HEAD`
|
||||
|
||||
YEAR=$(date +"%Y")
|
||||
MONTH=$(date +"%m")
|
||||
DAY=$(date +"%d")
|
||||
aRevision=-${YEAR}-${MONTH}-${DAY}
|
||||
#aRevision=-${aGitBranch}
|
||||
|
||||
set -o pipefail
|
||||
|
||||
aBuildType="Release"
|
||||
aBuildTypePrefix=
|
||||
if [[ $toDebug == 1 ]]; then
|
||||
@@ -58,59 +70,52 @@ aLibType="Shared"
|
||||
if [[ $isStatic == 1 ]]; then
|
||||
aLibType="Static"
|
||||
fi
|
||||
aPlatformAndCompiler=ios-${anAbi}${aBuildTypePrefix}-clang
|
||||
aPlatformSdk="iphoneos"
|
||||
aSysRoot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk"
|
||||
if [[ $toSimulator == 1 ]]; then
|
||||
#anAbi=x86_64
|
||||
aPlatformAndCompiler=ios-simulator64-${anAbi}${aBuildTypePrefix}-clang
|
||||
aPlatformSdk="iphonesimulator"
|
||||
aSysRoot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk"
|
||||
fi
|
||||
|
||||
aWorkDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}-make"
|
||||
aDestDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}"
|
||||
aLogFile="${aCasSrc}/${aBuildRoot}/build-${aPlatformAndCompiler}.log"
|
||||
function buildArch {
|
||||
anAbi=$1
|
||||
aPlatformSdk=$2
|
||||
|
||||
if [[ $toCMake == 1 ]] && [[ $toClean == 1 ]]; then
|
||||
rm -r -f "$aWorkDir"
|
||||
rm -r -f "$aDestDir"
|
||||
fi
|
||||
mkdir -p "$aWorkDir"
|
||||
mkdir -p "$aDestDir"
|
||||
rm -f "$aLogFile"
|
||||
aPlatformAndCompiler=${aPlatformSdk}-${anAbi}${aBuildTypePrefix}-clang
|
||||
|
||||
anOcctVerSuffix=`grep -e "#define OCC_VERSION_DEVELOPMENT" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
anOcctVersion=`grep -e "#define OCC_VERSION_COMPLETE" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
aGitBranch=`git symbolic-ref --short HEAD`
|
||||
aWorkDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}-make"
|
||||
aDestDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}"
|
||||
aLogFile="${aCasSrc}/${aBuildRoot}/build-${aPlatformAndCompiler}.log"
|
||||
|
||||
# include some information about OCCT into archive
|
||||
echo \<pre\>> "${aWorkDir}/VERSION.html"
|
||||
git status >> "${aWorkDir}/VERSION.html"
|
||||
git log -n 100 >> "${aWorkDir}/VERSION.html"
|
||||
echo \</pre\>>> "${aWorkDir}/VERSION.html"
|
||||
|
||||
pushd "$aWorkDir"
|
||||
|
||||
aTimeZERO=$SECONDS
|
||||
set -o pipefail
|
||||
|
||||
function logDuration {
|
||||
if [[ $1 == 1 ]]; then
|
||||
aDur=$(($4 - $3))
|
||||
echo $2 time: $aDur sec>> "$aLogFile"
|
||||
if [[ $toCMake == 1 ]] && [[ $toClean == 1 ]]; then
|
||||
rm -r -f "$aWorkDir"
|
||||
rm -r -f "$aDestDir"
|
||||
fi
|
||||
}
|
||||
mkdir -p "$aWorkDir"
|
||||
mkdir -p "$aDestDir"
|
||||
rm -f "$aLogFile"
|
||||
|
||||
# (re)generate Make files
|
||||
if [[ $toCMake == 1 ]]; then
|
||||
echo Configuring OCCT for iOS...
|
||||
cmake -G "Unix Makefiles" \
|
||||
# include some information about OCCT into archive
|
||||
echo \<pre\>> "${aWorkDir}/VERSION.html"
|
||||
git status >> "${aWorkDir}/VERSION.html"
|
||||
git log -n 100 >> "${aWorkDir}/VERSION.html"
|
||||
echo \</pre\>>> "${aWorkDir}/VERSION.html"
|
||||
|
||||
pushd "$aWorkDir"
|
||||
|
||||
aTimeZERO=$SECONDS
|
||||
|
||||
function logDuration {
|
||||
if [[ $1 == 1 ]]; then
|
||||
aDur=$(($4 - $3))
|
||||
echo $2 time: $aDur sec>> "$aLogFile"
|
||||
fi
|
||||
}
|
||||
|
||||
aSysRoot="/Applications/Xcode.app/Contents/Developer/Platforms/${aPlatformSdk}.platform/Developer/SDKs/${aPlatformSdk}.sdk"
|
||||
|
||||
# (re)generate Make files
|
||||
if [[ $toCMake == 1 ]]; then
|
||||
echo Configuring OCCT for iOS...
|
||||
cmake -G "Unix Makefiles" \
|
||||
-D CMAKE_SYSTEM_NAME="iOS" \
|
||||
-D CMAKE_OSX_ARCHITECTURES:STRING="$anAbi" \
|
||||
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING="$IPHONEOS_DEPLOYMENT_TARGET" \
|
||||
-D CMAKE_OSX_SYSROOT:PATH="$aSysRoot" \
|
||||
-D ENABLE_VISIBILITY:BOOL="TRUE" \
|
||||
-D CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL="OFF" \
|
||||
-D CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL="OFF" \
|
||||
-D CMAKE_BUILD_TYPE:STRING="$aBuildType" \
|
||||
@@ -145,57 +150,118 @@ if [[ $toCMake == 1 ]]; then
|
||||
-D BUILD_MODULE_DataExchange:BOOL="${BUILD_DataExchange}" \
|
||||
-D BUILD_MODULE_Draw:BOOL="OFF" \
|
||||
-D BUILD_DOC_Overview:BOOL="OFF" \
|
||||
"$aCasSrc" 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeGEN=$SECONDS
|
||||
logDuration $toCMake "Generation" $aTimeZERO $aTimeGEN
|
||||
"$aCasSrc" 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeGEN=$SECONDS
|
||||
logDuration $toCMake "Generation" $aTimeZERO $aTimeGEN
|
||||
|
||||
# clean up from previous build
|
||||
if [[ $toClean == 1 ]]; then
|
||||
make clean
|
||||
fi
|
||||
# clean up from previous build
|
||||
if [[ $toClean == 1 ]]; then
|
||||
make clean
|
||||
fi
|
||||
|
||||
# build the project
|
||||
if [[ $toMake == 1 ]]; then
|
||||
echo Building...
|
||||
make -j $aNbJobs 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeBUILD=$SECONDS
|
||||
logDuration $toMake "Building" $aTimeGEN $aTimeBUILD
|
||||
logDuration $toMake "Total building" $aTimeZERO $aTimeBUILD
|
||||
# build the project
|
||||
if [[ $toMake == 1 ]]; then
|
||||
echo Building...
|
||||
make -j $aNbJobs 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeBUILD=$SECONDS
|
||||
logDuration $toMake "Building" $aTimeGEN $aTimeBUILD
|
||||
logDuration $toMake "Total building" $aTimeZERO $aTimeBUILD
|
||||
|
||||
# install the project
|
||||
if [[ $toInstall == 1 ]]; then
|
||||
echo Installing OCCT into $aDestDir...
|
||||
make install 2>&1 | tee -a "$aLogFile"
|
||||
cp -f "$aWorkDir/VERSION.html" "$aDestDir/VERSION.html"
|
||||
fi
|
||||
aTimeINSTALL=$SECONDS
|
||||
logDuration $toInstall "Install" $aTimeBUILD $aTimeINSTALL
|
||||
# install the project
|
||||
if [[ $toInstall == 1 ]]; then
|
||||
echo Installing OCCT into $aDestDir...
|
||||
make install 2>&1 | tee -a "$aLogFile"
|
||||
cp -f "$aWorkDir/VERSION.html" "$aDestDir/VERSION.html"
|
||||
echo Platform: ${aPlatformSdk} ABI: ${anAbi} Build: ${aBuildType} IPHONEOS_DEPLOYMENT_TARGET: ${IPHONEOS_DEPLOYMENT_TARGET} > "$aDestDir/build_target.txt"
|
||||
fi
|
||||
aTimeINSTALL=$SECONDS
|
||||
logDuration $toInstall "Install" $aTimeBUILD $aTimeINSTALL
|
||||
|
||||
# create an archive
|
||||
if [[ $toPack == 1 ]]; then
|
||||
YEAR=$(date +"%Y")
|
||||
MONTH=$(date +"%m")
|
||||
DAY=$(date +"%d")
|
||||
aRevision=-${YEAR}-${MONTH}-${DAY}
|
||||
#aRevision=-${aGitBranch}
|
||||
# create an archive
|
||||
if [[ $toPack == 1 ]]; then
|
||||
anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aPlatformAndCompiler}.tar.bz2
|
||||
echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
|
||||
rm ${aDestDir}/../${anArchName} &>/dev/null
|
||||
pushd "$aDestDir"
|
||||
tar -jcf ${aDestDir}/../${anArchName} *
|
||||
popd
|
||||
fi
|
||||
aTimePACK=$SECONDS
|
||||
logDuration $toPack "Packing archive" $aTimeINSTALL $aTimePACK
|
||||
|
||||
# finished
|
||||
DURATION=$(($aTimePACK - $aTimeZERO))
|
||||
echo Total time: $DURATION sec
|
||||
logDuration 1 "Total" $aTimeZERO $aTimePACK
|
||||
|
||||
anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aPlatformAndCompiler}.tar.bz2
|
||||
echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
|
||||
rm ${aDestDir}/../${anArchName} &>/dev/null
|
||||
pushd "$aDestDir"
|
||||
tar -jcf ${aDestDir}/../${anArchName} *
|
||||
popd
|
||||
}
|
||||
|
||||
for anArchIter in $anAbiList
|
||||
do
|
||||
IFS="|" read -r aPlatform anArch <<< "$anArchIter"
|
||||
echo Platform: ${aPlatform} ABI: ${anArch} Build: ${aBuildType}
|
||||
buildArch $anArch $aPlatform
|
||||
done
|
||||
|
||||
# create a FAT archive
|
||||
if [[ $toPackFat == 1 ]]; then
|
||||
for aPlatIter in iPhoneOS iPhoneSimulator
|
||||
do
|
||||
aSuffixFat=${aPlatIter}${aBuildTypePrefix}-clang
|
||||
aFatDir="${aCasSrc}/${aBuildRoot}/${aSuffixFat}"
|
||||
|
||||
# merge per-arch builds into fat builds
|
||||
hasPlatform=0
|
||||
for anArchIter in $anAbiList
|
||||
do
|
||||
IFS="|" read -r aPlatform anArch <<< "$anArchIter"
|
||||
if [[ $aPlatIter != ${aPlatform} ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
aSuffixThin=${aPlatform}-${anArch}${aBuildTypePrefix}-clang
|
||||
anArchDir="${aCasSrc}/${aBuildRoot}/${aSuffixThin}"
|
||||
if [[ $hasPlatform == 0 ]]; then
|
||||
hasPlatform=1
|
||||
echo Packing FAT archive for platform: ${aPlatform}
|
||||
rm -r -f "$aFatDir"
|
||||
mkdir -p "$aFatDir"
|
||||
rsync -r --exclude '*.a' "$anArchDir/" "$aFatDir"
|
||||
rm -f "$aFatDir/build_target.txt"
|
||||
for aLibIter in $anArchDir/lib/*.a; do
|
||||
aLibName=`basename $aLibIter`
|
||||
lipo "$anArchDir/lib/$aLibName" -output "$aFatDir/lib/$aLibName" -create
|
||||
done
|
||||
else
|
||||
for aLibIter in $aFatDir/lib/*.a; do
|
||||
aLibName=`basename $aLibIter`
|
||||
lipo "$aFatDir/lib/$aLibName" "$anArchDir/lib/$aLibName" -output "$aFatDir/lib/$aLibName" -create
|
||||
#lipo -info "$aFatDir/lib/$aLibName"
|
||||
done
|
||||
fi
|
||||
cat "$anArchDir/build_target.txt" >> "$aFatDir/build_target.txt"
|
||||
done
|
||||
|
||||
# create an archive
|
||||
for anArchIter in $anAbiList
|
||||
do
|
||||
IFS="|" read -r aPlatform anArch <<< "$anArchIter"
|
||||
if [[ $aPlatIter != ${aPlatform} ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aSuffixFat}.tar.bz2
|
||||
echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
|
||||
rm ${aFatDir}/../${anArchName} &>/dev/null
|
||||
pushd "$aFatDir"
|
||||
tar -jcf ${aFatDir}/../${anArchName} *
|
||||
popd
|
||||
break
|
||||
done
|
||||
done
|
||||
fi
|
||||
aTimePACK=$SECONDS
|
||||
logDuration $toPack "Packing archive" $aTimeINSTALL $aTimePACK
|
||||
|
||||
# finished
|
||||
DURATION=$(($aTimePACK - $aTimeZERO))
|
||||
echo Total time: $DURATION sec
|
||||
logDuration 1 "Total" $aTimeZERO $aTimePACK
|
||||
|
||||
popd
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# environment configuration template for macos_build.sh (to be renamed as macos_custom_env.sh)
|
||||
# environment configuration template for ios_build.sh (to be renamed as ios_custom_env.sh)
|
||||
export PATH=/Applications/CMake.app/Contents/bin:$PATH
|
||||
export aFreeType="$aSrcRoot/../3rdparty/freetype-2.10.4-ios"
|
||||
export aFreeImage="$aSrcRoot/../3rdparty/freeimage-3.18-ios"
|
||||
@@ -6,13 +6,13 @@ export aRapidJson="$aSrcRoot/../3rdparty/rapidjson-1.1.0"
|
||||
export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-ios"
|
||||
|
||||
# Uncomment to customize building steps
|
||||
#export toSimulator=0
|
||||
#export isStatic=0
|
||||
#export toCMake=1
|
||||
#export toClean=1
|
||||
#export toMake=1
|
||||
#export toInstall=1
|
||||
#export toPack=0
|
||||
#export toPackFat=1
|
||||
#export toDebug=0
|
||||
|
||||
#export BUILD_ModelingData=ON
|
||||
@@ -26,5 +26,5 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-ios"
|
||||
#export USE_FREEIMAGE=ON
|
||||
|
||||
#export IPHONEOS_DEPLOYMENT_TARGET=8.0
|
||||
#export anAbi=arm64
|
||||
#export anAbi=x86_64
|
||||
#export anAbiList="iPhoneOS|arm64 iPhoneSimulator|arm64 iPhoneSimulator|x86_64"
|
||||
#export anAbiList="iPhoneOS|arm64"
|
||||
|
@@ -20,11 +20,13 @@ export aRapidJson=
|
||||
export aDraco=
|
||||
|
||||
# build stages to perform
|
||||
export isStatic=0
|
||||
export toCMake=1
|
||||
export toClean=1
|
||||
export toMake=1
|
||||
export toInstall=1
|
||||
export toPack=0
|
||||
export toPackFat=0
|
||||
export toDebug=0
|
||||
|
||||
export BUILD_ModelingData=ON
|
||||
@@ -34,72 +36,92 @@ export BUILD_ApplicationFramework=ON
|
||||
export BUILD_DataExchange=ON
|
||||
export BUILD_Draw=ON
|
||||
|
||||
export USE_FREETYPE=ON
|
||||
export USE_FREEIMAGE=ON
|
||||
export USE_RAPIDJSON=OFF
|
||||
export USE_DRACO=OFF
|
||||
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.10
|
||||
#export anAbi=arm64
|
||||
export anAbi=x86_64
|
||||
#export anAbiList="arm64 x86_64"
|
||||
export anAbiList="x86_64"
|
||||
aPlatform="macos"
|
||||
|
||||
if [[ -f "${aScriptDir}/macos_custom.sh" ]]; then
|
||||
source "${aScriptDir}/macos_custom.sh"
|
||||
fi
|
||||
|
||||
anOcctVerSuffix=`grep -e "#define OCC_VERSION_DEVELOPMENT" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
anOcctVersion=`grep -e "#define OCC_VERSION_COMPLETE" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
aGitBranch=`git symbolic-ref --short HEAD`
|
||||
|
||||
YEAR=$(date +"%Y")
|
||||
MONTH=$(date +"%m")
|
||||
DAY=$(date +"%d")
|
||||
aRevision=-${YEAR}-${MONTH}-${DAY}
|
||||
#aRevision=-${aGitBranch}
|
||||
|
||||
set -o pipefail
|
||||
|
||||
aBuildType="Release"
|
||||
aBuildTypePrefix=
|
||||
if [[ $toDebug == 1 ]]; then
|
||||
aBuildType="Debug"
|
||||
aBuildTypePrefix="-debug"
|
||||
fi
|
||||
aPlatformAndCompiler=mac-${anAbi}${aBuildTypePrefix}-clang
|
||||
|
||||
aWorkDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}-make"
|
||||
aDestDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}"
|
||||
aLogFile="${aCasSrc}/${aBuildRoot}/build-${aPlatformAndCompiler}.log"
|
||||
|
||||
if [[ $toCMake == 1 ]] && [[ $toClean == 1 ]]; then
|
||||
rm -r -f "$aWorkDir"
|
||||
rm -r -f "$aDestDir"
|
||||
aLibType="Shared"
|
||||
aLibExt="dylib"
|
||||
if [[ $isStatic == 1 ]]; then
|
||||
aLibType="Static"
|
||||
aLibExt="a"
|
||||
fi
|
||||
mkdir -p "$aWorkDir"
|
||||
mkdir -p "$aDestDir"
|
||||
rm -f "$aLogFile"
|
||||
|
||||
anOcctVerSuffix=`grep -e "#define OCC_VERSION_DEVELOPMENT" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
anOcctVersion=`grep -e "#define OCC_VERSION_COMPLETE" "$aCasSrc/src/Standard/Standard_Version.hxx" | awk '{print $3}' | xargs`
|
||||
aGitBranch=`git symbolic-ref --short HEAD`
|
||||
function buildArch {
|
||||
anAbi=$1
|
||||
|
||||
# include some information about OCCT into archive
|
||||
echo \<pre\>> "${aWorkDir}/VERSION.html"
|
||||
git status >> "${aWorkDir}/VERSION.html"
|
||||
git log -n 100 >> "${aWorkDir}/VERSION.html"
|
||||
echo \</pre\>>> "${aWorkDir}/VERSION.html"
|
||||
aPlatformAndCompiler=${aPlatform}-${anAbi}${aBuildTypePrefix}-clang
|
||||
|
||||
pushd "$aWorkDir"
|
||||
aWorkDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}-make"
|
||||
aDestDir="${aCasSrc}/${aBuildRoot}/${aPlatformAndCompiler}"
|
||||
aLogFile="${aCasSrc}/${aBuildRoot}/build-${aPlatformAndCompiler}.log"
|
||||
|
||||
aTimeZERO=$SECONDS
|
||||
set -o pipefail
|
||||
|
||||
function logDuration {
|
||||
if [[ $1 == 1 ]]; then
|
||||
aDur=$(($4 - $3))
|
||||
echo $2 time: $aDur sec>> "$aLogFile"
|
||||
if [[ $toCMake == 1 ]] && [[ $toClean == 1 ]]; then
|
||||
rm -r -f "$aWorkDir"
|
||||
rm -r -f "$aDestDir"
|
||||
fi
|
||||
}
|
||||
mkdir -p "$aWorkDir"
|
||||
mkdir -p "$aDestDir"
|
||||
rm -f "$aLogFile"
|
||||
|
||||
# (re)generate Make files
|
||||
if [[ $toCMake == 1 ]]; then
|
||||
echo Configuring OCCT for macOS...
|
||||
cmake -G "Unix Makefiles" \
|
||||
-D CMAKE_BUILD_TYPE:STRING="$aBuildType" \
|
||||
-D BUILD_LIBRARY_TYPE:STRING="Shared" \
|
||||
# include some information about OCCT into archive
|
||||
echo \<pre\>> "${aWorkDir}/VERSION.html"
|
||||
git status >> "${aWorkDir}/VERSION.html"
|
||||
git log -n 100 >> "${aWorkDir}/VERSION.html"
|
||||
echo \</pre\>>> "${aWorkDir}/VERSION.html"
|
||||
|
||||
pushd "$aWorkDir"
|
||||
|
||||
aTimeZERO=$SECONDS
|
||||
|
||||
function logDuration {
|
||||
if [[ $1 == 1 ]]; then
|
||||
aDur=$(($4 - $3))
|
||||
echo $2 time: $aDur sec>> "$aLogFile"
|
||||
fi
|
||||
}
|
||||
|
||||
# (re)generate Make files
|
||||
if [[ $toCMake == 1 ]]; then
|
||||
echo Configuring OCCT for macOS...
|
||||
cmake -G "Unix Makefiles" \
|
||||
-D CMAKE_OSX_ARCHITECTURES:STRING="$anAbi" \
|
||||
-D CMAKE_BUILD_TYPE:STRING="$aBuildType" \
|
||||
-D BUILD_LIBRARY_TYPE:STRING="$aLibType" \
|
||||
-D INSTALL_DIR:PATH="$aDestDir" \
|
||||
-D INSTALL_DIR_INCLUDE:STRING="inc" \
|
||||
-D INSTALL_DIR_LIB:STRING="lib" \
|
||||
-D INSTALL_DIR_RESOURCE:STRING="src" \
|
||||
-D INSTALL_NAME_DIR:STRING="@executable_path/../Frameworks" \
|
||||
-D USE_FREETYPE:BOOL="$USE_FREETYPE" \
|
||||
-D 3RDPARTY_FREETYPE_DIR:PATH="$aFreeType" \
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="$aFreeType/include" \
|
||||
-D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="$aFreeType/include" \
|
||||
@@ -125,57 +147,122 @@ if [[ $toCMake == 1 ]]; then
|
||||
-D BUILD_MODULE_DataExchange:BOOL="${BUILD_DataExchange}" \
|
||||
-D BUILD_MODULE_Draw:BOOL="${BUILD_Draw}" \
|
||||
-D BUILD_DOC_Overview:BOOL="OFF" \
|
||||
"$aCasSrc" 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeGEN=$SECONDS
|
||||
logDuration $toCMake "Generation" $aTimeZERO $aTimeGEN
|
||||
"$aCasSrc" 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeGEN=$SECONDS
|
||||
logDuration $toCMake "Generation" $aTimeZERO $aTimeGEN
|
||||
|
||||
# clean up from previous build
|
||||
if [[ $toClean == 1 ]]; then
|
||||
make clean
|
||||
fi
|
||||
# clean up from previous build
|
||||
if [[ $toClean == 1 ]]; then
|
||||
make clean
|
||||
fi
|
||||
|
||||
# build the project
|
||||
if [[ $toMake == 1 ]]; then
|
||||
echo Building OCCT...
|
||||
make -j $aNbJobs 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeBUILD=$SECONDS
|
||||
logDuration $toMake "Building" $aTimeGEN $aTimeBUILD
|
||||
logDuration $toMake "Total building" $aTimeZERO $aTimeBUILD
|
||||
# build the project
|
||||
if [[ $toMake == 1 ]]; then
|
||||
echo Building OCCT...
|
||||
make -j $aNbJobs 2>&1 | tee -a "$aLogFile"
|
||||
aResult=$?; if [[ $aResult != 0 ]]; then exit $aResult; fi
|
||||
fi
|
||||
aTimeBUILD=$SECONDS
|
||||
logDuration $toMake "Building" $aTimeGEN $aTimeBUILD
|
||||
logDuration $toMake "Total building" $aTimeZERO $aTimeBUILD
|
||||
|
||||
# install the project
|
||||
if [[ $toInstall == 1 ]]; then
|
||||
echo Installing OCCT into $aDestDir...
|
||||
make install 2>&1 | tee -a "$aLogFile"
|
||||
cp -f "$aWorkDir/VERSION.html" "$aDestDir/VERSION.html"
|
||||
fi
|
||||
aTimeINSTALL=$SECONDS
|
||||
logDuration $toInstall "Install" $aTimeBUILD $aTimeINSTALL
|
||||
# install the project
|
||||
if [[ $toInstall == 1 ]]; then
|
||||
echo Installing OCCT into $aDestDir...
|
||||
make install 2>&1 | tee -a "$aLogFile"
|
||||
cp -f "$aWorkDir/VERSION.html" "$aDestDir/VERSION.html"
|
||||
echo Platform: macOS ABI: ${anAbi} Build: ${aBuildType} MACOSX_DEPLOYMENT_TARGET: ${MACOSX_DEPLOYMENT_TARGET} > "$aDestDir/build_target.txt"
|
||||
fi
|
||||
aTimeINSTALL=$SECONDS
|
||||
logDuration $toInstall "Install" $aTimeBUILD $aTimeINSTALL
|
||||
|
||||
# create an archive
|
||||
if [[ $toPack == 1 ]]; then
|
||||
YEAR=$(date +"%Y")
|
||||
MONTH=$(date +"%m")
|
||||
DAY=$(date +"%d")
|
||||
aRevision=-${YEAR}-${MONTH}-${DAY}
|
||||
#aRevision=-${aGitBranch}
|
||||
# create an archive
|
||||
if [[ $toPack == 1 ]]; then
|
||||
anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aPlatformAndCompiler}.tar.bz2
|
||||
echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
|
||||
rm ${aDestDir}/../${anArchName} &>/dev/null
|
||||
pushd "$aDestDir"
|
||||
tar -jcf ${aDestDir}/../${anArchName} *
|
||||
popd
|
||||
fi
|
||||
aTimePACK=$SECONDS
|
||||
logDuration $toPack "Packing archive" $aTimeINSTALL $aTimePACK
|
||||
|
||||
anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aPlatformAndCompiler}.tar.bz2
|
||||
# finished
|
||||
DURATION=$(($aTimePACK - $aTimeZERO))
|
||||
echo Total time: $DURATION sec
|
||||
logDuration 1 "Total" $aTimeZERO $aTimePACK
|
||||
|
||||
popd
|
||||
}
|
||||
|
||||
for anArchIter in $anAbiList
|
||||
do
|
||||
echo Platform: macOS ABI: ${anArchIter} Build: ${aBuildType}
|
||||
buildArch $anArchIter
|
||||
done
|
||||
|
||||
# create a FAT archive
|
||||
if [[ $toPackFat == 1 ]]; then
|
||||
aSuffixFat=${aPlatform}${aBuildTypePrefix}-clang
|
||||
aFatDir="${aCasSrc}/${aBuildRoot}/${aSuffixFat}"
|
||||
|
||||
# merge per-arch builds into fat builds
|
||||
hasPlatform=0
|
||||
for anArchIter in $anAbiList
|
||||
do
|
||||
aSuffixThin=${aPlatform}-${anArchIter}${aBuildTypePrefix}-clang
|
||||
anArchDir="${aCasSrc}/${aBuildRoot}/${aSuffixThin}"
|
||||
if [[ $hasPlatform == 0 ]]; then
|
||||
hasPlatform=1
|
||||
echo Packing FAT archive
|
||||
rm -r -f "$aFatDir"
|
||||
mkdir -p "$aFatDir"
|
||||
if [[ $isStatic == 1 ]]; then
|
||||
rsync -r -l --exclude '*.a' "$anArchDir/" "$aFatDir"
|
||||
else
|
||||
rsync -r -l --exclude '*.dylib' "$anArchDir/" "$aFatDir"
|
||||
fi
|
||||
rm -f "$aFatDir/build_target.txt"
|
||||
|
||||
if [[ -L "$anArchDir/bin/DRAWEXE" ]]; then
|
||||
aDrawExe=$(readlink "$anArchDir/bin/DRAWEXE")
|
||||
rm $aFatDir/bin/$aDrawExe
|
||||
lipo "$anArchDir/bin/$aDrawExe" -output "$aFatDir/bin/$aDrawExe" -create
|
||||
fi
|
||||
|
||||
for aLibIter in $anArchDir/lib/*.$aLibExt; do
|
||||
aLibName=`basename $aLibIter`
|
||||
if [[ -L "$anArchDir/lib/$aLibName" ]]; then
|
||||
cp -a "$anArchDir/lib/$aLibName" "$aFatDir/lib/"
|
||||
else
|
||||
lipo "$anArchDir/lib/$aLibName" -output "$aFatDir/lib/$aLibName" -create
|
||||
fi
|
||||
done
|
||||
else
|
||||
if [[ -L "$anArchDir/bin/DRAWEXE" ]]; then
|
||||
aDrawExe=$(readlink "$anArchDir/bin/DRAWEXE")
|
||||
lipo "$aFatDir/bin/$aDrawExe" "$anArchDir/bin/$aDrawExe" -output "$aFatDir/bin/$aDrawExe" -create
|
||||
fi
|
||||
|
||||
for aLibIter in $aFatDir/lib/*.$aLibExt; do
|
||||
aLibName=`basename $aLibIter`
|
||||
if [[ ! -L "$anArchDir/lib/$aLibName" ]]; then
|
||||
lipo "$aFatDir/lib/$aLibName" "$anArchDir/lib/$aLibName" -output "$aFatDir/lib/$aLibName" -create
|
||||
#lipo -info "$aFatDir/lib/$aLibName"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
cat "$anArchDir/build_target.txt" >> "$aFatDir/build_target.txt"
|
||||
done
|
||||
|
||||
# create an archive
|
||||
anArchName=occt-${anOcctVersion}${anOcctVerSuffix}${aRevision}-${aSuffixFat}.tar.bz2
|
||||
echo Creating an archive ${aCasSrc}/${aBuildRoot}/${anArchName}...
|
||||
rm ${aDestDir}/../${anArchName} &>/dev/null
|
||||
pushd "$aDestDir"
|
||||
tar -jcf ${aDestDir}/../${anArchName} *
|
||||
rm ${aFatDir}/../${anArchName} &>/dev/null
|
||||
pushd "$aFatDir"
|
||||
tar -jcf ${aFatDir}/../${anArchName} *
|
||||
popd
|
||||
fi
|
||||
aTimePACK=$SECONDS
|
||||
logDuration $toPack "Packing archive" $aTimeINSTALL $aTimePACK
|
||||
|
||||
# finished
|
||||
DURATION=$(($aTimePACK - $aTimeZERO))
|
||||
echo Total time: $DURATION sec
|
||||
logDuration 1 "Total" $aTimeZERO $aTimePACK
|
||||
|
||||
popd
|
||||
|
@@ -12,6 +12,7 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-macos"
|
||||
#export toMake=1
|
||||
#export toInstall=1
|
||||
#export toPack=1
|
||||
#export toPackFat=1
|
||||
|
||||
#export BUILD_ModelingData=ON
|
||||
#export BUILD_ModelingAlgorithms=ON
|
||||
@@ -25,5 +26,6 @@ export aDraco="$aSrcRoot/../3rdparty/draco-1.4.1-macos"
|
||||
#export USE_FREEIMAGE=ON
|
||||
|
||||
#export MACOSX_DEPLOYMENT_TARGET=10.10
|
||||
#export anAbi=arm64
|
||||
#export anAbi=x86_64
|
||||
#export anAbiList=arm64
|
||||
#export anAbiList=x86_64
|
||||
#export anAbiList="arm64 x86_64"
|
||||
|
@@ -38,6 +38,7 @@ rem Optional 3rd-party libraries to enable
|
||||
set "USE_FREETYPE=ON"
|
||||
set "USE_RAPIDJSON=OFF"
|
||||
set "USE_DRACO=OFF"
|
||||
set "USE_PTHREADS=OFF"
|
||||
|
||||
rem Archive tool
|
||||
set "THE_7Z_PARAMS=-t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on"
|
||||
@@ -59,9 +60,14 @@ for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
|
||||
|
||||
set "aBuildType=Release"
|
||||
set "aBuildTypePrefix="
|
||||
set "anExtraCxxFlags="
|
||||
if /I ["%USE_PTHREADS%"] == ["ON"] (
|
||||
set "anExtraCxxFlags=-pthread"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-pthread"
|
||||
)
|
||||
if ["%toDebug%"] == ["1"] (
|
||||
set "aBuildType=Debug"
|
||||
set "aBuildTypePrefix=-debug"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-debug"
|
||||
)
|
||||
|
||||
call :cmakeGenerate
|
||||
@@ -159,6 +165,7 @@ if ["%toCMake%"] == ["1"] (
|
||||
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="%aToolchain%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D BUILD_LIBRARY_TYPE:STRING="Static" ^
|
||||
-D CMAKE_CXX_FLAGS="%anExtraCxxFlags%" ^
|
||||
-D INSTALL_DIR:PATH="%aDestDir%" ^
|
||||
-D INSTALL_DIR_INCLUDE:STRING="inc" ^
|
||||
-D INSTALL_DIR_RESOURCE:STRING="src" ^
|
||||
@@ -256,6 +263,7 @@ if ["%toCMake%"] == ["1"] (
|
||||
cmake -G "MinGW Makefiles" ^
|
||||
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="%aToolchain%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D CMAKE_CXX_FLAGS="%anExtraCxxFlags%" ^
|
||||
-D CMAKE_INSTALL_PREFIX:PATH="%aDestDirSmpl%" ^
|
||||
-D SOURCE_MAP_BASE:STRING="%sourceMapBase%" ^
|
||||
-D OpenCASCADE_DIR:PATH="%aDestDir%/lib/cmake/opencascade" ^
|
||||
|
@@ -24,5 +24,6 @@ rem set "BUILD_Visualization=ON"
|
||||
rem set "BUILD_ApplicationFramework=ON"
|
||||
rem set "BUILD_DataExchange=ON"
|
||||
|
||||
rem set "USE_RAPIDJSON=OFF"
|
||||
rem set "USE_RAPIDJSON=ON"
|
||||
rem set "USE_DRACO=ON"
|
||||
rem set "USE_PTHREADS=ON"
|
||||
|
@@ -21,6 +21,8 @@ set "toInstall=1"
|
||||
set "toDebug=0"
|
||||
set "sourceMapBase="
|
||||
|
||||
set "USE_PTHREADS=OFF"
|
||||
|
||||
rem Configuration file
|
||||
if exist "%~dp0wasm_custom.bat" call "%~dp0wasm_custom.bat"
|
||||
|
||||
@@ -30,9 +32,14 @@ if not ["%aCmakeBin%"] == [""] ( set "PATH=%aCmakeBin%;%PATH%" )
|
||||
|
||||
set "aBuildType=Release"
|
||||
set "aBuildTypePrefix="
|
||||
set "anExtraCxxFlags="
|
||||
if /I ["%USE_PTHREADS%"] == ["ON"] (
|
||||
set "anExtraCxxFlags=-pthread"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-pthread"
|
||||
)
|
||||
if ["%toDebug%"] == ["1"] (
|
||||
set "aBuildType=Debug"
|
||||
set "aBuildTypePrefix=-debug"
|
||||
set "aBuildTypePrefix=%aBuildTypePrefix%-debug"
|
||||
)
|
||||
|
||||
call :cmakeGenerate
|
||||
@@ -64,6 +71,7 @@ if ["%toCMake%"] == ["1"] (
|
||||
cmake -G "MinGW Makefiles" ^
|
||||
-D CMAKE_TOOLCHAIN_FILE:FILEPATH="%aToolchain%" ^
|
||||
-D CMAKE_BUILD_TYPE:STRING="%aBuildType%" ^
|
||||
-D CMAKE_CXX_FLAGS="%anExtraCxxFlags%" ^
|
||||
-D CMAKE_INSTALL_PREFIX:PATH="%aDestDirSmpl%" ^
|
||||
-D SOURCE_MAP_BASE:STRING="%sourceMapBase%" ^
|
||||
-D OpenCASCADE_DIR:PATH="%aDestDirOcct%/lib/cmake/opencascade" ^
|
||||
|
@@ -121,8 +121,12 @@ if not "%DevEnvDir%" == "" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "DevEnvDir=%%i\Common7\IDE\"
|
||||
)
|
||||
) else if /I "%VCFMT%" == "vc143" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[17.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "DevEnvDir=%%i\Common7\IDE\"
|
||||
)
|
||||
) else if /I "%VCFMT%" == "vclang" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "DevEnvDir=%%i\Common7\IDE\"
|
||||
)
|
||||
) else if /I "%VCFMT%" == "gcc" (
|
||||
@@ -137,6 +141,7 @@ if not "%DevEnvDir%" == "" (
|
||||
echo vc14 = VS 2015
|
||||
echo vc141 = VS 2017
|
||||
echo vc142 = VS 2019
|
||||
echo vc143 = VS 2022
|
||||
echo vclang = VS 2019 with ClangCL toolset
|
||||
exit /B
|
||||
)
|
||||
@@ -167,10 +172,15 @@ if /I "%VCFMT%" == "vc9" (
|
||||
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
set "VCPlatformToolSet=v142"
|
||||
) else if /I "%VCFMT%" == "vclang" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,16.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
) else if /I "%VCFMT%" == "vc143" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[17.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
set "VCPlatformToolSet=v143"
|
||||
) else if /I "%VCFMT%" == "vclang" (
|
||||
for /f "usebackq delims=" %%i in (`vswhere.exe -version "[16.0,17.99]" -latest -requires Microsoft.VisualStudio.Workload.%VCPROP% -property installationPath`) do (
|
||||
set "VCVARS=%%i\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
)
|
||||
set "VCPlatformToolSet=ClangCL"
|
||||
) else if /I "%VCFMT%" == "gcc" (
|
||||
rem MinGW
|
||||
|
@@ -131,6 +131,10 @@ if exist "%CASROOT%\custom.bat" (
|
||||
call "%CASROOT%\custom.bat" %VCVER% %ARCH% %CASDEB%
|
||||
)
|
||||
|
||||
if not ["%QTDIR%"] == [""] (
|
||||
set "PATH=%QTDIR%/bin;%PATH%"
|
||||
set "QT_PLUGIN_PATH=%QTDIR%/plugins"
|
||||
)
|
||||
if not ["%TCL_DIR%"] == [""] set "PATH=%TCL_DIR%;%PATH%"
|
||||
if not ["%TK_DIR%"] == [""] set "PATH=%TK_DIR%;%PATH%"
|
||||
if not ["%FREETYPE_DIR%"] == [""] set "PATH=%FREETYPE_DIR%;%PATH%"
|
||||
@@ -141,10 +145,6 @@ if not ["%TBB_DIR%"] == [""] set "PATH=%TBB_DIR%;%PATH%"
|
||||
if not ["%VTK_DIR%"] == [""] set "PATH=%VTK_DIR%;%PATH%"
|
||||
if not ["%FFMPEG_DIR%"] == [""] set "PATH=%FFMPEG_DIR%;%PATH%"
|
||||
if not ["%OPENVR_DIR%"] == [""] set "PATH=%OPENVR_DIR%;%PATH%"
|
||||
if not ["%QTDIR%"] == [""] (
|
||||
set "PATH=%QTDIR%/bin;%PATH%"
|
||||
set "QT_PLUGIN_PATH=%QTDIR%/plugins"
|
||||
)
|
||||
|
||||
rem ----- Set path to 3rd party and OCCT libraries -----
|
||||
if not "%CSF_OCCTBinPath%" == "" (
|
||||
|
@@ -43,6 +43,7 @@ configure_file ("${OCCT_OVERVIEW_RESOURCE_DIR}/occt_ug_html.doxyfile" "${OCCT_CO
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nPROJECT_NUMBER = ${OCC_VERSION_STRING_EXT}")
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nOUTPUT_DIRECTORY = ${OCCT_GENERATED_OVERVIEW_DIR}/.")
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nPROJECT_LOGO = ${OCCT_OVERVIEW_DIR}/resources/occ_logo.png")
|
||||
file (APPEND ${OCCT_CONFIG_FOR_DOXYGEN} "\nEXAMPLE_PATH = ${CMAKE_SOURCE_DIR}/src")
|
||||
|
||||
set (OCCT_ARTICLE_PARAM_INPUT "INPUT =")
|
||||
set (OCCT_ARTICLE_PARAM_IMAGEPATH "IMAGE_PATH = ${OCCT_OVERVIEW_DIR}/resources/ ")
|
||||
|
@@ -12,14 +12,19 @@ samples/samples.md
|
||||
../samples/CSharp/ReadMe.md
|
||||
../samples/CSharp/ReadMe_D3D.md
|
||||
../samples/qt/AndroidQt/ReadMe.md
|
||||
../samples/qt/IESample/ReadMe.md
|
||||
../samples/qt/OCCTOverview/ReadMe.md
|
||||
../samples/qt/Tutorial/ReadMe.md
|
||||
../samples/java/jniviewer/ReadMe.md
|
||||
../samples/ios/UIKitSample/ReadMe.md
|
||||
../samples/webgl/ReadMe.md
|
||||
../samples/glfw/readme.md
|
||||
samples/ocaf.md
|
||||
samples/ocaf_func.md
|
||||
samples/draw_scripts.md
|
||||
samples/ais_object.md
|
||||
|
||||
samples/novice_guide.md
|
||||
tutorial/tutorial.md
|
||||
|
||||
build/build_upgrade.md
|
||||
|
@@ -6,6 +6,8 @@
|
||||
|
||||
tutorial/tutorial.md
|
||||
|
||||
samples/novice_guide.md
|
||||
|
||||
upgrade/upgrade.md
|
||||
|
||||
user_guides/foundation_classes/foundation_classes.md
|
||||
|
@@ -241,7 +241,7 @@ VTK is an open-source, freely available software system for 3D computer graphics
|
||||
2. Use CMake to generate VS projects for building the library:
|
||||
- Start CMake-GUI and select VTK folder as source path, and the folder of your choice for VS project and intermediate build data.
|
||||
- Click **Configure**.
|
||||
- Select the VS version to be used from the ones you have installed (we recommend using VS 2010) and the architecture (32 or 64-bit).
|
||||
- Select the VS version to be used from the ones you have installed (we recommend using VS 2015) and the architecture (32 or 64-bit).
|
||||
- Generate VS projects with default CMake options. The open solution *VTK.sln* will be generated in the build folder.
|
||||
|
||||
3. Build project VTK in Release mode.
|
||||
@@ -272,7 +272,8 @@ There are two types of third-party products, which are necessary to build OCCT:
|
||||
All 3rd-party products required for building of OCCT could be installed
|
||||
from official repositories. You may install them from console using apt-get utility:
|
||||
|
||||
sudo apt-get install tcllib tklib tcl-dev tk-dev libfreetype-dev libx11-dev libgl1-mesa-dev libfreeimage-dev rapidjson-dev
|
||||
sudo apt-get install tcllib tklib tcl-dev tk-dev libfreetype-dev libx11-dev libgl1-mesa-dev libfreeimage-dev
|
||||
sudo apt-get install rapidjson-dev libdraco-dev
|
||||
|
||||
Building is possible with C++ compliant compiler:
|
||||
|
||||
|
@@ -3,29 +3,25 @@ Build OCCT {#build_upgrade__building_occt}
|
||||
|
||||
@tableofcontents
|
||||
|
||||
@note Before building OCCT, make sure to have all required third-party libraries installed.
|
||||
Before building OCCT, make sure to have all required third-party libraries installed.
|
||||
The list of required libraries depends on what OCCT modules will be used, and your preferences.
|
||||
The typical minimum is **Freetype** (necessary for Visualization) and **Tcl/Tk** (for DRAW).
|
||||
The typical minimum is **FreeType** (necessary for Visualization) and **Tcl/Tk** (for DRAW).
|
||||
See @ref intro_req "requirements on 3rdparty libraries" for a full list.
|
||||
On OS X we recommend to use native libraries.
|
||||
|
||||
@section build_occt_windows Windows
|
||||
The easiest way to install third-party libraries is to download archive with pre-built binaries, corresponding to your target configuration,
|
||||
from [Development Portal](https://dev.opencascade.org/resources/download/3rd-party-components).
|
||||
You can also build third-party libraries from their sources, see @ref build_upgrade_building_3rdparty for instructions.
|
||||
|
||||
@subsection build_occt_win_cmake Building with CMake tool
|
||||
On Linux and macOS we recommend to use libraries maintained by distributive developers, when possible.
|
||||
|
||||
This article describes the **CMake**-based build process, which is now suggested as a standard way to produce the binaries of Open CASCADE Technology from sources. *OCCT requires CMake version 2.8.12 or later*.
|
||||
@section build_occt_win_cmake Building with CMake tool
|
||||
|
||||
Here we describe the build procedure on the example of Windows platform with Visual Studio 2010.
|
||||
However, CMake is cross-platform and can be used to build OCCT on Linux and OS X in essentially the same way.
|
||||
|
||||
@note Before you start, make sure to have installed all 3-rd party products that you are going to use with OCCT; see @ref build_upgrade.
|
||||
|
||||
@subsubsection build_cmake_start Start CMake
|
||||
This chapter describes the [CMake](https://cmake.org/download/)-based build process, which is now suggested as a standard way to produce the binaries of Open CASCADE Technology from sources.
|
||||
OCCT requires CMake version 2.8.12 or later.
|
||||
|
||||
CMake is a tool that generates the actual project files for the selected target build system (e.g. Unix makefiles) or IDE (e.g. Visual Studio 2010).
|
||||
|
||||
For unexperienced users we recommend to start with *cmake-gui* -- a cross-platform GUI tool provided by CMake on Windows, Mac and Linux.
|
||||
A command-line alternative, *ccmake* can also be used.
|
||||
Here we describe the build procedure on the example of Windows platform with Visual Studio 2010.
|
||||
However, CMake is cross-platform and can be used to build OCCT on Linux and macOS in essentially the same way.
|
||||
|
||||
CMake deals with three directories: source, build or binary and installation.
|
||||
|
||||
@@ -36,272 +32,286 @@ CMake deals with three directories: source, build or binary and installation.
|
||||
The good practice is not to use the source directory as a build one.
|
||||
Different configurations should be built in different build directories to avoid conflicts.
|
||||
It is however possible to choose one installation directory for several configurations of OCCT (differentiated by platform, bitness, compiler and build type), for example:
|
||||
|
||||
d:/occt/ -- the source directory
|
||||
d:/tmp/occt-build-vc10-x64 -- the build directory with the generated
|
||||
solution and other intermediate files created during a CMake tool working
|
||||
d:/occt-install -- the installation directory that is
|
||||
able to contain several OCCT configurations
|
||||
|
||||
@subsubsection build_cmake_conf Configuration process
|
||||
d:/occt/ - the source directory
|
||||
d:/tmp/occt-build-vc10-x64 - the build directory with the generated
|
||||
solution and other intermediate files created during a CMake tool working
|
||||
d:/occt-install - the installation directory that is
|
||||
able to contain several OCCT configurations
|
||||
|
||||
If the command-line tool is used, run the tool from the build directory with a single argument indicating the source (relative or absolute path) directory:
|
||||
@subsection build_cmake_conf Configuration process
|
||||
|
||||
For unexperienced users we recommend to start with *cmake-gui* -- a cross-platform GUI tool provided by CMake on Windows, Mac and Linux.
|
||||
A command-line alternative, *ccmake* can also be used.
|
||||
|
||||
If the command-line tool is used, run the tool from the build directory with a single argument indicating the source (relative or absolute path) directory, and press *c* to configure:
|
||||
|
||||
cd d:/tmp/occt-build-vc10-x64
|
||||
ccmake d:/occt
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image000.png}
|
||||
|
||||
Press *c* to configure.
|
||||
|
||||
All actions required in the configuration process with the GUI tool will be described below.
|
||||
|
||||
If the GUI tool is used, run this tool without additional arguments and after that specify the source directory by clicking **Browse Source** and the build (binary) one by clicking **Browse Build**.
|
||||
If the GUI tool is used, run this tool without additional arguments and after that specify the source directory by clicking **Browse Source** and the build (binary) one by clicking **Browse Build**:
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image001.png}
|
||||
|
||||
**Note**: Each configuration of the project should be built in its own directory. When building multiple configurations it is recommended to indicate in the name of build directories the system, bitness and compiler (e.g., <i>d:/occt/build/win32-vc10</i> ).
|
||||
@note Each configuration of the project should be built in its own directory.
|
||||
When building multiple configurations it is suggested to indicate in the name of build directories the system, bitness and compiler (e.g., <i>d:/occt/build/win32-vc10</i>).
|
||||
|
||||
Once the source and build directories are selected, "Configure" button should be pressed in order to start manual configuration process. It begins with selection of a target configurator. It is "Visual Studio 10 2010 Win64" in our example.
|
||||
Once the source and build directories are selected, "Configure" button should be pressed in order to start manual configuration process.
|
||||
It begins with selection of a target configurator. It is "Visual Studio 10 2010 Win64" in our example.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image002.png}
|
||||
|
||||
To build OCCT for **Universal Windows Platform (UWP)** specify the path to toolchain file for cross-compiling <i>d:/occt/adm/templates/uwp.toolchain.config.cmake</i>.
|
||||
@note To build OCCT for **Universal Windows Platform (UWP)** specify the path to toolchain file for cross-compiling <i>d:/occt/adm/templates/uwp.toolchain.config.cmake</i>.
|
||||
Alternatively, if you are using CMake from the command line add options `-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0`.
|
||||
Universal Windows Platform (UWP) is supported only on "Visual Studio 14 2015".
|
||||
File `CASROOT/samples/xaml/ReadMe.md` describes the building procedure of XAML (UWP) sample.
|
||||
|
||||
Alternatively, if you are using CMake from the command line add options -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 .
|
||||
|
||||
**Note**: Universal Windows Platform (UWP) is supported only on "Visual Studio 14 2015". File <i>d:/occt/samples/xaml/ReadMe.md</i> describes the building procedure of XAML (UWP) sample.
|
||||
|
||||
Once "Finish" button is pressed, the first pass of the configuration process is executed. At the end of the process, CMake outputs the list of environment variables, which have to be properly specified for successful configuration.
|
||||
Once "Finish" button is pressed, the first pass of the configuration process is executed.
|
||||
At the end of the process, CMake outputs the list of environment variables, which have to be properly specified for successful configuration.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image003.png}
|
||||
|
||||
The error message provides some information about these variables. This message will appear after each pass of the process until all required variables are specified correctly.
|
||||
The error message provides some information about these variables.
|
||||
This message will appear after each pass of the process until all required variables are specified correctly.
|
||||
|
||||
The change of the state of some variables can lead to the appearance of new variables. The new variables appeared after the pass of the configuration process are highlighted with red color by CMake GUI tool.
|
||||
The change of the state of some variables can lead to the appearance of new variables.
|
||||
The new variables appeared after the pass of the configuration process are highlighted with red color by CMake GUI tool.
|
||||
|
||||
Note: There is "grouped" option, which groups variables with a common prefix.
|
||||
@note There is "grouped" option, which groups variables with a common prefix.
|
||||
|
||||
The following table gives the full list of environment variables used at the configuration stage:
|
||||
|
||||
| Variable | Type | Purpose |
|
||||
|----------|------|---------|
|
||||
| CMAKE_BUILD_TYPE | String | Specifies the build type on single-configuration generators (such as make). Possible values are Debug, Release and RelWithDebInfo |
|
||||
| USE_FREEIMAGE | Boolean flag | Indicates whether FreeImage product should be used in OCCT visualization module for support of popular graphics image formats (PNG, BMP, etc.) |
|
||||
| USE_RAPIDJSON | Boolean flag | Indicates whether RapidJSON product should be used in OCCT Data Exchange module for support of glTF mesh file format |
|
||||
| USE_TBB | Boolean flag | Indicates whether TBB 3rd party is used or not. TBB stands for Threading Building Blocks, the technology of Intel Corp, which comes with different mechanisms and patterns for injecting parallelism into your application. OCCT remains parallel even without TBB product |
|
||||
| USE_VTK | Boolean flag | Indicates whether VTK 3rd party is used or not. VTK stands for Visualization ToolKit, the technology of Kitware Inc intended for general-purpose scientific visualization. OCCT comes with a bridge between CAD data representation and VTK by means of its dedicated VIS component (VTK Integration Services). You may skip this 3rd party unless you are planning to use VTK visualization for OCCT geometry. See the official documentation @ref occt_user_guides__vis for the details on VIS |
|
||||
| CMAKE_BUILD_TYPE | String | Specifies the build type on single-configuration generators (such as make). Possible values are Debug, Release and RelWithDebInfo |
|
||||
| USE_FREETYPE | Boolean | Indicates whether FreeType product should be used in OCCT for text rendering |
|
||||
| USE_FREEIMAGE | Boolean | Indicates whether FreeImage product should be used in OCCT visualization module for support of popular graphics image formats (PNG, BMP, etc.) |
|
||||
| USE_OPENVR | Boolean | Indicates whether OpenVR product should be used in OCCT visualization module for support of Virtual Reality |
|
||||
| USE_OPENGL | Boolean | Indicates whether TKOpenGl graphic driver using OpenGL library (desktop) should be built within OCCT visualization module |
|
||||
| USE_GLES2 | Boolean | Indicates whether TKOpenGles graphic driver using OpenGL ES library (embedded OpenGL) should be built within OCCT visualization module |
|
||||
| USE_RAPIDJSON | Boolean | Indicates whether RapidJSON product should be used in OCCT Data Exchange module for support of glTF mesh file format |
|
||||
| USE_DRACO | Boolean | Indicates whether Draco product should be used in OCCT Data Exchange module for support of Draco compression in glTF mesh file format |
|
||||
| USE_TK | Boolean | Indicates whether Tcl/Tk product should be used in OCCT Draw Harness module for user interface (in addition to Tcl, which is mandatory for Draw Harness) |
|
||||
| USE_TBB | Boolean | Indicates whether TBB (Threading Building Blocks) 3rd party is used or not. Note that OCCT remains parallel even without TBB product |
|
||||
| USE_VTK | Boolean | Indicates whether VTK 3rd party is used or not. OCCT comes with a bridge between CAD data representation and VTK by means of its dedicated VIS component (VTK Integration Services). You may skip this 3rd party unless you are planning to use VTK visualization for OCCT geometry. See the official documentation @ref occt_user_guides__vis for the details on VIS |
|
||||
| 3RDPARTY_DIR | Path | Defines the root directory where all required 3rd party products will be searched. Once you define this path it is very convenient to click "Configure" button in order to let CMake automatically detect all necessary products|
|
||||
| 3RDPARTY_FREETYPE_* | Path | Path to Freetype binaries |
|
||||
| 3RDPARTY_FREETYPE_* | Path | Path to FreeType binaries |
|
||||
| 3RDPARTY_TCL_* 3RDPARTY_TK_* | Path | Path to Tcl/Tk binaries |
|
||||
| 3RDPARTY_FREEIMAGE* | Path | Path to Freeimage binaries |
|
||||
| 3RDPARTY_TBB* | Path | Path to TBB binaries |
|
||||
| 3RDPARTY_FREEIMAGE* | Path | Path to FreeImage binaries |
|
||||
| 3RDPARTY_TBB* | Path | Path to TBB binaries |
|
||||
| 3RDPARTY_VTK_* | Path | Path to VTK binaries |
|
||||
| BUILD_MODULE_<MODULE>| Boolean flag | Indicates whether the corresponding OCCT module should be built or not. It should be noted that some toolkits of a module can be built even if this module is not checked (this happens if some other modules depend on these toolkits). The main modules and their descriptions can be found in @ref user_guides |
|
||||
| BUILD_MODULE_<MODULE>| Boolean | Indicates whether the corresponding OCCT module should be built or not. It should be noted that some toolkits of a module can be built even if this module is not checked (this happens if some other modules depend on these toolkits). The main modules and their descriptions can be found in @ref user_guides |
|
||||
| BUILD_LIBRARY_TYPE | String | Specifies the type of library to be created. "Shared" libraries are linked dynamically and loaded at runtime. "Static" libraries are archives of object files used when linking other targets. Note that Draw Harness plugin system is incompatible with "Static" builds, and therefore it is disabled for these builds.|
|
||||
| BUILD_ADDITIONAL_TOOLKITS | String | Semicolon-separated individual toolkits to include into build process. If you want to build some particular libraries (toolkits) only, then you may uncheck all modules in the corresponding *BUILD_MODUE_\<MODULE\>* options and provide the list of necessary libraries here. Of course, all dependencies will be resolved automatically |
|
||||
| BUILD_YACCLEX | Boolean flag | Enables Flex/Bison lexical analyzers. OCCT source files relating to STEP reader and ExprIntrp functionality are generated automatically with Flex/Bison. Checking this option leads to automatic search of Flex/Bison binaries and regeneration of the mentioned files |
|
||||
| BUILD_SAMPLES_MFC | Boolean flag | Indicates whether MFC samples should be built together with OCCT. This option is only relevant to Windows platforms |
|
||||
| BUILD_SAMPLES_QT | Boolean flag | Indicates whether QT samples should be built together with OCCT. |
|
||||
| BUILD_Inspector | Boolean flag | Indicates whether Inspector should be built together with OCCT. |
|
||||
| BUILD_DOC_Overview | Boolean flag | Indicates whether OCCT overview documentation project should be created together with OCCT. It is not built together with OCCT. Checking this option leads to automatic search of Doxygen binaries. Its building calls Doxygen command to generate the documentation in HTML format |
|
||||
| BUILD_YACCLEX | Boolean | Enables Flex/Bison lexical analyzers. OCCT source files relating to STEP reader and ExprIntrp functionality are generated automatically with Flex/Bison. Checking this option leads to automatic search of Flex/Bison binaries and regeneration of the mentioned files |
|
||||
| BUILD_SAMPLES_MFC | Boolean | Indicates whether MFC samples should be built together with OCCT. This option is only relevant to Windows platforms |
|
||||
| BUILD_SAMPLES_QT | Boolean | Indicates whether QT samples should be built together with OCCT. |
|
||||
| BUILD_Inspector | Boolean | Indicates whether Inspector should be built together with OCCT. |
|
||||
| BUILD_DOC_Overview | Boolean | Indicates whether OCCT overview documentation project should be created together with OCCT. It is not built together with OCCT. Checking this option leads to automatic search of Doxygen binaries. Its building calls Doxygen command to generate the documentation in HTML format |
|
||||
| BUILD_PATCH | Path | Points to the directory recognized as a "patch" for OCCT. If specified, the files from this directory take precedence over the corresponding native OCCT sources. This way you are able to introduce patches to Open CASCADE Technology not affecting the original source distribution |
|
||||
| BUILD_WITH_DEBUG | Boolean flag | Enables extended messages of many OCCT algorithms, usually printed to cout. These include messages on internal errors and special cases encountered, timing, etc. |
|
||||
| BUILD_ENABLE_FPE_SIGNAL_HANDLER | Boolean flag | Enable/Disable the floating point exceptions (FPE) during DRAW execution only. Corresponding environment variable (CSF_FPE) can be changed manually in custom.bat/sh scripts without regeneration by CMake. |
|
||||
| BUILD_WITH_DEBUG | Boolean | Enables extended messages of many OCCT algorithms, usually printed to cout. These include messages on internal errors and special cases encountered, timing, etc. |
|
||||
| BUILD_ENABLE_FPE_SIGNAL_HANDLER | Boolean | Enable/Disable the floating point exceptions (FPE) during DRAW execution only. Corresponding environment variable (CSF_FPE) can be changed manually in custom.bat/sh scripts without regeneration by CMake. |
|
||||
| CMAKE_CONFIGURATION_TYPES | String | Semicolon-separated CMake configurations |
|
||||
| INSTALL_DIR | Path | Points to the installation directory. *INSTALL_DIR* is a synonym of *CMAKE_INSTALL_PREFIX*. The user can specify both *INSTALL_DIR* or *CMAKE_INSTALL_PREFIX* |
|
||||
| INSTALL_DIR_BIN | Path | Relative path to the binaries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_BIN}) |
|
||||
| INSTALL_DIR_SCRIPT | Path | Relative path to the scripts installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SCRIPT}) |
|
||||
| INSTALL_DIR_LIB | Path | Relative path to the libraries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_LIB}) |
|
||||
| INSTALL_DIR_INCLUDE | Path | Relative path to the includes installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_INCLUDE}) |
|
||||
| INSTALL_DIR | Path | Points to the installation directory. *INSTALL_DIR* is a synonym of *CMAKE_INSTALL_PREFIX*. The user can specify both *INSTALL_DIR* or *CMAKE_INSTALL_PREFIX* |
|
||||
| INSTALL_DIR_BIN | Path | Relative path to the binaries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_BIN}) |
|
||||
| INSTALL_DIR_SCRIPT | Path | Relative path to the scripts installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SCRIPT}) |
|
||||
| INSTALL_DIR_LIB | Path | Relative path to the libraries installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_LIB}) |
|
||||
| INSTALL_DIR_INCLUDE | Path | Relative path to the includes installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_INCLUDE}) |
|
||||
| INSTALL_DIR_RESOURCE | Path | Relative path to the resources installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_RESOURCE}) |
|
||||
| INSTALL_DIR_LAYOUT | String | Defines the structure of OCCT files (binaries, resources, headers, etc.) for the install directory. Two variants are predefined: for Windows (standard OCCT layout) and for Unix operating systems (standard Linux layout). If needed, the layout can be customized with INSTALL_DIR_* variables |
|
||||
| INSTALL_DIR_DATA | Path | Relative path to the data files installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DATA}) |
|
||||
| INSTALL_DIR_SAMPLES | Path | Relative path to the samples installation directory. Note that only "samples/tcl" folder will be installed. (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SAMPLES}) |
|
||||
| INSTALL_DIR_TESTS | Path | Relative path to the tests installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_TESTS}) |
|
||||
| INSTALL_DIR_DOC | Path | Relative path to the documentation installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DOC}) |
|
||||
| INSTALL_FREETYPE | Boolean flag | Indicates whether Freetype binaries should be installed into the installation directory |
|
||||
| INSTALL_FREEIMAGE* | Boolean flag | Indicates whether Freeimage binaries should be installed into the installation directory |
|
||||
| INSTALL_TBB | Boolean flag | Indicates whether TBB binaries should be installed into the installation directory |
|
||||
| INSTALL_VTK | Boolean flag | Indicates whether VTK binaries should be installed into the installation directory |
|
||||
| INSTALL_TCL | Boolean flag | Indicates whether TCL binaries should be installed into the installation directory |
|
||||
| INSTALL_TEST_CASES | Boolean flag | Indicates whether non-regression OCCT test scripts should be installed into the installation directory |
|
||||
| INSTALL_DOC_Overview | Boolean flag | Indicates whether OCCT overview documentation should be installed into the installation directory |
|
||||
| INSTALL_DIR_LAYOUT | String | Defines the structure of OCCT files (binaries, resources, headers, etc.) for the install directory. Two variants are predefined: for Windows (standard OCCT layout) and for Unix operating systems (standard Linux layout). If needed, the layout can be customized with INSTALL_DIR_* variables |
|
||||
| INSTALL_DIR_DATA | Path | Relative path to the data files installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DATA}) |
|
||||
| INSTALL_DIR_SAMPLES | Path | Relative path to the samples installation directory. Note that only "samples/tcl" folder will be installed. (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_SAMPLES}) |
|
||||
| INSTALL_DIR_TESTS | Path | Relative path to the tests installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_TESTS}) |
|
||||
| INSTALL_DIR_DOC | Path | Relative path to the documentation installation directory (absolute path is ${INSTALL_DIR}/${INSTALL_DIR_DOC}) |
|
||||
| INSTALL_FREETYPE | Boolean | Indicates whether FreeType binaries should be installed into the installation directory |
|
||||
| INSTALL_FREEIMAGE | Boolean | Indicates whether FreeImage binaries should be installed into the installation directory |
|
||||
| INSTALL_TBB | Boolean | Indicates whether TBB binaries should be installed into the installation directory |
|
||||
| INSTALL_VTK | Boolean | Indicates whether VTK binaries should be installed into the installation directory |
|
||||
| INSTALL_TCL | Boolean | Indicates whether TCL binaries should be installed into the installation directory |
|
||||
| INSTALL_TEST_CASES | Boolean | Indicates whether non-regression OCCT test scripts should be installed into the installation directory |
|
||||
| INSTALL_DOC_Overview | Boolean | Indicates whether OCCT overview documentation should be installed into the installation directory |
|
||||
|
||||
**Note:** Only the forward slashes ("/") are acceptable in the CMake options defining paths.
|
||||
@note Only the forward slashes ("/") are acceptable in the CMake options defining paths.
|
||||
|
||||
@subsubsection build_cmake_3rdparty 3rd party search mechanism
|
||||
|
||||
If *3RDPARTY_DIR* directory is defined, then required 3rd party binaries are sought in it, and default system folders are ignored.
|
||||
|
||||
If `3RDPARTY_DIR` directory is defined, then required 3rd party binaries are sought in it, and default system folders are ignored.
|
||||
The procedure expects to find binary and header files of each 3rd party product in its own sub-directory: *bin*, *lib* and *include*.
|
||||
|
||||
The results of the search (achieved on the next pass of the configuration process) are recorded in the corresponding variables:
|
||||
|
||||
* *3RDPARTY_\<PRODUCT\>_DIR* -- path to the 3rdparty directory (with directory name) (e.g. <i>D:/3rdparty/tcltk-86-32</i>)
|
||||
* *3RDPARTY_\<PRODUCT\>_LIBRARY_DIR* -- path to the directory containing a library (e.g. <i>D:/3rdparty/tcltk-86-32/lib</i>).
|
||||
* *3RDPARTY_\<PRODUCT\>_INCLUDE_DIR* -- path to the directory containing a header file (e.g., <i>D:/3rdparty/tcltk-86-32/include</i>)
|
||||
* *3RDPARTY_\<PRODUCT\>_DLL_DIR* -- path to the directory containing a shared library (e.g., <i>D:/3rdparty/tcltk-86-32/bin</i>) This variable is only relevant to Windows platforms.
|
||||
* `3RDPARTY_<PRODUCT>_DIR` -- path to the 3rdparty directory (with directory name) (e.g. <i>D:/3rdparty/tcltk-86-32</i>);
|
||||
* `3RDPARTY_<PRODUCT>_LIBRARY_DIR` -- path to the directory containing a library (e.g. <i>D:/3rdparty/tcltk-86-32/lib</i>);
|
||||
* `3RDPARTY_<PRODUCT>_INCLUDE_DIR` -- path to the directory containing a header file (e.g., <i>D:/3rdparty/tcltk-86-32/include</i>);
|
||||
* `3RDPARTY_<PRODUCT>_DLL_DIR` -- path to the directory containing a shared library (e.g., <i>D:/3rdparty/tcltk-86-32/bin</i>) This variable is only relevant to Windows platforms.
|
||||
|
||||
Note: each library and include directory should be children of the product directory if the last one is defined.
|
||||
@note Each library and include directory should be children of the product directory if the last one is defined.
|
||||
|
||||
The search process is as follows:
|
||||
|
||||
1. Common path: *3RDPARTY_DIR*
|
||||
2. Path to a particular 3rd-party library: *3RDPARTY_\<PRODUCT\>_DIR*
|
||||
1. Common path: `3RDPARTY_DIR`
|
||||
2. Path to a particular 3rd-party library: `3RDPARTY_<PRODUCT>_DIR`
|
||||
3. Paths to headers and binaries:
|
||||
1. *3RDPARTY_\<PRODUCT\>_INCLUDE_DIR*
|
||||
2. *3RDPARTY_\<PRODUCT\>_LIBRARY_DIR*
|
||||
3. *3RDPARTY_\<PRODUCT\>_DLL_DIR*
|
||||
1. `3RDPARTY_<PRODUCT>_INCLUDE_DIR`
|
||||
2. `3RDPARTY_<PRODUCT>_LIBRARY_DIR`
|
||||
3. `3RDPARTY_<PRODUCT>_DLL_DIR`
|
||||
|
||||
If a variable of any level is not defined (empty or <i> \<variable name\>-NOTFOUND </i>) and the upper level variable is defined, the content of the non-defined variable will be sought at the next configuration step. If the search process at level 3 does not find the required files, it seeks in default places.
|
||||
If a variable of any level is not defined (empty or `<variable name>-NOTFOUND`) and the upper level variable is defined, the content of the non-defined variable will be sought at the next configuration step.
|
||||
If the search process at level 3 does not find the required files, it seeks in default places.
|
||||
|
||||
If a search result (include path, or library path, or dll path) does not meet your expectations, you can change *3RDPARTY_\<PRODUCT\>_*_DIR variable*, clear (if they are not empty) *3RDPARTY_\<PRODUCT\>_DLL_DIR, 3RDPARTY_\<PRODUCT\>_INCLUDE_DIR* and 3RDPARTY_\<PRODUCT\>_LIBRARY_DIR variables (or clear one of them) and run the configuration process again.
|
||||
If a search result (include path, or library path, or dll path) does not meet your expectations, you can change `3RDPARTY_<PRODUCT>_*_DIR` variable,
|
||||
clear (if they are not empty) `3RDPARTY_<PRODUCT>_DLL_DIR`, `3RDPARTY_<PRODUCT>_INCLUDE_DIR` and `3RDPARTY_<PRODUCT>_LIBRARY_DIR` variables (or clear one of them) and run the configuration process again.
|
||||
|
||||
At this time the search will be performed in the newly identified directory
|
||||
and the result will be recorded to corresponding variables (replace old value if it is necessary).
|
||||
|
||||
For example, *3RDPARTY_FREETYPE_DIR* variable
|
||||
At this time the search will be performed in the newly identified directory and the result will be recorded to corresponding variables (replace old value if it is necessary).
|
||||
For example, `3RDPARTY_FREETYPE_DIR` variable
|
||||
|
||||
d:/3rdparty/freetype-2.4.10
|
||||
|
||||
can be changed to
|
||||
can be changed to
|
||||
|
||||
d:/3rdparty/freetype-2.5.3
|
||||
|
||||
During the configuration process the related variables (*3RDPARTY_FREETYPE_DLL_DIR*, *3RDPARTY_FREETYPE_INCLUDE_DIR* and *3RDPARTY_FREETYPE_LIBRARY_DIR*) will be filled with new found values.
|
||||
During the configuration process the related variables (`3RDPARTY_FREETYPE_DLL_DIR`, `3RDPARTY_FREETYPE_INCLUDE_DIR` and `3RDPARTY_FREETYPE_LIBRARY_DIR`) will be filled with new found values.
|
||||
|
||||
**Note**: The names of searched libraries and header files are hard-coded. If there is the need to change their names, change appropriate cmake variables (edit CMakeCache.txt file or edit in cmake-gui in advance mode) without reconfiguration: *3RDPARTY_\<PRODUCT\>_INCLUDE* for include, *3RDPARTY_\<PRODUCT\>_LIB* for library and *3RDPARTY_\<PRODUCT\>_DLL* for shared library.
|
||||
@note The names of searched libraries and header files are hard-coded.
|
||||
If there is the need to change their names, change appropriate CMake variables (edit CMakeCache.txt file or edit in cmake-gui in advance mode) without reconfiguration:
|
||||
`3RDPARTY_<PRODUCT>_INCLUDE` for include, `3RDPARTY_<PRODUCT>_LIB` for library and `3RDPARTY_<PRODUCT>_DLL` for shared library.
|
||||
|
||||
@subsubsection build_cmake_gen Projects generation
|
||||
@subsection build_cmake_gen Projects generation
|
||||
|
||||
Once the configuration process is done, the "Generate" button is used to prepare project files for the target IDE.
|
||||
In our exercise the Visual Studio solution will be automatically created in the build directory.
|
||||
|
||||
@subsubsection build_cmake_build Building
|
||||
@subsection build_cmake_build Building
|
||||
|
||||
Go to the build folder, start the Visual Studio solution *OCCT.sln* and build it by clicking **Build -> Build Solution**.
|
||||
|
||||
@figure{/build/build_occt/images/cmake_image004.png}
|
||||
|
||||
By default the build solution process skips the building of the INSTALL and Overview project.
|
||||
|
||||
By default, the build solution process skips the building of the INSTALL and Overview projects.
|
||||
When the building process is finished build:
|
||||
* Overview project to generate OCCT overview documentation (if BUILD_DOC_Overview variable is checked)
|
||||
* the *INSTALL* project to run **the installation process**
|
||||
* *Overview* project to generate OCCT overview documentation (if `BUILD_DOC_Overview` variable is checked)
|
||||
* the *INSTALL* project to run the **installation process**
|
||||
|
||||
For this, right-click on the *Overview/INSTALL* project and select **Project Only -> Build Only** -> *Overview/INSTALL* in the solution explorer.
|
||||
For this, right-click on the *Overview/INSTALL* project and select **Project Only -> Build Only** -> *Overview/INSTALL* in the solution explorer.
|
||||
|
||||
@subsubsection build_cmake_install Installation
|
||||
@subsection build_cmake_install Installation
|
||||
|
||||
Installation is a process of extracting redistributable resources (binaries, include files etc) from the build directory into the installation one. The installation directory will be free of project files, intermediate object files and any other information related to the build routines.
|
||||
|
||||
Normally you use the installation directory of OCCT to link against your specific application.
|
||||
Installation is a process of extracting redistributable resources (binaries, include files etc) from the build directory into the installation one.
|
||||
The installation directory will be free of project files, intermediate object files and any other information related to the build routines.
|
||||
|
||||
Normally you use the installation directory of OCCT to link against your specific application.
|
||||
The directory structure is as follows:
|
||||
|
||||
data -- data files for OCCT (brep, iges, stp)
|
||||
doc -- OCCT overview documentation in HTML format
|
||||
inc -- header files
|
||||
samples -- samples
|
||||
src -- all required source files for OCCT
|
||||
tests -- OCCT test suite
|
||||
win32\vc10\bind -- binary files (installed 3rdparties and occt)
|
||||
\libd -- libraries (installed 3rdparties and occt)
|
||||
|
||||
**Note:** The above example is given for debug configuration. However, it is generally safe to use the same installation directory for the release build. In the latter case the contents of install directory will be enriched with subdirectories and files related to the release configuration. In particular, the binaries directory win64 will be expanded as
|
||||
follows:
|
||||
data - data files for OCCT (brep, iges, stp)
|
||||
doc - OCCT overview documentation in HTML format
|
||||
inc - header files
|
||||
samples - samples
|
||||
src - all required source files for OCCT
|
||||
tests - OCCT test suite
|
||||
win32\vc10\bind - binary files (installed 3rdparties and occt)
|
||||
\libd - libraries (installed 3rdparties and occt)
|
||||
|
||||
@note The above example is given for debug configuration.
|
||||
However, it is generally safe to use the same installation directory for the release build.
|
||||
In the latter case the contents of install directory will be enriched with subdirectories and files related to the release configuration.
|
||||
In particular, the binaries directory win64 will be expanded as follows:
|
||||
|
||||
\win32\vc10\bind
|
||||
\libd
|
||||
\bin
|
||||
\lib
|
||||
|
||||
If CMake installation flags are enabled for the 3rd party products (e.g. INSTALL_FREETYPE), then the corresponding binaries will be copied to the same bin(d) and lib(d) directories together with the native binaries of OCCT. Such organization of libraries can be especially helpful if your OCCT-based software does not use itself the 3rd parties of Open CASCADE Technology (thus, there is no sense to pack them into dedicated directories).
|
||||
If CMake installation flags are enabled for the 3rd party products (e.g. `INSTALL_FREETYPE`), then the corresponding binaries will be copied to the same bin(d) and lib(d) directories together with the native binaries of OCCT.
|
||||
Such organization of libraries can be especially helpful if your OCCT-based software does not use itself the 3rd parties of Open CASCADE Technology (thus, there is no sense to pack them into dedicated directories).
|
||||
|
||||
The installation folder contains the scripts to run *DRAWEXE* (*draw.bat* or *draw.sh*), samples (if they were installed) and overview.html (short-cut for installed OCCT overview documentation).
|
||||
|
||||
@subsection build_occt_win_codeblocks Building with Code::Blocks
|
||||
@subsection build_occt_crossplatform_cmake Cross-compiling (Android)
|
||||
|
||||
This file describes steps to build OCCT libraries from sources using **Code::Blocks**, a cross-platform IDE, using project files generated by OCCT legacy tool **genproj**.
|
||||
It can be used as an alternative to CMake build system (see @ref build_occt_win_cmake) for all supported platforms.
|
||||
This section describes the steps to build OCCT libraries for Android from a complete source package with GNU make (makefiles).
|
||||
The steps on Windows 7 and Ubuntu 15.10 are similar. There is the only one difference: makefiles are built with mingw32-make on Windows and native GNU make on Ubuntu.
|
||||
|
||||
@subsubsection build_codeblocks_3rdparty Third-party libraries
|
||||
Required tools (download and install if it is required):
|
||||
- CMake 3.0+
|
||||
- [Cross-compilation toolchain for CMake](https://github.com/taka-no-me/android-cmake)
|
||||
- [Android NDK r12+](https://developer.android.com/ndk/downloads)
|
||||
- GNU Make: MinGW v4.82+ for [Windows](https://www.mingw-w64.org/), GNU Make 4.0 for Ubuntu.
|
||||
|
||||
Before building OCCT, make sure to have all the needed third-party libraries installed, see @ref build_upgrade.
|
||||
Run GUI tool provided by CMake and:
|
||||
- Specify the root folder of OCCT (`$CASROOT`, which contains *CMakelists.txt* file) by clicking **Browse Source**.
|
||||
- Specify the location (build folder) for CMake generated project files by clicking **Browse Build**.
|
||||
|
||||
@subsubsection build_codeblocks_conf Configuration
|
||||
@figure{/build/build_occt/images/android_image001.png}
|
||||
|
||||
Before building it is necessary to set up build environment.
|
||||
Click **Configure** button. It opens the window with a drop-down list of generators supported by CMake project.
|
||||
Select "MinGW MakeFiles" item from the list
|
||||
- Choose "Specify toolchain file for cross-compiling", and click "Next".
|
||||
@figure{/build/build_occt/images/android_image002.png}
|
||||
|
||||
The environment is defined in the file *custom.sh* (on Linux and OS X) or *custom.bat* (on Windows) which can be edited directly:
|
||||
- Specify a toolchain file at the next dialog to `android.toolchain.cmake`, and click "Finish".
|
||||
@figure{/build/build_occt/images/android_image003.png}
|
||||
|
||||
* Add paths to includes of used third-party libraries in variable *CSF_OPT_INC*.
|
||||
* Add paths to their binary libraries in variable *CSF_OPT_LIB64*.
|
||||
* Set variable *SHORTCUT_HEADERS* to specify a method for population of folder *inc* by header files. Supported methods are:
|
||||
If `ANDROID_NDK` environment variable is not defined in current OS, add cache entry `ANDROID_NDK` (entry type is `PATH`) -- path to the NDK folder ("Add Entry" button):
|
||||
@figure{/build/build_occt/images/android_image004.png}
|
||||
|
||||
If on Windows the message is appeared:
|
||||
"CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles" CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.",
|
||||
specify `CMAKE_MAKE_PROGRAM` to mingw32-make executable.
|
||||
@figure{/build/build_occt/images/android_image005.png}
|
||||
|
||||
How to configure OCCT, see @ref build_cmake_conf "Configure" section taking into account the specific configuration variables for Android:
|
||||
- `ANDROID_ABI` = `armeabi-v7a`
|
||||
- `ANDROID_NATIVE_API_LEVEL` = `15`
|
||||
- `ANDROID_NDK_LAYOUT` is equal to `CMAKE_BUILD_TYPE` variable
|
||||
- `BUILD_MODULE_Draw` = `OFF`
|
||||
|
||||
@figure{/build/build_occt/images/android_image006.png}
|
||||
|
||||
Click **Generate** button and wait until the generation process is finished.
|
||||
Then makefiles will appear in the build folder (e.g. <i> D:/tmp/occt-android </i>).
|
||||
|
||||
Open console and go to the build folder. Type "mingw32-make" (Windows) or "make" (Ubuntu) to start build process:
|
||||
> mingw32-make
|
||||
or
|
||||
> make
|
||||
|
||||
Parallel building can be started with using `-jN` argument of "mingw32-make/make", where `N` is the number of building threads:
|
||||
> mingw32-make -j4
|
||||
or
|
||||
> make -j4
|
||||
|
||||
Type "mingw32-make/make" with argument "install" to place the libraries to the install folder:
|
||||
> mingw32-make install
|
||||
or
|
||||
> make install
|
||||
|
||||
@section build_occt_genproj Building with Genproj tool
|
||||
|
||||
**genproj** is a legacy tool (originated from command "wgenproj" in WOK) for generation of Visual Studio, Code::Blocks, Qt Creator (qmake), and XCode project files for building Open CASCADE Technology.
|
||||
These project files are placed inside OCCT directory (in *adm* subfolder) and use relative paths, thus can be moved together with sources.
|
||||
The project files included in official distribution of OCCT are generated by this tool.
|
||||
|
||||
@note If you have official distribution with project files included, you can use them directly without a need to call **genproj**.
|
||||
|
||||
**genproj** is a less flexible alternative to use of CMake build system (see @ref build_occt_win_cmake), but still has some small features useful for OCCT development.
|
||||
|
||||
@subsection build_genproj Configuration process
|
||||
|
||||
The environment is defined in the file *custom.sh* (on Linux and macOS) or *custom.bat* (on Windows) which can be edited directly:
|
||||
|
||||
* `ARCH` -- architecture (32 or 64), affects only `PATH` variable for execution
|
||||
* `HAVE_*` -- flags to enable or disable use of optional third-party products
|
||||
* `CSF_OPT_*` -- paths to search for includes and binaries of all used third-party products
|
||||
* `SHORTCUT_HEADERS` -- defines method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
* For optional third-party libraries, set corresponding environment variable <i>HAVE_<LIBRARY_NAME></i> to either *false*, e.g.:
|
||||
~~~~
|
||||
export HAVE_FREEIMAGE=false
|
||||
~~~~
|
||||
|
||||
Alternatively, or when *custom.sh* or *custom.bat* does not exist, you can launch **genconf** tool to configure environment interactively:
|
||||
|
||||
@figure{/build/build_occt/images/genconf_linux.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.sh* or *custom.bat* file.
|
||||
|
||||
@subsubsection build_codeblocks_gen Projects generation
|
||||
|
||||
Launch **genproj** tool with option *cbp* to update content of *inc* folder and generate project files after changes in OCCT code affecting layout or composition of source files:
|
||||
|
||||
~~~~
|
||||
$ cd /dev/OCCT/opencascade-7.0.0
|
||||
$ ./genproj cbp
|
||||
~~~~
|
||||
|
||||
The generated Code::Blocks project are placed into subfolder *adm/<OS>/cbp*.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
|
||||
@subsubsection build_codeblocks_build Building
|
||||
|
||||
To start **Code::Blocks**, launch script *codeblocks.sh*.
|
||||
|
||||
To build all toolkits, click **Build->Build workspace** in the menu bar.
|
||||
|
||||
To start *DRAWEXE*, which has been built with **Code::Blocks** on Mac OS X, run the script
|
||||
~~~~
|
||||
./draw.sh cbp [d]
|
||||
~~~~
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
||||
@subsection build_occt_genproj Building with Genproj tool
|
||||
|
||||
This page describes steps to build OCCT libraries from a complete source archive on Windows with <b>MS Visual C++</b> using projects generated by **genproj** tool.
|
||||
It is an alternative to use of CMake build system (see @ref build_occt_win_cmake).
|
||||
|
||||
**genproj** is a legacy tool (originated from command "wgenproj" in WOK) for generation of Visual Studio, Code.Blocks, and XCode project files used for building Open CASCADE Technology.
|
||||
These project files are placed inside OCCT directory (in *adm* subfolder) and use relative paths, thus can be moved together with sources.
|
||||
|
||||
The project files included in official distribution of OCCT are generated by this tool.
|
||||
If you have official distribution with project files included, you can use them directly without a need to call **genproj**.
|
||||
|
||||
@subsubsection build_msvc_3rdparty Third-party libraries
|
||||
|
||||
Before building OCCT, make sure to have all the required third-party libraries installed.
|
||||
|
||||
The easiest way to install third-party libraries is to download archive with pre-built binaries, corresponding to version of Visual Studio you are using, from https://opencascade.com/content/3rd-party-components.
|
||||
|
||||
You can also build third-party libraries from their sources, see @ref build_upgrade_building_3rdparty for instructions.
|
||||
|
||||
@subsubsection build_msvc_conf Configuration
|
||||
|
||||
If you have Visual Studio projects already available (pre-installed or generated), you can edit file *custom.bat* manually to adjust the environment:
|
||||
|
||||
* *VCVER* -- specification of format of project files, defining also version of Visual Studio to be used, and default name of the sub-folder for binaries:
|
||||
* *HardLink* - hard links to headers located in *src* will be created.
|
||||
* `VCVER` -- specification of format of project files, defining also version of Visual Studio to be used, and default name of the sub-folder for binaries:
|
||||
* Add paths to includes of used third-party libraries in variable `CSF_OPT_INC`.
|
||||
* Add paths to their binary libraries in variable `CSF_OPT_LIB64`.
|
||||
* For optional third-party libraries, set corresponding environment variable `HAVE_<LIBRARY_NAME>` to either *false*, e.g. `export HAVE_FREEIMAGE=false`.
|
||||
|
||||
| VCVER | Visual Studio version | Windows Platform | Binaries folder name |
|
||||
|-----------|-----------------------|----------------------------------|----------------------|
|
||||
@@ -315,267 +325,85 @@ If you have Visual Studio projects already available (pre-installed or generated
|
||||
| vc142 | 2019 (16) | Desktop (Windows API) | vc14 |
|
||||
| vc142-uwp | 2019 (16) | UWP (Universal Windows Platform) | vc14-uwp |
|
||||
|
||||
* *ARCH* -- architecture (32 or 64), affects only *PATH* variable for execution
|
||||
* <i>HAVE_*</i> -- flags to enable or disable use of optional third-party products
|
||||
* <i>CSF_OPT_*</i> -- paths to search for includes and binaries of all used third-party products
|
||||
* *SHORTCUT_HEADERS* -- defines method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
|
||||
Alternatively, you can launch **genconf**, a GUI tool allowing to configure build options interactively.
|
||||
That tool will analyze your environment and propose you to choose available options:
|
||||
|
||||
* Version of Visual Studio to be used (from the list of installed ones, detected by presence of environment variables like *VS100COMNTOOLS*).
|
||||
* Type and version of project files to generate (from the list of installed ones, detected by presence of environment variables like `VS100COMNTOOLS` on Windows platform).
|
||||
* Method to populate folder *inc* (short-cuts by default).
|
||||
* Location of third-party libraries (usually downloaded from OCCT web site, see above).
|
||||
* Path to common directory where third-party libraries are located (optional).
|
||||
* Paths to headers and binaries of the third-party libraries (found automatically basing on previous options; click button "Reset" to update).
|
||||
* Generation of PDB files within Release build ("Release with Debug info", false by default).
|
||||
|
||||
Below are screenshots of **genconf** tool on various platforms (Windows and Linux):
|
||||
@figure{/build/build_occt/images/genconf_windows.png}
|
||||
@figure{/build/build_occt/images/genconf_linux.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.bat* file.
|
||||
|
||||
@subsubsection build_msvc_generate Projects generation
|
||||
Click "Save" to store the specified configuration in *custom.bat* (Windows) or *custom.sh* (other systems) file.
|
||||
|
||||
@subsection build_genproj_generate Projects generation
|
||||
|
||||
Launch **genproj** to update content of *inc* folder and generate project files after changes in OCCT code affecting layout or composition of source files.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by `PATH`.
|
||||
If Tcl is not found, the tool may prompt you to enter the path to directory where Tcl can be found.
|
||||
|
||||
|
||||
~~~~
|
||||
$ genproj.bat
|
||||
~~~~
|
||||
|
||||
Note that if *custom.bat* is not present, **genproj** will start **genconf** to configure environment.
|
||||
|
||||
@subsubsection build_msvc_build Building
|
||||
@subsection build_genproj_build Building
|
||||
|
||||
@subsubsection build_msvc_build Visual Studio
|
||||
|
||||
Launch *msvc.bat* to start Visual Studio with all necessary environment variables defined, and build the whole solution or required toolkits.
|
||||
|
||||
Note: the MSVC project files are located in folders <i>adm\\msvc\\vc...</i>.
|
||||
The MSVC project files are located in folders <i>adm\\msvc\\vc...</i>.
|
||||
Binaries are produced in *win32* or *win64* folders.
|
||||
|
||||
To start DRAW, launch *draw.bat*.
|
||||
|
||||
@section build_occt_linux Linux
|
||||
@subsubsection build_codeblocks_build Code::Blocks
|
||||
|
||||
You may choose one of the following ways to generate, configure and build OCCT sources on Linux just keeping in mind
|
||||
this platform specific:
|
||||
Code::Blocks is a cross-platform IDE which can be used for building OCCT on Linux, macOS and Windows platforms.
|
||||
The generated Code::Blocks project could be found within subfolder *adm/<OS>/cbp*.
|
||||
|
||||
* @ref build_occt_win_cmake "Configuration, generation and building OCCT on Windows using CMake tool"
|
||||
* @ref build_occt_code_blocks "Building on Mac OS X with Code::Blocks IDE"
|
||||
To start **Code::Blocks**, launch script *codeblocks.sh*.
|
||||
To build all toolkits, click **Build->Build workspace** in the menu bar.
|
||||
|
||||
@section build_occt_crossplatform_cmake Android (cross-compiling)
|
||||
|
||||
This article describes the steps to build OCCT libraries for Android from a complete source package
|
||||
with GNU make (makefiles). The steps on Windows 7 and Ubuntu 15.10 are similar. There is the only one difference:
|
||||
makefiles are built with mingw32-make
|
||||
on Windows and native GNU make on Ubuntu.
|
||||
|
||||
Required tools (download and install if it is required):
|
||||
- CMake v3.0+ http://www.cmake.org/cmake/resources/software.html
|
||||
- Cross-compilation toolchain for CMake https://github.com/taka-no-me/android-cmake
|
||||
- Android NDK rev.10+ https://developer.android.com/tools/sdk/ndk/index.html
|
||||
- GNU Make: MinGW v4.82+ for Windows (http://sourceforge.net/projects/mingw/files/), GNU Make 4.0 for Ubuntu.
|
||||
|
||||
Run GUI tool provided by CMake.
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_config Configuration
|
||||
|
||||
**Configure Tools**
|
||||
- Specify the root folder of OCCT (<i>$CASROOT</i>, which contains *CMakelists.txt* file) by clicking **Browse Source**.
|
||||
- Specify the location (build folder) for Cmake generated project files by clicking **Browse Build**.
|
||||
|
||||
@figure{/build/build_occt/images/android_image001.png}
|
||||
|
||||
Click **Configure** button. It opens the window with a drop-down list of generators supported by CMake project.
|
||||
|
||||
Select "MinGW MakeFiles" item from the list
|
||||
- Choose "Specify toolchain file for cross-compiling"
|
||||
- Click "Next"
|
||||
@figure{/build/build_occt/images/android_image002.png}
|
||||
|
||||
- Specify a toolchain file at the next dialog by android.toolchain.cmake . It is contained by cross-compilation
|
||||
toolchain for CMake
|
||||
- Click "Finish"
|
||||
@figure{/build/build_occt/images/android_image003.png}
|
||||
|
||||
If ANDROID_NDK environment variable is not defined in current OS, add cache entry ANDROID_NDK (entry type is PATH) --
|
||||
path to the NDK folder ("Add Entry" button)
|
||||
@figure{/build/build_occt/images/android_image004.png}
|
||||
|
||||
If on Windows the message is appeared: "CMake Error: CMake was unable to find a build program corresponding
|
||||
to "MinGW Makefiles"
|
||||
CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.",
|
||||
specify **CMAKE_MAKE_PROGRAM** to mingw32-make executable.
|
||||
@figure{/build/build_occt/images/android_image005.png}
|
||||
|
||||
**Configure OCCT**
|
||||
|
||||
How to configure OCCT, see "OCCT Configuration" section of @ref build_occt_win_cmake
|
||||
"Configure, Generate, Build using CMake tool" taking into account the specific configuration variables for android:
|
||||
- ANDROID_ABI = armeabi-v7a
|
||||
- ANDROID_NATIVE_API_LEVEL = 15
|
||||
- ANDROID_NDK_LAYOUT is equal to CMAKE_BUILD_TYPE variable
|
||||
- **BUILD_MODULE_Draw = OFF**
|
||||
|
||||
@figure{/build/build_occt/images/android_image006.png}
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_generation Generate Makefiles
|
||||
|
||||
Click **Generate** button and wait until the generation process is finished.
|
||||
Then makefiles will appear in the build folder (e.g. <i> D:/tmp/occt-android </i>).
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_building Build Makefiles
|
||||
|
||||
Open console and go to the build folder. Type "mingw32-make" (Windows) or "make" (Ubuntu) to start build process.
|
||||
|
||||
> mingw32-make
|
||||
or
|
||||
> make
|
||||
|
||||
Parallel building can be started with using **"-jN"** argument of "mingw32-make/make", where N is the number of
|
||||
building threads.
|
||||
|
||||
> mingw32-make -j4
|
||||
or
|
||||
> make -j4
|
||||
|
||||
@subsection build_occt_crossplatform_cmake_install Install OCCT Libraries
|
||||
|
||||
Type "mingw32-make/make" with argument "install" to place the libraries to the install folder
|
||||
|
||||
> mingw32-make install
|
||||
or
|
||||
> make install
|
||||
|
||||
@section build_occt_macos Mac OS X
|
||||
|
||||
@subsection build_occt_macos_xcode Building with Xcode
|
||||
|
||||
This file describes steps to build OCCT libraries from sources on Mac OS X with **Xcode** projects, generated by OCCT legacy tool **genproj**.
|
||||
|
||||
<h2>Configuration</h2>
|
||||
|
||||
Before building it is necessary to set up build environment.
|
||||
|
||||
The environment is defined in the file *custom.sh* which can be edited directly:
|
||||
|
||||
* Add paths to includes of used third-party libraries in variable *CSF_OPT_INC* (use colon ":" as path separator).
|
||||
* Add paths to their binary libraries in variable *CSF_OPT_LIB64*.
|
||||
* Set variable *SHORTCUT_HEADERS* to specify a method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
* For optional third-party libraries, set corresponding environment variable <i>HAVE_<LIBRARY_NAME></i> to either *false*, e.g.:
|
||||
To start *DRAWEXE*, which has been built with **Code::Blocks** on Mac OS X, run the script
|
||||
~~~~
|
||||
export HAVE_FREEIMAGE=false
|
||||
./draw.sh cbp [d]
|
||||
~~~~
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
||||
Alternatively, or when *custom.sh* does not exist, you can launch *genconf.sh* to configure environment interactively:
|
||||
@subsubsection build_occt_macos_xcode XCode
|
||||
|
||||
@figure{/build/build_occt/images/genconf_osx.png}
|
||||
XCode is an IDE for development on macOS platform and targeting macOS and iOS platforms.
|
||||
**genproj** tool comes with a legacy XCode project files generator, but CMake is a preferred way for building OCCT on macOS platform.
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.sh* file.
|
||||
|
||||
<h2>Projects generation</h2>
|
||||
|
||||
Launch **genproj** tool to update content of *inc* folder and generate project files after changes in OCCT code affecting layout or composition of source files.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
|
||||
For instance, in Terminal application:
|
||||
|
||||
~~~~
|
||||
$ cd /dev/OCCT/opencascade-7.0.0
|
||||
$ ./genproj
|
||||
~~~~
|
||||
|
||||
<h2>Building</h2>
|
||||
|
||||
To start **Xcode**, launch script *xcode.sh*.
|
||||
|
||||
To build a certain toolkit, select it in **Scheme** drop-down list in Xcode toolbar, press **Product** in the menu and click **Build** button.
|
||||
To start **XCode**, launch script *xcode.sh*.
|
||||
To build a certain toolkit, select it in **Scheme** drop-down list in XCode toolbar, press **Product** in the menu and click **Build** button.
|
||||
|
||||
To build the entire OCCT:
|
||||
* Create a new empty project (select **File -> New -> Project -> Empty project** in the menu; input the project name, e.g. *OCCT*; then click **Next** and **Create**).
|
||||
* Drag and drop the *OCCT* folder in the created *OCCT* project in the Project navigator.
|
||||
* Select **File -> New -> Target -> Aggregate** in the menu.
|
||||
* Enter the project name (e.g. *OCCT*) and click **Finish**. The **Build Phases** tab will open.
|
||||
* Click "+" button to add the necessary toolkits to the target project. It is possible to select all toolkits by pressing **Command+A** combination.
|
||||
* Enter the project name (e.g. *OCCT*) and click **Finish**. The **Build Phases** tab will open.
|
||||
* Click "+" button to add the necessary toolkits to the target project. It is possible to select all toolkits by pressing **Command+A** combination.
|
||||
|
||||
<h2>Launching DRAW</h2>
|
||||
|
||||
To start *DRAWEXE*, which has been built with Xcode on Mac OS X, perform the following steps:
|
||||
To start *DRAWEXE*, which has been built with XCode on Mac OS X, perform the following steps:
|
||||
|
||||
1.Open Terminal application
|
||||
|
||||
2.Enter <i>\<OCCT_ROOT_DIR\></i>:
|
||||
2.Enter `<OCCT_ROOT_DIR>`:
|
||||
~~~~
|
||||
cd \<OCCT_ROOT_DIR\>
|
||||
~~~~
|
||||
|
||||
3.Run the script
|
||||
~~~~
|
||||
./draw_cbp.sh xcd [d]
|
||||
./draw.sh xcd [d]
|
||||
~~~~
|
||||
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
||||
@subsection build_occt_code_blocks Building with Code::Blocks
|
||||
|
||||
This file describes steps to build OCCT libraries from sources using **Code::Blocks**, a cross-platform IDE, using
|
||||
project files generated by OCCT legacy tool **genproj**.
|
||||
|
||||
<h2>Configure</h2>
|
||||
|
||||
Before building it is necessary to set up build environment.
|
||||
|
||||
The environment is defined in the file *custom.sh* (on Linux and OS X) or *custom.bat* (on Windows) which can be edited
|
||||
directly:
|
||||
|
||||
* Add paths to includes of used third-party libraries in variable *CSF_OPT_INC*.
|
||||
* Add paths to their binary libraries in variable *CSF_OPT_LIB64*.
|
||||
* Set variable *SHORTCUT_HEADERS* to specify a method for population of folder *inc* by header files. Supported methods are:
|
||||
* *Copy* - headers will be copied from *src*;
|
||||
* *ShortCut* - short-cut header files will be created, redirecting to same-named header located in *src*;
|
||||
* "HardLink* - hard links to headers located in *src* will be created.
|
||||
* For optional third-party libraries, set corresponding environment variable <i>HAVE_<LIBRARY_NAME></i> to either *false*, e.g.:
|
||||
~~~~
|
||||
export HAVE_FREEIMAGE=false
|
||||
~~~~
|
||||
|
||||
Alternatively, or when *custom.sh* or *custom.bat* does not exist, you can launch **genconf** tool to configure
|
||||
environment interactively:
|
||||
|
||||
@figure{/build/build_occt/images/genconf_linux.png}
|
||||
|
||||
Click "Save" to store the specified configuration in *custom.sh* or *custom.bat* file.
|
||||
|
||||
<h2>Generate Projects</h2>
|
||||
|
||||
Launch **genproj** tool with option *cbp* to update content of *inc* folder and generate project files after changes in
|
||||
OCCT code affecting layout or composition of source files:
|
||||
|
||||
~~~~
|
||||
$ cd /dev/OCCT/opencascade-7.0.0
|
||||
$ ./genproj cbp
|
||||
~~~~
|
||||
|
||||
The generated Code::Blocks project are placed into subfolder *adm/<OS>/cbp*.
|
||||
|
||||
@note To use **genproj** and **genconf** tools you need to have Tcl installed and accessible by PATH.
|
||||
|
||||
<h2>Build</h2>
|
||||
|
||||
To start **Code::Blocks**, launch script *codeblocks.sh*.
|
||||
|
||||
To build all toolkits, click **Build->Build workspace** in the menu bar.
|
||||
|
||||
To start *DRAWEXE*, which has been built with **Code::Blocks** on Mac OS X, run the script
|
||||
~~~~
|
||||
./draw_cbp.sh cbp [d]
|
||||
~~~~
|
||||
Option *d* is used if OCCT has been built in **Debug** mode.
|
||||
|
Before Width: | Height: | Size: 194 KiB |
@@ -234,7 +234,7 @@ This module handles various problems of interoperability between CAD systems, ca
|
||||
* @ref occt_user_guides__step "STEP" (AP203: Mechanical Design, this covers General 3D CAD; AP214: Automotive Design; AP242).
|
||||
* @ref occt_iges_1 "IGES" (up to 5.3).
|
||||
* **glTF** 2.0 reader and writer.
|
||||
* **OBJ** mesh file reader.
|
||||
* **OBJ** mesh file reader and writer.
|
||||
* **VRML** converter translates Open CASCADE shapes to VRML 1.0 files (Virtual Reality Modeling Language).
|
||||
* **STL** converter translates Open CASCADE shapes to STL files.
|
||||
STL (STtereoLithography) format is widely used for rapid prototyping (3D printing).
|
||||
@@ -341,7 +341,7 @@ The tables below describe the recommended software configurations for which OCCT
|
||||
|
||||
| OS | Compiler |
|
||||
| --------- | ----------- |
|
||||
| Windows | Microsoft Visual Studio: 2010 SP1, 2012 Update 4, 2013 Update 5, 2015 Update 3, 2017 <sup>1</sup>, 2019 <br>, LLVM (ClangCL), GCC 4.3+ (Mingw-w64)|
|
||||
| Windows | Microsoft Visual Studio: 2013 Update 5, 2015 Update 3, 2017 <sup>1</sup>, 2019, 2022 <br>, LLVM (ClangCL), GCC 4.3+ (Mingw-w64)|
|
||||
| Linux | GNU gcc 4.3+ <br> LLVM CLang 3.6+ |
|
||||
| OS X / macOS | XCode 6 or newer |
|
||||
| Android | NDK r12, GNU gcc 4.9 or newer |
|
||||
@@ -352,29 +352,28 @@ The tables below describe the recommended software configurations for which OCCT
|
||||
@subsection intro_req_libs Third-party libraries and tools
|
||||
|
||||
The following third-party libraries and tools are not included in OCCT sources but are either required or can be optionally used for the indicated components of OCCT.
|
||||
They are not needed if relevant component is not needed.
|
||||
They are not needed if relevant component is not needed - it is possible building core OCCT modules without additional dependencies.
|
||||
|
||||
Note that pre-built packages of many of the listed libraries are available at
|
||||
https://www.opencascade.com/content/3rd-party-components
|
||||
https://dev.opencascade.org/resources/download/3rd-party-components
|
||||
|
||||
| Component | Where to find | Used for | Required or optional |
|
||||
| Component | Where to find | Used for | Purpose |
|
||||
| --------- | ------------- | -------- | -------------------- |
|
||||
| CMake 2.8+ | https://cmake.org/ | Build from sources | Optional |
|
||||
| Intel TBB 4.x or later | https://www.threadingbuildingblocks.org/ | All | Optional (advanced parallelization of algorithms) |
|
||||
| OpenGL 3.3+, OpenGL ES 2.0+ | System | Visualization | Required |
|
||||
| OpenVR 1.10+ | https://github.com/ValveSoftware/openvr | Visualization | Optional (VR support) |
|
||||
| Direct3D 9 | Windows | Visualization | Optional (integration with GUI using Direct3D) |
|
||||
| FreeType 2.4+ | https://www.freetype.org/download.html | Visualization | Optional (text rendering) |
|
||||
| FreeImage 3.17+ | https://sourceforge.net/projects/freeimage/files | Visualization | Optional (support of common 2D graphic formats) |
|
||||
| FFmpeg 3.1+ | https://www.ffmpeg.org/download.html | Visualization | Optional (video recording) |
|
||||
| VTK 6.1+ | https://www.vtk.org/download/ | Visualization | Optional (VTK integration) |
|
||||
| Flex 2.6.4+ and Bison 3.7.1+ | https://sourceforge.net/projects/winflexbison/ | Data Exchange | Optional (update of STEP and ExprIntrp parsers) |
|
||||
| RapidJSON 1.1+ | https://rapidjson.org/ | Data Exchange | Optional (reading glTF files) |
|
||||
| Draco 1.4.1+ | https://github.com/google/draco | Data Exchange | Optional (reading compressed glTF files) |
|
||||
| Tcl/Tk 8.6.3+ <br> or ActiveTcl 8.6 | https://www.tcl.tk/software/tcltk/download.html <br> https://www.activestate.com/activetcl/downloads | DRAW Test Harness | Required |
|
||||
| Qt Desktop: Qt 4.8.6+ <br> Android: Qt 5.3.2+ | https://www.qt.io/download/ | Samples and demos | Optional (Qt samples) |
|
||||
| Doxygen 1.8.5+ | https://www.doxygen.nl/download.html | Documentation | Required |
|
||||
| Graphviz 2.38+ | https://graphviz.org/ | Documentation | Optional (dependency graphs) |
|
||||
| CMake 2.8+ | https://cmake.org/ | Configuration | Build from sources |
|
||||
| Intel TBB 4.x or later | https://oneapi-src.github.io/oneTBB/ | All | Parallelization of algorithms (alternative to built-in thread pool) |
|
||||
| OpenGL 3.3+, OpenGL ES 2.0+ | System | Visualization | Required for using 3D Viewer |
|
||||
| OpenVR 1.10+ | https://github.com/ValveSoftware/openvr | Visualization | VR (Virtual Reality) support in 3D Viewer |
|
||||
| FreeType 2.4+ | https://www.freetype.org/download.html | Visualization | Text rendering in 3D Viewer |
|
||||
| FreeImage 3.17+ | https://sourceforge.net/projects/freeimage/files | Visualization | Reading/writing image files |
|
||||
| FFmpeg 3.1+ | https://www.ffmpeg.org/download.html | Visualization | Video recording |
|
||||
| VTK 6.1+ | https://www.vtk.org/download/ | IVtk | VTK integration module |
|
||||
| Flex 2.6.4+ and Bison 3.7.1+ | https://sourceforge.net/projects/winflexbison/ | Data Exchange | Updating STEP and ExprIntrp parsers |
|
||||
| RapidJSON 1.1+ | https://rapidjson.org/ | Data Exchange | Reading glTF files |
|
||||
| Draco 1.4.1+ | https://github.com/google/draco | Data Exchange | Reading compressed glTF files |
|
||||
| Tcl/Tk 8.6.3+ | https://www.tcl.tk/software/tcltk/download.html | DRAW Test Harness | Tcl interpretor in Draw module |
|
||||
| Qt 5.3.2+ | https://www.qt.io/download/ | Inspector and Samples | Inspector Qt samples and |
|
||||
| Doxygen 1.8.5+ | https://www.doxygen.nl/download.html | Documentation | (Re)generating documentation |
|
||||
| Graphviz 2.38+ | https://graphviz.org/ | Documentation | Generating dependency graphs |
|
||||
|
||||
@subsection intro_req_hw Hardware
|
||||
|
||||
@@ -398,7 +397,7 @@ Don't forget to report these bugs to vendors.
|
||||
|
||||
@section intro_install Download and Installation
|
||||
|
||||
OCCT can be downloaded from https://www.opencascade.com/content/latest-release
|
||||
OCCT can be downloaded from https://dev.opencascade.org/release
|
||||
|
||||
In most cases you would want to rebuild OCCT from sources on your platform (OS, compiler) before
|
||||
using it in your project, to ensure binary compatibility and appropriate configuration of the library.
|
||||
@@ -432,7 +431,7 @@ The contents of the OCCT-7.4.0 directory (called further "OCCT root", or $CASROO
|
||||
|
||||
* **adm** This folder contains administration files, which allow rebuilding OCCT;
|
||||
* **adm/cmake** This folder contains files of CMake building procedure;
|
||||
* **adm/msvc** This folder contains Visual Studio projects for Visual C++ 2010, 2012, 2013, 2015, 2017 and 2019 which allow rebuilding OCCT under Windows platform in 32 and 64-bit mode;
|
||||
* **adm/msvc** This folder contains Visual Studio projects for Visual C++ 2013, 2015, 2017, 2019 and 2022 which allow rebuilding OCCT under Windows platform in 32 and 64-bit mode;
|
||||
* **adm/scripts** This folder contains auxiliary scripts for semi-automated building and packaging of OCCT for different platforms;
|
||||
* **data** This folder contains CAD files in different formats, which can be used to test the OCCT functionality;
|
||||
* **doc** This folder contains OCCT documentation in HTML and PDF format;
|
||||
@@ -442,7 +441,7 @@ The contents of the OCCT-7.4.0 directory (called further "OCCT root", or $CASROO
|
||||
* **src** This folder contains OCCT source files. They are organized in folders, one per development unit;
|
||||
* **tests** This folder contains scripts for OCCT testing.
|
||||
* **tools** This folder contains sources of Inspector tool.
|
||||
* **win64/vc10** This folder contains executable and library files built in optimize mode for Windows platform by Visual C++ 2010;
|
||||
* **win64/vc14** This folder contains executable and library files built in optimize mode for Windows platform by Visual C++ 2015;
|
||||
|
||||
@subsection intro_install_linux Linux
|
||||
|
||||
@@ -463,7 +462,7 @@ To run any Open CASCADE Technology application you need to set the environment v
|
||||
|
||||
You can define the environment variables with env.bat script located in the
|
||||
$CASROOT folder. This script accepts two arguments to be used:
|
||||
the version of Visual Studio (vc10 -- vc142) and the architecture (win32 or win64).
|
||||
the version of Visual Studio (vc12 -- vc142) and the architecture (win32 or win64).
|
||||
|
||||
The additional environment settings necessary for compiling OCCT libraries and samples
|
||||
by Microsoft Visual Studio can be set using script custom.bat located in the same folder.
|
||||
@@ -507,7 +506,7 @@ The scripts are located in the OCCT root folder.
|
||||
* **CSF_ShadersDirectory** (optional) defines the directory for GLSL programs for Ray Tracing renderer (embedded resources are used when variable is undefined);
|
||||
* **CSF_SHMessage** (optional) defines the path to the messages file for *ShapeHealing*;
|
||||
* **CSF_XSMessage** (optional) defines the path to the messages file for **STEP** and **IGES** translators;
|
||||
* **CSF_StandardDefaults**, **CSF_StandardLiteDefaults*, **CSF_XCAFDefaults**, and **CSF_PluginDefaults** define paths to directory where configuration files for OCAF persistence are located (required for open/save operations with OCAF documents);
|
||||
* **CSF_StandardDefaults**, **CSF_StandardLiteDefaults**, **CSF_XCAFDefaults**, and **CSF_PluginDefaults** define paths to directory where configuration files for OCAF persistence are located (required for open/save operations with OCAF documents);
|
||||
* **CSF_IGESDefaults** and **CSF_STEPDefaults** (optional) define paths to directory where resource files of **IGES** and **STEP** translators are located;
|
||||
* **CSF_XmlOcafResource** is required in order to set the path to **XSD** resources, which defines XML grammar.
|
||||
* **CSF_MIGRATION_TYPES** is required in order to read documents that contain old data types, such as *TDataStd_Shape*;
|
||||
@@ -532,7 +531,7 @@ At minimum the following should be considered:
|
||||
the application should be provided separately in a modifiable form, with all materials needed for the user to be able to run the application with a modified version of OCCT.
|
||||
|
||||
If you want to use Open CASCADE Technology without being bound by LGPL requirements,
|
||||
please <a href="https://www.opencascade.com/contact">contact Open CASCADE company</a> for a commercial license.
|
||||
please <a href="https://dev.opencascade.org/webform/contact_us">contact Open CASCADE company</a> for a commercial license.
|
||||
|
||||
Note that Open CASCADE Technology is provided on an "AS IS" basis, WITHOUT
|
||||
WARRANTY OF ANY KIND. The entire risk related to any use of the OCCT code and
|
||||
@@ -593,10 +592,10 @@ If you need further information on VTK, refer to VTK Homepage https://www.vtk.or
|
||||
**Doxygen** developed by Dimitri van Heesch is open source documentation system for
|
||||
C++, C, Java, Objective-C, Python, IDL, PHP and C#. This product is used in Open CASCADE Technology
|
||||
for automatic creation of Technical Documentation from C++ header files.
|
||||
If you need further information on Doxygen, refer to https://www.stack.nl/~dimitri/doxygen/index.html.
|
||||
If you need further information on Doxygen, refer to https://www.doxygen.nl/index.html.
|
||||
|
||||
**Graphviz** is open source graph visualization software developed by John Ellson, Emden Gansner, Yifan Hu and Arif Bilgin.
|
||||
Graph visualization is representiation of structured information as diagrams of abstract graphs and networks.
|
||||
Graph visualization is representation of structured information as diagrams of abstract graphs and networks.
|
||||
This product is used together with Doxygen in Open CASCADE Technology for automatic creation of Technical Documentation
|
||||
(generation of dependency graphs). Current versions of Graphviz are licensed on an open source
|
||||
basis under The Eclipse Public License (EPL) (https://www.graphviz.org/license/).
|
||||
|
911
dox/samples/ais_object.md
Normal file
@@ -0,0 +1,911 @@
|
||||
AIS: Custom Presentation {#tutorials__ais_object}
|
||||
========
|
||||
|
||||
@tableofcontents
|
||||
|
||||
@section intro Getting Started
|
||||
|
||||
OCCT provides a strong set of built-in Interactive Objects for rapid application development,
|
||||
but the real power and flexibility of **Application Interactive Services** (@c AIS) could be revealed by subclassing and implementing custom presentations.
|
||||
In this tutorial we will focus on the development of a custom @c AIS_InteractiveObject and show the basics step by step.
|
||||
|
||||
Let's start from the very beginning and try subclassing @c AIS_InteractiveObject object:
|
||||
|
||||
~~~~{.cpp}
|
||||
class MyAisObject : public AIS_InteractiveObject
|
||||
{
|
||||
DEFINE_STANDARD_RTTI_INLINE(MyAisObject, AIS_InteractiveObject)
|
||||
public:
|
||||
MyAisObject() {}
|
||||
public:
|
||||
virtual void Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode) override {}
|
||||
|
||||
virtual void ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
|
||||
const Standard_Integer theMode) override {}
|
||||
|
||||
virtual bool AcceptDisplayMode (const Standard_Integer theMode) const override
|
||||
{ return true; }
|
||||
};
|
||||
~~~~
|
||||
|
||||
@c DEFINE_STANDARD_RTTI_INLINE() macro will register the new class within the OCCT Run-Time Type Information (RTTI) system.
|
||||
This step is optional (you may skip it if you are not going to use methods like @c Standard_Transient::DynamicType() in application code), but it is a common practice while subclassing OCCT classes.
|
||||
|
||||
The @c AIS_InteractiveObject interface defines only a couple of pure virtual methods - @c @::Compute() defining an object presentation and @c @::ComputeSelection() defining a selectable (pickable) volume.
|
||||
Selection and presentation are two independent mechanisms in **AIS**. Presentation rendering is done with help of OpenGL or a similar low-level graphics library, while selection doesn't depend on a graphic driver at all.
|
||||
Providing an empty implementation of these two methods would be enough for adding the object to @c AIS_InteractiveContext (@c @::Display()), but obviously nothing will appear on the screen.
|
||||
|
||||
@section prs_builders Presentation builders
|
||||
|
||||
To go ahead, we need to define some presentation of our object.
|
||||
OCCT provides a set of presentation building tools for common elements like arrows, shapes, boxes, etc.
|
||||
These tools could be found within @c Prs3d, @c StdPrs and @c DsgPrs packages:
|
||||
|
||||
- **Prs3d**
|
||||
provides builders for simple geometric elements.
|
||||
- @c Prs3d_Arrow, @c Prs3d_BndBox, @c Prs3d_Point, @c Prs3d_Text, @c Prs3d_ToolCylinder, @c Prs3d_ToolDisk, @c Prs3d_ToolSector, @c Prs3d_ToolSphere, @c Prs3d_ToolTorus
|
||||
- **StdPrs**
|
||||
provides builders for analytical geometry and B-Rep shapes (@c TopoDS_Shape).
|
||||
- @c StdPrs_WFShape, @c StdPrs_ShadedShape, @c StdPrs_BRepTextBuilder
|
||||
- **DsgPrs**
|
||||
provides builders for datums, dimensions and relations.
|
||||
|
||||
Presentation builders are reusable bricks for constructing @c AIS objects.
|
||||
Standard OCCT interactive objects highly rely on them, so that you may easily replicate @c AIS_Shape presentation for displaying a shape with just a couple of lines calling @c StdPrs_ShadedShape:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (100.0, 100.0);
|
||||
StdPrs_ShadedShape::Add (thePrs, aShape, myDrawer);
|
||||
}
|
||||
...
|
||||
Handle(AIS_InteractiveContext) theCtx;
|
||||
Handle(MyAisObject) aPrs = new MyAisObject();
|
||||
theCtx->Display (aPrs, true);
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step1_shaded.png,"@c StdPrs_ShadedShape presentation builder.",409} height=409px
|
||||
|
||||
@c PrsMgr_PresentableObject::Compute() method takes three arguments:
|
||||
- **Presentation Manager** (@c PrsMgr_PresentationManager).
|
||||
Rarely used parameter, but might be necessary for some advanced use cases.
|
||||
- **Presentation** (@c Prs3d_Presentation or @c Graphic3d_Structure).
|
||||
Defines the structure to fill in with presentation elements.
|
||||
- **Display Mode** (integer number).
|
||||
Specifies the display mode to compute.
|
||||
**0** is a default display mode, if not overridden by @c AIS_InteractiveObject::SetDisplayMode() or by @c AIS_InteractiveContext::Display().
|
||||
|
||||
For each supported display mode, the **Presentation Manager** creates a dedicated @c Prs3d_Presentation and stores it within the object itself as a list of presentations @c PrsMgr_PresentableObject::Presentations().
|
||||
It is a good practice to reject unsupported display modes within @c @::Compute() method:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
if (theMode != 0) { return; } // reject non-zero display modes
|
||||
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (100.0, 100.0);
|
||||
StdPrs_ShadedShape::Add (thePrs, aShape, myDrawer);
|
||||
}
|
||||
~~~~
|
||||
|
||||
This wouldn't, however, prevent application from displaying the object with another display mode like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
Handle(AIS_InteractiveContext) theCtx;
|
||||
Handle(MyAisObject) aPrs = new MyAisObject();
|
||||
theCtx->Display (aPrs, 100, -1, true);
|
||||
~~~~
|
||||
|
||||
The code above will display @c MyAisObject with display mode equal to 100, and after @c @::Compute() modifications nothing will be displayed on the screen.
|
||||
@c AIS will still create a presentation with specified display mode, but it will be empty - method @c @::AcceptDisplayMode() could be overridden to disallow even creation of an empty presentation:
|
||||
|
||||
~~~~{.cpp}
|
||||
bool MyAisObject::AcceptDisplayMode (const Standard_Integer theMode) const
|
||||
{
|
||||
return theMode == 0; // reject non-zero display modes
|
||||
}
|
||||
~~~~
|
||||
|
||||
@c AIS_InteractiveContext::Display() checks if requested display mode is actually supported by the object, and uses default display mode (_**0**_) if it is not.
|
||||
@c StdPrs_ShadedShape prepares a shaded (triangulated) presentation of a shape, while @c StdPrs_WFShape creates a wireframe presentation with B-Rep wire boundaries:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
if (!AcceptDisplayMode (theMode)) { return; }
|
||||
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (100.0, 100.0);
|
||||
StdPrs_ShadedShape::Add (thePrs, aShape, myDrawer); // add shading
|
||||
StdPrs_WFShape::Add (thePrs, aShape, myDrawer); // add wireframe
|
||||
}
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step1_shaded_wf.png,"Result of @c StdPrs_ShadedShape + @c StdPrs_WFShape presentation builders.",409} height=409px
|
||||
|
||||
Presentation builders take the @c Prs3d_Drawer object defining various attributes - material of shaded shape, number of isolines in wireframe mode, tessellation quality, line colors and many others.
|
||||
@c PrsMgr_PresentableObject defines @c myDrawer property with default attributes.
|
||||
@c StdPrs makes it easy to display topological shapes.
|
||||
With the help of @c Prs3d tools we may display elements like arrows, boxes or text labels.
|
||||
Let's extend our presentation with a second **display mode 1** showing a bounding box using @c Prs3d_BndBox builder:
|
||||
|
||||
~~~~{.cpp}
|
||||
bool MyAisObject::AcceptDisplayMode (const Standard_Integer theMode) const
|
||||
{
|
||||
return theMode == 0 || theMode == 1;
|
||||
}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (100.0, 100.0);
|
||||
if (theMode == 0)
|
||||
{
|
||||
StdPrs_ShadedShape::Add (thePrs, aShape, myDrawer);
|
||||
StdPrs_WFShape::Add (thePrs, aShape, myDrawer); // add wireframe
|
||||
}
|
||||
else if (theMode == 1)
|
||||
{
|
||||
Bnd_Box aBox;
|
||||
BRepBndLib::Add (aShape, aBox);
|
||||
Prs3d_BndBox::Add (thePrs, aBox, myDrawer);
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
|
||||
Now, displaying an object with **display mode 1** will show a box:
|
||||
|
||||
~~~~{.cpp}
|
||||
Handle(AIS_InteractiveContext) theCtx;
|
||||
Handle(MyAisObject) aPrs = new MyAisObject();
|
||||
theCtx->Display (aPrs, 1, 0, true);
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step1_bndbox.png,"@c Prs3d_BndBox presentation builder.",409} height=409px
|
||||
|
||||
@c AIS disallows activating multiple display modes at the same time, so that these presentation modes should be alternatives to each other.
|
||||
But @c AIS may use non-active display mode for highlighting purposes - like wireframe (@c AIS_Wireframe) presentation displayed on top of shaded (@c AIS_Shaded) presentation for selected @c AIS_Shape objects.
|
||||
|
||||
Let's define a dedicated enumeration for display modes supported by our interactive object and setup the 1st (@c MyDispMode_Highlight) display mode for highlighting with help of @c PrsMgr_PresentableObject::SetHilightMode():
|
||||
|
||||
~~~~{.cpp}
|
||||
class MyAisObject : public AIS_InteractiveObject
|
||||
{
|
||||
public:
|
||||
enum MyDispMode { MyDispMode_Main = 0, MyDispMode_Highlight = 1 };
|
||||
|
||||
...
|
||||
|
||||
MyAisObject::MyAisObject()
|
||||
{
|
||||
SetDisplayMode (MyDispMode_Main); // main (active) display mode
|
||||
SetHilightMode (MyDispMode_Highlight); // auxiliary (highlighting) mode
|
||||
}
|
||||
|
||||
...
|
||||
|
||||
Handle(AIS_InteractiveContext) theCtx;
|
||||
Handle(MyAisObject) aPrs = new MyAisObject();
|
||||
theCtx->Display (aPrs, MyAisObject::MyDispMode_Main, 0, false);
|
||||
theCtx->HilightWithColor (aPrs, aPrs->HilightAttributes(), false);
|
||||
theCtx->CurrentViewer()->Redraw();
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step1_highlight.png,"Highlighting by color (left) and highlighting by another display mode (right).",818} height=409px
|
||||
|
||||
In this particular use case we've used the method @c AIS_InteractiveContext::HilightWithColor() instead of @c @::SetSelected() - just because our object is not selectable yet and @c @::SetSelected() wouldn't work.
|
||||
Highlighted presentation appears on the screen with modulated color (see left screenshot above).
|
||||
Using a dedicated display mode for highlighting (right screenshot above) allows customizing presentation in selected / highlighted states.
|
||||
|
||||
@section prim_arrays Primitive arrays
|
||||
|
||||
@c Prs3d_Presentation might be filled in by the following **primitives**:
|
||||
- **Triangles**
|
||||
- @c Graphic3d_ArrayOfTriangles
|
||||
- @c Graphic3d_ArrayOfTriangleFans
|
||||
- @c Graphic3d_ArrayOfTriangleStrips
|
||||
- **Lines**
|
||||
- @c Graphic3d_ArrayOfSegments
|
||||
- @c Graphic3d_ArrayOfPolylines
|
||||
- **Points** or **Markers**
|
||||
- @c Graphic3d_ArrayOfPoints
|
||||
|
||||
This triplet of primitives is what graphics hardware is capable of rendering, so that it could be transferred directly to low-level graphics libraries in the form of *Vertex Buffer Objects* (VBO).
|
||||
Each **primitive array** consists of an array of vertex attributes (_**position**, **normal**, **texture coordinates**, **vertex colors**_, etc.) and optional **array of indices**.
|
||||
The latter one avoids duplicating vertices shared between connected elements (triangles, polylines) in attributes array.
|
||||
|
||||
@c Graphic3d_ArrayOfPrimitives and it's subclasses provide a convenient interface for filling in primitive arrays:
|
||||
- Constructor takes a number of vertices, number of edges (indices) and a bitmask of optional vertex attributes.
|
||||
- @c Graphic3d_ArrayOfPrimitives::AddVertex() appends a vertex with specified attributes to the end of the array (within the range specified at construction time).
|
||||
- @c Graphic3d_ArrayOfPrimitives::AddEdges() appends indices, starting with 1.
|
||||
Each line segment is defined by two consequential edges, each triangle is defined by three consequential edges.
|
||||
|
||||
Let's extend our sample and display a cylinder section contour defined by array of indexed segments (e.g. a polyline of four vertices):
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (aRadius, aHeight);
|
||||
if (theMode == MyDispMode_Main)
|
||||
{
|
||||
StdPrs_ShadedShape::Add (thePrs, aShape, myDrawer);
|
||||
//StdPrs_WFShape::Add (thePrs, aShape, myDrawer);
|
||||
Handle(Graphic3d_ArrayOfSegments) aSegs = new Graphic3d_ArrayOfSegments (4, 4 * 2, Graphic3d_ArrayFlags_None);
|
||||
aSegs->AddVertex (gp_Pnt (0.0, -aRadius, 0.0));
|
||||
aSegs->AddVertex (gp_Pnt (0.0, -aRadius, aHeight));
|
||||
aSegs->AddVertex (gp_Pnt (0.0, aRadius, aHeight));
|
||||
aSegs->AddVertex (gp_Pnt (0.0, aRadius, 0.0));
|
||||
aSegs->AddEdges (1, 2);
|
||||
aSegs->AddEdges (2, 3);
|
||||
aSegs->AddEdges (3, 4);
|
||||
aSegs->AddEdges (4, 1);
|
||||
Handle(Graphic3d_Group) aGroupSegs = thePrs->NewGroup();
|
||||
aGroupSegs->SetGroupPrimitivesAspect (myDrawer->WireAspect()->Aspect());
|
||||
aGroupSegs->AddPrimitiveArray (aSegs);
|
||||
}
|
||||
else if (theMode == MyDispMode_Highlight) { ... }
|
||||
}
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step2_segments.png,"Displaying @c Graphic3d_ArrayOfSegments.",409} height=409px
|
||||
|
||||
The process is quite straightforward:
|
||||
- Create a new @c Graphic3d_Group using @c Prs3d_Presentation::NewGroup();
|
||||
- Specify presentation aspects using @c Graphic3d_Group::SetGroupPrimitivesAspect();
|
||||
- Create and add an array of primitives using @c Graphic3d_Group::AddPrimitiveArray().
|
||||
|
||||
Standard presentation builders like @c StdPrs_ShadedShape / @c StdPrs_WFShape internally do exactly the same thing - a tessellated representation of a shape is added to presentation in form of triangles (shaded),
|
||||
line segments (wireframe and free edges) and markers (free shape vertices).
|
||||
|
||||
A single @c Graphic3d_Group normally defines just a single primitive array, but it is technically possible adding more arrays to the same group @c Graphic3d_Group::AddPrimitiveArray()
|
||||
and with different aspects @c Graphic3d_Group::SetPrimitivesAspect(), which might be considered in advanced scenarios.
|
||||
|
||||
Method @c Graphic3d_Group::AddText() allows adding text labels to a presentation.
|
||||
Internally, text labels are rendered as an array of textured triangles using texture atlas created from a font, but this complex logic is hidden from the user.
|
||||
|
||||
@section prim_aspects Primitive aspects
|
||||
|
||||
@c Graphic3d_Aspects is a class defining **display properties** of a primitive array (@c Graphic3d_Group::SetGroupPrimitivesAspect()) -
|
||||
_**material**, **shading model**, **color**, **texture maps**, **blending mode**, **line width**_ and others.
|
||||
|
||||
There are also subclasses @c Graphic3d_AspectFillArea3d (triangles), @c Graphic3d_AspectLine3d (lines), @c Graphic3d_AspectMarker3d (markers)
|
||||
and @c Graphic3d_AspectText3d (text labels) defined as specializations for a specific primitive array type.
|
||||
These subclasses exist for historical reasons and are treated by renderers in exactly the same way.
|
||||
|
||||
It is technically possible to create transient aspects directly within @c @::Compute() method like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
Handle(Graphic3d_Aspects) anAspects = new Graphic3d_Aspects();
|
||||
anAspects->SetShadingModel (Graphic3d_TypeOfShadingModel_Unlit);
|
||||
anAspects->SetColor (Quantity_NOC_RED);
|
||||
Handle(Graphic3d_Group) aGroup = thePrs->NewGroup();
|
||||
aGroup->SetGroupPrimitivesAspect (anAspects);
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
|
||||
While this code would work as expected, but prevents further dynamic updates of presentation aspects without recomputing entire presentation.
|
||||
Instead, it is preferred taking attributes from @c PrsMgr_PresentableObject::myDrawer / @c @::Attributes() or storing custom attributes as class fields.
|
||||
@c Prs3d_Drawer defines a set of attributes used by @c AIS presentation builders, but the same parameters might be used by a custom builder as well.
|
||||
|
||||
It is also preferred preallocating attributes in the class constructor.
|
||||
This would allow changing attributes without recomputing the entire presentation - just by calling @c PrsMgr_PresentableObject::SynchronizeAspects() after modifications.
|
||||
Our custom object uses @c myDrawer->ShadingAspect() and @c myDrawer->WireAspect() aspects, so let's initialize them explicitly - assign silver material for shading and green color to line segments:
|
||||
|
||||
~~~~{.cpp}
|
||||
MyAisObject::MyAisObject()
|
||||
{
|
||||
SetHilightMode (MyDispMode_Highlight);
|
||||
myDrawer->SetupOwnShadingAspect();
|
||||
myDrawer->ShadingAspect()->SetMaterial (Graphic3d_NameOfMaterial_Silver);
|
||||
myDrawer->SetWireAspect (new Prs3d_LineAspect (Quantity_NOC_GREEN, Aspect_TOL_SOLID, 2.0));
|
||||
}
|
||||
~~~~
|
||||
|
||||
@section quadric_builders Quadric builders
|
||||
|
||||
Previously, we've used @c StdPrs_ShadedShape for displaying cylinder geometry.
|
||||
The @c Prs3d package provides a simpler way for displaying geometry like cylinders, spheres and toruses - based on the @c Prs3d_ToolQuadric interface.
|
||||
This interface allows bypassing creation of a complex B-Rep (@c TopoDS_Shape) definition of a simple geometry, and to avoid using general-purpose tessellators like @c BRepMesh.
|
||||
|
||||
> This difference could be negligible for a small number of such objects, but might become considerable for larger amounts.
|
||||
> The B-Rep definition of a valid cylinder includes 2 unique @c TopoDS_Vertex, 3 @c TopoDS_Edge, 3 @c TopoDS_Wire, 3 @c TopoDS_Face, 1 @c TopoDS_Shell and 1 @c TopoDS_Solid.
|
||||
> Internally each @c TopoDS_Edge also defines curves (@c Geom_Curve as well as 2D parametric @c Geom2d_Curve) and each @c TopoDS_Face defines analytical surface (@c Geom_Surface).
|
||||
> Meshing such geometry with the help of @c BRepMesh is much more complicated than one may think.
|
||||
> A plenty of data structures (memory!) and computations (time!) for displaying a geometry that could be triangulated by a simple for loop.
|
||||
|
||||
@c Prs3d_ToolQuadric solves this problem by creating a triangulation for such kinds of shapes in a straight-forward way.
|
||||
Let's try using @c Prs3d_ToolCylinder in our sample:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (aRadius, aHeight);
|
||||
if (theMode == MyDispMode_Main)
|
||||
{
|
||||
//StdPrs_ShadedShape::Add (thePrs, aShape, myDrawer); // add shading
|
||||
//StdPrs_WFShape::Add (thePrs, aShape, myDrawer); // add wireframe
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris =
|
||||
Prs3d_ToolCylinder::Create (aRadius, aRadius, aHeight, 10, 10, gp_Trsf());
|
||||
Handle(Graphic3d_Group) aGroupTris = thePrs->NewGroup();
|
||||
aGroupTris->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroupTris->AddPrimitiveArray (aTris);
|
||||
...
|
||||
}
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step3_quadrics_10.png,"@c Prs3d_ToolCylinder (10 slices).",409} height=409px
|
||||
|
||||
Well... that looks a little bit edgy.
|
||||
Quadric builder creates a triangulation taking the following parameters:
|
||||
- Geometry parameters.
|
||||
(in case of a cylinder - base radius, top radius and height).
|
||||
- Number of subdivisions along U (slices) and V (stacks) parameters.
|
||||
In some cases only one parametric scope matters.
|
||||
- Transformation @c gp_Trsf to apply
|
||||
(original geometry is defined within some reference coordinate system).
|
||||
|
||||
Let's increase number of subdivisions from _10_ to _25_:
|
||||
~~~~{.cpp}
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris =
|
||||
Prs3d_ToolCylinder::Create (aRadius, aRadius, aHeight, 25, 25, gp_Trsf());
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step3_quadrics_25.png,"@c Prs3d_ToolCylinder (25 slices).",409} height=409px
|
||||
|
||||
It looks much better now! Note that @c Prs3d_ToolCylinder could be used for building both cones and cylinders depending on top/bottom radius definition.
|
||||
|
||||
There is one issue though - our cylinder doesn't have top and bottom anymore!
|
||||
To fix this problem we will use one more quadric builder @c Prs3d_ToolDisk:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
if (theMode == MyDispMode_Main)
|
||||
{
|
||||
Prs3d_ToolCylinder aCyl (aRadius, aRadius, aHeight, 25, 25);
|
||||
Prs3d_ToolDisk aDisk (0.0, aRadius, 25, 1);
|
||||
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris =
|
||||
new Graphic3d_ArrayOfTriangles (aCyl.VerticesNb() + 2 * aDisk.VerticesNb(),
|
||||
3 * (aCyl.TrianglesNb() + 2 * aDisk.TrianglesNb()),
|
||||
Graphic3d_ArrayFlags_VertexNormal);
|
||||
aCyl .FillArray (aTris, gp_Trsf());
|
||||
aDisk.FillArray (aTris, gp_Trsf());
|
||||
|
||||
gp_Trsf aDisk2Trsf;
|
||||
aDisk2Trsf.SetTransformation (gp_Ax3 (gp_Pnt (0.0, 0.0, aHeight), -gp::DZ(), gp::DX()), gp::XOY());
|
||||
aDisk.FillArray (aTris, aDisk2Trsf);
|
||||
|
||||
Handle(Graphic3d_Group) aGroupTris = thePrs->NewGroup();
|
||||
aGroupTris->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroupTris->AddPrimitiveArray (aTris);
|
||||
aGroupTris->SetClosed (true);
|
||||
...
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
|
||||
Now our cylinder looks solid! The sample above merges two triangulations into a single one instead of appending each primitive array individually.
|
||||
|
||||
This looks like a minor difference, but it might have a _dramatic impact on performance_ in case of a large scene,
|
||||
as each `Graphic3d_ArrayOfPrimitives` is mapped into a dedicated draw call at graphic driver (OpenGL) level.
|
||||
|
||||
@figure{ais_object_step3_quadrics_fin.png,"@c Prs3d_ToolCylinder + @c Prs3d_ToolDisk.",409} height=409px
|
||||
|
||||
As an exercise, let's try computing a triangulation for cylinder disk without help of @c Prs3d_ToolDisk builder:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::Compute (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Presentation)& thePrs,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
if (theMode == MyDispMode_Main)
|
||||
{
|
||||
const int aNbSlices = 25;
|
||||
Prs3d_ToolCylinder aCyl (aRadius, aRadius, aHeight, aNbSlices, aNbSlices);
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris =
|
||||
new Graphic3d_ArrayOfTriangles (aCyl.VerticesNb(),
|
||||
3 * (aCyl.TrianglesNb()),
|
||||
Graphic3d_ArrayFlags_VertexNormal);
|
||||
aCyl.FillArray (aTris, gp_Trsf());
|
||||
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris2 =
|
||||
new Graphic3d_ArrayOfTriangles (aNbSlices + 1, aNbSlices * 3, Graphic3d_ArrayFlags_VertexNormal);
|
||||
aTris2->AddVertex (gp_Pnt (0.0, 0.0, aHeight), -gp::DZ());
|
||||
for (int aSliceIter = 0; aSliceIter < aNbSlices; ++aSliceIter)
|
||||
{
|
||||
double anAngle = M_PI * 2.0 * double(aSliceIter) / double(aNbSlices);
|
||||
aTris2->AddVertex (gp_Pnt (Cos (anAngle) * aRadius, Sin (anAngle) * aRadius, aHeight), -gp::DZ());
|
||||
}
|
||||
for (int aSliceIter = 0; aSliceIter < aNbSlices; ++aSliceIter)
|
||||
{
|
||||
aTris2->AddEdges (1, aSliceIter + 2, aSliceIter + 1 < aNbSlices ? (aSliceIter + 3) : 2);
|
||||
}
|
||||
|
||||
Handle(Graphic3d_Group) aGroupTris = thePrs->NewGroup();
|
||||
aGroupTris->SetGroupPrimitivesAspect (myDrawer->ShadingAspect()->Aspect());
|
||||
aGroupTris->AddPrimitiveArray (aTris);
|
||||
aGroupTris->AddPrimitiveArray (aTris2);
|
||||
...
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step3_quadrics_disk.png,"Manually triangulated disk.",409} height=409px
|
||||
|
||||
The disk is here, but it has a strange color - like it is not affected by lighting.
|
||||
This happens when vertex normals are defined incorrectly.
|
||||
In our case we defined disk normal as @c -DZ (see the second argument of @c Graphic3d_ArrayOfTriangles::AddVertex()),
|
||||
but normal direction should be also aligned to triangulation winding rule.
|
||||
Graphic driver defines the front side of triangle using clockwise order of triangle nodes, and normal should be defined for a front side of triangle - e.g. it should be @c gp::DZ() in our case.
|
||||
After reversing vertex normal direction, cylinder looks exactly like when @c Prs3d_ToolDisk was used.
|
||||
|
||||
Front / back face orientation might be displayed using different material based on @c Graphic3d_Aspects::SetDistinguish() flag and @c @::FrontMaterial() / @c @::BackMaterial() setup.
|
||||
|
||||
@section ais_selection Computing selection
|
||||
In the first part of the tutorial we have created a custom @c AIS object @c MyAisObject computing presentation by implementing the @c PrsMgr_PresentableObject::Compute() interface.
|
||||
In this part we will extend our object with interactive capabilities and make it selectable through implementing @c SelectMgr_SelectableObject interface.
|
||||
|
||||
Let's do the first step and put into @c @::ComputeSelection() method some logic.
|
||||
This method should fill in the @c SelectMgr_Selection argument with @c SelectMgr_SensitiveEntity entities defining selectable elements - triangulations, polylines, points and their composition.
|
||||
@c Select3D_SensitiveBox is probably the simplest way to define selectable volume - by it's bounding box:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (aRadius, aHeight);
|
||||
Bnd_Box aBox;
|
||||
BRepBndLib::Add (aShape, aBox);
|
||||
Handle(SelectMgr_EntityOwner) anOwner = new SelectMgr_EntityOwner (this);
|
||||
Handle(Select3D_SensitiveBox) aSensBox = new Select3D_SensitiveBox (anOwner, aBox);
|
||||
theSel->Add (aSensBox);
|
||||
}
|
||||
~~~~
|
||||
|
||||
@c SelectMgr_EntityOwner is a key object in selection logic - it serves as an identifier of a pickable object or it's part.
|
||||
You may see this object in methods like @c AIS_InteractiveContext::DetectedOwner(), **Owners** are stored within the list of selection objects @c AIS_Selection
|
||||
and it received by methods like @c AIS_InteractiveContext::SetSelected() and @c AIS_InteractiveContext::AddOrRemoveSelected().
|
||||
From the Selector's point of view, @c AIS_InteractiveObject is just a drawer for @c SelectMgr_EntityOwner.
|
||||
|
||||
The _**0th selection mode**_ normally defines a single Owner of the entire object.
|
||||
To make a composite object selectable as whole, we add to Selection as many SensitiveEntity as necessary referring to the same Owner.
|
||||
It might look confusing from first glance, that @c SelectMgr_SensitiveEntity stores @c SelectMgr_EntityOwner as a class field, and not in the opposite way
|
||||
(@c SelectMgr_EntityOwner doesn't store the list of @c SelectMgr_SensitiveEntity defining it's picking volume).
|
||||
|
||||
For local selection (selection of object parts) we create individual Owners for each part and add SensitiveEntity to Selection in the same way.
|
||||
Owner may store an additional identifier as a class field, like @c StdSelect_BRepOwner stores @c TopoDS_Shape as an identifier of picked sub-shape with @c AIS_Shape object.
|
||||
|
||||
In a similar way as @c StdPrs_ShadedShape is a **presentation builder** for @c TopoDS_Shape, the @c StdSelect_BRepSelectionTool can be seen as a standard **selection builder** for shapes:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
TopoDS_Shape aShape = BRepPrimAPI_MakeCylinder (aRadius, aHeight);
|
||||
Standard_Real aDefl = StdPrs_ToolTriangulatedShape::GetDeflection (aShape, myDrawer);
|
||||
StdSelect_BRepSelectionTool::Load (theSel, this, aShape, TopAbs_SHAPE, aDefl,
|
||||
myDrawer->DeviationAngle(),
|
||||
myDrawer->IsAutoTriangulation());
|
||||
}
|
||||
~~~~
|
||||
|
||||
Internally, @c StdSelect_BRepSelectionTool iterates over sub-shapes and appends to the Selection (@c theSel) entities like @c Select3D_SensitiveTriangulation (for faces) and @c Select3D_SensitiveCurve (for edges).
|
||||
|
||||
Previously, we have used @c Prs3d_ToolCylinder to triangulate a cylinder, so let's try to construct @c Select3D_SensitivePrimitiveArray from the same triangulation:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
Handle(SelectMgr_EntityOwner) anOwner = new SelectMgr_EntityOwner (this);
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris =
|
||||
Prs3d_ToolCylinder::Create (aRadius, aRadius, aHeight, 25, 25, gp_Trsf());
|
||||
Handle(Select3D_SensitivePrimitiveArray) aSensTri =
|
||||
new Select3D_SensitivePrimitiveArray (anOwner);
|
||||
aSensTri->InitTriangulation (aTris->Attributes(), aTris->Indices(),
|
||||
TopLoc_Location());
|
||||
theSel->Add (aSensTri);
|
||||
}
|
||||
~~~~
|
||||
|
||||
Selection is computed independently from presentation, so that they don't have to match each other.
|
||||
But inconsistency between presentation and selection might confuse a user, when he will not be able to pick an object clearly displayed under the mouse cursor.
|
||||
These issues might happen, for example, when selection uses tessellated representation of the same geometry computed with different parameters (different number of subdivisions, or different deflection parameters).
|
||||
|
||||
As in case of @c @::Compute(), it makes sense defining some enumeration of **selection modes** supported by specific object and reject unsupported ones to avoid unexpected behavior:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
if (theMode != 0) { return; }
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
|
||||
Unlike display modes, @c AIS_InteractiveContext allows activating an arbitrary combination of selection modes.
|
||||
A user should be careful to activate only the modes that actually make sense and may work together.
|
||||
|
||||
Selection mode to activate could be specified while displaying the object (passing _**-1**_ instead of _**0**_ would display an object with deactivated selection):
|
||||
|
||||
~~~~{.cpp}
|
||||
Handle(AIS_InteractiveContext) theCtx;
|
||||
Handle(MyAisObject) aPrs = new MyAisObject();
|
||||
theCtx->Display (aPrs, MyAisObject::MyDispMode_Main, 0, false);
|
||||
~~~~
|
||||
|
||||
Later on @c AIS_InteractiveContext::SetSelectionModeActive(), or it's wrappers @c AIS_InteractiveContext::Activate() and @c AIS_InteractiveContext::Deactivate(),
|
||||
could be used to enable or disable desired selection modes one by one.
|
||||
|
||||
@section sel_owner_highlight Highlighting selection owner
|
||||
|
||||
As has been mentioned in the previous section, @c SelectMgr_EntityOwner is a key object which can be used as an identifier of selectable part(s).
|
||||
Naturally, you might want to subclass it to put some application-specific ids for identification of selected parts.
|
||||
But there are more things you may do with the Owner class like customized highlighting.
|
||||
|
||||
Let's start from the beginning and define a custom Owner class:
|
||||
|
||||
~~~~{.cpp}
|
||||
class MyAisOwner : public SelectMgr_EntityOwner
|
||||
{
|
||||
DEFINE_STANDARD_RTTI_INLINE(MyAisOwner, SelectMgr_EntityOwner)
|
||||
public:
|
||||
MyAisOwner (const Handle(MyAisObject)& theObj, int thePriority = 0)
|
||||
: SelectMgr_EntityOwner (theObj, thePriority) {}
|
||||
|
||||
virtual void HilightWithColor (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Drawer)& theStyle,
|
||||
const Standard_Integer theMode) override
|
||||
{ base_type::HilightWithColor (thePrsMgr, theStyle, theMode); }
|
||||
|
||||
virtual void Unhilight (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Standard_Integer theMode) override
|
||||
{ base_type::Unhilight (thePrsMgr, theMode); }
|
||||
protected:
|
||||
Handle(Prs3d_Presentation) myPrs;
|
||||
};
|
||||
~~~~
|
||||
|
||||
@c SelectMgr_EntityOwner doesn't define any pure virtual methods, and can be instanced straight ahead, like it was done within @c MyAisObject::ComputeSelection() implementation above.
|
||||
Let's revert usage of a dedicated display mode for highlighting (remove @c SetHilightMode() in @c MyAisObject constructor) and use our new class @c MyAisOwner within @c @::ComputeSelection():
|
||||
|
||||
~~~~{.cpp}
|
||||
MyAisObject::MyAisObject()
|
||||
{
|
||||
//SetHilightMode (MyDispMode_Highlight);
|
||||
myDrawer->SetupOwnShadingAspect();
|
||||
...
|
||||
}
|
||||
|
||||
void MyAisObject::ComputeSelection (const Handle(SelectMgr_Selection)& theSel,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const double aRadius = 100.0, aHeight = 100.0;
|
||||
Handle(MyAisOwner) anOwner = new MyAisOwner (this);
|
||||
...
|
||||
}
|
||||
~~~~
|
||||
|
||||
The further logic creating sensitive entities and filling in Selection could be left as is.
|
||||
Substitution of @c SelectMgr_EntityOwner with @c MyAisOwner currently doesn't change behavior and we see highlighting of the entire object through color modulation.
|
||||
This is because default implementation of @c SelectMgr_EntityOwner for highlighting logic looks like this (simplified):
|
||||
|
||||
~~~~{.cpp}
|
||||
void SelectMgr_EntityOwner::HilightWithColor (
|
||||
const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Drawer)& theStyle,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
const Graphic3d_ZLayerId aHiLayer =
|
||||
theStyle->ZLayer() != Graphic3d_ZLayerId_UNKNOWN
|
||||
? theStyle->ZLayer()
|
||||
: mySelectable->ZLayer();
|
||||
thePrsMgr->Color (mySelectable, theStyle, theMode, NULL, aHiLayer);
|
||||
}
|
||||
~~~~
|
||||
|
||||
@figure{ais_object_step4_highlight1.png,"Default behavior of @c SelectMgr_EntityOwner::HilightWithColor().",409} height=409px
|
||||
|
||||
Now, let's override the @c SelectMgr_EntityOwner::HilightWithColor() method and display a bounding box presentation:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisOwner::HilightWithColor (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Drawer)& theStyle,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
if (myPrs.IsNull())
|
||||
{
|
||||
myPrs = new Prs3d_Presentation (thePrsMgr->StructureManager());
|
||||
MyAisObject* anObj = dynamic_cast<MyAisObject*> (mySelectable);
|
||||
anObj->Compute (thePrsMgr, myPrs, MyAisObject::MyDispMode_Highlight);
|
||||
}
|
||||
if (!thePrsMgr->IsImmediateModeOn())
|
||||
{
|
||||
myPrs->Display();
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
|
||||
@c SelectMgr_EntityOwner::HilightWithColor() doesn't receive a presentation to fill in as an argument; highlight presentation should be manually created and even explicitly displayed on the screen.
|
||||
To avoid code duplication, the code above reuses @c MyAisObject::Compute() already implementing computation of highlight presentation.
|
||||
|
||||
@figure{ais_object_step4_highlight2.png,"Result of custom implementation @c MyAisOwner::HilightWithColor().",409} height=409px
|
||||
|
||||
The visual result of the selected object looks exactly the same as when we've used a dedicated highlight mode.
|
||||
One thing became broken, though - highlighting remains displayed even after clearing selection.
|
||||
To fix this issue, we need implementing @c SelectMgr_EntityOwner::Unhilight() and hide our custom presentation explicitly:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisOwner::Unhilight (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
if (!myPrs.IsNull()) { myPrs->Erase(); }
|
||||
}
|
||||
~~~~
|
||||
|
||||
Another problem is that the object is no longer dynamically highlighted.
|
||||
To fix that we need to handle @c PrsMgr_PresentationManager::IsImmediateModeOn() specifically.
|
||||
Within this mode turned ON, presentation should be displayed on the screen with help of @c PrsMgr_PresentationManager::AddToImmediateList() method
|
||||
(it will be cleared from the screen automatically on the next mouse movement):
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisOwner::HilightWithColor (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Drawer)& theStyle,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
if (myPrs.IsNull())
|
||||
{
|
||||
myPrs = new Prs3d_Presentation (thePrsMgr->StructureManager());
|
||||
MyAisObject* anObj = dynamic_cast<MyAisObject*> (mySelectable);
|
||||
anObj->Compute (thePrsMgr, myPrs, MyAisObject::MyDispMode_Highlight);
|
||||
}
|
||||
if (thePrsMgr->IsImmediateModeOn())
|
||||
{
|
||||
Handle(Prs3d_PresentationShadow) aShadow =
|
||||
new Prs3d_PresentationShadow (thePrsMgr->StructureManager(), myPrs);
|
||||
aShadow->SetZLayer (Graphic3d_ZLayerId_Top);
|
||||
aShadow->Highlight (theStyle);
|
||||
thePrsMgr->AddToImmediateList (aShadow);
|
||||
}
|
||||
else
|
||||
{
|
||||
myPrs->Display();
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
|
||||
We may create two dedicated presentations for dynamic highlighting or reuse existing one for both cases with help of a transient object @c Prs3d_PresentationShadow.
|
||||
|
||||
Let's go further and make dynamic highlighting a little bit more interesting - by drawing a surface normal at the point where mouse picked the object:
|
||||
|
||||
~~~~{.cpp}
|
||||
void MyAisOwner::HilightWithColor (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
|
||||
const Handle(Prs3d_Drawer)& theStyle,
|
||||
const Standard_Integer theMode)
|
||||
{
|
||||
MyAisObject* anObj = dynamic_cast<MyAisObject*> (mySelectable);
|
||||
if (thePrsMgr->IsImmediateModeOn())
|
||||
{
|
||||
Handle(StdSelect_ViewerSelector) aSelector =
|
||||
anObj->InteractiveContext()->MainSelector();
|
||||
SelectMgr_SortCriterion aPickPnt;
|
||||
for (int aPickIter = 1; aPickIter <= aSelector->NbPicked(); ++aPickIter)
|
||||
{
|
||||
if (aSelector->Picked (aPickIter) == this)
|
||||
{
|
||||
aPickPnt = aSelector->PickedData (aPickIter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Handle(Prs3d_Presentation) aPrs = mySelectable->GetHilightPresentation (thePrsMgr);
|
||||
aPrs->SetZLayer (Graphic3d_ZLayerId_Top);
|
||||
aPrs->Clear();
|
||||
Handle(Graphic3d_Group) aGroup = aPrs->NewGroup();
|
||||
aGroupPnt->SetGroupPrimitivesAspect (theStyle->ArrowAspect()->Aspect());
|
||||
gp_Trsf aTrsfInv = mySelectable->LocalTransformation().Inverted();
|
||||
gp_Dir aNorm (aPickPnt.Normal.x(), aPickPnt.Normal.y(), aPickPnt.Normal.z());
|
||||
Handle(Graphic3d_ArrayOfTriangles) aTris =
|
||||
Prs3d_Arrow::DrawShaded (gp_Ax1(aPickPnt.Point, aNorm).Transformed (aTrsfInv),
|
||||
1.0, 15.0,
|
||||
3.0, 4.0, 10);
|
||||
aGroupPnt->AddPrimitiveArray (aTris);
|
||||
thePrsMgr->AddToImmediateList (aPrs);
|
||||
}
|
||||
}
|
||||
~~~~
|
||||
|
||||
Code above does not store our new highlight presentation as a property of @c MyAisOwner, and instead uses @c SelectMgr_SelectableObject::GetHilightPresentation() method
|
||||
to create a presentation stored directly inside of our interactive object.
|
||||
|
||||
Next trick is passing through the last picking results in @c StdSelect_ViewerSelector.
|
||||
Dynamic highlighting is expected to be called right after picking, so that highlighted Owner should be always found in picking results.
|
||||
@c StdSelect_ViewerSelector::Picked() returns entities in the descending order of their distance from picking ray origin (mouse cursor);
|
||||
normally our Owner should be the very first one in this list when no selection filters are assigned to @c AIS_InteractiveContext.
|
||||
|
||||
@c SelectMgr_SortCriterion provides us useful information like 3D point on detected object lying on the picking ray, and surface normal direction at this point (actually, it would be a normal to a picked triangle),
|
||||
which we display as an arrow with help of @c Prs3d_Arrow presentation builder.
|
||||
|
||||
@figure{ais_object_step4_highlight3.png,"Surface normal on mouse over.",409} height=409px
|
||||
|
||||
Result looks pretty nice on the screenshot, but has interaction problems - once displayed, an arrow is no longer updated with further mouse movements.
|
||||
But this behavior is not a bug - @c AIS calls @c MyAisOwner::HilightWithColor() only when picking Owner changes to avoid unnecessary Viewer updates.
|
||||
To override this behavior, we may override @c SelectMgr_EntityOwner::IsForcedHilight() option:
|
||||
|
||||
~~~~{.cpp}
|
||||
class MyAisOwner : public SelectMgr_EntityOwner
|
||||
{
|
||||
...
|
||||
virtual bool IsForcedHilight() const override { return true; }
|
||||
};
|
||||
~~~~
|
||||
|
||||
This solves the problem within our specific use case.
|
||||
Keep in mind that most objects don't need updating highlight presentation on every mouse move;
|
||||
overriding this flag everywhere would be a waste of resources and may cause performance issues - use it sparingly.
|
||||
|
||||
@section highlight_apporaches Highlighting approaches
|
||||
|
||||
@c AIS provides one more alternative to handle presentation highlighting, which is managed by option @c SelectMgr_SelectableObject::IsAutoHilight().
|
||||
By default, this option is turned ON and redirects highlighting logic to @c SelectMgr_EntityOwner::HilightWithColor() demonstrated in the previous section.
|
||||
Turning this option OFF redirects highlighting logic to the interactive object itself @c SelectMgr_SelectableObject::HilightSelected().
|
||||
|
||||
Apart from moving the logic from Owner to Interactive Object, this approach allows handling highlighting of all selected Owners within the same Object at once and sharing a common presentation
|
||||
instead of per-Owner presentation - improving performance and reducing memory utilization in case of a large number of small selectable elements, like mesh nodes in @c MeshVS_Mesh object.
|
||||
|
||||
The further optimization of such a scenario would be using a single Owner for the entire Object
|
||||
storing the list of selected elements within the Owner itself - as utilized by @c AIS_PointCloud object for highlighting individual points.
|
||||
|
||||
We wouldn't describe these advanced techniques here in detail - let's just summarize main highlighting approaches available in @c AIS:
|
||||
- Highlighting of a main presentation of Interactive Object (active display mode)
|
||||
filled in by @c PrsMgr_PresentableObject::Compute()
|
||||
and displayed with color modulation by @c AIS logic.
|
||||
- Example: @c AIS_TextLabel.
|
||||
- Highlighting of a secondary presentation of Interactive Object
|
||||
filled in by @c PrsMgr_PresentableObject::Compute()
|
||||
and displayed with color modulation by @c AIS logic.
|
||||
- Example: @c AIS_Shape, displayed in @c AIS_Shaded display mode and highlighted using @c AIS_Wireframe display mode (default behavior).
|
||||
See also @c PrsMgr_PresentableObject::SetHilightMode().
|
||||
- Highlight presentation stored within a custom @c SelectMgr_EntityOwner
|
||||
and managed by @c SelectMgr_EntityOwner::HilightWithColor().
|
||||
- Example: @c StdSelect_BRepOwner for selection of sub-shapes.
|
||||
- Custom highlight presentation stored within Interactive Object itself
|
||||
(see @c SelectMgr_SelectableObject::GetHilightPresentation() / @c @::GetSelectPresentation() methods).
|
||||
- Filled in by @c SelectMgr_EntityOwner::HilightWithColor()
|
||||
with @c SelectMgr_SelectableObject::IsAutoHilight() turned ON.<br>
|
||||
Example: @c AIS_PointCloud.
|
||||
- Filled in by @c SelectMgr_SelectableObject::HilightSelected()
|
||||
with @c SelectMgr_SelectableObject::IsAutoHilight() turned OFF.<br>
|
||||
Example: @c MeshVS_Mesh.
|
||||
- Main presentation of Interactive Object (active display mode)
|
||||
filled in by @c PrsMgr_PresentableObject::Compute()
|
||||
and manually updated (recomputed or modified aspects) on highlight events.
|
||||
- Example: @c AIS_Manipulator.
|
||||
|
||||
The number of options looks overwhelming but in general, it is better to stick to the simplest approach working for you and consider alternatives only when you have to.
|
||||
|
||||
@section mouse_click Mouse click
|
||||
|
||||
Dynamic highlighting is only one of scenarios where @c SelectMgr_EntityOwner could be useful.
|
||||
Another feature is an interface for handling a mouse click @c SelectMgr_EntityOwner @c @::HandleMouseClick().
|
||||
|
||||
This interface is useful for defining some user interface elements like buttons, and most likely your application will use a more comprehensive GUI framework for this purpose instead of @c AIS.
|
||||
But let's have some fun and make our object to change a color on each mouse click:
|
||||
|
||||
~~~~{.cpp}
|
||||
class MyAisOwner : public SelectMgr_EntityOwner
|
||||
{
|
||||
...
|
||||
virtual bool HandleMouseClick (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButton,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsDoubleClick) override;
|
||||
};
|
||||
|
||||
bool MyAisOwner::HandleMouseClick (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButton,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsDoubleClick)
|
||||
{
|
||||
static math_BullardGenerator aRandGen;
|
||||
Quantity_Color aRandColor (float(aRandGen.NextInt() % 256) / 255.0f,
|
||||
float(aRandGen.NextInt() % 256) / 255.0f,
|
||||
float(aRandGen.NextInt() % 256) / 255.0f,
|
||||
Quantity_TOC_sRGB);
|
||||
mySelectable->Attributes()->ShadingAspect()->SetColor(aRandColor);
|
||||
mySelectable->SynchronizeAspects();
|
||||
return true;
|
||||
}
|
||||
~~~~
|
||||
|
||||
Looks pretty simple. Now let's make things more interesting and launch some simple object animation on each click.
|
||||
We use a couple of global (@c static) variables in our sample for simplicity - don't do that in a real production code.
|
||||
|
||||
~~~~{.cpp}
|
||||
class MyAisOwner : public SelectMgr_EntityOwner
|
||||
{
|
||||
...
|
||||
void SetAnimation (const Handle(AIS_Animation)& theAnim)
|
||||
{ myAnim = theAnim; }
|
||||
...
|
||||
Handle(AIS_Animation) myAnim;
|
||||
};
|
||||
|
||||
bool MyAisOwner::HandleMouseClick (const Graphic3d_Vec2i& thePoint,
|
||||
Aspect_VKeyMouse theButton,
|
||||
Aspect_VKeyFlags theModifiers,
|
||||
bool theIsDoubleClick)
|
||||
{
|
||||
static bool isFirst = true;
|
||||
isFirst = !isFirst;
|
||||
MyAisObject* anObj = dynamic_cast<MyAisObject*> (mySelectable);
|
||||
gp_Trsf aTrsfTo;
|
||||
aTrsfTo.SetRotation (gp_Ax1 (gp::Origin(), gp::DX()),
|
||||
isFirst ? M_PI * 0.5 : -M_PI * 0.5);
|
||||
gp_Trsf aTrsfFrom = anObj->LocalTransformation();
|
||||
Handle(AIS_AnimationObject) anAnim =
|
||||
new AIS_AnimationObject ("MyAnim", anObj->InteractiveContext(),
|
||||
anObj, aTrsfFrom, aTrsfTo);
|
||||
anAnim->SetOwnDuration (2.0);
|
||||
|
||||
myAnim->Clear();
|
||||
myAnim->Add (anAnim);
|
||||
myAnim->StartTimer (0.0, 1.0, true);
|
||||
return true;
|
||||
}
|
||||
~~~~
|
||||
|
||||
Animation is a complex topic that is worth a dedicated article - let's not go too deep in detail here.
|
||||
To perform animation in a non-interrupted way, it should be handled by some class like @c AIS_ViewController, which is responsible for managing user input events and for 3D viewer updates.
|
||||
To utilize it, you need adding a custom object animation to @c AIS_ViewController::ObjectsAnimation() or adding custom view animation to @c AIS_ViewController::ViewAnimation().
|
||||
Somewhere in application this might look like this:
|
||||
|
||||
~~~~{.cpp}
|
||||
Handle(AIS_InteractiveContext) theCtx;
|
||||
Handle(AIS_ViewController) theViewCtrl;
|
||||
Handle(MyAisObject) aPrs = new MyAisObject();
|
||||
aPrs->SetAnimation (theViewCtrl->ObjectsAnimation());
|
||||
theCtx->Display (aPrs, MyAisObject::MyDispMode_Main, 0, false);
|
||||
~~~~
|
||||
|
||||
@section final Final result
|
||||
|
||||
The final sample could be seen by calling @c QATutorialAisObject command from Draw Harness plugin @c QAcommands (@c TKQADraw toolkit):
|
||||
|
||||
~~~~
|
||||
pload VISUALIZATION QAcommands
|
||||
vinit View1
|
||||
QATutorialAisObject p
|
||||
vfit
|
||||
~~~~
|
||||
|
||||
You may also take a look onto source code of this command at @c src/QADraw/QADraw_Tutorials.cxx if you have some problems following the tutorial.
|
@@ -1,4 +1,4 @@
|
||||
Draw Demo Scripts {#samples__draw_scripts}
|
||||
Draw: Demo Scripts {#samples__draw_scripts}
|
||||
================
|
||||
|
||||
All demo scripts are provided with OCCT sources and locate in <i>CASROOT/samples/tcl</i>. To play around them please
|
||||
|
BIN
dox/samples/images/ais_object_step1_bndbox.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
dox/samples/images/ais_object_step1_highlight.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
dox/samples/images/ais_object_step1_shaded.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
dox/samples/images/ais_object_step1_shaded_wf.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
dox/samples/images/ais_object_step2_segments.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
dox/samples/images/ais_object_step3_quadrics_10.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
dox/samples/images/ais_object_step3_quadrics_25.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
dox/samples/images/ais_object_step3_quadrics_disk.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
dox/samples/images/ais_object_step3_quadrics_fin.png
Normal file
After Width: | Height: | Size: 4.5 KiB |
BIN
dox/samples/images/ais_object_step4_highlight1.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
dox/samples/images/ais_object_step4_highlight2.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
dox/samples/images/ais_object_step4_highlight3.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
dox/samples/images/sample_overview_qt_geometry.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
dox/samples/images/sample_overview_qt_ocaf.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
dox/samples/images/sample_overview_qt_topology.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
dox/samples/images/sample_overview_qt_triangulation.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
dox/samples/images/sample_overview_qt_viewers.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
dox/samples/images/sample_overview_qt_xde.png
Normal file
After Width: | Height: | Size: 28 KiB |
115
dox/samples/novice_guide.md
Normal file
@@ -0,0 +1,115 @@
|
||||
Novice Guide {#samples__novice_guide}
|
||||
=======
|
||||
|
||||
@tableofcontents
|
||||
|
||||
@section diffs Modeling with OCCT: Key differences
|
||||
|
||||
Open CASCADE Technology (OCCT) is an object-oriented C++ framework designed for rapid production of sophisticated CAD/CAM/CAE applications.
|
||||
In other words, it provides endless possibilities for raw 2D and 3D modeling in C++ environment.
|
||||
Unlike end-user software, it is used by the application developers and therefore strongly differs from the most popular CAD/CAM/CAE software packages.
|
||||
OCCT provides building blocks enough for modeling, editing, visualization, and data interoperability of 2D and 3D objects.
|
||||
|
||||
By using OCCT, users can create the objects of their desire (or edit already existing ones) using raw code commands.
|
||||
It is a more complicated process than using GUI-based software, but it provides much more flexibility than even script-based manipulations that are available within existing CAD/CAM/CAE applications.
|
||||
However, to fully grasp the possibilities of OCCT it is best for the user to have previous experience in C++ at least at a basic level.
|
||||
|
||||
@section basics Understanding the principles
|
||||
|
||||
If you don't have any programming skills, grasping the full magnitude of OCCT workflow is still an option.
|
||||
The documentation for OCCT contains several entry points for new users.
|
||||
It will not explain all OCCT classes but will help to comprehend the workflow and help start thinking in terms of Open CASCADE Technology.
|
||||
|
||||
The most basic workflow is described in the @ref occt__tutorial "OCCT Tutorial" - this is an excellent starting point for new users.
|
||||
In this tutorial you will create a solid model step-by-step using different classes and methods.
|
||||
Each step of the tutorial contains code snippets and images.
|
||||
|
||||
The basics involved in the modeling process are explained.
|
||||
When the basics of OCCT are clear, the next logical step is to check out @ref samples "sample applications" and examine those that suit your needs.
|
||||
For these, the best starting point is **OCCTOverview** located in /samples/qt subfolder of OCCT installation.
|
||||
|
||||
This sample provides code examples for several actions as well as visualization of these code snippets output.
|
||||
The Overview interface is dynamically changing based on selected **Category** at the menu.
|
||||
Additional menu buttons will appear, providing users with subcategories and relevant commands to select one of the actions.
|
||||
The result will appear in the viewer window, the code will appear at the top right, and in several cases the output will be produced at the bottom right window.
|
||||
|
||||
@figure{sample_overview_qt_viewers.png,"Comparison of 3D and 2D viewer windows",240} height=420px
|
||||
|
||||
The 3D viewer window has a row of preset interface buttons to customize the visual output.
|
||||
|
||||
Those buttons can be grouped into three types, left to right:
|
||||
|
||||
- View controls: **Fit all** and **Isometric**, will center the view and reset the camera angles respectively;
|
||||
- Display mode customization: **HLR,** e.g. "Hidden line removal" (works only when shading is disabled) can be turned on and off;
|
||||
solid models may be displayed either in **Shading** or **Wireframe** modes. **Transparency** level may be set for models in shading mode;
|
||||
- The last four buttons in a row are beautifiers enabling Ray-tracing engine and configuring it's parameters.
|
||||
|
||||
At the bottom left of the screen the orientation cube (trihedron) is located.
|
||||
The trihedron interactively shows the position of the camera in relation to the XYZ axis of the displayed data.
|
||||
The sides of the trihedron are labeled to help with orientation.
|
||||
Click on a side of the box to orient the camera view along the preferred axis.
|
||||
|
||||
The 2D viewer window lacks most of these elements and only have **Fit all** button.
|
||||
|
||||
The **Geometry** category of the Overview focuses on primitive objects like dots, lines (including vectors) or planes.
|
||||
These objects will appear in the viewer after the subcategory is selected.
|
||||
This section will demonstrate these entities both in 2D and 3D view mode and provide basic examples of parametric creation and data analysis.
|
||||
|
||||
@figure{sample_overview_qt_geometry.png,"",240} height=440px
|
||||
|
||||
The usage of the functions shown in the Overview is described more thoroughly at the @ref occt_user_guides__modeling_data "Modeling data" section of the documentation.
|
||||
Additionally, @ref occt_user_guides__modeling_algos "Modeling Algorithms" are used in more complex cases.
|
||||
|
||||
The **Topology** section of the Overview demonstrates the functions used in 3D operations.
|
||||
Multiple use cases are provided, including different object intersections, modifying and calculations.
|
||||
Some of these use cases are described in the documentation, such as @ref occt_user_guides__inspector "Inspector" usage.
|
||||
|
||||
@figure{sample_overview_qt_topology.png,"",240} height=440px
|
||||
|
||||
The subsections are grouped as shown on the screenshot before.
|
||||
Most shapes and primitive objects are introduced and then followed by a set of operations and interactions.
|
||||
|
||||
The **Triangulation** segment allows computing the number of triangles on a shape.
|
||||
|
||||
This may be inspected via [Poly_Triangulation Class Reference](https://dev.opencascade.org/doc/refman/html/class_poly___triangulation.html) -
|
||||
a part of the [Reference manual](https://dev.opencascade.org/doc/refman/html/index.html),
|
||||
an overall Open CASCADE code guide that may be used to inspect the key points in classes and their connections.
|
||||
|
||||
@figure{sample_overview_qt_triangulation.png,"",240} height=440px
|
||||
|
||||
The triangulation uses some of Mesh-related classes - see full description at @ref occt_user_guides__mesh "Mesh" documentation section.
|
||||
|
||||
The **Data exchange** section provides examples of how to export and import files of several different formats.
|
||||
|
||||
@figure{sample_overview_qt_xde.png,"",240} height=440px
|
||||
|
||||
The **OCAF** section gives an introduction for the @ref intro_overview_ocaf "Open CASCADE Application Framework" functionality.
|
||||
To test these functions, create an object first (box or cylinder).
|
||||
After that, the object may be modified and saved. Actions are recorded and may be undone or redone.
|
||||
|
||||
@figure{sample_overview_qt_ocaf.png,"",240} height=440px
|
||||
|
||||
**Viewers** section demonstrates examples of the 2D and 3D visualization outputs.
|
||||
Check @ref occt_user_guides__visualization "Visualization" section of the documentation for a detailed description.
|
||||
In addition to these two samples, there are much more that might be of use to a new user based on their particular use case.
|
||||
|
||||
Check Readme files in the sample directories to learn more about samples compilation.
|
||||
|
||||
**Note:** source code for OCCTOverview is stored at 'samples/qt/OCCTOverview/src' folder in your OCCT root,
|
||||
and the source code files for examples presented in subsections are stored at 'samples/OCCTOverview/code folder'.
|
||||
Several utility classes that are not presented in the example window may be found in example source code files.
|
||||
|
||||
The overall classes introduction may be found in the @ref occt_user_guides__foundation_classes "Foundation Classes" section of the documentation.
|
||||
The "Introduction" section contains short descriptions of the most massive entries in the documentation.
|
||||
|
||||
@section helps Additional assistance
|
||||
|
||||
There are several places that may be of use for new users.
|
||||
The first one is [Training & E-learning](https://dev.opencascade.org/resources/trainings) page that lists available trainings and describes their specifics.
|
||||
|
||||
The second one is the Overview documentation (this document is a part of it) - here you can find information that suits most of the use cases.
|
||||
This may seem overwhelming at first, but if you have the clear understanding of what do you seek, you will most likely find the required information.
|
||||
|
||||
Aside from the Overview documentation itself, the [Reference manual](https://dev.opencascade.org/doc/refman/html/index.html) is present.
|
||||
Use it to check classes descriptions, dependencies and examples.
|
||||
Additionally, there is a [Forum](https://dev.opencascade.org/forums) where you can contact the OCCT community and developers.
|
@@ -1,82 +1,76 @@
|
||||
OCAF Usage {#samples__ocaf}
|
||||
OCAF: Usage Tutorial {#samples__ocaf}
|
||||
========
|
||||
|
||||
## Getting Started
|
||||
## Getting Started
|
||||
|
||||
At the beginning of your development, you first define an application class by inheriting from the Application abstract class.
|
||||
You only have to create and determine the resources of the application for specifying the format of your documents (you generally use the standard one) and their file extension.
|
||||
|
||||
Then, you design the application data model by organizing attributes you choose among those provided with OCAF.
|
||||
You can specialize these attributes using the User attribute. For example, if you need a reflection coefficient,
|
||||
you aggregate a User attribute identified as a reflection coefficient
|
||||
with a Real attribute containing the value of the coefficient (as such, you don't define a new class).
|
||||
|
||||
If you need application specific data not provided with OCAF, for example, to incorporate a finite element model in the data structure,
|
||||
you define a new attribute class containing the mesh, and you include its persistent homologue in a new file format.
|
||||
|
||||
Once you have implemented the commands which create and modify the data structure according to your specification, OCAF provides you, without any additional programming:
|
||||
|
||||
* Persistent reference to any data, including geometric elements - several documents can be linked with such reference;
|
||||
* Document-View association;
|
||||
* Ready-to-use functions such as:
|
||||
* Undo-redo;
|
||||
* Save and open application data.
|
||||
|
||||
Finally, you develop the application's graphical user interface using the toolkit of your choice, for example:
|
||||
* KDE Qt or GNOME GTK+ on Linux;
|
||||
* Microsoft Foundation Classes (MFC) on Windows Motif on Sun;
|
||||
* Other commercial products such as Ilog Views.
|
||||
|
||||
You can also implement the user interface in the Java language using the Swing-based Java Application Desktop component (JAD) provided with OCAF.
|
||||
|
||||
At the beginning of your development, you first define an application class by inheriting from the Application abstract class.
|
||||
You only have to create and determine the resources of the application
|
||||
for specifying the format of your documents (you generally use the standard one) and their file extension.
|
||||
|
||||
Then, you design the application data model by organizing attributes you choose among those provided with OCAF.
|
||||
You can specialize these attributes using the User attribute. For example, if you need a reflection coefficient,
|
||||
you aggregate a User attribute identified as a reflection coefficient
|
||||
with a Real attribute containing the value of the coefficient (as such, you don't define a new class).
|
||||
|
||||
If you need application specific data not provided with OCAF, for example,
|
||||
to incorporate a finite element model in the data structure,
|
||||
you define a new attribute class containing the mesh,
|
||||
and you include its persistent homologue in a new file format.
|
||||
|
||||
Once you have implemented the commands which create and modify the data structure
|
||||
according to your specification, OCAF provides you, without any additional programming:
|
||||
|
||||
* Persistent reference to any data, including geometric elements â€" several documents can be linked with such reference;
|
||||
* Document-View association;
|
||||
* Ready-to-use functions such as :
|
||||
* Undo-redo;
|
||||
* Save and open application data.
|
||||
|
||||
Finally, you develop the application's graphical user interface using the toolkit of your choice, for example:
|
||||
* KDE Qt or GNOME GTK+ on Linux;
|
||||
* Microsoft Foundation Classes (MFC) on Windows Motif on Sun;
|
||||
* Other commercial products such as Ilog Views.
|
||||
|
||||
You can also implement the user interface in the Java language using
|
||||
the Swing-based Java Application Desktop component (JAD) provided with OCAF.
|
||||
|
||||
## An example of OCAF usage
|
||||
|
||||
To create a useful OCAF-based application, it is necessary to redefine two deferred methods: <i> Formats</i> and <i> ResourcesName</i>
|
||||
To create a useful OCAF-based application, it is necessary to redefine two deferred methods: <i>Formats</i> and <i>ResourcesName</i>
|
||||
|
||||
In the <i> Formats </i> method, add the format of the documents, which need to be read by the application and may have been built in other applications.
|
||||
In the <i>Formats</i> method, add the format of the documents, which need to be read by the application and may have been built in other applications.
|
||||
|
||||
For example:
|
||||
|
||||
~~~~
|
||||
~~~~{.cpp}
|
||||
void myApplication::Formats(TColStd_SequenceOfExtendedString& Formats)
|
||||
{
|
||||
Formats.Append(TCollection_ExtendedString ("OCAF-myApplication"));
|
||||
}
|
||||
~~~~
|
||||
|
||||
In the <i> ResourcesName</i> method, you only define the name of the resource file. This
|
||||
file contains several definitions for the saving and opening mechanisms associated
|
||||
with each format and calling of the plug-in file.
|
||||
In the <i>ResourcesName</i> method, you only define the name of the resource file.
|
||||
This file contains several definitions for the saving and opening mechanisms associated with each format and calling of the plug-in file.
|
||||
|
||||
~~~~
|
||||
~~~~{.cpp}
|
||||
Standard_CString myApplication::ResourcesName()
|
||||
{
|
||||
return Standard_CString ("Resources");
|
||||
}
|
||||
~~~~
|
||||
|
||||
To obtain the saving and opening mechanisms, it is necessary to set two environment variables: <i> CSF_PluginDefaults</i>, which defines the path of the plug-in file, and <i> CSF_ResourcesDefault</i>, which defines the resource file:
|
||||
To obtain the saving and opening mechanisms, it is necessary to set two environment variables: <i>CSF_PluginDefaults</i>, which defines the path of the plug-in file,
|
||||
and <i>CSF_ResourcesDefault</i>, which defines the resource file:
|
||||
|
||||
~~~~
|
||||
SetEnvironmentVariable ( "CSF_ResourcesDefaults",myDirectory);
|
||||
SetEnvironmentVariable ( "CSF_PluginDefaults",myDirectory);
|
||||
~~~~{.cpp}
|
||||
SetEnvironmentVariable ("CSF_ResourcesDefaults", myDirectory);
|
||||
SetEnvironmentVariable ("CSF_PluginDefaults", myDirectory);
|
||||
~~~~
|
||||
|
||||
The plugin and the resource files of the application will be located in <i> myDirector</i>.
|
||||
The plugin and the resource files of the application will be located in <i>myDirector</i>.
|
||||
The name of the plugin file must be <i>Plugin</i>.
|
||||
|
||||
### Resource File
|
||||
|
||||
The resource file describes the documents (type and extension) and
|
||||
the type of data that the application can manipulate
|
||||
The resource file describes the documents (type and extension) and the type of data that the application can manipulate
|
||||
by identifying the storage and retrieval drivers appropriate for this data.
|
||||
|
||||
Each driver is unique and identified by a GUID generated, for example, with the <i> uuidgen </i> tool in Windows.
|
||||
Each driver is unique and identified by a GUID generated, for example, with the <i>uuidgen</i> tool in Windows.
|
||||
|
||||
Five drivers are required to use all standard attributes provided within OCAF:
|
||||
|
||||
@@ -86,8 +80,7 @@ Five drivers are required to use all standard attributes provided within OCAF:
|
||||
* the attribute storage driver (47b0b826-d931-11d1-b5da-00a0c9064368)
|
||||
* the attribute retrieval driver (47b0b827-d931-11d1-b5da-00a0c9064368)
|
||||
|
||||
These drivers are provided as plug-ins and are located in the <i> PappStdPlugin</i> library.
|
||||
|
||||
These drivers are provided as plug-ins and are located in the <i>PappStdPlugin</i> library.
|
||||
|
||||
For example, this is a resource file, which declares a new model document OCAF-MyApplication:
|
||||
|
||||
@@ -104,12 +97,11 @@ OCAF-MyApplication.AttributeRetrievalPlugin: 47b0b827-d931-11d1-b5da-00a0c906436
|
||||
|
||||
### Plugin File
|
||||
|
||||
The plugin file describes the list of required plug-ins to run the application and the
|
||||
libraries in which plug-ins are located.
|
||||
The plugin file describes the list of required plug-ins to run the application and the libraries in which plug-ins are located.
|
||||
|
||||
You need at least the <i> FWOSPlugin</i> and the plug-in drivers to run an OCAF application.
|
||||
You need at least the <i>FWOSPlugin</i> and the plug-in drivers to run an OCAF application.
|
||||
|
||||
The syntax of each item is <i> Identification.Location Library_Name, </i> where:
|
||||
The syntax of each item is <i>Identification.Location Library_Name</i>, where:
|
||||
* Identification is GUID.
|
||||
* Location defines the location of the Identification (where its definition is found).
|
||||
* Library_Name is the name (and path to) the library, where the plug-in is located.
|
||||
@@ -125,412 +117,414 @@ ad696002-5b34-11d1-b5ba-00a0c9064368.Location: PAppStdPlugin
|
||||
47b0b826-d931-11d1-b5da-00a0c9064368.Location: PAppStdPlugin
|
||||
47b0b827-d931-11d1-b5da-00a0c9064368.Location: PAppStdPlugin
|
||||
~~~~
|
||||
|
||||
|
||||
## Implementation of Attribute Transformation in a HXX file
|
||||
|
||||
~~~~
|
||||
\#include <TDF_Attribute.hxx>
|
||||
~~~~{.cpp}
|
||||
#include <TDF_Attribute.hxx>
|
||||
|
||||
\#include <gp_Ax3.hxx>
|
||||
\#include <gp_Pnt.hxx>
|
||||
\#include <gp_Vec.hxx>
|
||||
\#include <gp_Trsf.hxx>
|
||||
#include <gp_Ax3.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Vec.hxx>
|
||||
#include <gp_Trsf.hxx>
|
||||
|
||||
//! This attribute implements a transformation data container
|
||||
class MyPackage_Transformation : public TDF_Attribute
|
||||
{
|
||||
public:
|
||||
//!@ name Static methods
|
||||
public: //!@ name Static methods
|
||||
|
||||
//! The method returns a unique GUID of this attribute.
|
||||
//! By means of this GUID this attribute may be identified
|
||||
//! among other attributes attached to the same label.
|
||||
//! The method returns a unique GUID of this attribute.
|
||||
//! By means of this GUID this attribute may be identified
|
||||
//! among other attributes attached to the same label.
|
||||
Standard_EXPORT static const Standard_GUID& GetID ();
|
||||
|
||||
//! Finds or creates the attribute attached to <theLabel>.
|
||||
//! The found or created attribute is returned.
|
||||
//! Finds or creates the attribute attached to <theLabel>.
|
||||
//! The found or created attribute is returned.
|
||||
Standard_EXPORT static Handle(MyPackage_Transformation) Set (const TDF_Label theLabel);
|
||||
|
||||
//!@ name Methods for access to the attribute data
|
||||
|
||||
//! The method returns the transformation.
|
||||
Standard_EXPORT gp_Trsf Get () const;
|
||||
public: //!@ name Methods for access to the attribute data
|
||||
|
||||
//!@ name Methods for setting the data of transformation
|
||||
//! The method returns the transformation.
|
||||
Standard_EXPORT gp_Trsf Get () const;
|
||||
|
||||
//! The method defines a rotation type of transformation.
|
||||
Standard_EXPORT void SetRotation (const gp_Ax1& theAxis, Standard_Real theAngle);
|
||||
public: //!@ name Methods for setting the data of transformation
|
||||
|
||||
//! The method defines a translation type of transformation.
|
||||
Standard_EXPORT void SetTranslation (const gp_Vec& theVector);
|
||||
//! The method defines a rotation type of transformation.
|
||||
Standard_EXPORT void SetRotation (const gp_Ax1& theAxis, Standard_Real theAngle);
|
||||
|
||||
//! The method defines a point mirror type of transformation (point symmetry).
|
||||
Standard_EXPORT void SetMirror (const gp_Pnt& thePoint);
|
||||
//! The method defines a translation type of transformation.
|
||||
Standard_EXPORT void SetTranslation (const gp_Vec& theVector);
|
||||
|
||||
//! The method defines an axis mirror type of transformation (axial symmetry).
|
||||
Standard_EXPORT void SetMirror (const gp_Ax1& theAxis);
|
||||
//! The method defines a point mirror type of transformation (point symmetry).
|
||||
Standard_EXPORT void SetMirror (const gp_Pnt& thePoint);
|
||||
|
||||
//! The method defines a point mirror type of transformation (planar symmetry).
|
||||
Standard_EXPORT void SetMirror (const gp_Ax2& thePlane);
|
||||
//! The method defines an axis mirror type of transformation (axial symmetry).
|
||||
Standard_EXPORT void SetMirror (const gp_Ax1& theAxis);
|
||||
|
||||
//! The method defines a scale type of transformation.
|
||||
Standard_EXPORT void SetScale (const gp_Pnt& thePoint, Standard_Real theScale);
|
||||
//! The method defines a point mirror type of transformation (planar symmetry).
|
||||
Standard_EXPORT void SetMirror (const gp_Ax2& thePlane);
|
||||
|
||||
//! The method defines a scale type of transformation.
|
||||
Standard_EXPORT void SetScale (const gp_Pnt& thePoint, Standard_Real theScale);
|
||||
|
||||
//! The method defines a complex type of transformation from one coordinate system to another.
|
||||
Standard_EXPORT void SetTransformation (const gp_Ax3& theCoordinateSystem1, const gp_Ax3& theCoordinateSystem2);
|
||||
Standard_EXPORT void SetTransformation (const gp_Ax3& theCoordinateSystem1, const gp_Ax3& theCoordinateSystem2);
|
||||
|
||||
//!@ name Overridden methods from TDF_Attribute
|
||||
|
||||
//! The method returns a unique GUID of the attribute.
|
||||
//! By means of this GUID this attribute may be identified among other attributes attached to the same label.
|
||||
Standard_EXPORT const Standard_GUID& ID () const;
|
||||
public: //!@ name Overridden methods from TDF_Attribute
|
||||
|
||||
//! The method is called on Undo / Redo.
|
||||
//! It copies the content of theAttribute into this attribute (copies the fields).
|
||||
Standard_EXPORT void Restore (const Handle(TDF_Attribute)& theAttribute);
|
||||
//! The method returns a unique GUID of the attribute.
|
||||
//! By means of this GUID this attribute may be identified among other attributes attached to the same label.
|
||||
Standard_EXPORT const Standard_GUID& ID () const;
|
||||
|
||||
//! It creates a new instance of this attribute.
|
||||
//! It is called on Copy / Paste, Undo / Redo.
|
||||
//! The method is called on Undo / Redo.
|
||||
//! It copies the content of theAttribute into this attribute (copies the fields).
|
||||
Standard_EXPORT void Restore (const Handle(TDF_Attribute)& theAttribute);
|
||||
|
||||
//! It creates a new instance of this attribute.
|
||||
//! It is called on Copy / Paste, Undo / Redo.
|
||||
Standard_EXPORT Handle(TDF_Attribute) NewEmpty () const;
|
||||
|
||||
//! The method is called on Copy / Paste.
|
||||
//! It copies the content of this attribute into theAttribute (copies the fields).
|
||||
Standard_EXPORT void Paste (const Handle(TDF_Attribute)& theAttribute, const Handle(TDF_RelocationTable)& theRelocationTable);
|
||||
//! The method is called on Copy / Paste.
|
||||
//! It copies the content of this attribute into theAttribute (copies the fields).
|
||||
Standard_EXPORT void Paste (const Handle(TDF_Attribute)& theAttribute, const Handle(TDF_RelocationTable)& theRelocationTable);
|
||||
|
||||
//! Prints the content of this attribute into the stream.
|
||||
//! Prints the content of this attribute into the stream.
|
||||
Standard_EXPORT Standard_OStream& Dump(Standard_OStream& theOS);
|
||||
|
||||
//!@ name Constructor
|
||||
public: //!@ name Constructor
|
||||
|
||||
//! The C++ constructor of this attribute class.
|
||||
//! Usually it is never called outside this class.
|
||||
//! Usually it is never called outside this class.
|
||||
Standard_EXPORT MyPackage_Transformation();
|
||||
|
||||
private:
|
||||
gp_TrsfForm myType;
|
||||
|
||||
// Axes (Ax1, Ax2, Ax3)
|
||||
// Axes (Ax1, Ax2, Ax3)
|
||||
gp_Ax1 myAx1;
|
||||
gp_Ax2 myAx2;
|
||||
gp_Ax3 myFirstAx3;
|
||||
gp_Ax3 mySecondAx3;
|
||||
|
||||
// Scalar values
|
||||
// Scalar values
|
||||
Standard_Real myAngle;
|
||||
Standard_Real myScale;
|
||||
|
||||
// Points
|
||||
// Points
|
||||
gp_Pnt myFirstPoint;
|
||||
gp_Pnt mySecondPoint;
|
||||
};
|
||||
};
|
||||
~~~~
|
||||
|
||||
## Implementation of Attribute Transformation in a CPP file
|
||||
|
||||
~~~~{.cpp}
|
||||
\#include <MyPackage_Transformation.hxx>
|
||||
|
||||
//=======================================================================
|
||||
//function : GetID
|
||||
//purpose : The method returns a unique GUID of this attribute.
|
||||
// By means of this GUID this attribute may be identified
|
||||
// among other attributes attached to the same label.
|
||||
//=======================================================================
|
||||
const Standard_GUID& MyPackage_Transformation::GetID()
|
||||
{
|
||||
static Standard_GUID ID("4443368E-C808-4468-984D-B26906BA8573");
|
||||
return ID;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Set
|
||||
//purpose : Finds or creates the attribute attached to <theLabel>.
|
||||
// The found or created attribute is returned.
|
||||
//=======================================================================
|
||||
Handle(MyPackage_Transformation) MyPackage_Transformation::Set(const TDF_Label& theLabel)
|
||||
{
|
||||
Handle(MyPackage_Transformation) T;
|
||||
if (!theLabel.FindAttribute(MyPackage_Transformation::GetID(), T))
|
||||
{
|
||||
T = new MyPackage_Transformation();
|
||||
theLabel.AddAttribute(T);
|
||||
}
|
||||
return T;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Get
|
||||
//purpose : The method returns the transformation.
|
||||
//=======================================================================
|
||||
gp_Trsf MyPackage_Transformation::Get() const
|
||||
{
|
||||
gp_Trsf transformation;
|
||||
switch (myType)
|
||||
{
|
||||
case gp_Identity:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case gp_Rotation:
|
||||
{
|
||||
transformation.SetRotation(myAx1, myAngle);
|
||||
break;
|
||||
}
|
||||
case gp_Translation:
|
||||
{
|
||||
transformation.SetTranslation(myFirstPoint, mySecondPoint);
|
||||
break;
|
||||
}
|
||||
case gp_PntMirror:
|
||||
{
|
||||
transformation.SetMirror(myFirstPoint);
|
||||
break;
|
||||
}
|
||||
case gp_Ax1Mirror:
|
||||
{
|
||||
transformation.SetMirror(myAx1);
|
||||
break;
|
||||
}
|
||||
case gp_Ax2Mirror:
|
||||
{
|
||||
transformation.SetMirror(myAx2);
|
||||
break;
|
||||
}
|
||||
case gp_Scale:
|
||||
{
|
||||
transformation.SetScale(myFirstPoint, myScale);
|
||||
break;
|
||||
}
|
||||
case gp_CompoundTrsf:
|
||||
{
|
||||
transformation.SetTransformation(myFirstAx3, mySecondAx3);
|
||||
break;
|
||||
}
|
||||
case gp_Other:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return transformation;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetRotation
|
||||
//purpose : The method defines a rotation type of transformation.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetRotation(const gp_Ax1& theAxis, const Standard_Real theAngle)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Rotation;
|
||||
myAx1 = theAxis;
|
||||
myAngle = theAngle;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetTranslation
|
||||
//purpose : The method defines a translation type of transformation.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetTranslation(const gp_Vec& theVector)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Translation;
|
||||
myFirstPoint.SetCoord(0, 0, 0);
|
||||
mySecondPoint.SetCoord(theVector.X(), theVector.Y(), theVector.Z());
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMirror
|
||||
//purpose : The method defines a point mirror type of transformation
|
||||
// (point symmetry).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetMirror(const gp_Pnt& thePoint)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_PntMirror;
|
||||
myFirstPoint = thePoint;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMirror
|
||||
//purpose : The method defines an axis mirror type of transformation
|
||||
// (axial symmetry).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetMirror(const gp_Ax1& theAxis)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Ax1Mirror;
|
||||
myAx1 = theAxis;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMirror
|
||||
//purpose : The method defines a point mirror type of transformation
|
||||
// (planar symmetry).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetMirror(const gp_Ax2& thePlane)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Ax2Mirror;
|
||||
myAx2 = thePlane;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetScale
|
||||
//purpose : The method defines a scale type of transformation.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetScale(const gp_Pnt& thePoint, const Standard_Real theScale)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Scale;
|
||||
myFirstPoint = thePoint;
|
||||
myScale = theScale;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetTransformation
|
||||
//purpose : The method defines a complex type of transformation
|
||||
// from one coordinate system to another.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetTransformation(const gp_Ax3& theCoordinateSystem1,
|
||||
const gp_Ax3& theCoordinateSystem2)
|
||||
{
|
||||
Backup();
|
||||
myFirstAx3 = theCoordinateSystem1;
|
||||
mySecondAx3 = theCoordinateSystem2;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : ID
|
||||
//purpose : The method returns a unique GUID of the attribute.
|
||||
// By means of this GUID this attribute may be identified
|
||||
// among other attributes attached to the same label.
|
||||
//=======================================================================
|
||||
const Standard_GUID& MyPackage_Transformation::ID() const
|
||||
{
|
||||
return GetID();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Restore
|
||||
//purpose : The method is called on Undo / Redo.
|
||||
// It copies the content of <theAttribute>
|
||||
// into this attribute (copies the fields).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::Restore(const Handle(TDF_Attribute)& theAttribute)
|
||||
{
|
||||
Handle(MyPackage_Transformation) theTransformation = Handle(MyPackage_Transformation)::DownCast(theAttribute);
|
||||
myType = theTransformation->myType;
|
||||
myAx1 = theTransformation->myAx1;
|
||||
myAx2 = theTransformation->myAx2;
|
||||
myFirstAx3 = theTransformation->myFirstAx3;
|
||||
mySecondAx3 = theTransformation->mySecondAx3;
|
||||
myAngle = theTransformation->myAngle;
|
||||
myScale = theTransformation->myScale;
|
||||
myFirstPoint = theTransformation->myFirstPoint;
|
||||
mySecondPoint = theTransformation->mySecondPoint;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : NewEmpty
|
||||
//purpose : It creates a new instance of this attribute.
|
||||
// It is called on Copy / Paste, Undo / Redo.
|
||||
//=======================================================================
|
||||
Handle(TDF_Attribute) MyPackage_Transformation::NewEmpty() const
|
||||
{
|
||||
return new MyPackage_Transformation();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Paste
|
||||
//purpose : The method is called on Copy / Paste.
|
||||
// It copies the content of this attribute into
|
||||
// <theAttribute> (copies the fields).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::Paste(const Handle(TDF_Attribute)& theAttribute,
|
||||
const Handle(TDF_RelocationTable)& ) const
|
||||
{
|
||||
Handle(MyPackage_Transformation) theTransformation = Handle(MyPackage_Transformation)::DownCast(theAttribute);
|
||||
theTransformation->myType = myType;
|
||||
theTransformation->myAx1 = myAx1;
|
||||
theTransformation->myAx2 = myAx2;
|
||||
theTransformation->myFirstAx3 = myFirstAx3;
|
||||
theTransformation->mySecondAx3 = mySecondAx3;
|
||||
theTransformation->myAngle = myAngle;
|
||||
theTransformation->myScale = myScale;
|
||||
theTransformation->myFirstPoint = myFirstPoint;
|
||||
theTransformation->mySecondPoint = mySecondPoint;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Dump
|
||||
//purpose : Prints the content of this attribute into the stream.
|
||||
//=======================================================================
|
||||
Standard_OStream& MyPackage_Transformation::Dump(Standard_OStream& anOS) const
|
||||
{
|
||||
anOS = "Transformation: ";
|
||||
switch (myType)
|
||||
{
|
||||
case gp_Identity:
|
||||
{
|
||||
anOS = "gp_Identity";
|
||||
break;
|
||||
}
|
||||
case gp_Rotation:
|
||||
{
|
||||
anOS = "gp_Rotation";
|
||||
break;
|
||||
}
|
||||
case gp_Translation:
|
||||
{
|
||||
anOS = "gp_Translation";
|
||||
break;
|
||||
}
|
||||
case gp_PntMirror:
|
||||
{
|
||||
anOS = "gp_PntMirror";
|
||||
break;
|
||||
}
|
||||
case gp_Ax1Mirror:
|
||||
{
|
||||
anOS = "gp_Ax1Mirror";
|
||||
break;
|
||||
}
|
||||
case gp_Ax2Mirror:
|
||||
{
|
||||
anOS = "gp_Ax2Mirror";
|
||||
break;
|
||||
}
|
||||
case gp_Scale:
|
||||
{
|
||||
anOS = "gp_Scale";
|
||||
break;
|
||||
}
|
||||
case gp_CompoundTrsf:
|
||||
{
|
||||
anOS = "gp_CompoundTrsf";
|
||||
break;
|
||||
}
|
||||
case gp_Other:
|
||||
{
|
||||
anOS = "gp_Other";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return anOS;
|
||||
}
|
||||
#include <MyPackage_Transformation.hxx>
|
||||
|
||||
//=======================================================================
|
||||
//function : MyPackage_Transformation
|
||||
//purpose : A constructor.
|
||||
//function : GetID
|
||||
//purpose : The method returns a unique GUID of this attribute.
|
||||
// By means of this GUID this attribute may be identified
|
||||
// among other attributes attached to the same label.
|
||||
//=======================================================================
|
||||
MyPackage_Transformation::MyPackage_Transformation():myType(gp_Identity){
|
||||
const Standard_GUID& MyPackage_Transformation::GetID()
|
||||
{
|
||||
static Standard_GUID ID("4443368E-C808-4468-984D-B26906BA8573");
|
||||
return ID;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Set
|
||||
//purpose : Finds or creates the attribute attached to <theLabel>.
|
||||
// The found or created attribute is returned.
|
||||
//=======================================================================
|
||||
Handle(MyPackage_Transformation) MyPackage_Transformation::Set(const TDF_Label& theLabel)
|
||||
{
|
||||
Handle(MyPackage_Transformation) T;
|
||||
if (!theLabel.FindAttribute(MyPackage_Transformation::GetID(), T))
|
||||
{
|
||||
T = new MyPackage_Transformation();
|
||||
theLabel.AddAttribute(T);
|
||||
}
|
||||
return T;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Get
|
||||
//purpose : The method returns the transformation.
|
||||
//=======================================================================
|
||||
gp_Trsf MyPackage_Transformation::Get() const
|
||||
{
|
||||
gp_Trsf transformation;
|
||||
switch (myType)
|
||||
{
|
||||
case gp_Identity:
|
||||
{
|
||||
break;
|
||||
}
|
||||
case gp_Rotation:
|
||||
{
|
||||
transformation.SetRotation(myAx1, myAngle);
|
||||
break;
|
||||
}
|
||||
case gp_Translation:
|
||||
{
|
||||
transformation.SetTranslation(myFirstPoint, mySecondPoint);
|
||||
break;
|
||||
}
|
||||
case gp_PntMirror:
|
||||
{
|
||||
transformation.SetMirror(myFirstPoint);
|
||||
break;
|
||||
}
|
||||
case gp_Ax1Mirror:
|
||||
{
|
||||
transformation.SetMirror(myAx1);
|
||||
break;
|
||||
}
|
||||
case gp_Ax2Mirror:
|
||||
{
|
||||
transformation.SetMirror(myAx2);
|
||||
break;
|
||||
}
|
||||
case gp_Scale:
|
||||
{
|
||||
transformation.SetScale(myFirstPoint, myScale);
|
||||
break;
|
||||
}
|
||||
case gp_CompoundTrsf:
|
||||
{
|
||||
transformation.SetTransformation(myFirstAx3, mySecondAx3);
|
||||
break;
|
||||
}
|
||||
case gp_Other:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return transformation;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetRotation
|
||||
//purpose : The method defines a rotation type of transformation.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetRotation(const gp_Ax1& theAxis, const Standard_Real theAngle)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Rotation;
|
||||
myAx1 = theAxis;
|
||||
myAngle = theAngle;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetTranslation
|
||||
//purpose : The method defines a translation type of transformation.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetTranslation(const gp_Vec& theVector)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Translation;
|
||||
myFirstPoint.SetCoord(0, 0, 0);
|
||||
mySecondPoint.SetCoord(theVector.X(), theVector.Y(), theVector.Z());
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMirror
|
||||
//purpose : The method defines a point mirror type of transformation
|
||||
// (point symmetry).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetMirror(const gp_Pnt& thePoint)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_PntMirror;
|
||||
myFirstPoint = thePoint;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMirror
|
||||
//purpose : The method defines an axis mirror type of transformation
|
||||
// (axial symmetry).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetMirror(const gp_Ax1& theAxis)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Ax1Mirror;
|
||||
myAx1 = theAxis;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetMirror
|
||||
//purpose : The method defines a point mirror type of transformation
|
||||
// (planar symmetry).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetMirror(const gp_Ax2& thePlane)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Ax2Mirror;
|
||||
myAx2 = thePlane;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetScale
|
||||
//purpose : The method defines a scale type of transformation.
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetScale(const gp_Pnt& thePoint, const Standard_Real theScale)
|
||||
{
|
||||
Backup();
|
||||
myType = gp_Scale;
|
||||
myFirstPoint = thePoint;
|
||||
myScale = theScale;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : SetTransformation
|
||||
//purpose : The method defines a complex type of transformation
|
||||
// from one coordinate system to another
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::SetTransformation (const gp_Ax3& theCoordinateSystem1,
|
||||
const gp_Ax3& theCoordinateSystem2)
|
||||
{
|
||||
Backup();
|
||||
myFirstAx3 = theCoordinateSystem1;
|
||||
mySecondAx3 = theCoordinateSystem2;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : ID
|
||||
//purpose : The method returns a unique GUID of the attribute.
|
||||
// By means of this GUID this attribute may be identified
|
||||
// among other attributes attached to the same label.
|
||||
//=======================================================================
|
||||
const Standard_GUID& MyPackage_Transformation::ID() const
|
||||
{
|
||||
return GetID();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Restore
|
||||
//purpose : The method is called on Undo / Redo.
|
||||
// It copies the content of <theAttribute>
|
||||
// into this attribute (copies the fields).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::Restore(const Handle(TDF_Attribute)& theAttribute)
|
||||
{
|
||||
Handle(MyPackage_Transformation) theTransformation = Handle(MyPackage_Transformation)::DownCast(theAttribute);
|
||||
myType = theTransformation->myType;
|
||||
myAx1 = theTransformation->myAx1;
|
||||
myAx2 = theTransformation->myAx2;
|
||||
myFirstAx3 = theTransformation->myFirstAx3;
|
||||
mySecondAx3 = theTransformation->mySecondAx3;
|
||||
myAngle = theTransformation->myAngle;
|
||||
myScale = theTransformation->myScale;
|
||||
myFirstPoint = theTransformation->myFirstPoint;
|
||||
mySecondPoint = theTransformation->mySecondPoint;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : NewEmpty
|
||||
//purpose : It creates a new instance of this attribute.
|
||||
// It is called on Copy / Paste, Undo / Redo.
|
||||
//=======================================================================
|
||||
Handle(TDF_Attribute) MyPackage_Transformation::NewEmpty() const
|
||||
{
|
||||
return new MyPackage_Transformation();
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Paste
|
||||
//purpose : The method is called on Copy / Paste.
|
||||
// It copies the content of this attribute into
|
||||
// <theAttribute> (copies the fields).
|
||||
//=======================================================================
|
||||
void MyPackage_Transformation::Paste (const Handle(TDF_Attribute)& theAttribute,
|
||||
const Handle(TDF_RelocationTable)& ) const
|
||||
{
|
||||
Handle(MyPackage_Transformation) theTransformation = Handle(MyPackage_Transformation)::DownCast(theAttribute);
|
||||
theTransformation->myType = myType;
|
||||
theTransformation->myAx1 = myAx1;
|
||||
theTransformation->myAx2 = myAx2;
|
||||
theTransformation->myFirstAx3 = myFirstAx3;
|
||||
theTransformation->mySecondAx3 = mySecondAx3;
|
||||
theTransformation->myAngle = myAngle;
|
||||
theTransformation->myScale = myScale;
|
||||
theTransformation->myFirstPoint = myFirstPoint;
|
||||
theTransformation->mySecondPoint = mySecondPoint;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Dump
|
||||
//purpose : Prints the content of this attribute into the stream.
|
||||
//=======================================================================
|
||||
Standard_OStream& MyPackage_Transformation::Dump(Standard_OStream& theOS) const
|
||||
{
|
||||
anOS << "Transformation: ";
|
||||
switch (myType)
|
||||
{
|
||||
case gp_Identity:
|
||||
{
|
||||
anOS << "gp_Identity";
|
||||
break;
|
||||
}
|
||||
case gp_Rotation:
|
||||
{
|
||||
anOS << "gp_Rotation";
|
||||
break;
|
||||
}
|
||||
case gp_Translation:
|
||||
{
|
||||
anOS << "gp_Translation";
|
||||
break;
|
||||
}
|
||||
case gp_PntMirror:
|
||||
{
|
||||
anOS << "gp_PntMirror";
|
||||
break;
|
||||
}
|
||||
case gp_Ax1Mirror:
|
||||
{
|
||||
anOS << "gp_Ax1Mirror";
|
||||
break;
|
||||
}
|
||||
case gp_Ax2Mirror:
|
||||
{
|
||||
anOS << "gp_Ax2Mirror";
|
||||
break;
|
||||
}
|
||||
case gp_Scale:
|
||||
{
|
||||
anOS << "gp_Scale";
|
||||
break;
|
||||
}
|
||||
case gp_CompoundTrsf:
|
||||
{
|
||||
anOS << "gp_CompoundTrsf";
|
||||
break;
|
||||
}
|
||||
case gp_Other:
|
||||
{
|
||||
anOS << "gp_Other";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return anOS;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : MyPackage_Transformation
|
||||
//purpose : A constructor.
|
||||
//=======================================================================
|
||||
MyPackage_Transformation::MyPackage_Transformation()
|
||||
: myType (gp_Identity)
|
||||
{
|
||||
//
|
||||
}
|
||||
~~~~
|
||||
|
||||
## Implementation of typical actions with standard OCAF attributes.
|
||||
## Implementation of typical actions with standard OCAF attributes.
|
||||
|
||||
There are four sample files provided in the directory 'OpenCasCade/ros/samples/ocafsamples'. They present typical actions with OCAF services (mainly for newcomers).
|
||||
There are four sample files provided in the directory 'OpenCasCade/ros/samples/ocafsamples'.
|
||||
They present typical actions with OCAF services (mainly for newcomers).
|
||||
The method *Sample()* of each file is not dedicated for execution 'as is', it is rather a set of logical actions using some OCAF services.
|
||||
|
||||
### TDataStd_Sample.cxx
|
||||
@@ -549,7 +543,7 @@ This sample contains templates for typical actions with the following standard O
|
||||
- TDataXtd_Constraint attribute management;
|
||||
- TDataStd_Directory attribute management;
|
||||
- TDataStd_TreeNode attribute management.
|
||||
|
||||
|
||||
### TDocStd_Sample.cxx
|
||||
This sample contains template for the following typical actions:
|
||||
- creating application;
|
||||
@@ -560,7 +554,7 @@ This sample contains template for the following typical actions:
|
||||
- closing a document;
|
||||
- opening the document stored in the file;
|
||||
- copying content of a document to another document with possibility to update the copy in the future.
|
||||
|
||||
|
||||
### TPrsStd_Sample.cxx
|
||||
This sample contains template for the following typical actions:
|
||||
- starting with data framework;
|
||||
@@ -577,7 +571,7 @@ This sample contains template for the following typical actions:
|
||||
- updating and displaying presentation of the attribute to be displayed;
|
||||
- setting a color to the displayed attribute;
|
||||
- getting transparency of the displayed attribute;
|
||||
- modify attribute;
|
||||
- modify attribute;
|
||||
- updating presentation of the attribute in viewer.
|
||||
|
||||
### TNaming_Sample.cxx
|
||||
@@ -591,4 +585,3 @@ The following scenario is used:
|
||||
- creating a Fillet (using the selected edges) and pushing the result as a modification of Box1;
|
||||
- creating a Cut (Box1, Box2) as a modification of Box1 and push it in DF;
|
||||
- recovering the result from DF.
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
Function Mechanism Usage {#samples__ocaf_func}
|
||||
OCAF: Function Mechanism {#samples__ocaf_func}
|
||||
========================
|
||||
|
||||
Let us describe the usage of the "Function Mechanism" of Open CASCADE Application Framework on a simple example.
|
||||
|
@@ -1,176 +1,62 @@
|
||||
Tutorials and Samples {#samples}
|
||||
=====================
|
||||
|
||||
Tutorial: Modelling a Bottle
|
||||
----------------------------
|
||||
The Qt programming tutorial teaches how to use Open CASCADE Technology services to model a 3D object.
|
||||
The purpose of the tutorial is not to explain all OCCT classes but
|
||||
to help start thinking in terms of the Open CASCADE Technology.
|
||||
- @subpage samples__tutorials
|
||||
* @ref samples__novice_guide
|
||||
<br>A document providing an introductory information to newcomers.
|
||||
* @ref samples__draw_scripts
|
||||
<br>A set of demo scripts demonstrating OCCT functionality from DRAW.
|
||||
These scripts can be also considered as a tutorials on **Tcl** usage within @ref occt_user_guides__test_harness "Draw Harness".
|
||||
* @ref occt__tutorial
|
||||
<br>A programming tutorial teaching how to use OCCT services to model a 3D object.
|
||||
See also @ref samples_qt_tutorial
|
||||
* @ref samples__ocaf
|
||||
<br>A set of code snippets performing typical actions with @ref occt_user_guides__ocaf "OCAF" services for newcomers.
|
||||
* @ref samples__ocaf_func
|
||||
<br>A simple example dedicated to the usage of "Function Mechanism" of @ref occt_user_guides__ocaf "OCCT Application Framework".
|
||||
* @ref tutorials__ais_object
|
||||
<br>A programming tutorial teaching how to compute presentation within AIS_InteractiveObject subclass for displaying in @ref occt_user_guides__visualization "OCCT 3D Viewer".
|
||||
- @subpage samples__projects
|
||||
* @ref samples_qt_iesample
|
||||
<br>A cross-platform multi-document 3D Viewer sample with CAD import / export functionality based on **Qt Widgets** framework.
|
||||
* @ref samples_qml_android_occt
|
||||
<br>A cross-platform 3D Viewer sample with CAD import based on **QtQuick** framework.
|
||||
* @ref samples_qt_tutorial
|
||||
<br>A cross-platform sample application based on **Qt Widgets** framework and implementing @ref occt__tutorial.
|
||||
* @ref samples_qt_overview
|
||||
<br>A sample application interactively demonstrating OCCT C++ usage with code snippets for newcomers.
|
||||
* @ref samples_mfc_standard
|
||||
<br>A set of projects for Windows platform demonstrating OCCT usage based on **Microsoft Foundation Class** (**MFC**) library.
|
||||
* @ref samples_csharp_occt
|
||||
<br>A Multi-document 3D Viewer sample with CAD import / export functionality based on .NET and **Windows Forms** or **WPF**.
|
||||
* @ref samples_csharp_direct3d
|
||||
<br>3D Viewer sample wrapped into Direct3D context based on .NET and **Windows Presentation Foundation** (**WPF**).
|
||||
* @ref occt_samples_webgl
|
||||
<br>3D Viewer sample based on **Emscripten SDK** representing a static HTML page to be opened in Web Browser.
|
||||
* @ref samples_java_android_occt
|
||||
<br>3D Viewer sample with CAD import for Android mobile platform based on Android SDK and JNI layer.
|
||||
* @ref occt_samples_ios_uikit
|
||||
<br>3D Viewer sample for iOS platform based on Apple **UIKit** framework.
|
||||
* @ref occt_samples_glfw
|
||||
<br>A cross-platform 3D Viewer sample using **GLFW** library.
|
||||
|
||||
This tutorial assumes that the user has experience in using and setting up C++.
|
||||
From the viewpoint of programming, Open CASCADE Technology is designed
|
||||
to enhance user's C++ tools with high performance modeling classes, methods and functions.
|
||||
The combination of these resources allows creating substantial applications.
|
||||
@page samples__tutorials Tutorials and Demos
|
||||
- @subpage samples__novice_guide
|
||||
- @subpage samples__draw_scripts
|
||||
- @subpage occt__tutorial
|
||||
- @subpage samples__ocaf
|
||||
- @subpage samples__ocaf_func
|
||||
- @subpage tutorials__ais_object
|
||||
|
||||
Read more about @subpage occt__tutorial
|
||||
|
||||
MFC
|
||||
---------
|
||||
|
||||
Visual C++ programming samples containing 10 Visual C++ projects
|
||||
illustrating how to use a particular module or functionality.
|
||||
|
||||
The list of MFC samples:
|
||||
|
||||
* Geometry
|
||||
* Modeling
|
||||
* Viewer2d
|
||||
* Viewer3d
|
||||
* ImportExport
|
||||
* Ocaf
|
||||
* Triangulation
|
||||
* HLR
|
||||
* Animation
|
||||
* Convert
|
||||
|
||||
@figure{/samples/images/samples_mvc.png}
|
||||
|
||||
**Remarks:**
|
||||
|
||||
* MFC samples are available only on Windows platform;
|
||||
* To start a sample use Open CASCADE Technology\\Samples\\Mfc\\ item of the Start\\Programs menu;
|
||||
* Read carefully readme.txt to learn about launching and compilation options.
|
||||
|
||||
See @subpage samples_mfc_standard "Readme" for details.
|
||||
|
||||
Qt
|
||||
---
|
||||
|
||||
OCCT includes several samples based on Qt application framework.
|
||||
These samples are available on all supported desktop platforms.
|
||||
|
||||
To start a sample on Windows use Open CASCADE Technology\\Samples\\Qt\\ item of the Start\\Programs menu.
|
||||
|
||||
Import Export
|
||||
-------------
|
||||
|
||||
Import Export programming sample contains 3D Viewer and Import / Export functionality.
|
||||
|
||||
@figure{/samples/images/samples_qt.png}
|
||||
|
||||
Tutorial
|
||||
---------
|
||||
|
||||
The Qt programming tutorial teaches how to use Open CASCADE Technology services to model a 3D object.
|
||||
The purpose of the tutorial is not to explain all OCCT classes but
|
||||
to help start thinking in terms of the Open CASCADE Technology.
|
||||
|
||||
This tutorial assumes that the user has experience in using and setting up C++.
|
||||
From the viewpoint of programming, Open CASCADE Technology is designed
|
||||
to enhance user's C++ tools with high performance modeling classes, methods and functions.
|
||||
The combination of these resources allows creating substantial applications.
|
||||
|
||||
**See also:** @ref occt__tutorial "OCCT Tutorial"
|
||||
|
||||
Overview
|
||||
---------
|
||||
|
||||
The Qt application providing samples for basic usage of C++ API of various OCCT functionality.
|
||||
|
||||
The samples are organized in several categories according to relevant module of OCCT:
|
||||
|
||||
* Geometry
|
||||
* Topology,
|
||||
* Triangulation
|
||||
* DataExchange
|
||||
* OCAF
|
||||
* Viewer 2d
|
||||
* Viewer 3d
|
||||
|
||||
Each sample presents geometry view, C++ code fragment and sample output window.
|
||||
|
||||
@figure{/samples/images/sample_overview_qt.png}
|
||||
|
||||
See \subpage samples_qt_overview "Readme" for details.
|
||||
|
||||
C#
|
||||
---
|
||||
|
||||
C# sample demonstrates integration of OCCT 3D Viewer and Import / Export functionality into .NET applications (using Windows Forms and WPF front ends).
|
||||
|
||||
@figure{/samples/images/samples_c__ie.png}
|
||||
|
||||
Import:
|
||||
|
||||
* BRep
|
||||
* Iges
|
||||
* Step
|
||||
|
||||
Export:
|
||||
|
||||
* Brep
|
||||
* Iges
|
||||
* Step
|
||||
* Stl
|
||||
* Vrml
|
||||
|
||||
See @subpage samples_csharp_occt "C# sample Readme" for details.
|
||||
|
||||
There is also another C# example with the same functionality, which demonstrates the integration of Direct3D Viewer into .NET applications using WPF front end.
|
||||
|
||||
See @subpage samples_csharp_direct3d "Direct3D C# sample Readme" for details.
|
||||
|
||||
Android
|
||||
---------
|
||||
|
||||
There are two samples are representing usage OCCT framework on Android mobile platform. They represent an OCCT-based 3D-viewer with CAD import support in formats BREP, STEP and IGES: jniviewer (java) and AndroidQt (qt+qml)
|
||||
|
||||
jniviewer
|
||||
@figure{/samples/images/samples_java_android_occt.jpg}
|
||||
Java -- See @subpage samples_java_android_occt "Android Java sample Readme" for details.
|
||||
|
||||
AndroidQt
|
||||
@figure{/samples/images/samples_qml_android_occt.jpg}
|
||||
Qt -- See \subpage samples_qml_android_occt "Android Qt sample Readme" for details.
|
||||
|
||||
iOS
|
||||
---
|
||||
|
||||
There is a sample demonstrating usage of OCCT on iOS with Apple UIKit framework.
|
||||
|
||||
@figure{/samples/images/sample_ios_uikit.png}
|
||||
|
||||
See @subpage occt_samples_ios_uikit "iOS sample Readme" for details.
|
||||
|
||||
Web
|
||||
---------
|
||||
|
||||
WebGL Viewer sample demonstrating usage of OCCT 3D Viewer in Web browser with Emscripten SDK can be found in `samples/webgl`.
|
||||
|
||||
@figure{/samples/images/sample_webgl.png}
|
||||
|
||||
See @subpage occt_samples_webgl "WebGL sample Readme" for details.
|
||||
|
||||
OCAF Usage Sample
|
||||
------------------
|
||||
|
||||
The provided set of samples dedicates to get initial knowledge about typical actions with OCAF services. It may be
|
||||
useful for newcomers.
|
||||
|
||||
Read more about @subpage samples__ocaf
|
||||
|
||||
OCAF Function Mechanism Usage
|
||||
-----------------------------
|
||||
|
||||
This simple example dedicates to the usage of "Function Mechanism" of OCCT Application Framework. It represents a "nail"
|
||||
composed by a cone and two cylinders of different radius and height.
|
||||
|
||||
Read more about @subpage samples__ocaf_func
|
||||
|
||||
Draw Demo Scripts
|
||||
------------------
|
||||
|
||||
A set of demo scripts demonsrates using OCCT functionality from DRAW. These scripts can be also considered as a
|
||||
tutorials on tcl usage within Draw.
|
||||
|
||||
Read more about @subpage samples__draw_scripts
|
||||
@page samples__projects Sample Projects
|
||||
- @subpage samples_qt_iesample
|
||||
- @subpage samples_qml_android_occt
|
||||
- @subpage samples_qt_tutorial
|
||||
- @subpage samples_qt_overview
|
||||
- @subpage samples_mfc_standard
|
||||
- @subpage samples_csharp_occt
|
||||
- @subpage samples_csharp_direct3d
|
||||
- @subpage occt_samples_webgl
|
||||
- @subpage samples_java_android_occt
|
||||
- @subpage occt_samples_ios_uikit
|
||||
- @subpage occt_samples_glfw
|
||||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 50 KiB |
@@ -1,4 +1,4 @@
|
||||
Tutorial {#occt__tutorial}
|
||||
Modeling: Bottle Tutorial {#occt__tutorial}
|
||||
=======
|
||||
|
||||
@tableofcontents
|
||||
@@ -18,7 +18,7 @@ From a programming standpoint, Open CASCADE Technology is designed to enhance yo
|
||||
|
||||
To illustrate the use of classes provided in the 3D geometric modeling toolkits, you will create a bottle as shown:
|
||||
|
||||
@figure{/tutorial/images/tutorial_image001.png,"",240}
|
||||
@figure{/tutorial/images/tutorial_image001.png,"",240} height=350px
|
||||
|
||||
In the tutorial we will create, step-by-step, a function that will model a bottle as shown above. You will find the complete source code of this tutorial, including the very function *MakeBottle* in the distribution of Open CASCADE Technology. The function body is provided in the file samples/qt/Tutorial/src/MakeBottle.cxx.
|
||||
|
||||
@@ -34,7 +34,7 @@ We first define the bottle specifications as follows:
|
||||
|
||||
In addition, we decide that the bottle's profile (base) will be centered on the origin of the global Cartesian coordinate system.
|
||||
|
||||
@figure{/tutorial/images/tutorial_image002.png,"",240}
|
||||
@figure{/tutorial/images/tutorial_image002.png,"",240} height=350px
|
||||
|
||||
This modeling requires four steps:
|
||||
|
||||
@@ -145,16 +145,16 @@ However, the *TopoDS* package provides only the data structure of the topologica
|
||||
To create an edge, you use the BRepBuilderAPI_MakeEdge class with the previously computed curves:
|
||||
|
||||
~~~~{.cpp}
|
||||
TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
|
||||
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle);
|
||||
TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment2);
|
||||
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
|
||||
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle);
|
||||
TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(aSegment2);
|
||||
~~~~
|
||||
|
||||
In Open CASCADE Technology, you can create edges in several ways. One possibility is to create an edge directly from two points, in which case the underlying geometry of this edge is a line, bounded by two vertices being automatically computed from the two input points. For example, aEdge1 and aEdge3 could have been computed in a simpler way:
|
||||
In Open CASCADE Technology, you can create edges in several ways. One possibility is to create an edge directly from two points, in which case the underlying geometry of this edge is a line, bounded by two vertices being automatically computed from the two input points. For example, anEdge1 and anEdge3 could have been computed in a simpler way:
|
||||
|
||||
~~~~{.cpp}
|
||||
TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aPnt1, aPnt3);
|
||||
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aPnt4, aPnt5);
|
||||
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aPnt1, aPnt3);
|
||||
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(aPnt4, aPnt5);
|
||||
~~~~
|
||||
|
||||
To connect the edges, you need to create a wire with the *BRepBuilderAPI_MakeWire* class. There are two ways of building a wire with this class:
|
||||
@@ -165,7 +165,7 @@ To connect the edges, you need to create a wire with the *BRepBuilderAPI_MakeWir
|
||||
When building a wire from less than four edges, as in the present case, you can use the constructor directly as follows:
|
||||
|
||||
~~~~{.cpp}
|
||||
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1, aEdge2, aEdge3);
|
||||
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(anEdge1, anEdge2, anEdge3);
|
||||
~~~~
|
||||
|
||||
|
||||
@@ -250,7 +250,7 @@ The bottle's profile is almost finished. You have created two wires: *aWire* and
|
||||
@subsection OCCT_TUTORIAL_SUB3_1 Prism the Profile
|
||||
|
||||
|
||||
To compute the main body of the bottle, you need to create a solid shape. The simplest way is to use the previously created profile and to sweep it along a direction. The *Prism* functionality of Open CASCADE Technology is the most appropriate for that task. It accepts a shape and a direction as input and generates a new shape according to the following rules:
|
||||
To compute the main body of the bottle, you need to create a solid shape. The simplest way is to use the previously created profile and sweep it along a direction. The *Prism* functionality of Open CASCADE Technology is the most appropriate for that task. It accepts a shape and a direction as input and generates a new shape according to the following rules:
|
||||
|
||||
| Shape | Generates |
|
||||
| :----- | :----------------- |
|
||||
@@ -260,7 +260,7 @@ To compute the main body of the bottle, you need to create a solid shape. The si
|
||||
| Face | Solid |
|
||||
| Shell | Compound of Solids |
|
||||
|
||||
@figure{/tutorial/images/tutorial_image007.png,"",240}
|
||||
@figure{/tutorial/images/tutorial_image007.png,"",240} height=350px
|
||||
|
||||
Your current profile is a wire. Referring to the Shape/Generates table, you need to compute a face out of its wire to generate a solid.
|
||||
To create a face, use the *BRepBuilderAPI_MakeFace* class. As previously explained, a face is a part of a surface bounded by a closed wire. Generally, *BRepBuilderAPI_MakeFace* computes a face out of a surface and one or more wires.
|
||||
@@ -297,7 +297,7 @@ For our purposes, we will specify that fillets must be:
|
||||
* applied on all edges of the shape
|
||||
* have a radius of *myThickness* / 12
|
||||
|
||||
@figure{/tutorial/images/tutorial_image008.png,"",240}
|
||||
@figure{/tutorial/images/tutorial_image008.png,"",240} height=350px
|
||||
|
||||
To apply fillets on the edges of a shape, you use the *BRepFilletAPI_MakeFillet* class. This class is normally used as follows:
|
||||
|
||||
@@ -353,7 +353,7 @@ Once this is done, you perform the last step of the procedure by asking for the
|
||||
|
||||
To add a neck to the bottle, you will create a cylinder and fuse it to the body. The cylinder is to be positioned on the top face of the body with a radius of *myThickness* / 4. and a height of *myHeight* / 10.
|
||||
|
||||
@figure{/tutorial/images/tutorial_image009.png,"",240}
|
||||
@figure{/tutorial/images/tutorial_image009.png,"",240} height=350px
|
||||
|
||||
To position the cylinder, you need to define a coordinate system with the *gp_Ax2* class defining a right-handed coordinate system from a point and two directions - the main (Z) axis direction and the X direction (the Y direction is computed from these two).
|
||||
To align the neck with the center of the top face, being in the global coordinate system (0, 0, *myHeight*), with its normal on the global Z axis, your local coordinate system can be defined as follows:
|
||||
@@ -395,7 +395,7 @@ In Open CASCADE Technology, a hollowed solid is called a *Thick* *Solid* and is
|
||||
* Create a parallel wall W2 from W1 at a distance D. If D is positive, W2 will be outside the initial solid, otherwise it will be inside.
|
||||
* Compute a solid from the two walls W1 and W2.
|
||||
|
||||
@figure{/tutorial/images/tutorial_image010.png,"",240}
|
||||
@figure{/tutorial/images/tutorial_image010.png,"",240} height=350px
|
||||
|
||||
To compute a thick solid, you create an instance of the *BRepOffsetAPI_MakeThickSolid* class by giving the following information:
|
||||
|
||||
@@ -438,7 +438,6 @@ To compare a given type with the type you seek, use the *STANDARD_TYPE* macro, w
|
||||
|
||||
~~~~{.cpp}
|
||||
if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane)){
|
||||
//
|
||||
}
|
||||
~~~~
|
||||
|
||||
@@ -478,9 +477,9 @@ The collection for shapes can be found in the *TopTools* package. As *BRepOffset
|
||||
All the necessary data are now available so you can create your hollowed solid by calling the *BRepOffsetAPI_MakeThickSolid* MakeThickSolidByJoin method:
|
||||
|
||||
~~~~{.cpp}
|
||||
BRepOffsetAPI_MakeThickSolid BodyMaker;
|
||||
BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = BodyMaker.Shape();
|
||||
BRepOffsetAPI_MakeThickSolid aSolidMaker;
|
||||
aSolidMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = aSolidMaker.Shape();
|
||||
~~~~
|
||||
|
||||
|
||||
@@ -493,7 +492,7 @@ All the necessary data are now available so you can create your hollowed solid b
|
||||
Up to now, you have learned how to create edges out of 3D curves.
|
||||
You will now learn how to create an edge out of a 2D curve and a surface.
|
||||
To learn this aspect of Open CASCADE Technology, you will build helicoidal profiles out of 2D curves on cylindrical surfaces. The theory is more complex than in previous steps, but applying it is very simple.
|
||||
As a first step, you compute these cylindrical surfaces. You are already familiar with curves of the *Geom* package. Now you can create a cylindrical surface (*Geom_CylindricalSurface*) using:
|
||||
As a first step, you compute these cylindrical surfaces. You are already familiar with the curves of the *Geom* package. Now you can create a cylindrical surface (*Geom_CylindricalSurface*) using:
|
||||
|
||||
* a coordinate system;
|
||||
* a radius.
|
||||
@@ -604,7 +603,7 @@ As the parametric equation of an ellipse is P(U) = O + (MajorRadius * cos(U) * X
|
||||
~~~~
|
||||
|
||||
The last step consists in defining the segment, which is the same for the two profiles: a line limited by the first and the last point of one of the arcs.
|
||||
To access the point corresponding to the parameter of a curve or a surface, you use the Value or D0 method (meaning 0th derivative), D1 method is for first derivative, D2 for the second one.
|
||||
To access the point corresponding to the parameter of a curve or a surface, you use the Value or D0 method (meaning 0th derivative), D1 method is for the first derivative, D2 for the second one.
|
||||
|
||||
~~~~{.cpp}
|
||||
gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0);
|
||||
@@ -698,7 +697,7 @@ You are almost done building the bottle. Use the *TopoDS_Compound* and *BRep_Bui
|
||||
|
||||
Congratulations! Your bottle is complete. Here is the result snapshot of the Tutorial application:
|
||||
|
||||
@figure{/tutorial/images/tutorial_image019.png,"",320}
|
||||
@figure{/tutorial/images/tutorial_image019.png,"",320} height=450px
|
||||
|
||||
We hope that this tutorial has provided you with a feel for the industrial strength power of Open CASCADE Technology.
|
||||
If you want to know more and develop major projects using Open CASCADE Technology, we invite you to study our training, support, and consulting services on our site at https://www.opencascade.com/content/technology-support. Our professional services can maximize the power of your Open CASCADE Technology applications.
|
||||
@@ -796,9 +795,9 @@ Complete definition of MakeBottle function (defined in the file src/MakeBottle.c
|
||||
|
||||
TopTools_ListOfShape facesToRemove;
|
||||
facesToRemove.Append(faceToRemove);
|
||||
BRepOffsetAPI_MakeThickSolid BodyMaker;
|
||||
BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = BodyMaker.Shape();
|
||||
BRepOffsetAPI_MakeThickSolid aSolidMaker;
|
||||
aSolidMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3);
|
||||
myBody = aSolidMaker.Shape();
|
||||
// Threading : Create Surfaces
|
||||
Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 0.99);
|
||||
Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 1.05);
|
||||
|
@@ -7,6 +7,8 @@ Upgrade from older OCCT versions {#occt__upgrade}
|
||||
|
||||
This document provides technical details on changes made in particular versions of OCCT. It can help to upgrade user applications based on previous versions of OCCT to newer ones.
|
||||
|
||||
@ref upgrade_occt770 "SEEK TO THE LAST CHAPTER (UPGRADE TO 7.7.0)"
|
||||
|
||||
@subsection upgrade_intro_precautions Precautions
|
||||
|
||||
Back-up your code before the upgrade.
|
||||
@@ -24,7 +26,6 @@ The automatic upgrade tool is provided as is, without warranty of any kind, and
|
||||
It is your responsibility to ensure that the changes you made in your code are correct.
|
||||
When you upgrade the code by an automatic script, make sure to carefully review the introduced changes at each step before committing them.
|
||||
|
||||
|
||||
@section upgrade_65 Upgrade to OCCT 6.5.0
|
||||
|
||||
Porting of user applications from an earlier OCCT version to version 6.5 requires taking into account the following major changes:
|
||||
@@ -396,7 +397,7 @@ However, due to redesign of basic mechanisms (CDL generic classes, Handles and R
|
||||
|
||||
WOK is not necessary anymore for building OCCT from sources, though it still can be used in a traditional way -- auxiliary files required for that are preserved.
|
||||
The recommended method for building OCCT 7.x is CMake, see @ref build_occt_win_cmake.
|
||||
The alternative solution is to use project files generated by OCCT legacy tool **genproj**, see @ref build_occt_genproj, @ref build_occt_win_codeblocks, and @ref build_occt_macos_xcode.
|
||||
The alternative solution is to use project files generated by OCCT legacy tool **genproj**, see @ref build_occt_genproj.
|
||||
|
||||
@subsubsection upgrade_occt700_cdl_auto Automatic upgrade
|
||||
|
||||
@@ -2263,3 +2264,72 @@ For example:
|
||||
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator(di, 1);
|
||||
BRepAlgoApi_Cut(S1, S2, aProgress->Start()); // method Start() creates range for usage in cut algorithm
|
||||
~~~~
|
||||
|
||||
@subsection upgrade_occt760_change_check_to_adaptors Changes in BRepLib_CheckCurveOnSurface & GeomLib_CheckCurveOnSurface interfaces
|
||||
|
||||
Now the classes accept adaptors instead objects as input parameters.
|
||||
*BRepLib_CheckCurveOnSurface* does no more provide access to curves, surface and parameters: methods PCurve(), PCurve2(), Surface() and Range() have been removed.
|
||||
*BRepLib_CheckCurveOnSurface*: the default value of the *isMultiThread* parameter of the *Perform()* function has been changed from *true* to *false*
|
||||
*GeomLib_CheckCurveOnSurface* does no more provide access to curve, surface and parameters: methods Curve(), Surface() and Range() have been removed.
|
||||
*GeomLib_CheckCurveOnSurface*: the default value of the *isMultiThread* parameter of the *Perform()* function has been changed from *true* to *false*
|
||||
|
||||
The following functions in *GeomLib_CheckCurveOnSurface* have been modified:
|
||||
~~~~{.cpp}
|
||||
GeomLib_CheckCurveOnSurface(const Handle(Adaptor3d_Curve)& theCurve,
|
||||
const Standard_Real theTolRange);
|
||||
|
||||
void Init (const Handle(Adaptor3d_Curve)& theCurve, const Standard_Real theTolRange);
|
||||
|
||||
void Perform(const Handle(Adaptor3d_CurveOnSurface)& theCurveOnSurface,
|
||||
const Standard_Boolean isMultiThread);
|
||||
~~~~
|
||||
|
||||
@subsection upgrade_occt760_old_bop_removed Removal of old Boolean operations algorithm (BRepAlgo_BooleanOperation)
|
||||
|
||||
* The method *BRepAlgo_Tool::Deboucle3D* has been removed as duplicating. The corresponding method from *BRepOffset_Tool* class has to be used instead.
|
||||
* The API classes from *BRepAlgo* package performing old Boolean operations algorithm have been removed:
|
||||
- *BRepAlgo_BooleanOperation*
|
||||
- *BRepAlgo_Fuse*
|
||||
- *BRepAlgo_Common*
|
||||
- *BRepAlgo_Cut*
|
||||
- *BRepAlgo_Section*
|
||||
The corresponding classes from the *BRepAlgoAPI* package have to be used instead.
|
||||
|
||||
@section upgrade_occt770 Upgrade to OCCT 7.7.0
|
||||
|
||||
Building OCCT now requires C++11-compliant compiler, so that some legacy compilers (Visual Studio 2010 and 2012) are no more supported.
|
||||
It is recommended using Visual Studio 2015 or newer for building OCCT on Windows platform.
|
||||
|
||||
@subsection upgrade_770_removed_features Removed features
|
||||
|
||||
* One of the constructors of the BRepExtrema_DistanceSS class (the one without deflection parameter) has been removed as excessive. The remaining constructor has to be used instead.
|
||||
|
||||
@subsection upgrade_occt770_parallel_flag_removed Removed parameter theIsParallel from Put/Compute/Perform
|
||||
|
||||
theIsParallel parameter has been removed from Put/Compute/Perform from the next classes:
|
||||
- BRepCheck_Analyzer
|
||||
- BRepCheck_Edge
|
||||
- BRepLib_ValidateEdge
|
||||
- GeomLib_CheckCurveOnSurface
|
||||
- BRepLib_CheckCurveOnSurface
|
||||
|
||||
Now, to set this flag, it is necessary to use method SetParallel()
|
||||
For example:
|
||||
~~~~{.cpp}
|
||||
BRepLib_ValidateEdge aValidateEdge(myHCurve, ACS, SameParameter);
|
||||
aValidateEdge.SetParallel(toRunParallel);
|
||||
aValidateEdge.Process();
|
||||
~~~~
|
||||
|
||||
@subsection upgrade_occt770_drawer_aspects Prs3d_Drawer aspects
|
||||
|
||||
`Prs3d_Drawer` getters no more implicitly create "default" aspects.
|
||||
If specific property has not been set before to this drawer instance nor to linked drawer instance, then NULL property will be returned.
|
||||
Make sure to set property beforehand or to call `SetOwn*` / `SetupOwn*` methods to derive from defaults.
|
||||
|
||||
@subsection upgrade_occt770_opengl OpenGL functions
|
||||
|
||||
Applications extending OCCT 3D Viewer and calling OpenGL functions directly (like @c @::glEnable(), e.g. using global namespace) might be affected by changes in `OpenGl_GlFunctions.hxx`.
|
||||
This header, as well as `OpenGl_GlCore20.hxx` and similar, no more include system OpenGL / OpenGL ES headers to define function table.
|
||||
Application code calling OpenGL functions directly should be changed to either use `OpenGl_Context::core11fwd` (as designed)
|
||||
or to include system OpenGL headers in advance (with help of `OpenGl_GlNative.hxx`).
|
||||
|
@@ -1837,7 +1837,7 @@ bool areEqualAngles (double theAngle1, double theAngle2)
|
||||
{
|
||||
return Abs(theAngle1 - theAngle2) < Precision::Angular();
|
||||
}
|
||||
~~~
|
||||
~~~~
|
||||
|
||||
It is also possible to check parallelism of two vectors as follows:
|
||||
~~~~{.cpp}
|
||||
@@ -1845,7 +1845,7 @@ bool areParallelVectors (const gp_Vec& theVec1, const gp_Vec& theVec2)
|
||||
{
|
||||
return theVec1.IsParallel (theVec2, Precision::Angular());
|
||||
}
|
||||
~~~
|
||||
~~~~
|
||||
|
||||
Note that *Precision::Angular()* can be used on both dot and cross products because for small angles the *Sine* and the *Angle* are equivalent.
|
||||
So to test if two directions of type *gp_Dir* are perpendicular, it is legal to use the following code:
|
||||
@@ -1854,7 +1854,7 @@ bool arePerpendicular (const gp_Dir& theDir1, const gp_Dir& theDir2)
|
||||
{
|
||||
return Abs(theDir1 * theDir2) < Precision::Angular();
|
||||
}
|
||||
~~~
|
||||
~~~~
|
||||
|
||||
#### Precision::Confusion
|
||||
|
||||
@@ -1875,7 +1875,7 @@ bool isNullVector (const gp_Vec& theVec)
|
||||
{
|
||||
return theVec.Magnitude() < Precision::Confusion();
|
||||
}
|
||||
~~~
|
||||
~~~~
|
||||
|
||||
#### Precision::Intersection
|
||||
|
||||
|
@@ -165,7 +165,9 @@ if (!Interface_Static::SetIVal ("read.maxprecision.mode",1))
|
||||
Default value is *Preferred (0)*.
|
||||
|
||||
<h4>read.maxprecision.val</h4>
|
||||
defines the maximum allowable tolerance (in mm) of the shape. It should be not less than the basis value of tolerance set in processor (either Resolution from the file or *read.precision.val*). Actually, the maximum between *read.maxprecision.val* and basis tolerance is used to define maximum allowed tolerance.
|
||||
defines the maximum allowable tolerance (in internal units, which are specified in xstep.cascade.unit) of the shape.
|
||||
It should be not less than the basis value of tolerance set in processor (either Resolution from the file or *read.precision.val*).
|
||||
Actually, the maximum between *read.maxprecision.val* and basis tolerance is used to define maximum allowed tolerance.
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
Standard_Real rp = Interface_Static::RVal("read.maxprecision.val");
|
||||
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
@@ -1,284 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="165.36443mm"
|
||||
height="99.48317mm"
|
||||
viewBox="0 0 165.36443 99.48317"
|
||||
version="1.1"
|
||||
id="svg1643"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="dfbrowser_elements.svg">
|
||||
<defs
|
||||
id="defs1637" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="290.24314"
|
||||
inkscape:cy="320.3071"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1246"
|
||||
inkscape:window-height="857"
|
||||
inkscape:window-x="371"
|
||||
inkscape:window-y="37"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata1640">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(356.33698,30.17611)">
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4147"
|
||||
width="164.83542"
|
||||
height="98.95417"
|
||||
x="-356.07248"
|
||||
y="-29.91161"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4157"
|
||||
width="155.951"
|
||||
height="20.214758"
|
||||
x="-352.0733"
|
||||
y="-25.674246"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159"
|
||||
width="75.795822"
|
||||
height="64.91011"
|
||||
x="-352.07172"
|
||||
y="-0.79434544"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4161-4"
|
||||
width="75.811562"
|
||||
height="30.252827"
|
||||
x="-272.04941"
|
||||
y="33.729694"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#9bbb59;fill-opacity:1;fill-rule:evenodd;stroke:#78943d;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4161-4-8"
|
||||
width="75.811562"
|
||||
height="30.252827"
|
||||
x="-272.04941"
|
||||
y="-0.80220562"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195"
|
||||
width="73.552574"
|
||||
height="11.118413"
|
||||
x="-347.50781"
|
||||
y="-21.126072"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-1"
|
||||
width="30.417513"
|
||||
height="11.316654"
|
||||
x="-267.92496"
|
||||
y="-21.225193"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-1-5"
|
||||
width="30.417513"
|
||||
height="11.316654"
|
||||
x="-231.57631"
|
||||
y="-21.225193"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-259.7175"
|
||||
y="-14.48304"
|
||||
id="text5675"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5677"
|
||||
x="-259.7175"
|
||||
y="-14.48304"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Update</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-223.04579"
|
||||
y="-14.12208"
|
||||
id="text5679"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5681"
|
||||
x="-223.04579"
|
||||
y="-14.12208"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Search</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-325.95343"
|
||||
y="-14.547463"
|
||||
id="text5683"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685"
|
||||
x="-325.95343"
|
||||
y="-14.547463"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Tree Navigation</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8"
|
||||
width="65.570122"
|
||||
height="19.385952"
|
||||
x="-347.50781"
|
||||
y="11.248657"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-333.31332"
|
||||
y="22.090868"
|
||||
id="text5683-5"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3"
|
||||
x="-333.31332"
|
||||
y="22.090868"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">OCAF tree view</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-0"
|
||||
width="65.570122"
|
||||
height="19.385952"
|
||||
x="-267.68332"
|
||||
y="3.9789243"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-3-5"
|
||||
width="38.7719"
|
||||
height="16.820164"
|
||||
x="-267.11316"
|
||||
y="37.191612"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#9bbb59;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-3"
|
||||
width="38.7719"
|
||||
height="16.820164"
|
||||
x="-240.60002"
|
||||
y="42.180641"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-252.8326"
|
||||
y="13.779153"
|
||||
id="text5683-5-9"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-8"
|
||||
x="-252.8326"
|
||||
y="13.779153"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Property Panel</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-231.82542"
|
||||
y="51.393177"
|
||||
id="text5683-5-0"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-5"
|
||||
x="-231.82542"
|
||||
y="51.393177"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D View</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-267.25568"
|
||||
y="46.086102"
|
||||
id="text5683-5-1"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\dfbrowser.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-80"
|
||||
x="-267.25568"
|
||||
y="46.086102"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Dump View</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
<svg width="609" height="426" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#58a50b" id="svg_1" height="424.00001" width="605" y="-0.00001" x="0.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_2" height="89" width="575" y="16" x="13.5" stroke-width="4" stroke="#58a50b" fill="#66af1c"/>
|
||||
<rect stroke="#58a50b" id="svg_3" height="280" width="277.99999" y="121" x="16.5" stroke-width="4" fill="#66af1c"/>
|
||||
<rect stroke="#58a50b" id="svg_4" height="122" width="277.99999" y="120" x="309.5" stroke-width="4" fill="#66af1c"/>
|
||||
<rect stroke="#58a50b" id="svg_5" height="140" width="277.99999" y="256" x="310.5" stroke-width="4" fill="#66af1c"/>
|
||||
<rect id="svg_6" height="64" width="219" y="184" x="47.5" stroke-width="4" stroke="#58a50b" fill="#ffffff"/>
|
||||
<rect id="svg_7" height="40" width="277" y="36" x="30.5" stroke-width="4" stroke="#58a50b" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_8" height="40" width="112" y="36" x="321.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_10" height="40" width="119" y="36" x="446.5" stroke-width="4" fill="#ffffff"/>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_11" y="61" x="98.5" stroke-width="0" stroke="#58a50b" fill="#000000">Tree Navigation</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_12" y="63" x="338.5" stroke-width="0" stroke="#58a50b" fill="#000000">Update</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_13" y="65" x="474.5" stroke-width="0" stroke="#58a50b" fill="#ffffff">Search</text>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_14" y="62" x="475.5" stroke-width="0" stroke="#58a50b" fill="#000000">Search</text>
|
||||
<rect stroke="#58a50b" id="svg_20" height="54" width="136.99999" y="291" x="318.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_21" height="52" width="188" y="180" x="391.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_22" height="54" width="163" y="136" x="323.5" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#58a50b" id="svg_23" height="53" width="146" y="317" x="426.5" stroke-width="4" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_27" y="170" x="338.5" stroke-width="0" stroke="#58a50b" fill="#000000">Property panel</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_28" y="227" x="83.5" stroke-width="0" stroke="#58a50b" fill="#000000">OCAF tree view</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="21" id="svg_30" y="322" x="322.5" stroke-width="0" stroke="#58a50b" fill="#000000">Dump View</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_31" y="352" x="459.5" stroke-width="0" stroke="#58a50b" fill="#000000">3D View</text>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="18" id="svg_32" y="214" x="398.5" stroke-width="0" stroke="#58a50b" fill="#000000">Property panel (custom)</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 22 KiB |
BIN
dox/user_guides/inspector/images/messageview_dump_panel.png
Normal file
After Width: | Height: | Size: 33 KiB |
21
dox/user_guides/inspector/images/messageview_elements.svg
Normal file
@@ -0,0 +1,21 @@
|
||||
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#ff56ff" id="svg_1" height="296.99999" width="297.00002" y="1.6" x="1" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_3" height="120" width="136" y="22.6" x="153" stroke-width="4" stroke="#ff56ff" fill="#ff56ff"/>
|
||||
<rect stroke="#ff56ff" id="svg_4" height="259.99999" width="126.99999" y="18.6" x="16" stroke-width="4" fill="#ff56ff"/>
|
||||
<rect stroke="#ff56ff" id="svg_5" height="122" width="131" y="155.6" x="156" stroke-width="4" fill="#ff56ff"/>
|
||||
<rect stroke="#ff56ff" id="svg_6" height="41.00001" width="125" y="87.6" x="17" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_7" height="3" width="2" y="364.6" x="89" stroke-width="4" stroke="#ff56ff" fill="#ffffff"/>
|
||||
<rect stroke="#ffffff" id="svg_8" height="41.00001" width="117" y="126.6" x="21" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#ff56ff" id="svg_9" height="41.00001" width="125" y="63.6" x="164" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#ff56ff" id="svg_10" height="64.00001" width="114.00001" y="158.6" x="159" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#ff56ff" id="svg_11" height="41.00001" width="101.00001" y="215.6" x="184" stroke-width="4" fill="#ffffff"/>
|
||||
<text transform="matrix(0.742836 0 0 0.850555 6.17194 14.6433)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_13" y="119.6" x="24" stroke-width="0" fill="#000000">Message report</text>
|
||||
<text style="cursor: move;" transform="matrix(0.742836 0 0 0.850555 6.17194 46.6433)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_14" y="118.4243" x="24" stroke-width="0" fill="#000000">tree view</text>
|
||||
<text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_15" y="90.6" x="167" stroke-width="0" stroke="#ff56ff" fill="#000000">Dump panel</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_16" y="245.6" x="190" stroke-width="0" stroke="#ff56ff" fill="#000000">3D View</text>
|
||||
<text transform="matrix(0.784367 0 0 0.769922 36.8545 36.9383)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_17" y="181.6" x="157" stroke-width="0" fill="#000000">Property panel</text>
|
||||
<text transform="matrix(0.884685 0 0 0.774516 20.9874 38.7657)" stroke="#ff56ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_18" y="206.5113" x="176.34827" stroke-width="0" fill="#000000">(custom)</text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
BIN
dox/user_guides/inspector/images/messageview_pop_up_menu.png
Normal file
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 24 KiB |
BIN
dox/user_guides/inspector/images/messageview_view.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
dox/user_guides/inspector/images/property_panel.png
Normal file
After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 62 KiB |
@@ -1,142 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="165.36458mm"
|
||||
height="99.483337mm"
|
||||
viewBox="0 0 165.36458 99.483337"
|
||||
version="1.1"
|
||||
id="svg2491"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="shapeview_elements.svg">
|
||||
<defs
|
||||
id="defs2485" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="319.53221"
|
||||
inkscape:cy="223.36826"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:showpageshadow="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1205"
|
||||
inkscape:window-height="766"
|
||||
inkscape:window-x="422"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata2488">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(293.59301,-77.169049)">
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#ffa040;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4147-0-8"
|
||||
width="164.83542"
|
||||
height="98.95417"
|
||||
x="-293.32843"
|
||||
y="77.433632"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#fcd5b5;fill-opacity:1;fill-rule:evenodd;stroke:#ff9933;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159-8"
|
||||
width="70.094536"
|
||||
height="85.011993"
|
||||
x="-285.46909"
|
||||
y="83.598381"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.62230003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-2"
|
||||
width="54.993557"
|
||||
height="25.389547"
|
||||
x="-277.91861"
|
||||
y="113.40961"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#fcd5b5;fill-opacity:1;fill-rule:evenodd;stroke:#ffa040;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159-8-9"
|
||||
width="70.094536"
|
||||
height="85.011993"
|
||||
x="-207.25319"
|
||||
y="83.598389"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-2-4"
|
||||
width="54.993557"
|
||||
height="25.389547"
|
||||
x="-199.70271"
|
||||
y="113.40961"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-272.88153"
|
||||
y="125.70056"
|
||||
id="text5683-5-4-9"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-59-2"
|
||||
x="-272.88153"
|
||||
y="125.70056"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">TopoDS_Shape View</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.3866663px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-182.24478"
|
||||
y="126.02359"
|
||||
id="text5683-5-0-0"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\shapeview.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-5-6"
|
||||
x="-182.24478"
|
||||
y="126.02359"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">3D View</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect stroke-width="4" stroke="#ffaa56" id="svg_1" height="295" width="294.99999" y="2.59999" x="3" fill="#fff"/>
|
||||
<rect id="svg_3" height="252" width="130" y="26.6" x="20" stroke-width="4" stroke="#ffaa56" fill="#ffaa56"/>
|
||||
<rect stroke="#ffaa56" id="svg_4" height="121.00001" width="130" y="157.6" x="158" stroke-width="4" fill="#ffaa56"/>
|
||||
<rect stroke="#ffaa56" id="svg_5" height="116.99999" width="130" y="25.6" x="159" stroke-width="4" fill="#ffaa56"/>
|
||||
<rect stroke="#ffaa56" id="svg_10" height="83" width="120" y="97.6" x="24" stroke-width="0" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_12" y="125.6" x="33" stroke-width="0" stroke="#7f7f2f" fill="#000000">Topo_DS</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_13" y="160.6" x="28" stroke-width="0" stroke="#7f7f2f" fill="#000000">Shape view</text>
|
||||
<rect stroke="#ffaa56" id="svg_14" height="50" width="120" y="197.6" x="164" stroke-width="0" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_15" y="231.6" x="184" stroke-width="0" stroke="#7f7f2f" fill="#000000">3D view</text>
|
||||
<rect stroke="#ffaa56" id="svg_16" height="50" width="125.99999" y="59.6" x="161" stroke-width="0" fill="#ffffff"/>
|
||||
<text transform="matrix(0.893464 0 0 0.962463 18.0458 2.59472)" stroke="#7f7f2f" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_17" y="92.678" x="160" stroke-width="0" fill="#000000">Property panel</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
dox/user_guides/inspector/images/shapeview_property_panel.png
Normal file
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 19 KiB |
@@ -1,244 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="609" height="426" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="164.48495mm"
|
||||
height="98.635941mm"
|
||||
viewBox="0 0 164.48495 98.635941"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="tinspector_elements.svg"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2">
|
||||
<pattern
|
||||
y="0"
|
||||
x="0"
|
||||
height="6"
|
||||
width="6"
|
||||
patternUnits="userSpaceOnUse"
|
||||
id="EMFhbasepattern" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="329.8397"
|
||||
inkscape:cy="227.89271"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1575"
|
||||
inkscape:window-height="895"
|
||||
inkscape:window-x="46"
|
||||
inkscape:window-y="75"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-23.06172,-25.84832)">
|
||||
<path
|
||||
id="path933"
|
||||
d="M 23.326301,26.112901 H 187.28209 V 124.21968 H 23.326301 Z"
|
||||
style="fill:none;stroke:#953735;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path935"
|
||||
d="M 28.109932,31.192871 H 62.95001 v 12.97507 H 28.109932 Z"
|
||||
style="fill:#9bbb59;fill-opacity:1;fill-rule:nonzero;stroke:#71893f;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path937"
|
||||
d="m 66.54831,31.108201 h 34.84008 v 12.97507 H 66.54831 Z"
|
||||
style="fill:none;stroke:#33cccc;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path939"
|
||||
d="m 104.9867,31.023531 h 34.84007 v 12.97508 H 104.9867 Z"
|
||||
style="fill:none;stroke:#ff9933;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path941"
|
||||
d="m 37.550195,37.648651 c 0,0.254 -0.04233,0.48683 -0.169332,0.6985 -0.105832,0.21166 -0.253998,0.38099 -0.444497,0.48683 -0.126999,0.0847 -0.275164,0.14816 -0.42333,0.16933 -0.169332,0.0423 -0.35983,0.0635 -0.634995,0.0635 h -0.698495 v -2.83631 h 0.698495 c 0.275165,0 0.48683,0.0212 0.656162,0.0635 0.169332,0.0423 0.296331,0.10583 0.42333,0.16933 0.190498,0.127 0.338664,0.27516 0.444497,0.48683 0.105832,0.1905 0.148165,0.42333 0.148165,0.69849 z m -0.380997,0 c 0,-0.21166 -0.04233,-0.40216 -0.126999,-0.55033 -0.0635,-0.16933 -0.190498,-0.27516 -0.338664,-0.35983 -0.105833,-0.0635 -0.232832,-0.10583 -0.359831,-0.14816 -0.126999,-0.0212 -0.275164,-0.0212 -0.444497,-0.0212 h -0.35983 v 2.18015 h 0.35983 c 0.190499,0 0.338665,-0.0212 0.465664,-0.0423 0.148165,-0.0423 0.275164,-0.0847 0.380997,-0.14817 0.148165,-0.10583 0.253998,-0.21166 0.317498,-0.35983 0.0635,-0.14817 0.105832,-0.33866 0.105832,-0.55033 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path943"
|
||||
d="m 39.963178,36.569161 h -1.418157 v 0.80433 h 1.227658 v 0.33866 h -1.227658 v 1.35466 h -0.380997 v -2.83631 h 1.799154 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path945"
|
||||
d="m 42.524325,38.198981 c 0,0.127 -0.02117,0.254 -0.08467,0.35983 -0.04233,0.10583 -0.126999,0.21167 -0.211665,0.27517 -0.105833,0.0847 -0.211665,0.14816 -0.338664,0.16933 -0.126999,0.0423 -0.296331,0.0635 -0.48683,0.0635 h -1.015992 v -2.83631 h 0.84666 c 0.211665,0 0.359831,0.0212 0.465663,0.0423 0.105833,0 0.190499,0.0423 0.296331,0.0847 0.105833,0.0635 0.169332,0.12699 0.211666,0.21166 0.0635,0.0847 0.08467,0.1905 0.08467,0.29633 0,0.14817 -0.04233,0.254 -0.105832,0.35983 -0.0635,0.0847 -0.169332,0.16933 -0.275165,0.21167 v 0.0212 c 0.190499,0.0423 0.338665,0.127 0.444497,0.254 0.105833,0.12699 0.169332,0.27516 0.169332,0.48683 z m -0.634995,-1.26999 c 0,-0.0847 0,-0.127 -0.02117,-0.16933 -0.04233,-0.0635 -0.0635,-0.0847 -0.126999,-0.127 -0.04233,-0.0212 -0.126999,-0.0423 -0.211665,-0.0635 -0.08467,0 -0.190498,0 -0.317497,0 h -0.444497 v 0.80433 h 0.486829 c 0.127,0 0.211665,0 0.275165,-0.0212 0.08467,0 0.148166,-0.0423 0.190499,-0.0635 0.0635,-0.0423 0.105832,-0.0847 0.126999,-0.14817 0.04233,-0.0635 0.04233,-0.127 0.04233,-0.21166 z m 0.253998,1.26999 c 0,-0.10583 -0.02117,-0.1905 -0.0635,-0.254 -0.02117,-0.0847 -0.08467,-0.127 -0.190498,-0.16933 -0.0635,-0.0423 -0.126999,-0.0635 -0.211665,-0.0635 -0.08467,-0.0212 -0.190499,-0.0212 -0.317498,-0.0212 h -0.592662 v 1.05833 h 0.507996 c 0.148166,0 0.296331,-0.0212 0.402164,-0.0423 0.105832,0 0.190498,-0.0423 0.253998,-0.0847 0.0635,-0.0423 0.126999,-0.10584 0.148165,-0.16933 0.04233,-0.0635 0.0635,-0.14817 0.0635,-0.254 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path947"
|
||||
d="m 44.344645,37.331151 h -0.02117 c -0.04233,-0.0212 -0.105832,-0.0212 -0.148165,-0.0212 -0.04233,0 -0.105833,-0.0212 -0.169332,-0.0212 -0.126999,0 -0.232832,0.0423 -0.317498,0.0847 -0.105832,0.0423 -0.211665,0.10584 -0.296331,0.1905 v 1.50283 h -0.359831 v -2.11663 h 0.359831 v 0.3175 c 0.126999,-0.127 0.253998,-0.21166 0.359831,-0.254 0.105832,-0.0423 0.232831,-0.0635 0.338664,-0.0635 0.0635,0 0.105832,0 0.126999,0 0.04233,0 0.08467,0 0.126999,0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path949"
|
||||
d="m 46.482462,38.008481 c 0,0.33867 -0.08467,0.61383 -0.253998,0.80433 -0.169332,0.21167 -0.42333,0.3175 -0.719661,0.3175 -0.296331,0 -0.529163,-0.10583 -0.698495,-0.3175 -0.190498,-0.1905 -0.275164,-0.46566 -0.275164,-0.80433 0,-0.35983 0.08467,-0.61383 0.275164,-0.82549 0.169332,-0.1905 0.402164,-0.29633 0.698495,-0.29633 0.296331,0 0.550329,0.10583 0.719661,0.29633 0.169332,0.21166 0.253998,0.46566 0.253998,0.82549 z m -0.35983,0 c 0,-0.27516 -0.04233,-0.48683 -0.169332,-0.61383 -0.105833,-0.127 -0.253998,-0.21166 -0.444497,-0.21166 -0.190499,0 -0.338664,0.0847 -0.444497,0.21166 -0.105832,0.127 -0.169332,0.33867 -0.169332,0.61383 0,0.254 0.0635,0.46567 0.169332,0.59267 0.105833,0.14816 0.253998,0.21166 0.444497,0.21166 0.190499,0 0.338664,-0.0635 0.444497,-0.21166 0.105832,-0.127 0.169332,-0.33867 0.169332,-0.59267 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path951"
|
||||
d="m 49.699771,36.950161 -0.550328,2.11665 h -0.317498 l -0.550329,-1.62982 -0.529163,1.62982 h -0.338664 l -0.550329,-2.11665 h 0.35983 l 0.402164,1.62982 0.529163,-1.62982 h 0.275164 l 0.55033,1.62982 0.35983,-1.62982 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path953"
|
||||
d="m 51.731758,38.452981 c 0,0.1905 -0.08467,0.35983 -0.232834,0.46566 -0.16933,0.127 -0.380997,0.1905 -0.656161,0.1905 -0.169331,0 -0.296331,-0.0212 -0.444497,-0.0423 -0.126998,-0.0423 -0.232831,-0.0847 -0.317498,-0.127 v -0.40216 h 0.02117 c 0.105833,0.0847 0.232833,0.14816 0.380997,0.1905 0.127,0.0635 0.253998,0.0847 0.380998,0.0847 0.169333,0 0.275164,-0.0212 0.380997,-0.0847 0.08467,-0.0423 0.127,-0.127 0.127,-0.23283 0,-0.0847 -0.02117,-0.14817 -0.08467,-0.1905 -0.04233,-0.0423 -0.127,-0.0847 -0.275164,-0.10584 -0.04233,-0.0212 -0.105833,-0.0212 -0.1905,-0.0423 -0.08467,-0.0212 -0.148164,-0.0212 -0.211664,-0.0423 -0.1905,-0.0635 -0.338664,-0.12699 -0.402164,-0.23283 -0.08467,-0.0847 -0.127,-0.21166 -0.127,-0.33866 0,-0.0847 0.02117,-0.16933 0.0635,-0.254 0.04233,-0.0635 0.08467,-0.14817 0.169334,-0.21166 0.0635,-0.0423 0.148164,-0.10584 0.253997,-0.127 0.127,-0.0423 0.232831,-0.0635 0.380997,-0.0635 0.127,0 0.253998,0.0212 0.380998,0.0635 0.126997,0.0212 0.23283,0.0635 0.317497,0.10583 v 0.381 h -0.02117 c -0.08467,-0.0635 -0.190497,-0.127 -0.317497,-0.16934 -0.148167,-0.0423 -0.275164,-0.0635 -0.402164,-0.0635 -0.127,0 -0.232831,0.0212 -0.317497,0.0635 -0.08467,0.0423 -0.127,0.127 -0.127,0.23284 0,0.0847 0.02117,0.14816 0.0635,0.19049 0.0635,0.0423 0.148166,0.0847 0.275164,0.10584 0.0635,0.0212 0.127,0.0212 0.211666,0.0423 0.08466,0.0212 0.148164,0.0423 0.211664,0.0423 0.148167,0.0423 0.275164,0.10583 0.380998,0.1905 0.08467,0.10583 0.127,0.23283 0.127,0.38099 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path955"
|
||||
d="m 54.017739,38.029651 h -1.56632 c 0,0.14816 0.02117,0.254 0.0635,0.35983 0.04233,0.0847 0.08466,0.16933 0.169331,0.23283 0.0635,0.0635 0.127,0.10583 0.23283,0.127 0.08467,0.0423 0.1905,0.0423 0.296334,0.0423 0.148164,0 0.275164,-0.0212 0.423328,-0.0847 0.148166,-0.0423 0.254,-0.10583 0.317497,-0.16933 h 0.02117 v 0.40216 c -0.126998,0.0423 -0.253998,0.0847 -0.359831,0.127 -0.126997,0.0212 -0.275164,0.0423 -0.402161,0.0423 -0.359831,0 -0.634998,-0.0847 -0.825495,-0.27516 -0.1905,-0.1905 -0.296331,-0.46567 -0.296331,-0.8255 0,-0.33866 0.105831,-0.61383 0.275164,-0.82549 0.190498,-0.1905 0.444498,-0.29633 0.761995,-0.29633 0.275164,0 0.507995,0.0847 0.656161,0.254 0.148167,0.16933 0.232831,0.40216 0.232831,0.69849 z m -0.338664,-0.254 c -0.02117,-0.1905 -0.0635,-0.33866 -0.148164,-0.4445 -0.105833,-0.10583 -0.232833,-0.14816 -0.423331,-0.14816 -0.1905,0 -0.338664,0.0423 -0.465664,0.16933 -0.105833,0.10583 -0.16933,0.254 -0.190497,0.42333 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path957"
|
||||
d="m 55.88039,37.331151 h -0.0212 c -0.0635,-0.0212 -0.10583,-0.0212 -0.14816,-0.0212 -0.0635,0 -0.127,-0.0212 -0.1905,-0.0212 -0.10583,0 -0.21166,0.0423 -0.3175,0.0847 -0.10583,0.0423 -0.1905,0.10584 -0.29633,0.1905 v 1.50283 h -0.3598 v -2.11663 h 0.35983 v 0.3175 c 0.14817,-0.127 0.27517,-0.21166 0.381,-0.254 0.10583,-0.0423 0.21166,-0.0635 0.33866,-0.0635 0.0423,0 0.10584,0 0.127,0 0.0212,0 0.0635,0 0.127,0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path959"
|
||||
d="m 76.00974,35.786001 -1.03715,2.81515 h -0.508 l -1.01599,-2.81515 h 0.40216 l 0.88899,2.47648 0.889,-2.47648 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path961"
|
||||
d="m 77.4279,38.601151 h -1.12182 v -0.27517 h 0.38099 v -2.24365 h -0.38099 v -0.29633 h 1.12182 v 0.29633 h -0.381 v 2.24365 h 0.381 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path963"
|
||||
d="m 79.79855,38.601151 h -0.33866 v -1.18533 c 0,-0.10583 -0.0212,-0.1905 -0.0212,-0.27516 -0.0212,-0.0847 -0.0423,-0.16934 -0.0635,-0.21167 -0.0423,-0.0423 -0.0847,-0.0847 -0.14817,-0.10583 -0.0423,-0.0423 -0.127,-0.0423 -0.21167,-0.0423 -0.10583,0 -0.21166,0.0212 -0.31749,0.0635 -0.10583,0.0423 -0.21167,0.10583 -0.29633,0.1905 v 1.56632 H 78.0417 v -2.11665 h 0.35983 v 0.254 c 0.10583,-0.10584 0.21166,-0.16934 0.33866,-0.23284 0.127,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.23283,0 0.40217,0.0635 0.52917,0.1905 0.12699,0.14817 0.16933,0.33867 0.16933,0.61383 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path965"
|
||||
d="m 81.99987,38.008481 c 0,0.1905 -0.0635,0.33867 -0.23283,0.46567 -0.16934,0.127 -0.381,0.19049 -0.65617,0.19049 -0.14816,0 -0.29633,-0.0212 -0.42333,-0.0635 -0.14816,-0.0212 -0.254,-0.0635 -0.33866,-0.127 v -0.38099 h 0.0212 c 0.10583,0.0847 0.23283,0.14816 0.38099,0.1905 0.127,0.0423 0.27517,0.0847 0.381,0.0847 0.16933,0 0.29633,-0.0423 0.381,-0.0847 0.0847,-0.0423 0.127,-0.127 0.127,-0.23284 0,-0.0847 -0.0212,-0.14816 -0.0635,-0.19049 -0.0635,-0.0423 -0.14817,-0.0847 -0.27517,-0.10584 -0.0635,-0.0212 -0.127,-0.0423 -0.21166,-0.0423 -0.0847,-0.0212 -0.14817,-0.0423 -0.21167,-0.0635 -0.19049,-0.0423 -0.31749,-0.10583 -0.40216,-0.21166 -0.0847,-0.0847 -0.10583,-0.21167 -0.10583,-0.33867 0,-0.10583 0,-0.16933 0.0423,-0.25399 0.0423,-0.0847 0.0847,-0.14817 0.16933,-0.21167 0.0635,-0.0635 0.14817,-0.10583 0.27517,-0.127 0.10583,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.127,0 0.25399,0.0212 0.38099,0.0423 0.127,0.0423 0.23284,0.0635 0.3175,0.127 v 0.381 H 81.894 c -0.0847,-0.0847 -0.1905,-0.127 -0.3175,-0.16933 -0.12699,-0.0635 -0.25399,-0.0847 -0.38099,-0.0847 -0.127,0 -0.254,0.0212 -0.33867,0.0847 -0.0847,0.0423 -0.12699,0.127 -0.12699,0.21166 0,0.0847 0.0212,0.16933 0.0847,0.21167 0.0423,0.0423 0.127,0.0635 0.254,0.10583 0.0635,0 0.12699,0.0212 0.21166,0.0423 0.0847,0.0212 0.14817,0.0212 0.21166,0.0423 0.16934,0.0423 0.29634,0.10583 0.381,0.1905 0.0847,0.10583 0.127,0.21166 0.127,0.381 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path967"
|
||||
d="m 84.37051,37.521651 c 0,0.16933 -0.0212,0.33867 -0.0635,0.48683 -0.0423,0.127 -0.127,0.254 -0.21166,0.35983 -0.0847,0.0847 -0.16933,0.14817 -0.29633,0.21167 -0.10584,0.0423 -0.23283,0.0635 -0.35983,0.0635 -0.10584,0 -0.21167,0 -0.29633,-0.0212 -0.0847,-0.0212 -0.16934,-0.0635 -0.27517,-0.127 v 0.88899 h -0.35983 v -2.89981 h 0.35983 v 0.23283 c 0.10583,-0.0847 0.21167,-0.14816 0.3175,-0.1905 0.127,-0.0635 0.254,-0.0847 0.381,-0.0847 0.25399,0 0.46566,0.0847 0.59266,0.27517 0.14816,0.1905 0.21166,0.46566 0.21166,0.80433 z m -0.35983,0.0212 c 0,-0.254 -0.0423,-0.44449 -0.12699,-0.57149 -0.0847,-0.127 -0.23284,-0.1905 -0.40217,-0.1905 -0.10583,0 -0.21166,0.0212 -0.31749,0.0635 -0.10584,0.0423 -0.1905,0.10583 -0.29634,0.16933 v 1.20649 c 0.10584,0.0423 0.1905,0.0635 0.27517,0.0847 0.0635,0.0212 0.14816,0.0212 0.23283,0.0212 0.21167,0 0.35983,-0.0635 0.46566,-0.1905 0.10584,-0.127 0.16933,-0.33866 0.16933,-0.59266 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path969"
|
||||
d="m 86.69883,37.585151 h -1.54515 c 0,0.127 0.0212,0.254 0.0635,0.33867 0.0212,0.10583 0.0847,0.1905 0.14816,0.25399 0.0635,0.0423 0.14817,0.10584 0.23283,0.127 0.0847,0.0212 0.1905,0.0423 0.29633,0.0423 0.14817,0 0.29633,-0.0212 0.4445,-0.0847 0.14817,-0.0635 0.254,-0.10583 0.3175,-0.16933 v 0 0.381 c -0.10583,0.0635 -0.23283,0.10583 -0.35983,0.127 -0.127,0.0423 -0.254,0.0635 -0.40217,0.0635 -0.33866,0 -0.61382,-0.10583 -0.80432,-0.29633 -0.21167,-0.1905 -0.29633,-0.4445 -0.29633,-0.80433 0,-0.33866 0.0847,-0.61383 0.27516,-0.82549 0.1905,-0.1905 0.4445,-0.29634 0.74083,-0.29634 0.29633,0 0.50799,0.0847 0.65616,0.254 0.16933,0.14817 0.23283,0.40217 0.23283,0.6985 z m -0.33866,-0.27516 c 0,-0.16933 -0.0423,-0.3175 -0.14817,-0.42333 -0.0847,-0.10583 -0.23283,-0.14817 -0.42333,-0.14817 -0.1905,0 -0.33866,0.0423 -0.44449,0.16933 -0.127,0.10584 -0.1905,0.23284 -0.1905,0.40217 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path971"
|
||||
d="m 88.81548,38.474151 c -0.127,0.0635 -0.23283,0.10583 -0.33866,0.127 -0.10583,0.0423 -0.23283,0.0635 -0.33867,0.0635 -0.14816,0 -0.29633,-0.0212 -0.42333,-0.0635 -0.127,-0.0635 -0.23283,-0.127 -0.33866,-0.21167 -0.0847,-0.0847 -0.14817,-0.21167 -0.21166,-0.33866 -0.0423,-0.14817 -0.0635,-0.3175 -0.0635,-0.48683 0,-0.35983 0.0847,-0.635 0.27516,-0.8255 0.1905,-0.1905 0.4445,-0.29633 0.76199,-0.29633 0.127,0 0.23284,0.0212 0.35984,0.0635 0.10583,0.0212 0.21166,0.0635 0.31749,0.10583 v 0.40217 h -0.0212 c -0.10583,-0.0847 -0.21166,-0.14817 -0.33866,-0.1905 -0.10584,-0.0423 -0.23283,-0.0635 -0.33867,-0.0635 -0.1905,0 -0.35983,0.0635 -0.48683,0.1905 -0.10583,0.14816 -0.16933,0.33866 -0.16933,0.61383 0,0.25399 0.0635,0.44449 0.16933,0.57149 0.127,0.14817 0.27517,0.21167 0.48683,0.21167 0.0635,0 0.14817,0 0.21167,-0.0212 0.0847,-0.0212 0.14816,-0.0423 0.21166,-0.0847 0.0423,-0.0212 0.10584,-0.0423 0.14817,-0.0847 0.0423,-0.0212 0.0847,-0.0423 0.10583,-0.0635 h 0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path973"
|
||||
d="m 90.36064,38.601151 c -0.0635,0 -0.127,0.0212 -0.21167,0.0423 -0.0847,0 -0.14816,0 -0.21166,0 -0.21167,0 -0.381,-0.0423 -0.48683,-0.16934 -0.10584,-0.10583 -0.16933,-0.29633 -0.16933,-0.55033 v -1.12182 h -0.23284 v -0.3175 h 0.23284 v -0.59266 h 0.35983 v 0.59266 h 0.71966 v 0.3175 h -0.71966 v 0.95249 c 0,0.10584 0,0.21167 0,0.27517 0,0.0423 0.0212,0.10583 0.0635,0.16933 0.0212,0.0423 0.0635,0.0847 0.10583,0.10583 0.0423,0.0212 0.127,0.0423 0.23283,0.0423 0.0423,0 0.10583,-0.0212 0.16933,-0.0212 0.0635,-0.0212 0.10584,-0.0423 0.14817,-0.0635 v 0 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path975"
|
||||
d="m 92.60429,37.563991 c 0,0.33866 -0.0847,0.61382 -0.254,0.80432 -0.1905,0.21167 -0.42333,0.29633 -0.71966,0.29633 -0.29633,0 -0.52917,-0.0847 -0.71966,-0.29633 -0.16934,-0.1905 -0.254,-0.46566 -0.254,-0.80432 0,-0.35983 0.0847,-0.635 0.254,-0.8255 0.19049,-0.21166 0.42333,-0.29633 0.71966,-0.29633 0.29633,0 0.52916,0.0847 0.71966,0.29633 0.16933,0.1905 0.254,0.46567 0.254,0.8255 z m -0.35983,0 c 0,-0.27517 -0.0635,-0.48683 -0.16933,-0.61383 -0.10584,-0.14817 -0.254,-0.21167 -0.4445,-0.21167 -0.1905,0 -0.33867,0.0635 -0.4445,0.21167 -0.10583,0.127 -0.16933,0.33866 -0.16933,0.61383 0,0.25399 0.0635,0.46566 0.16933,0.59266 0.10583,0.14816 0.254,0.21166 0.4445,0.21166 0.1905,0 0.33866,-0.0635 0.4445,-0.21166 0.10583,-0.127 0.16933,-0.33867 0.16933,-0.59266 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path977"
|
||||
d="m 94.48811,36.886661 h -0.0212 c -0.0635,-0.0212 -0.10584,-0.0212 -0.16933,-0.0212 -0.0423,-0.0212 -0.10584,-0.0212 -0.16934,-0.0212 -0.10583,0 -0.21166,0.0212 -0.31749,0.0847 -0.10584,0.0423 -0.1905,0.10583 -0.29633,0.16933 v 1.50282 h -0.35984 v -2.11665 h 0.35984 v 0.3175 c 0.14816,-0.10583 0.27516,-0.1905 0.38099,-0.23283 0.10583,-0.0423 0.21167,-0.0847 0.3175,-0.0847 0.0635,0 0.10583,0.0212 0.14816,0.0212 0.0212,0 0.0635,0 0.127,0.0212 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path979"
|
||||
d="m 114.0883,37.775651 c 0,0.10583 -0.0212,0.23283 -0.0635,0.33867 -0.0635,0.10583 -0.127,0.19049 -0.21167,0.27516 -0.10583,0.0635 -0.23283,0.127 -0.35983,0.16933 -0.14817,0.0635 -0.29633,0.0847 -0.48683,0.0847 -0.21166,0 -0.381,-0.0212 -0.55033,-0.0635 -0.16933,-0.0423 -0.3175,-0.0847 -0.48683,-0.16933 v -0.46566 h 0.0212 c 0.14817,0.10583 0.29633,0.21166 0.48683,0.27516 0.1905,0.0635 0.35983,0.0847 0.52916,0.0847 0.23284,0 0.42333,-0.0423 0.55033,-0.127 0.127,-0.0847 0.1905,-0.1905 0.1905,-0.33866 0,-0.127 -0.0423,-0.23283 -0.0847,-0.27517 -0.0635,-0.0635 -0.16933,-0.10583 -0.29633,-0.14816 -0.0847,-0.0212 -0.1905,-0.0423 -0.29633,-0.0635 -0.10583,-0.0212 -0.23283,-0.0423 -0.35983,-0.0635 -0.254,-0.0423 -0.42333,-0.14817 -0.55033,-0.27517 -0.127,-0.127 -0.1905,-0.29633 -0.1905,-0.48683 0,-0.23283 0.10583,-0.44449 0.3175,-0.59266 0.1905,-0.14816 0.4445,-0.21166 0.74083,-0.21166 0.21166,0 0.38099,0 0.55033,0.0423 0.16933,0.0423 0.31749,0.0847 0.44449,0.14816 v 0.4445 h -0.0212 c -0.10583,-0.0847 -0.254,-0.16933 -0.42333,-0.23283 -0.1905,-0.0635 -0.35983,-0.0847 -0.55033,-0.0847 -0.19049,0 -0.35983,0.0423 -0.48683,0.127 -0.10583,0.0847 -0.16933,0.1905 -0.16933,0.3175 0,0.12699 0.0212,0.21166 0.0847,0.27516 0.0635,0.0635 0.16933,0.127 0.3175,0.14817 0.0847,0.0212 0.1905,0.0423 0.35983,0.0635 0.14816,0.0423 0.27516,0.0635 0.35983,0.0847 0.21166,0.0635 0.381,0.14816 0.48683,0.25399 0.10583,0.10584 0.14817,0.27517 0.14817,0.46567 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path981"
|
||||
d="m 116.43778,38.579981 h -0.35983 v -1.20649 c 0,-0.0847 0,-0.1905 -0.0212,-0.27517 0,-0.0847 -0.0212,-0.14816 -0.0635,-0.1905 -0.0212,-0.0635 -0.0635,-0.0847 -0.127,-0.12699 -0.0635,-0.0212 -0.127,-0.0212 -0.23283,-0.0212 -0.0847,0 -0.1905,0.0212 -0.29633,0.0635 -0.10584,0.0423 -0.21167,0.10583 -0.3175,0.19049 v 1.56633 h -0.35983 v -2.94215 h 0.35983 v 1.05833 c 0.127,-0.0847 0.23283,-0.14817 0.35983,-0.21167 0.10583,-0.0423 0.23283,-0.0635 0.35983,-0.0635 0.23284,0 0.40217,0.0635 0.52917,0.1905 0.10583,0.14817 0.16933,0.33867 0.16933,0.59266 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path983"
|
||||
d="m 118.76609,38.579981 h -0.35983 v -0.21167 c -0.0212,0.0212 -0.0635,0.0423 -0.127,0.0847 -0.0423,0.0423 -0.10583,0.0635 -0.14816,0.0847 -0.0635,0.0423 -0.127,0.0635 -0.21167,0.0847 -0.0635,0.0212 -0.16933,0.0212 -0.25399,0.0212 -0.1905,0 -0.35984,-0.0635 -0.48684,-0.19049 -0.14816,-0.127 -0.21166,-0.27517 -0.21166,-0.48683 0,-0.14817 0.0423,-0.27517 0.10583,-0.381 0.0635,-0.10583 0.16933,-0.16933 0.29633,-0.23283 0.127,-0.0635 0.27517,-0.10584 0.46567,-0.127 0.16933,-0.0212 0.381,-0.0212 0.57149,-0.0423 v -0.0423 c 0,-0.0847 0,-0.14817 -0.0423,-0.21167 -0.0212,-0.0423 -0.0635,-0.0847 -0.10583,-0.127 -0.0635,-0.0212 -0.127,-0.0423 -0.1905,-0.0635 -0.0635,0 -0.14816,0 -0.21166,0 -0.10583,0 -0.21167,0 -0.3175,0.0423 -0.127,0.0212 -0.23283,0.0423 -0.35983,0.10584 h -0.0212 v -0.381 c 0.0635,0 0.16933,-0.0212 0.29633,-0.0635 0.14816,-0.0212 0.27516,-0.0212 0.40216,-0.0212 0.14817,0 0.27517,0 0.381,0.0423 0.10583,0.0212 0.21166,0.0635 0.29633,0.127 0.0635,0.0423 0.127,0.127 0.16933,0.21166 0.0423,0.10584 0.0635,0.21167 0.0635,0.33867 z m -0.35983,-0.508 v -0.59266 c -0.10583,0 -0.23283,0.0212 -0.38099,0.0212 -0.14817,0.0212 -0.254,0.0423 -0.33867,0.0635 -0.10583,0.0212 -0.1905,0.0635 -0.254,0.127 -0.0635,0.0635 -0.0847,0.14816 -0.0847,0.254 0,0.127 0.0212,0.21166 0.10584,0.27516 0.0635,0.0635 0.1905,0.0847 0.33866,0.0847 0.127,0 0.23283,-0.0212 0.33867,-0.0635 0.10583,-0.0423 0.19049,-0.10583 0.27516,-0.16933 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path985"
|
||||
d="m 121.32724,37.500491 c 0,0.16933 -0.0212,0.33866 -0.0847,0.46566 -0.0423,0.14817 -0.10583,0.27516 -0.21166,0.35983 -0.0847,0.10583 -0.16933,0.16933 -0.29633,0.23283 -0.10584,0.0423 -0.21167,0.0635 -0.33867,0.0635 -0.127,0 -0.21166,0 -0.3175,-0.0212 -0.0847,-0.0423 -0.16933,-0.0635 -0.25399,-0.127 v 0.889 h -0.35983 v -2.89981 h 0.35983 v 0.23283 c 0.0847,-0.0847 0.1905,-0.14817 0.31749,-0.21167 0.10584,-0.0423 0.23284,-0.0635 0.381,-0.0635 0.254,0 0.4445,0.0847 0.59266,0.27517 0.127,0.1905 0.21167,0.46566 0.21167,0.80433 z m -0.381,0.0212 c 0,-0.27517 -0.0423,-0.46567 -0.127,-0.59267 -0.0847,-0.10583 -0.21166,-0.16933 -0.40216,-0.16933 -0.10583,0 -0.1905,0.0212 -0.29633,0.0635 -0.10583,0.0423 -0.21166,0.0847 -0.29633,0.16933 v 1.2065 c 0.0847,0.0423 0.16933,0.0635 0.254,0.0847 0.0635,0.0212 0.14816,0.0212 0.254,0.0212 0.19049,0 0.33866,-0.0635 0.46566,-0.1905 0.10583,-0.14817 0.14816,-0.33867 0.14816,-0.59267 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path987"
|
||||
d="m 123.65556,37.563991 h -1.56632 c 0,0.12699 0.0212,0.25399 0.0635,0.33866 0.0423,0.10583 0.0847,0.16933 0.14816,0.23283 0.0847,0.0635 0.14817,0.10583 0.23283,0.14817 0.10583,0.0212 0.1905,0.0423 0.3175,0.0423 0.127,0 0.27517,-0.0212 0.42333,-0.0847 0.14817,-0.0635 0.254,-0.127 0.3175,-0.16933 h 0.0212 v 0.38099 c -0.127,0.0635 -0.254,0.10583 -0.381,0.127 -0.127,0.0423 -0.254,0.0635 -0.381,0.0635 -0.35983,0 -0.635,-0.10583 -0.82549,-0.29633 -0.1905,-0.1905 -0.29633,-0.46566 -0.29633,-0.80433 0,-0.33866 0.0847,-0.61383 0.27516,-0.82549 0.1905,-0.21167 0.4445,-0.29633 0.76199,-0.29633 0.27517,0 0.48684,0.0635 0.65617,0.23283 0.14817,0.16933 0.23283,0.40216 0.23283,0.71966 z m -0.35983,-0.27517 c 0,-0.1905 -0.0423,-0.33866 -0.127,-0.42333 -0.10583,-0.10583 -0.23283,-0.16933 -0.42333,-0.16933 -0.1905,0 -0.35983,0.0635 -0.46567,0.16933 -0.10583,0.127 -0.16933,0.254 -0.19049,0.42333 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path989"
|
||||
d="m 126.44954,35.764831 -1.03716,2.81515 h -0.50799 l -1.016,-2.81515 h 0.40217 l 0.88899,2.47648 0.88899,-2.47648 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path991"
|
||||
d="m 127.2327,36.124661 h -0.40216 v -0.38099 h 0.40216 z m -0.0212,2.45532 h -0.35983 v -2.11665 h 0.35983 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path993"
|
||||
d="m 129.68802,37.563991 h -1.56632 c 0,0.12699 0.0212,0.25399 0.0635,0.33866 0.0423,0.10583 0.0847,0.16933 0.14816,0.23283 0.0847,0.0635 0.14817,0.10583 0.23283,0.14817 0.10583,0.0212 0.1905,0.0423 0.3175,0.0423 0.127,0 0.27516,-0.0212 0.42333,-0.0847 0.14816,-0.0635 0.254,-0.127 0.3175,-0.16933 h 0.0212 v 0.38099 c -0.127,0.0635 -0.254,0.10583 -0.38099,0.127 -0.127,0.0423 -0.254,0.0635 -0.381,0.0635 -0.35983,0 -0.635,-0.10583 -0.82549,-0.29633 -0.1905,-0.1905 -0.29634,-0.46566 -0.29634,-0.80433 0,-0.33866 0.0847,-0.61383 0.27517,-0.82549 0.1905,-0.21167 0.4445,-0.29633 0.76199,-0.29633 0.27517,0 0.48683,0.0635 0.65616,0.23283 0.14817,0.16933 0.23284,0.40216 0.23284,0.71966 z m -0.35984,-0.27517 c 0,-0.1905 -0.0423,-0.33866 -0.12699,-0.42333 -0.10584,-0.10583 -0.23284,-0.16933 -0.42333,-0.16933 -0.1905,0 -0.35983,0.0635 -0.46567,0.16933 -0.10583,0.127 -0.16933,0.254 -0.19049,0.42333 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path995"
|
||||
d="m 132.88416,36.463331 -0.55033,2.11665 h -0.33866 l -0.52917,-1.62982 -0.55033,1.62982 h -0.31749 l -0.5715,-2.11665 h 0.381 l 0.38099,1.65099 0.52917,-1.65099 h 0.29633 l 0.55033,1.65099 0.35983,-1.65099 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path997"
|
||||
d="M 42.608991,62.752131 H 181.82113 V 118.33539 H 42.608991 Z"
|
||||
style="fill:none;stroke:#ff9933;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path999"
|
||||
d="M 35.666376,55.280361 H 174.89968 V 110.86361 H 35.666376 Z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#33cccc;stroke-width:0.52916276px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path1001"
|
||||
d="M 28.744927,47.808581 H 167.97823 V 103.39183 H 28.744927 Z"
|
||||
style="fill:#9bbb59;fill-opacity:1;fill-rule:nonzero;stroke:#77933c;stroke-width:0.52916667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<rect stroke="#7f3f00" stroke-width="4" id="svg_2" height="419.99998" width="605.00004" y="2.8" x="1.99999" fill="#ffffff"/>
|
||||
<rect id="svg_5" height="193" width="413" y="207.8" x="167" stroke-width="3" stroke="#08a4d8" fill="#ffffff"/>
|
||||
<rect stroke="#f2780e" id="svg_6" height="193.99999" width="409.99997" y="173.8" x="137" opacity="NaN" stroke-width="3" fill="#ffffff"/>
|
||||
<rect stroke="#d608cb" id="svg_7" height="192" width="404.99998" y="136.8" x="106" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#5fbf00" id="svg_9" height="193" width="406.00001" y="91.8" x="66.99999" stroke-width="4" fill="#ffffff"/>
|
||||
<rect id="svg_10" height="43" width="137" y="23.8" x="19" stroke-width="4" stroke="#5fbf00" fill="#5fbf00"/>
|
||||
<rect stroke="#d608cb" id="svg_16" height="43" width="137" y="23.8" x="163" stroke-width="4" fill="#ffffff"/>
|
||||
<rect stroke="#f2780e" opacity="NaN" id="svg_17" height="42" width="135" y="23.8" x="309" stroke-width="3" fill="#ffffff"/>
|
||||
<rect stroke="#08a4d8" id="svg_18" height="43" width="135" y="23.8" x="451" stroke-width="3" fill="#ffffff"/>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_19" y="52.8" x="32" stroke-width="0" stroke="#08a4d8" fill="#000000">DFBrowser</text>
|
||||
<text transform="matrix(0.903837 0 0 1 19.0402 0)" stroke="#010b0f" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_22" y="52.8" x="165.91458" stroke-width="0" fill="#000000">MessageView</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_23" y="52.8" x="325" stroke-width="0" stroke="#5fbf00" fill="#000000">ShapeView</text>
|
||||
<text xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_24" y="51.8" x="463" stroke-width="0" stroke="#7f3f00" fill="#000000">VInspector</text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
@@ -1,200 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg width="609" height="234" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<rect fill="#ffffff" stroke-width="4" x="3.5" y="3.2" width="603.99998" height="227.99999" id="svg_1" stroke="#007fff"/>
|
||||
<rect stroke="#007fff" fill="#007fff" stroke-width="4" x="24.5" y="30.2" width="202" height="67" id="svg_8"/>
|
||||
<rect stroke="#007fff" fill="#007fff" stroke-width="4" x="407.50001" y="29.19999" width="186.99999" height="185" id="svg_9"/>
|
||||
<rect stroke="#007fff" fill="#ffffff" stroke-width="4" x="57.5" y="36.2" width="128" height="56" id="svg_11"/>
|
||||
<rect stroke="#ffffff" fill="#ffffff" stroke-width="4" x="418.50001" y="91.2" width="163.99997" height="56" id="svg_13"/>
|
||||
<text fill="#000000" stroke="#007fff" stroke-width="0" x="86.5" y="73.2" id="svg_14" font-size="24" font-family="Noto Sans JP" text-anchor="start" xml:space="preserve">Update</text>
|
||||
<text fill="#000000" stroke="#007fff" stroke-width="0" x="458.5" y="127.2" id="svg_15" font-size="24" font-family="Noto Sans JP" text-anchor="start" xml:space="preserve">3D view</text>
|
||||
<rect stroke="#007fff" fill="#007fff" stroke-width="4" x="22.5" y="113.2" width="206" height="102" id="svg_18"/>
|
||||
<rect stroke="#ffffff" fill="#ffffff" stroke-width="4" x="27.5" y="138.2" width="194" height="56" id="svg_19"/>
|
||||
<text fill="#000000" stroke="#007fff" stroke-width="0" x="30.5" y="174.2" id="svg_21" font-size="20" font-family="Noto Sans JP" text-anchor="start" xml:space="preserve">Presentations tree view</text>
|
||||
<rect stroke="#007fff" fill="#007fff" stroke-width="4" x="239.5" y="30.19999" width="157" height="185" id="svg_2"/>
|
||||
<rect stroke="#ffffff" fill="#ffffff" stroke-width="4" x="245.50002" y="84.2" width="147.99997" height="56" id="svg_3"/>
|
||||
<text fill="#000000" stroke="#007fff" stroke-width="0" x="248.5" y="121.2" id="svg_5" font-size="24" font-family="Noto Sans JP" text-anchor="start" xml:space="preserve">Property panel</text>
|
||||
</g>
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="165.36458mm"
|
||||
height="99.483337mm"
|
||||
viewBox="0 0 165.36458 99.483337"
|
||||
version="1.1"
|
||||
id="svg3064"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||
sodipodi:docname="vinspector_elements.svg">
|
||||
<defs
|
||||
id="defs3058" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="261.33464"
|
||||
inkscape:cy="225.25011"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1277"
|
||||
inkscape:window-height="875"
|
||||
inkscape:window-x="314"
|
||||
inkscape:window-y="16"
|
||||
inkscape:window-maximized="0" />
|
||||
<metadata
|
||||
id="metadata3061">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(201.36682,-127.81786)">
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4147-0"
|
||||
width="164.83542"
|
||||
height="98.95417"
|
||||
x="-201.10223"
|
||||
y="128.08244"
|
||||
inkscape:export-filename="D:\OCCT\master_CR27398_doc\dox\user_guides\qt_browsers\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#93cddd;fill-opacity:1;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4157-8"
|
||||
width="155.951"
|
||||
height="20.214758"
|
||||
x="-197.10306"
|
||||
y="132.31981"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#93cddd;fill-opacity:1;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4159-9"
|
||||
width="155.55411"
|
||||
height="39.471096"
|
||||
x="-197.06837"
|
||||
y="157.2328"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-6"
|
||||
width="109.47361"
|
||||
height="11.118413"
|
||||
x="-155.47618"
|
||||
y="136.86798"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-1-6"
|
||||
width="30.417513"
|
||||
height="11.316654"
|
||||
x="-192.77927"
|
||||
y="136.76886"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-184.57181"
|
||||
y="143.51102"
|
||||
id="text5675-9"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5677-2"
|
||||
x="-184.57181"
|
||||
y="143.51102"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Update</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666677px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-118.07398"
|
||||
y="143.87196"
|
||||
id="text5683-7"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-7"
|
||||
x="-118.07398"
|
||||
y="143.87196"
|
||||
style="font-size:3.88055563px;line-height:1.25;stroke-width:0.28222224px">Selection controls</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.56444448;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-8-4"
|
||||
width="79.254326"
|
||||
height="23.947351"
|
||||
x="-158.91849"
|
||||
y="164.99469"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-143.42757"
|
||||
y="176.27301"
|
||||
id="text5683-5-4"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-59"
|
||||
x="-143.42757"
|
||||
y="176.27301"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">Presentations tree view</tspan></text>
|
||||
<rect
|
||||
style="opacity:1;fill:#93cddd;fill-opacity:1;fill-rule:evenodd;stroke:#33cccc;stroke-width:0.52916664;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4157-8-7"
|
||||
width="155.951"
|
||||
height="20.214758"
|
||||
x="-196.94507"
|
||||
y="202.23282"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.36620289;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.29879999;stroke-opacity:1"
|
||||
id="rect4195-1-6-6"
|
||||
width="147.01831"
|
||||
height="11.316654"
|
||||
x="-192.62131"
|
||||
y="206.68187"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.38666654px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.28222221px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="-132.50854"
|
||||
y="210.87439"
|
||||
id="text5683-5-4-1"
|
||||
transform="scale(0.98830373,1.0118347)"
|
||||
inkscape:export-filename="F:\OCC\master_CR29018\dox\user_guides\inspector\images\vinspector.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5685-3-59-8"
|
||||
x="-132.50854"
|
||||
y="210.87439"
|
||||
style="font-size:3.83516741px;line-height:1.25;stroke-width:0.28222221px">History view</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dox/user_guides/inspector/images/vinspector_light_setting.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
dox/user_guides/inspector/images/vinspector_property_panel.png
Normal file
After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 17 KiB |
@@ -18,6 +18,7 @@ Inspector has a plugin-oriented architecture. The current release contains the f
|
||||
| @ref occt_inspector_2_2 "DFBrowser"| OCAF | *TDocStd_Application* |
|
||||
| @ref occt_inspector_2_3 "VInspector"| Visualization | *AIS_InteractiveContext* |
|
||||
| @ref occt_inspector_2_4 "ShapeView"| Modeling Data | *TopoDS_Shape* |
|
||||
| @ref occt_inspector_2_5 "MessageView"| Modeling Data | *Message_Report* |
|
||||
|
||||
|
||||
Each plugin implements logic of a corresponding OCCT component.
|
||||
@@ -102,10 +103,16 @@ Context pop-up menu:
|
||||
| Expand All | Expands the whole tree of the selected item. |
|
||||
| Collapse All | Collapses the whole tree of the selected item. |
|
||||
|
||||
|
||||
<b>Property Panel</b>
|
||||
|
||||
Property panel is used to display the content of *Label* or *Attribute* tree view items or Search result view.
|
||||
Property panel is used to display the result of <b>TDF_Attribute::Dump()</b> or <b>TDF_Label::Dump()</b> of the selected tree view item.
|
||||
The information is shown in one table.
|
||||
|
||||
@figure{property_panel.png,"PropertyPanel",360}
|
||||
|
||||
<b>Property Panel (custom)</b>
|
||||
|
||||
Property panel (custom) is used to display the content of *Label* or *Attribute* tree view items or Search result view.
|
||||
The information is usually shown in one or several tables.
|
||||
|
||||
*TDF_Attribute* has the following content in the Property Panel:
|
||||
@@ -114,28 +121,28 @@ The information is usually shown in one or several tables.
|
||||
<tr><th>Type</th><th>Description</th><th>Content</th></tr>
|
||||
<tr><td><i>TDF_Label</i></td>
|
||||
<td> a table of [entry or attribute name, value]</td>
|
||||
<td>@figure{property_panel_label.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_label.png, "",140}</td></tr>
|
||||
<tr><td><i>TDocStd_Owner</i>,<br> Simple type attributes, <br> List type attributes</td>
|
||||
<td>a table of [method name, value]</td>
|
||||
<td>@figure{property_panel_simple_type.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_simple_type.png, "",140}</td></tr>
|
||||
<tr><td><i>TDataStd_BooleanArray</i>,<br> <i>TDataStd_ByteArray</i>,<br> other Array type attributes</td>
|
||||
<td>2 controls: <br> - a table of [array bound, value], <br> - a table of [method name, value] </td>
|
||||
<td>@figure{property_panel_array.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_array.png, "",140}</td></tr>
|
||||
<tr><td><i>TDataStd_TreeNode</i></td>
|
||||
<td>2 controls: <br> - a table of [Tree ID, value] (visible only if Tree ID() != ID() ), <br> - a tree view of tree nodes starting from *Root()* of the tree node. The current tree node has <b>dark blue</b> text.</td>
|
||||
<td>@figure{property_panel_tree_node.png, "",140} </td></tr>
|
||||
<td>@figure{property_panel_custom_tree_node.png, "",140} </td></tr>
|
||||
<tr><td><i>TDataStd_NamedData</i></td>
|
||||
<td>tab bar of attribute elements, each tab has a table of [name, value]</td>
|
||||
<td>@figure{property_panel_named_data.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_named_data.png, "",140}</td></tr>
|
||||
<tr><td><i>TNaming_UsedShapes</i></td>
|
||||
<td>a table of all shapes handled by the framework</td>
|
||||
<td>@figure{property_panel_tnaming_used_shapes.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_tnaming_used_shapes.png, "",140}</td></tr>
|
||||
<tr><td><i>TNaming_NamedShape</i></td>
|
||||
<td>2 controls: <br> - a table of [method name, value] including CurrentShape/OriginalShape methods result of <i>TNaming_Tools</i>, <br> - an evolution table. <br> Tables contain buttons for @ref occt_shape_export "TopoDS_Shape export".</td>
|
||||
<td>@figure{property_panel_tnaming_named_shape.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_tnaming_named_shape.png, "",140}</td></tr>
|
||||
<tr><td><i>TNaming_Naming</i></td>
|
||||
<td>2 controls: <br> - a table of <i>TNaming_Name</i> values,<br> - a table of [method name, value]</td>
|
||||
<td>@figure{property_panel_tnaming_naming.png, "",140}</td></tr>
|
||||
<td>@figure{property_panel_custom_tnaming_naming.png, "",140}</td></tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -203,17 +210,17 @@ Selection of tree view item updates content of the following controls:
|
||||
|
||||
@figure{dfbrowser_selection_in_tree_view.svg,"",360}
|
||||
|
||||
<b>Property Panel item selection </b>
|
||||
<b>Property Panel (custom) item selection </b>
|
||||
|
||||
If the property panel shows content of *TDF_Label*:
|
||||
If the property panel (custom) shows content of *TDF_Label*:
|
||||
* selection of the table row highlights the corresponding item in the tree view,
|
||||
* double click on the table row selects this item in the tree view.
|
||||
|
||||
If the property panel shows content of *TDF_Attribute* that has reference to another attribute, selection of this reference:
|
||||
If the property panel (custom) shows content of *TDF_Attribute* that has reference to another attribute, selection of this reference:
|
||||
* highlights the referenced item in the tree view,
|
||||
* displays additional presentation in the 3D view if it can be created.
|
||||
|
||||
@figure{property_panel_item_selection.svg,"",360}
|
||||
@figure{property_panel_custom_item_selection.svg,"",360}
|
||||
|
||||
Attributes having references:
|
||||
|
||||
@@ -281,27 +288,6 @@ Context popup menu in tree view:
|
||||
|
||||
This button synchronizes the plugin content with the current state of *AIS_InteractiveContext* and updates the presence of items and their current selection.
|
||||
|
||||
<b>Selection controls</b>
|
||||
|
||||
Selection controls switch on/off the possibility to set selection in the context from VInspector plugin.
|
||||
|
||||
| Action | Tree view item | Functionality |
|
||||
| :----- | :----- | :----- |
|
||||
| Select Presentations | *AIS_InteractiveObject* | Calls *AddOrRemoveSelected* of interactive object for the selected item. |
|
||||
| Select Owners | *SelectMgr_EntityOwner* or <br> *SelectMgr_SensitiveEntity* | Calls *AddOrRemoveSelected* of *SelectMgr_EntityOwner* for the selected item. |
|
||||
|
||||
Note that the initial selection in the context will be cleared.
|
||||
If the button is toggled, the button selection is active. Only one button may be toggled at the moment.
|
||||
|
||||
|
||||
<b>History view</b>
|
||||
|
||||
At present, the History view is under implementation and may be used only in a custom application where Inspector is loaded.
|
||||
|
||||
To fill this view, *VInspectorAPI_CallBack* should be redefined in the application and send signals about some actions applied to the context.
|
||||
After that, the call back should be given as a parameter in the plugin.
|
||||
If done, new items will be created in the history view for each action.
|
||||
|
||||
@subsubsection occt_inspector_2_3_3 Elements cooperation
|
||||
|
||||
*VInspector* marks the presentations currently selected in *AIS_InteractiveContext* with a blue background in tree items. Use **Update** button to synchronize VInspector selected items state to the context.
|
||||
@@ -320,6 +306,14 @@ Selection change:
|
||||
Use context pop-up menu on the tree view header to select, which columns should be displayed.
|
||||
@figure{vinspector_tree_columns.png, "Vinspector tree header context menu",360}
|
||||
|
||||
Use the setting Lights (position, color) in the view.
|
||||
@figure{vinspector_light_setting.png, "Vinspector light setting",360}
|
||||
|
||||
@subsubsection occt_inspector_2_3_5 VInspector property panel
|
||||
|
||||
Property panel shows the result of <b>AIS_InteractiveContext::Dump()</b> or <b>AIS_InteractiveObject::Dump()</b>.
|
||||
@figure{vinspector_property_panel.png, "Vinspector property panel",360}
|
||||
|
||||
@subsection occt_inspector_2_4 ShapeView Plugin
|
||||
|
||||
@subsubsection occt_inspector_2_4_1 Overview
|
||||
@@ -328,7 +322,13 @@ Use context pop-up menu on the tree view header to select, which columns should
|
||||
|
||||
This plugin visualizes content of *TopoDS_Shape* in a tree view.
|
||||
|
||||
@subsubsection occt_inspector_2_4_2 Elements
|
||||
@subsubsection occt_inspector_2_4_2 Property panel
|
||||
|
||||
Property panel shows properties for TopoDS_Shape based on DumpJson.
|
||||
|
||||
@figure{shapeview_property_panel.png, "ShapeView Property panel",360}
|
||||
|
||||
@subsubsection occt_inspector_2_4_3 Elements
|
||||
|
||||
@figure{shapeview_elements.svg,"ShapeView Elements",360}
|
||||
|
||||
@@ -351,15 +351,56 @@ Context pop-up menu in tree view:
|
||||
| Close All BREP views | Closes all opened text views. |
|
||||
| BREP directory | Displays the folder, where temporary BREP files have been stored. |
|
||||
|
||||
@subsubsection occt_inspector_2_4_3 Elements cooperation
|
||||
@subsubsection occt_inspector_2_4_4 Elements cooperation
|
||||
|
||||
Selection of one or several items in *TopoDS_Shape* View creates its *AIS_Shape* presentation and displays it in the 3D View.
|
||||
|
||||
@subsubsection occt_inspector_2_4_4 ShapeView tree view columns
|
||||
@subsubsection occt_inspector_2_4_5 ShapeView tree view columns
|
||||
|
||||
Use context pop-up menu on the tree view header to select, which columns should be displayed.
|
||||
@figure{shapeview_tree_columns.png, "ShapeView tree header context menu",360}
|
||||
|
||||
@subsection occt_inspector_2_5 MessageView Plugin
|
||||
|
||||
MessageView plugin is used to display content of Message_Report.
|
||||
|
||||
@subsubsection occt_inspector_2_5_1 Message report tree view
|
||||
|
||||
Message report tree view shows the content of the Message_Report.
|
||||
|
||||
Context pop-up menu in message report tree view:
|
||||
| Action | Functionality |
|
||||
| :----- | :----- |
|
||||
| Export Report | Exports the report as json file. |
|
||||
| WallClock Metric statistic | Creates the table that sums the number of calls and the time spent on the functionality inside the value and shows it in Property panel (custom). It's necessary to activate "WallClock metric". |
|
||||
| Preview children presentations | Displays presentations of children items of selected items if found. |
|
||||
| Deactivate | Deactivates all types of metrics for the current report. |
|
||||
| Activate | Appends items to activate report metrics. |
|
||||
| Clear | Clears message report. |
|
||||
| Activate metric | Switches active state in report for clicked type of metric. |
|
||||
| Test metric | Sends several alerts to check metric of message-alert-tool mechanism. |
|
||||
| Test Message_Messenger | Sends several alerts to check property panel/presentations of messenger-alert-tool mechanism. |
|
||||
| Test Tree of messages | Sends several alerts to check tree of alerts. |
|
||||
|
||||
@figure{messageview_pop_up_menu.png, "MessageView pop-up menu",360}
|
||||
|
||||
@subsubsection occt_inspector_2_5_2 3D View
|
||||
|
||||
3D View shows the selected item (TopoDS_Shape) in message report tree view.
|
||||
@figure{messageview_view.png, "MessageView 3D View",360}
|
||||
|
||||
@subsubsection occt_inspector_2_5_3 Dump panel
|
||||
|
||||
Shows Dump() information of the selected item if the item has Dump().
|
||||
@figure{messageview_dump_panel.png, "MessageView 3D View",360}
|
||||
|
||||
@subsubsection occt_inspector_2_5_4 Property panel (custom)
|
||||
|
||||
Shows the table for WallClock Metric statistic option.
|
||||
@figure{messageview_property_panel_custom.png, "MessageView 3D View",360}
|
||||
|
||||
@subsubsection occt_inspector_2_5_5 Elements
|
||||
@figure{messageview_elements.svg, "MessageView elements",360}
|
||||
|
||||
@section occt_inspector_3 Common controls
|
||||
|
||||
@@ -400,7 +441,9 @@ This control for OCCT 3D viewer creates visualization view components and allows
|
||||
| Context | Allows choosing another context that should be used in the plugin. The following contexts are available:<br> **Own** - the context of this view, <br> **External** - the context of the @ref occt_inspector_4_3 "external application", which initializes the plugin, <br> **None** - the visualization is not performed at all (useful if the presentation is too complex). |
|
||||
| Multi/Single | The buttons define what to do with the previously displayed objects: <br> **Multi** displays new presentations together with already displayed ones, <br> **Single** removes all previously displayed presentations. |
|
||||
| Clean | Removes all displayed presentations. |
|
||||
| Fit All,<br> Fit Area,<br> Zoom,<br> Pan,<br> Rotation | Scene manipulation actions<br> (Fit All is checkable. If checked(by double click), display/hide of new objects will perform **Fit All** of the scene.) |
|
||||
| Trihedron display | Shows the trihedron. |
|
||||
| View cube display | Shows the view cube. |
|
||||
| Fit All | Scene manipulation actions<br> (Fit All is checkable. If checked(by double click), display/hide of new objects will perform **Fit All** of the scene.) |
|
||||
| Display Mode | Sets *AIS_Shading* or *AIS_WireFrame* display mode for all presentations. |
|
||||
|
||||
Context popup menu:
|
||||
@@ -420,7 +463,7 @@ View preferences store the current view orientation.
|
||||
Context menu contains:
|
||||
| Element | Functionality |
|
||||
| :----- | :----- |
|
||||
| Tree Level Line,<br> PropertyPanel,<br> Dump, <br> View| Names of dock widgets in the active plugin. If the button is checked, dock widget is visible. |
|
||||
| Tree Level Line,<br> PropertyPanel,<br> PropertyPanel (custom),<br> Dump, <br> View| Names of dock widgets in the active plugin. If the button is checked, dock widget is visible. |
|
||||
| Store Preferences | Creates ".tinspector.xml" preferences file with the current settings for each plugin.<br> This file is created in TEMP/TMP directory (by default) or in a user-defined directory. |
|
||||
| Remove Preferences | Removes preferences file. After the Inspector is restarted, default values will be applied. |
|
||||
|
||||
@@ -487,7 +530,7 @@ tinspector
|
||||
@figure{drawexe_tinspector.png,"tinspector",360}
|
||||
|
||||
This command does the following:
|
||||
- all available Plugins are presented in the Inspector. These are @ref occt_inspector_2_2 "DFBrowser", @ref occt_inspector_2_3 "VInspector" and @ref occt_inspector_2_4 "ShapeView";
|
||||
- all available Plugins are presented in the Inspector. These are @ref occt_inspector_2_2 "DFBrowser", @ref occt_inspector_2_3 "VInspector", @ref occt_inspector_2_4 "ShapeView" and @ref occt_inspector_2_5 "MessageView";
|
||||
- DFBrowser is the active plugin;
|
||||
- OCAF tree is empty.
|
||||
|
||||
@@ -527,6 +570,7 @@ void CreateInspector()
|
||||
MyTCommunicator->RegisterPlugin ("TKDFBrowser");
|
||||
MyTCommunicator->RegisterPlugin ("TKVInspector");
|
||||
MyTCommunicator->RegisterPlugin ("TKShapeView");
|
||||
MyTCommunicator->RegisterPlugin ("TKMessageView");
|
||||
|
||||
MyTCommunicator->Init (aParameters);
|
||||
MyTCommunicator->Activate ("TKDFBrowser");
|
||||
@@ -542,6 +586,7 @@ Give one the following objects for a plugin using a container of parameters:
|
||||
| *TKDFBrowser* | *TDocStd_Application* |
|
||||
| *TKVInspector* | *AIS_InteractiveContext* |
|
||||
| *TKShapeView* | *TopoDS_TShape* |
|
||||
| *TKMessageView* | *Message_Report* |
|
||||
|
||||
|
||||
@section occt_inspector_5 Build procedure
|
||||
@@ -567,11 +612,13 @@ Distribution of plugin packages :
|
||||
| *DFBrowser*, <br> *DFBrowserPane*, <br> *DFBrowserPaneXDE*, <br> *TKDFBrowser* | DFBrowser |
|
||||
| *VInspector*, <br> *TKVInspector* | VInspector |
|
||||
| *ShapeView*, <br> *TKShapeView* | ShapeView |
|
||||
| *MessageView*, <br> *TKMessageView* | MessageView |
|
||||
|
||||
Other packages:
|
||||
| Source packages| Used in |
|
||||
| :----- | :----- |
|
||||
| *TInspectorAPI*, <br> *TKInspectorAPI* | Interface for connection to plugin. |
|
||||
| *ViewControl*, <br> *TKTreeModel* | Classes for property view, table, table model. |
|
||||
| *TreeModel*, <br> *TKTreeView* | Items-oriented model to simplify work with GUI tree control. |
|
||||
| *View*, <br> *TKView* | 3D View component. |
|
||||
| *TInspector*, <br> *TKTInspector* | Inspector window, where plugins are placed. |
|
||||
|
Before Width: | Height: | Size: 488 KiB |
@@ -2,41 +2,21 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="492.48849"
|
||||
height="306.85541"
|
||||
width="500"
|
||||
height="240"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="shape_heal.svg">
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
sodipodi:docname="shape_healing_image009.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs4">
|
||||
<clipPath
|
||||
id="clipEmfPath1"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
id="rect3045"
|
||||
height="188.43307"
|
||||
width="602.36218"
|
||||
y="0"
|
||||
x="0" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipEmfPath2"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
<rect
|
||||
id="rect3048"
|
||||
height="168.77963"
|
||||
width="461.37103"
|
||||
y="13.50237"
|
||||
x="1.4999058" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clipEmfPath1-1"
|
||||
clipPathUnits="userSpaceOnUse">
|
||||
@@ -115,9 +95,9 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="346.95854"
|
||||
inkscape:cy="41.972723"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="260.39207"
|
||||
inkscape:cy="156.2706"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
@@ -129,7 +109,9 @@
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-bottom="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
width="500px" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
@@ -138,7 +120,6 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -159,240 +140,324 @@
|
||||
id="g3033" />
|
||||
<g
|
||||
id="g3209" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="77.124359"
|
||||
y="50.336628"
|
||||
style="font-size:19.95194054px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3245"> </text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="384.65424"
|
||||
y="50.336628"
|
||||
style="font-size:19.95194054px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3249"> </text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="384.35422"
|
||||
y="74.039337"
|
||||
style="font-size:12.45121098px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3253"> </text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="43.821121"
|
||||
y="95.941833"
|
||||
style="font-size:12.45121098px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3255"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
clip-path="url(#clipEmfPath1-1)"
|
||||
d="m -0.00937591,136.00926 0,21.24618 141.76378591,0 0,-21.24618 -141.76378591,0 z"
|
||||
d="m -0.00937591,136.00926 v 21.24618 H 141.75441 v -21.24618 z"
|
||||
id="path3257"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 28.510257,137.89036 0,21.24618 141.763783,0 0,-21.24618 z"
|
||||
id="path3259" />
|
||||
transform="translate(32.519633,-72.118896)" />
|
||||
<g
|
||||
id="g3196">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 32.510257,63.89036 V 85.13654 H 174.27404 V 63.89036 Z"
|
||||
id="path3259" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="78.230995"
|
||||
y="77.499275"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3261">ShapeFix</text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="74.574112"
|
||||
y="153.24837"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3261">ShapeFix</text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="124.52896"
|
||||
y="153.24837"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
x="128.52896"
|
||||
y="79.248367"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3263"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
clip-path="url(#clipEmfPath2-7)"
|
||||
d="m 176.82969,136.00926 0,21.24618 141.76378,0 0,-21.24618 -141.76378,0 z"
|
||||
d="m 176.82969,136.00926 v 21.24618 h 141.76378 v -21.24618 z"
|
||||
id="path3265"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 205.34932,137.89036 0,21.24618 141.76378,0 0,-21.24618 z"
|
||||
id="path3267" />
|
||||
<g
|
||||
id="g3188"
|
||||
transform="translate(-1.45134)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 208.41918,63.89036 V 85.13654 H 350.18296 V 63.89036 Z"
|
||||
id="path3267" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="239.62212"
|
||||
y="77.42511"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3269">ShapeUpgrade</text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="236.58987"
|
||||
y="153.24837"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3269">ShapeUpgrade</text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="315.94757"
|
||||
y="153.24837"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
x="319.94757"
|
||||
y="79.248367"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3271"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
clip-path="url(#clipEmfPath3)"
|
||||
d="m 349.77776,135.82174 0,21.24617 141.76378,0 0,-21.24617 -141.76378,0 z"
|
||||
d="m 349.77776,135.82174 v 21.24617 h 141.76378 v -21.24617 z"
|
||||
id="path3273"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 378.29739,137.70284 0,21.24617 141.76378,0 0,-21.24617 z"
|
||||
id="path3275" />
|
||||
<g
|
||||
id="g3192">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 382.29739,63.70284 V 84.94901 H 524.06117 V 63.70284 Z"
|
||||
id="path3275" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="415.51996"
|
||||
y="77.311752"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3277">ShapeCustom</text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="411.35684"
|
||||
y="152.94833"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3277">ShapeCustom</text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="486.9642"
|
||||
y="152.94833"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
x="490.9642"
|
||||
y="78.948334"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3279"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
clip-path="url(#clipEmfPath4)"
|
||||
d="m 174.44821,271.3997 0,21.24618 141.76378,0 0,-21.24618 -141.76378,0 z"
|
||||
d="m 174.44821,271.3997 v 21.24618 H 316.21199 V 271.3997 Z"
|
||||
id="path3281"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 202.96784,273.2808 0,21.24618 141.76378,0 0,-21.24618 z"
|
||||
id="path3283" />
|
||||
<g
|
||||
id="g3180"
|
||||
transform="translate(0,-5.3756104)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 206.96784,199.2808 v 21.24618 H 348.73162 V 199.2808 Z"
|
||||
id="path3283" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="242.36592"
|
||||
y="212.88971"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3285">ShapeExtend</text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="238.39005"
|
||||
y="288.56381"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3285">ShapeExtend</text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="309.64694"
|
||||
y="288.56381"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
x="313.64694"
|
||||
y="214.56381"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3287"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
clip-path="url(#clipEmfPath5)"
|
||||
d="m 175.3858,208.95508 0,21.24617 141.76378,0 0,-21.24617 -141.76378,0 z"
|
||||
d="m 175.3858,208.95508 v 21.24617 h 141.76378 v -21.24617 z"
|
||||
id="path3289"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 203.90543,210.83618 0,21.24617 141.76378,0 0,-21.24617 z"
|
||||
id="path3291" />
|
||||
<g
|
||||
id="g3184"
|
||||
transform="translate(-0.93759,-7.9384003)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 207.90543,136.83618 v 21.24617 h 141.76378 v -21.24617 z"
|
||||
id="path3291" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="238.83438"
|
||||
y="150.37093"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3293">ShapeAnalysis</text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="234.78969"
|
||||
y="226.15668"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3293">ShapeAnalysis</text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="314.89746"
|
||||
y="226.15668"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
x="318.89746"
|
||||
y="152.15668"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3295"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.937591px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
clip-path="url(#clipEmfPath6)"
|
||||
d="m 74.257219,158.83061 0,182.75835"
|
||||
d="M 74.257219,158.83061 V 341.58896"
|
||||
id="path3297"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 103.83926,342.96989 92.18396,0 c 0.35629,0 0.63756,0.28128 0.63756,0.63757 0,0.33754 -0.28127,0.61882 -0.63756,0.61882 l -92.18396,0 c -0.35628,0 -0.63756,-0.28128 -0.63756,-0.61882 0,-0.35629 0.28128,-0.63757 0.63756,-0.63757 z m 90.94634,-3.11286 7.50073,3.75043 -7.50073,3.75043 z"
|
||||
id="path3299" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 103.70507,285.15091 94.06852,0 c 0.3469,0 0.62818,0.28128 0.62818,0.62819 0,0.34692 -0.28128,0.6282 -0.62818,0.6282 l -94.06852,0 c -0.34691,0 -0.62819,-0.28128 -0.62819,-0.6282 0,-0.34691 0.28128,-0.62819 0.62819,-0.62819 z m 92.82152,-3.12223 7.50073,3.75042 -7.50073,3.75043 z"
|
||||
id="path3301" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 104.38951,221.9562 91.26512,0 c 0.34691,0 0.61881,0.28128 0.61881,0.6282 0,0.34691 -0.2719,0.62819 -0.61881,0.62819 l -91.26512,0 c -0.33753,0 -0.61881,-0.28128 -0.61881,-0.62819 0,-0.34692 0.28128,-0.6282 0.61881,-0.6282 z m 90.00875,-3.12223 7.50073,3.75043 -7.50073,3.75042 z"
|
||||
id="path3303" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 276.34372,233.58253 0,33.00376 c 0,0.34691 -0.2719,0.6282 -0.61881,0.6282 -0.3469,0 -0.62818,-0.28129 -0.62818,-0.6282 l 0,-33.00376 c 0,-0.33754 0.28128,-0.61882 0.62818,-0.61882 0.34691,0 0.61881,0.28128 0.61881,0.61882 z m 3.13156,31.75674 -3.75037,7.50086 -3.75036,-7.50086 z"
|
||||
id="path3305" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 453.74242,160.71171 0,59.06924"
|
||||
id="path3307" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 452.98619,220.39977 -100.62228,0 c -0.35629,0 -0.63757,-0.28128 -0.63757,-0.61882 0,-0.35629 0.28128,-0.63757 0.63757,-0.63757 l 100.62228,0 c 0.35628,0 0.63756,0.28128 0.63756,0.63757 0,0.33754 -0.28128,0.61882 -0.63756,0.61882 z m -99.38466,3.13161 -7.50073,-3.75043 7.50073,-3.75043 z"
|
||||
id="path3309" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 275.65928,158.82712 0,47.18976 c 0,0.34692 -0.28127,0.6282 -0.62818,0.6282 -0.33754,0 -0.61881,-0.28128 -0.61881,-0.6282 l 0,-47.18976 c 0,-0.34691 0.28127,-0.62819 0.61881,-0.62819 0.34691,0 0.62818,0.28128 0.62818,0.62819 z m 3.12218,45.94274 -3.75036,7.50086 -3.75037,-7.50086 z"
|
||||
id="path3311" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 202.03025,332.9126 0,21.24618 141.76378,0 0,-21.24618 -141.76378,0 z"
|
||||
id="path3313" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.93759114px;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 202.03025,332.9126 0,21.24618 141.76378,0 0,-21.24618 z"
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 206.03025,258.9126 v 21.24618 H 347.79403 V 258.9126 Z"
|
||||
id="path3315" />
|
||||
<g
|
||||
id="g3176"
|
||||
transform="translate(0.43759)">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 206.03025,258.9126 v 21.24618 H 347.79403 V 258.9126 Z"
|
||||
id="path3313" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="252.97264"
|
||||
y="272.37869"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3317">Message</text>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="249.19109"
|
||||
y="348.2706"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
id="text3317">Message</text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
x="296.7457"
|
||||
y="348.2706"
|
||||
style="font-size:11.25109386px;font-style:normal;font-weight:bold;text-align:start;text-anchor:start;fill:#000000;font-family:Arial"
|
||||
x="300.7457"
|
||||
y="274.2706"
|
||||
style="font-style:normal;font-weight:bold;font-size:11.2511px;line-height:0%;font-family:Arial;text-align:start;text-anchor:start;fill:#000000"
|
||||
id="text3319"> </text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.150015px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
|
||||
clip-path="url(#clipEmfPath7)"
|
||||
d="m 174.31695,148.19815 -25.62437,0 c -0.34691,0 -0.62818,-0.28128 -0.62818,-0.62819 0,-0.34692 0.28127,-0.6282 0.62818,-0.6282 l 25.62437,0 c 0.34691,0 0.62818,0.28128 0.62818,0.6282 0,0.34691 -0.28127,0.62819 -0.62818,0.62819 z m -24.37737,3.12223 -7.50073,-3.75042 7.50073,-3.75043 z"
|
||||
d="m 174.31695,148.19815 h -25.62437 c -0.34691,0 -0.62818,-0.28128 -0.62818,-0.62819 0,-0.34692 0.28127,-0.6282 0.62818,-0.6282 h 25.62437 c 0.34691,0 0.62818,0.28128 0.62818,0.6282 0,0.34691 -0.28127,0.62819 -0.62818,0.62819 z m -24.37737,3.12223 -7.50073,-3.75042 7.50073,-3.75043 z"
|
||||
id="path3321"
|
||||
transform="translate(28.519633,1.8811043)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.15001458px;stroke-linecap:butt;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 277.91888,297.09602 0,33.00376 c 0,0.35629 -0.28128,0.61882 -0.63756,0.61882 -0.33754,0 -0.61881,-0.26253 -0.61881,-0.61882 l 0,-33.00376 c 0,-0.33754 0.28127,-0.61882 0.61881,-0.61882 0.35628,0 0.63756,0.28128 0.63756,0.61882 z m 3.1128,31.74737 -3.75036,7.50086 -3.75037,-7.50086 z"
|
||||
id="path3323" />
|
||||
<g
|
||||
id="g3389"
|
||||
transform="translate(103.61121,159.85132)">
|
||||
<text
|
||||
id="text3391"
|
||||
style="font-size:21.59645653px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Calibri"
|
||||
y="197.34073"
|
||||
x="-0.70423234"
|
||||
xml:space="preserve"> </text>
|
||||
id="path2302">
|
||||
<path
|
||||
id="path3393"
|
||||
d="m 0.74824682,0.41458137 0,183.67838863"
|
||||
style="fill:none;stroke:#000000;stroke-width:1.46715069px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
id="path1187"
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;-inkscape-stroke:none"
|
||||
d="M 74.851562 35.234375 L 74.851562 219.70703 L 74.894531 219.70703 L 74.894531 219.70898 L 176.75 219.70898 L 176.75 218.70898 L 75.851562 218.70898 L 75.851562 154.70117 L 176.75 154.70117 L 176.75 153.70117 L 75.851562 153.70117 L 75.851562 89.695312 L 176.75 89.695312 L 176.75 88.695312 L 75.851562 88.695312 L 75.851562 35.234375 L 74.851562 35.234375 z "
|
||||
transform="translate(28.041461,50.336628)" />
|
||||
<g
|
||||
id="g1177">
|
||||
<g
|
||||
id="path1179">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 199.56031,267.12506 6.55552,2.41063 -6.55552,2.41063 c 1.0473,-1.42323 1.04126,-3.37047 0,-4.82126 z"
|
||||
id="path1183" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 199.625,266.94922 a 0.18751875,0.18751875 0 0 0 -0.2168,0.28515 c 0.99512,1.38651 1.00066,3.24437 0.002,4.60157 a 0.18751875,0.18751875 0 0 0 0.21484,0.28711 l 6.55469,-2.41211 a 0.18751875,0.18751875 0 0 0 0,-0.35157 z m 0.22266,0.48047 5.72461,2.10547 -5.72461,2.10546 c 0.76265,-1.31366 0.76042,-2.88007 0,-4.21093 z"
|
||||
id="path1185" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path2304">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;-inkscape-stroke:none"
|
||||
d="m 278.79102,84.96875 v 43.67969 h 1 V 84.96875 Z"
|
||||
id="path1113" />
|
||||
<g
|
||||
id="g1103">
|
||||
<g
|
||||
id="path1105">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 281.7117,123.41665 -2.41063,6.55552 -2.41063,-6.55552 c 1.42323,1.0473 3.37047,1.04126 4.82126,0 z"
|
||||
id="path1109" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 281.75391,123.23438 a 0.18751875,0.18751875 0 0 0 -0.15235,0.0293 c -1.3865,0.99512 -3.24241,1.00066 -4.59961,0.002 a 0.18751875,0.18751875 0 0 0 -0.28711,0.21484 l 2.41016,6.55664 a 0.18751875,0.18751875 0 0 0 0.35156,0 l 2.41016,-6.55664 a 0.18751875,0.18751875 0 0 0 -0.13281,-0.24609 z m -0.34766,0.46875 -2.10547,5.72656 -2.10547,-5.72461 c 1.3136,0.76271 2.88007,0.75835 4.21094,-0.002 z"
|
||||
id="path1111" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path2820">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;-inkscape-stroke:none"
|
||||
d="m 278.79102,149.77148 v 42.79688 h 1 v -42.79688 z"
|
||||
id="path1127" />
|
||||
<g
|
||||
id="g1117">
|
||||
<g
|
||||
id="path1119">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 281.7117,187.3376 -2.41063,6.55552 -2.41063,-6.55552 c 1.42323,1.0473 3.37047,1.04126 4.82126,0 z"
|
||||
id="path1123" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 281.75391,187.1543 a 0.18751875,0.18751875 0 0 0 -0.15235,0.0312 c -1.3865,0.99512 -3.24241,1.00066 -4.59961,0.002 a 0.18751875,0.18751875 0 0 0 -0.28711,0.21484 l 2.41016,6.55469 a 0.18751875,0.18751875 0 0 0 0.35156,0 l 2.41016,-6.55469 a 0.18751875,0.18751875 0 0 0 -0.13281,-0.24804 z m -4.5586,0.4707 c 1.31362,0.76277 2.88004,0.76032 4.21094,0 l -2.10547,5.72461 z"
|
||||
id="path1125" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path3035">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;-inkscape-stroke:none"
|
||||
d="m 278.79102,215.0293 v 42.79882 h 1 V 215.0293 Z"
|
||||
id="path1141" />
|
||||
<g
|
||||
id="g1131">
|
||||
<g
|
||||
id="path1133">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 281.7117,252.59679 -2.41063,6.55552 -2.41063,-6.55552 c 1.42323,1.0473 3.37047,1.04126 4.82126,0 z"
|
||||
id="path1137" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 281.75391,252.41406 a 0.18751875,0.18751875 0 0 0 -0.15235,0.0312 c -1.3865,0.99512 -3.24241,0.99871 -4.59961,0 a 0.18751875,0.18751875 0 0 0 -0.28711,0.2168 l 2.41016,6.55469 a 0.18751875,0.18751875 0 0 0 0.35156,0 l 2.41016,-6.55469 a 0.18751875,0.18751875 0 0 0 -0.13281,-0.24805 z m -4.5586,0.47071 c 1.31358,0.76269 2.88008,0.76025 4.21094,0 l -2.10547,5.7246 z"
|
||||
id="path1139" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path4154">
|
||||
<g
|
||||
id="g1163">
|
||||
<g
|
||||
id="path1165">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 199.56031,202.11765 6.55552,2.41063 -6.55552,2.41063 c 1.0473,-1.42323 1.04126,-3.37047 0,-4.82126 z"
|
||||
id="path1169" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 199.625,201.94141 a 0.18751875,0.18751875 0 0 0 -0.2168,0.28515 c 0.99512,1.3865 1.00066,3.24437 0.002,4.60156 a 0.18751875,0.18751875 0 0 0 0.21484,0.28711 l 6.55469,-2.41015 a 0.18751875,0.18751875 0 0 0 0,-0.35352 z m 0.22266,0.48046 5.72265,2.10547 -5.72265,2.10743 c 0.76282,-1.31371 0.76047,-2.88194 0,-4.2129 z"
|
||||
id="path1171" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path4236">
|
||||
<g
|
||||
id="g1145">
|
||||
<g
|
||||
id="path1147">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 199.56031,137.11023 6.55552,2.41063 -6.55552,2.41063 c 1.0473,-1.42323 1.04126,-3.37047 0,-4.82126 z"
|
||||
id="path1151" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 199.625,136.93359 a 0.18751875,0.18751875 0 0 0 -0.2168,0.28516 c 0.99512,1.3865 1.00066,3.24437 0.002,4.60156 a 0.18751875,0.18751875 0 0 0 0.21484,0.28711 l 6.55469,-2.41015 a 0.18751875,0.18751875 0 0 0 0,-0.35157 z m 0.22266,0.48243 5.72461,2.10546 -5.72461,2.10547 c 0.7625,-1.31316 0.75952,-2.88028 0,-4.21093 z"
|
||||
id="path1153" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="path4396">
|
||||
<path
|
||||
id="path958"
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;-inkscape-stroke:none"
|
||||
d="M 424.63867 35.234375 L 424.63867 88.695312 L 321.84375 88.695312 L 321.84375 89.695312 L 425.64453 89.695312 L 425.64453 88.695312 L 425.63867 88.695312 L 425.63867 35.234375 L 424.63867 35.234375 z "
|
||||
transform="translate(28.041461,50.336628)" />
|
||||
<g
|
||||
id="g948">
|
||||
<g
|
||||
id="path950">
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-width:0.375;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 355.11503,141.95071 -6.55552,-2.41063 6.55552,-2.41063 c -1.0473,1.42323 -1.04126,3.37047 0,4.82126 z"
|
||||
id="path954" />
|
||||
<path
|
||||
style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linejoin:round;-inkscape-stroke:none"
|
||||
d="m 355.05078,136.95312 -6.55664,2.41016 a 0.18751875,0.18751875 0 0 0 0,0.35352 l 6.55664,2.41015 a 0.18751875,0.18751875 0 0 0 0.2168,-0.28515 c -0.99512,-1.3865 -1.00066,-3.24437 -0.002,-4.60157 a 0.18751875,0.18751875 0 0 0 -0.21484,-0.28711 z m -0.22266,0.48047 c -0.76281,1.31371 -0.76047,2.88194 0,4.21289 l -5.72265,-2.10742 z"
|
||||
id="path956" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 19 KiB |
@@ -182,7 +182,9 @@ By default this value is 0.0001.
|
||||
The value given to this parameter is a basic value for ShapeHealing algorithms and the processor. It does its best to reach it. Under certain circumstances, the value you give may not be attached to all of the entities concerned at the end of processing. STEP-to-OpenCASCADE translation does not improve the quality of the geometry in the original STEP file. This means that the value you enter may be impossible to attach to all shapes with the given quality of the geometry in the STEP file.
|
||||
|
||||
<h4>read.maxprecision.val</h4>
|
||||
Defines the maximum allowed tolerance (in mm) of the shape. It should be not less than the basic value of tolerance set in the processor (either the uncertainty from the file or *read.precision.val*). Actually, the maximum between *read.maxprecision.val* and the basis tolerance is used to define the maximum allowed tolerance.
|
||||
Defines the maximum allowed tolerance (in internal units, which are specified in xstep.cascade.unit) of the shape.
|
||||
It should be not less than the basic value of tolerance set in the processor (either the uncertainty from the file or *read.precision.val*).
|
||||
Actually, the maximum between *read.maxprecision.val* and the basis tolerance is used to define the maximum allowed tolerance.
|
||||
|
||||
Read this parameter with:
|
||||
~~~~{.cpp}
|
||||
|