1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

Compare commits

..

1 Commits

Author SHA1 Message Date
dkulikov
9e6ec7d52f Step thread safety improvement #307
Mutex is added to XSControl_WorkSession to prevent data races
during reading and writing.
Tests are added to check the behavior of STEP readers/writers in
multithreading environment.
2025-01-30 16:13:44 +00:00
43 changed files with 108 additions and 499 deletions

View File

@@ -596,15 +596,8 @@ jobs:
if: steps.check_failures.outputs.failed_count > 0
run: |
cd install/results/windows-x64-retest
$failedCount = 0
if (Test-Path tests.log) {
$content = Get-Content tests.log
$totalLine = $content | Select-String "Total cases:"
if ($totalLine) {
if ($totalLine -match "FAILED") {
$failedCount = ($totalLine | ForEach-Object { $_.Line -replace '.*?(\d+) FAILED.*','$1' }) -as [int]
}
}
$failedCount = (Select-String -Path tests.log -Pattern "Total cases:.*FAILED" | ForEach-Object { $_.Matches } | ForEach-Object { $_.Groups[1].Value }) -as [int]
if ($failedCount -gt 0) {
Write-Error "Number of FAILED tests ($failedCount) exceeds threshold of 0"
echo "FAILED_COUNT=$failedCount" >> $env:GITHUB_ENV
@@ -837,15 +830,8 @@ jobs:
if: steps.check_failures.outputs.failed_count > 0
run: |
cd install/results/windows-clang-x64-retest
$failedCount = 0
if (Test-Path tests.log) {
$content = Get-Content tests.log
$totalLine = $content | Select-String "Total cases:"
if ($totalLine) {
if ($totalLine -match "FAILED") {
$failedCount = ($totalLine | ForEach-Object { $_.Line -replace '.*?(\d+) FAILED.*','$1' }) -as [int]
}
}
$failedCount = (Select-String -Path tests.log -Pattern "Total cases:.*FAILED" | ForEach-Object { $_.Matches } | ForEach-Object { $_.Groups[1].Value }) -as [int]
if ($failedCount -gt 0) {
Write-Error "Number of FAILED tests ($failedCount) exceeds threshold of 0"
echo "FAILED_COUNT=$failedCount" >> $env:GITHUB_ENV

View File

@@ -93,10 +93,6 @@ if ("${BUILD_LIBRARY_TYPE}" STREQUAL "Shared")
set (BUILD_SHARED_LIBRARY_NAME_POSTFIX "" CACHE STRING "${BUILD_SHARED_LIBRARY_NAME_POSTFIX_DESCR}" FORCE)
endif()
else()
message(AUTHOR_WARNING "OCCT is licensed under LGPL 2.1, which has limitations on"
"static linking with proprietary software."
"OCCT3D offers commercial licensing exceptions to LGPL 2.1."
"Please use our contact form at https://occt3d.com/")
unset (BUILD_SHARED_LIBS)
unset (BUILD_SHARED_LIBRARY_NAME_POSTFIX)
endif()
@@ -979,9 +975,6 @@ message (STATUS "\nInfo: \(${CURRENT_TIME}\) Start collecting all OCCT header fi
# collect all the headers to <binary dir>/inc folder
COLLECT_AND_INSTALL_OCCT_HEADER_FILES ("${CMAKE_BINARY_DIR}" "${BUILD_TOOLKITS}" "src" "${INSTALL_DIR_INCLUDE}")
# Create and install Standard_Version.hxx
CONFIGURE_AND_INSTALL_VERSION_HEADER()
string(TIMESTAMP CURRENT_TIME "%H:%M:%S")
message (STATUS "Info: \(${CURRENT_TIME}\) End the collecting")

View File

@@ -48,7 +48,7 @@ Consult the file [dox/build/build_occt/building_occt.md](dox/build/build_occt/bu
## Version
The current version of OCCT can be found in the file [`adm/cmake/version.cmake`](adm/cmake/version.cmake).
The current version of OCCT can be found in the file [`src/Standard/Standard_Version.hxx`](src/Standard/Standard_Version.hxx).
## Development

View File

@@ -75,10 +75,6 @@ endmacro()
# COMPILER variable
macro (OCCT_MAKE_COMPILER_SHORT_NAME)
if (MSVC)
if (MSVC_VERSION LESS 1914)
message (AUTHOR_WARNING "Microsoft Visual C++ 19.14 (VS 2017 15.7) or newer is required for C++17 support")
endif()
if ((MSVC_VERSION EQUAL 1300) OR (MSVC_VERSION EQUAL 1310))
set (COMPILER vc7)
elseif (MSVC_VERSION EQUAL 1400)
@@ -96,39 +92,20 @@ macro (OCCT_MAKE_COMPILER_SHORT_NAME)
elseif ((MSVC_VERSION GREATER 1900) AND (MSVC_VERSION LESS 2000))
# Since Visual Studio 15 (2017), its version diverged from version of
# compiler which is 14.1; as that compiler uses the same run-time as 14.0,
# we keep its id as "vc14" to be compatible
# we keep its id as "vc14" to be compatibille
set (COMPILER vc14)
else()
message (FATAL_ERROR "Unrecognized MSVC_VERSION")
endif()
elseif (DEFINED CMAKE_COMPILER_IS_GNUCC)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
message (AUTHOR_WARNING "GCC version 8.0 or newer is required for C++17 support")
endif()
set (COMPILER gcc)
elseif (DEFINED CMAKE_COMPILER_IS_GNUCXX)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
message (AUTHOR_WARNING "GCC version 8.0 or newer is required for C++17 support")
endif()
set (COMPILER gxx)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Cc][Ll][Aa][Nn][Gg]")
if(APPLE)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0.0)
message (AUTHOR_WARNING "Apple Clang version 11.0.0 or newer is required for C++17 support")
endif()
else()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)
message (AUTHOR_WARNING "Clang version 7.0 or newer is required for C++17 support")
endif()
endif()
set (COMPILER clang)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "[Ii][Nn][Tt][Ee][Ll]")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17.1.1)
message (AUTHOR_WARNING "Intel C++ Compiler version 17.1.1 or newer is required for C++17 support")
endif()
set (COMPILER icc)
else()
message (AUTHOR_WARNING "Unknown compiler - please verify C++17 support")
set (COMPILER ${CMAKE_GENERATOR})
string (REGEX REPLACE " " "" COMPILER ${COMPILER})
endif()
@@ -481,18 +458,6 @@ function (COLLECT_AND_INSTALL_OCCT_HEADER_FILES THE_ROOT_TARGET_OCCT_DIR THE_OCC
install (FILES ${OCCT_HEADER_FILES_INSTALLATION} DESTINATION "${INSTALL_DIR}/${THE_OCCT_INSTALL_DIR_PREFIX}")
endfunction()
# Macro to configure and install Standard_Version.hxx file
macro (CONFIGURE_AND_INSTALL_VERSION_HEADER)
if (DEFINED BUILD_OCCT_VERSION_EXT AND "${BUILD_OCCT_VERSION_EXT}" STREQUAL "${OCC_VERSION_STRING_EXT}" AND EXISTS "${CMAKE_BINARY_DIR}/${INSTALL_DIR_INCLUDE}/Standard_Version.hxx")
install(FILES "${OCCT_BINARY_DIR}/${INSTALL_DIR_INCLUDE}/Standard_Version.hxx" DESTINATION "${INSTALL_DIR}/${INSTALL_DIR_INCLUDE}")
else()
set(BUILD_OCCT_VERSION_EXT "${OCC_VERSION_STRING_EXT}" CACHE STRING "OCCT Version string. Used only for caching, can't impact on build. For modification of version, please check adm/cmake/version.cmake" FORCE)
mark_as_advanced(BUILD_OCCT_VERSION_EXT)
string(TIMESTAMP OCCT_VERSION_DATE "%Y-%m-%d" UTC)
OCCT_CONFIGURE_AND_INSTALL ("adm/templates/Standard_Version.hxx.in" "${INSTALL_DIR_INCLUDE}/Standard_Version.hxx" "Standard_Version.hxx" "${INSTALL_DIR}/${INSTALL_DIR_INCLUDE}")
endif()
endmacro()
function(ADD_PRECOMPILED_HEADER INPUT_TARGET PRECOMPILED_HEADER THE_IS_PRIVATE)
if (NOT BUILD_USE_PCH)
return()
@@ -585,69 +550,42 @@ function (OCCT_MODULES_AND_TOOLKITS FILE_NAME TOOLKITS_NAME_SUFFIX MODULE_LIST)
set (${MODULE_LIST} ${${MODULE_LIST}} PARENT_SCOPE)
endfunction()
# Macro to extract git hash from the source directory
# and store it in the variable GIT_HASH
# in case if git is not found or error occurs, GIT_HASH is set to empty string
macro(OCCT_GET_GIT_HASH)
set(GIT_HASH "")
find_package(Git QUIET)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_HASH
ERROR_VARIABLE GIT_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_ERROR)
# Check if working directory is clean
execute_process(
COMMAND ${GIT_EXECUTABLE} status --porcelain
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_STATUS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT "${GIT_STATUS}" STREQUAL "")
message(DEBUG "Git working directory is not clean. Git hash may be incorrect.")
endif()
else()
set(GIT_HASH "")
endif()
endif()
endmacro()
# Returns OCC version string
# Returns OCC version string from file Standard_Version.hxx (if available)
function (OCC_VERSION OCC_VERSION_MAJOR OCC_VERSION_MINOR OCC_VERSION_MAINTENANCE OCC_VERSION_DEVELOPMENT OCC_VERSION_STRING_EXT)
include (version)
set (OCC_VERSION_COMPLETE "${OCC_VERSION_MAJOR}.${OCC_VERSION_MINOR}.${OCC_VERSION_MAINTENANCE}")
set (OCC_VERSION_STRING_EXT "${OCC_VERSION_COMPLETE}")
set (OCC_VERSION_MAJOR 7)
set (OCC_VERSION_MINOR 0)
set (OCC_VERSION_MAINTENANCE 0)
set (OCC_VERSION_DEVELOPMENT dev)
set (OCC_VERSION_COMPLETE "7.0.0")
set (STANDARD_VERSION_FILE "${CMAKE_SOURCE_DIR}/src/Standard/Standard_Version.hxx")
if (BUILD_PATCH AND EXISTS "${BUILD_PATCH}/src/Standard/Standard_Version.hxx")
set (STANDARD_VERSION_FILE "${BUILD_PATCH}/src/Standard/Standard_Version.hxx")
endif()
if (EXISTS "${STANDARD_VERSION_FILE}")
foreach (SOUGHT_VERSION OCC_VERSION_MAJOR OCC_VERSION_MINOR OCC_VERSION_MAINTENANCE)
file (STRINGS "${STANDARD_VERSION_FILE}" ${SOUGHT_VERSION} REGEX "^#define ${SOUGHT_VERSION} .*")
string (REGEX REPLACE ".*${SOUGHT_VERSION} .*([^ ]+).*" "\\1" ${SOUGHT_VERSION} "${${SOUGHT_VERSION}}" )
endforeach()
foreach (SOUGHT_VERSION OCC_VERSION_DEVELOPMENT OCC_VERSION_COMPLETE)
file (STRINGS "${STANDARD_VERSION_FILE}" ${SOUGHT_VERSION} REGEX "^#define ${SOUGHT_VERSION} .*")
string (REGEX REPLACE ".*${SOUGHT_VERSION} .*\"([^ ]+)\".*" "\\1" ${SOUGHT_VERSION} "${${SOUGHT_VERSION}}" )
endforeach()
endif()
set (OCC_VERSION_MAJOR "${OCC_VERSION_MAJOR}" PARENT_SCOPE)
set (OCC_VERSION_MINOR "${OCC_VERSION_MINOR}" PARENT_SCOPE)
set (OCC_VERSION_MAINTENANCE "${OCC_VERSION_MAINTENANCE}" PARENT_SCOPE)
set (OCCT_ON_DEVELOPMENT OFF)
if (NOT "${OCC_VERSION_DEVELOPMENT}" STREQUAL "" AND NOT "${OCC_VERSION_DEVELOPMENT}" STREQUAL "OCC_VERSION_DEVELOPMENT")
set (OCCT_ON_DEVELOPMENT ON)
endif()
if (${OCCT_ON_DEVELOPMENT})
set (OCC_VERSION_DEVELOPMENT "${OCC_VERSION_DEVELOPMENT}" PARENT_SCOPE)
endif()
set (SET_OCC_VERSION_DEVELOPMENT "")
if (${OCCT_ON_DEVELOPMENT})
OCCT_GET_GIT_HASH()
if (NOT "${GIT_HASH}" STREQUAL "")
set (OCC_VERSION_DEVELOPMENT "${OCC_VERSION_DEVELOPMENT}-${GIT_HASH}")
set (OCC_VERSION_DEVELOPMENT "${OCC_VERSION_DEVELOPMENT}" PARENT_SCOPE)
if (OCC_VERSION_DEVELOPMENT AND OCC_VERSION_COMPLETE)
set (OCC_VERSION_STRING_EXT "${OCC_VERSION_COMPLETE}.${OCC_VERSION_DEVELOPMENT}" PARENT_SCOPE)
else()
set (OCC_VERSION_STRING_EXT "${OCC_VERSION_COMPLETE}" PARENT_SCOPE)
endif()
set (OCC_VERSION_STRING_EXT "${OCC_VERSION_COMPLETE}.${OCC_VERSION_DEVELOPMENT}")
set (OCC_VERSION_STRING_EXT "${OCC_VERSION_STRING_EXT}" PARENT_SCOPE)
set (SET_OCC_VERSION_DEVELOPMENT "#define OCC_VERSION_DEVELOPMENT \"${OCC_VERSION_DEVELOPMENT}\"")
endif()
set (OCC_VERSION_STRING_EXT "${OCC_VERSION_STRING_EXT}" PARENT_SCOPE)
endfunction()
macro (CHECK_PATH_FOR_CONSISTENCY THE_ROOT_PATH_NAME THE_BEING_CHECKED_PATH_NAME THE_VAR_TYPE THE_MESSAGE_OF_BEING_CHECKED_PATH)

View File

@@ -1,22 +0,0 @@
#======================================================================
#
# Purpose: Defines macros identifying current version of Open CASCADE
#
# OCC_VERSION_MAJOR : (integer) number identifying major version
# OCC_VERSION_MINOR : (integer) number identifying minor version
# OCC_VERSION_MAINTENANCE : (integer) number identifying maintenance version
# OCC_VERSION_DEVELOPMENT : (string) if defined, indicates development or modified version
# in case of release, remove the value
#
# Sample values of OCC_VERSION_DEVELOPMENT:
# - "dev" for development version between releases
# - "beta..." or "rc..." for beta releases or release candidates
# - "project..." for version containing project-specific fixes
#
# For development version git commit hash can be added to the version string
#======================================================================
set (OCC_VERSION_MAJOR 7 )
set (OCC_VERSION_MINOR 8 )
set (OCC_VERSION_MAINTENANCE 2 )
set (OCC_VERSION_DEVELOPMENT "dev" )

View File

@@ -142,20 +142,17 @@ proc OCCDoc_GetRelPath {thePathFrom thePathTo} {
return $thePathTo
}
# Returns OCCT version string from version.cmake (if available)
# Returns OCCT version string from file Standard_Version.hxx (if available)
proc OCCDoc_DetectCasVersion {} {
set occt_ver "7.8.0"
set occt_ver 6.7.0
set occt_ver_add ""
set filename "[OCCDoc_GetSourceDir]/../adm/cmake/version.cmake"
set filename "[OCCDoc_GetSourceDir]/Standard/Standard_Version.hxx"
if { [file exists $filename] } {
set fh [open $filename "r"]
set fh_loaded [read $fh]
close $fh
regexp {set\s+OCC_VERSION_MAJOR\s+([0-9]+)} $fh_loaded dummy major
regexp {set\s+OCC_VERSION_MINOR\s+([0-9]+)} $fh_loaded dummy minor
regexp {set\s+OCC_VERSION_MAINTENANCE\s+([0-9]+)} $fh_loaded dummy maint
regexp {set\s+OCC_VERSION_DEVELOPMENT\s+\"([^\"]+)\"} $fh_loaded dummy occt_ver_add
set occt_ver "$major.$minor.$maint"
regexp {[^/]\s*#\s*define\s+OCC_VERSION_COMPLETE\s+\"([^\s]*)\"} $fh_loaded dummy occt_ver
regexp {[^/]\s*#\s*define\s+OCC_VERSION_DEVELOPMENT\s+\"([^\s]*)\"} $fh_loaded dummy occt_ver_add
if { "$occt_ver_add" != "" } { set occt_ver ${occt_ver}.$occt_ver_add }
}
return $occt_ver

View File

@@ -67,9 +67,8 @@ if ["%toCMake%"] == ["1"] (
set "anOcctVerSuffix="
set "anOcctVersion=0.0.0"
set "aGitBranch="
rem Get OCCT version
call "%~dp0build_common.bat"
set "aGitBranch="
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_DEVELOPMENT" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVerSuffix=%%i" )
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_COMPLETE" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVersion=%%i" )
for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
for %%s in (%anNdkAbiList%) do (

View File

@@ -1,8 +0,0 @@
@echo OFF
rem Extract version info from version.cmake
for /f tokens^=2^ delims^=^" %%i in ('findstr OCC_VERSION_DEVELOPMENT "%~dp0\..\cmake\version.cmake"') do ( set "anOcctVerSuffix=%%i" )
for /f tokens^=3 %%i in ('findstr OCC_VERSION_MAJOR "%~dp0\..\cmake\version.cmake"') do ( set "OCC_VERSION_MAJOR=%%i" )
for /f tokens^=3 %%i in ('findstr OCC_VERSION_MINOR "%~dp0\..\cmake\version.cmake"') do ( set "OCC_VERSION_MINOR=%%i" )
for /f tokens^=3 %%i in ('findstr OCC_VERSION_MAINTENANCE "%~dp0\..\cmake\version.cmake"') do ( set "OCC_VERSION_MAINTENANCE=%%i" )
set "anOcctVersion=%OCC_VERSION_MAJOR%.%OCC_VERSION_MINOR%.%OCC_VERSION_MAINTENANCE%"

View File

@@ -1,30 +0,0 @@
#!/bin/bash
# Ensure script dir is defined
if [ -z "$aScriptDir" ]; then
aScriptDir=$(dirname "$0")
fi
# Check if version file exists
versionFile="$aScriptDir/../cmake/version.cmake"
if [ ! -f "$versionFile" ]; then
echo "Error: version.cmake not found"
exit 1
fi
# Extract version info from version.cmake
OCC_VERSION_MAJOR=$(awk '/set.*OCC_VERSION_MAJOR/ {print $3}' "$versionFile")
OCC_VERSION_MINOR=$(awk '/set.*OCC_VERSION_MINOR/ {print $3}' "$versionFile")
OCC_VERSION_MAINTENANCE=$(awk '/set.*OCC_VERSION_MAINTENANCE/ {print $3}' "$versionFile")
anOcctVerSuffix=$(awk '/set.*OCC_VERSION_DEVELOPMENT/ {
if (NF > 2) {
gsub(/[)" ]/, "", $3)
print $3
} else {
print ""
}
}' "$versionFile")
# Combine version string
anOcctVersion="${OCC_VERSION_MAJOR}.${OCC_VERSION_MINOR}.${OCC_VERSION_MAINTENANCE}"

View File

@@ -49,7 +49,8 @@ if [[ -f "${aScriptDir}/ios_custom.sh" ]]; then
source "${aScriptDir}/ios_custom.sh"
fi
source "${aScriptDir}/build_common.sh"
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")

View File

@@ -51,7 +51,8 @@ if [[ -f "${aScriptDir}/macos_custom.sh" ]]; then
source "${aScriptDir}/macos_custom.sh"
fi
source "${aScriptDir}/build_common.sh"
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")

View File

@@ -53,8 +53,9 @@ if not ["%aCmakeBin%"] == [""] ( set "PATH=%aCmakeBin%;%PATH%" )
set "anOcctVerSuffix="
set "anOcctVersion=0.0.0"
call "%~dp0build_common.bat"
set "aGitBranch="
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_DEVELOPMENT" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVerSuffix=%%i" )
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_COMPLETE" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVersion=%%i" )
for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
set "aBuildType=Release"

View File

@@ -55,8 +55,8 @@ if not ["%aCmakeBin%"] == [""] ( set "PATH=%aCmakeBin%;%PATH%" )
set "anOcctVerSuffix="
set "anOcctVersion=0.0.0"
set "aGitBranch="
call "%~dp0build_common.bat"
set "aGitBranch="
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_DEVELOPMENT" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVerSuffix=%%i" )
for /f tokens^=2^ delims^=^" %%i in ('findstr /b /c:"#define OCC_VERSION_COMPLETE" "%aCasSrc%\src\Standard\Standard_Version.hxx"') do ( set "anOcctVersion=%%i" )
for /f %%i in ('git symbolic-ref --short HEAD') do ( set "aGitBranch=%%i" )
set "aBuildType=Release"

View File

@@ -20,7 +20,7 @@ BEGIN
VALUE "LegalCopyright", "\251 OPEN CASCADE SAS\000"
VALUE "ProductName", "Open CASCADE Technology\000"
VALUE "ProductVersion", OCC_VERSION_STRING_EXT "\000"
VALUE "OfficialSite", "www.occt3d.com\000"
VALUE "OfficialSite", "www.opencascade.com\000"
END
END
BLOCK "VarFileInfo"

View File

@@ -956,19 +956,9 @@ void AIS_InteractiveContext::RecomputeSelectionOnly(const Handle(AIS_Interactive
mgrSelector->Deactivate(theIO, aModesIter.Value());
}
const Handle(AIS_GlobalStatus)* aStatus = myObjects.Seek(theIO);
if (aStatus != NULL)
{
if (!myLastPicked.IsNull() && myLastPicked->IsSameSelectable(theIO))
{
clearDynamicHighlight();
myLastPicked.Nullify();
}
unselectOwners(theIO);
}
mgrSelector->RecomputeSelection(theIO);
const Handle(AIS_GlobalStatus)* aStatus = myObjects.Seek(theIO);
if (aStatus == NULL || theIO->DisplayStatus() != PrsMgr_DisplayStatus_Displayed)
{
return;

View File

@@ -163,7 +163,6 @@ public: //! @name object display management
Standard_EXPORT void RemoveAll(const Standard_Boolean theToUpdateViewer);
//! Recomputes the seen parts presentation of the Object.
//! The object will be also unhighlighted and removed from selection.
//! If theAllModes equals true, all presentations are present in the object even if unseen.
Standard_EXPORT void Redisplay(const Handle(AIS_InteractiveObject)& theIObj,
const Standard_Boolean theToUpdateViewer,
@@ -176,14 +175,13 @@ public: //! @name object display management
const Standard_Boolean theToUpdateViewer);
//! Recomputes the displayed presentations, flags the others.
//! Doesn't update selections.
//! Doesn't update presentations.
Standard_EXPORT void RecomputePrsOnly(const Handle(AIS_InteractiveObject)& theIObj,
const Standard_Boolean theToUpdateViewer,
const Standard_Boolean theAllModes = Standard_False);
//! Recomputes the active selections, flags the others.
//! Doesn't update presentations.
//! The object will be also unhighlighted and removed from selection.
Standard_EXPORT void RecomputeSelectionOnly(const Handle(AIS_InteractiveObject)& anIObj);
//! Updates displayed interactive object by checking and recomputing its flagged as "to be

View File

@@ -331,15 +331,6 @@ void AIS_Manipulator::EnableMode(const AIS_ManipulatorMode theMode)
//=================================================================================================
void AIS_Manipulator::attachToPoint(const gp_Pnt& thePoint)
{
gp_Ax2 aPosition = gp::XOY();
aPosition.SetLocation(thePoint);
SetPosition(aPosition);
}
//=================================================================================================
void AIS_Manipulator::attachToBox(const Bnd_Box& theBox)
{
if (theBox.IsVoid())
@@ -400,17 +391,9 @@ void AIS_Manipulator::Attach(const Handle(AIS_ManipulatorObjectSequence)& theObj
aCurObject->BoundingBox(aBox);
if (theOptions.AdjustPosition)
{
const Handle(Graphic3d_TransformPers)& aTransPers = aCurObject->TransformPersistence();
if (!aTransPers.IsNull() && (aTransPers->IsZoomOrRotate() || aTransPers->IsAxial()))
{
attachToPoint(aTransPers->AnchorPoint());
}
else
{
attachToBox(aBox);
}
}
if (theOptions.AdjustSize)
{
@@ -764,15 +747,6 @@ void AIS_Manipulator::Transform(const gp_Trsf& theTrsf)
for (; anObjIter.More(); anObjIter.Next(), aTrsfIter.Next())
{
const Handle(AIS_InteractiveObject)& anObj = anObjIter.ChangeValue();
const Handle(Graphic3d_TransformPers)& aTransPers = anObj->TransformPersistence();
if (!aTransPers.IsNull() && (aTransPers->IsZoomOrRotate() || aTransPers->IsAxial()))
{
gp_XYZ aNewAnchorPoint = aTransPers->AnchorPoint().XYZ() - myPosition.Location().XYZ();
aNewAnchorPoint += myStartPosition.Location().Transformed(theTrsf).XYZ();
aTransPers->SetAnchorPoint(aNewAnchorPoint);
continue;
}
const gp_Trsf& anOldTrsf = aTrsfIter.Value();
const Handle(TopLoc_Datum3D)& aParentTrsf = anObj->CombinedParentTransformation();
if (!aParentTrsf.IsNull() && aParentTrsf->Form() != gp_Identity)

View File

@@ -416,8 +416,6 @@ protected:
Standard_EXPORT Handle(Graphic3d_Group) getGroup(const Standard_Integer theIndex,
const AIS_ManipulatorMode theMode) const;
Standard_EXPORT void attachToPoint(const gp_Pnt& thePoint);
Standard_EXPORT void attachToBox(const Bnd_Box& theBox);
Standard_EXPORT void adjustSize(const Bnd_Box& theBox);

View File

@@ -206,7 +206,7 @@ TCollection_AsciiString defaultActionsManifestInit()
return aCasRoot + "/XRResources/src/" + THE_ACTIONS_JSON;
}
}
return OSD_Process::ExecutableFolder() + "/occtvr_actions.json";
return OSD_Process::ExecutablePath() + "/occtvr_actions.json";
}
} // namespace
#endif

View File

@@ -427,11 +427,11 @@ struct SurfaceCalculator<T, 2>
{
static T Area(const typename BVH_Box<T, 2>::BVH_VecNt& theSize)
{
const T anArea = std::abs(theSize.x() * theSize.y());
const T anArea = theSize.x() * theSize.y();
if (anArea < std::numeric_limits<T>::epsilon())
{
return std::abs(theSize.x()) + std::abs(theSize.y());
return theSize.x() + theSize.y();
}
return anArea;
@@ -443,13 +443,13 @@ struct SurfaceCalculator<T, 3>
{
static T Area(const typename BVH_Box<T, 3>::BVH_VecNt& theSize)
{
const T anArea = (std::abs(theSize.x() * theSize.y()) + std::abs(theSize.x() * theSize.z())
+ std::abs(theSize.z() * theSize.y()))
const T anArea =
(theSize.x() * theSize.y() + theSize.x() * theSize.z() + theSize.z() * theSize.y())
* static_cast<T>(2.0);
if (anArea < std::numeric_limits<T>::epsilon())
{
return std::abs(theSize.x()) + std::abs(theSize.y()) + std::abs(theSize.z());
return theSize.x() + theSize.y() + theSize.z();
}
return anArea;
@@ -461,13 +461,13 @@ struct SurfaceCalculator<T, 4>
{
static T Area(const typename BVH_Box<T, 4>::BVH_VecNt& theSize)
{
const T anArea = (std::abs(theSize.x() * theSize.y()) + std::abs(theSize.x() * theSize.z())
+ std::abs(theSize.z() * theSize.y()))
const T anArea =
(theSize.x() * theSize.y() + theSize.x() * theSize.z() + theSize.z() * theSize.y())
* static_cast<T>(2.0);
if (anArea < std::numeric_limits<T>::epsilon())
{
return std::abs(theSize.x()) + std::abs(theSize.y()) + std::abs(theSize.z());
return theSize.x() + theSize.y() + theSize.z();
}
return anArea;

View File

@@ -125,18 +125,17 @@ private:
//! Print message to Module.printMessage callback.
EM_JS(void, occJSPrintMessage, (const char* theStr, int theGravity), {
const aStr = Number(theStr); // bigintToI53Checked(theStr);
if (Module.printMessage != undefined && Module.printMessage != null)
{
Module.printMessage(UTF8ToString(aStr), theGravity);
Module.printMessage(UTF8ToString(theStr), theGravity);
}
else if (Module.print != undefined && Module.print != null)
{
Module.print(UTF8ToString(aStr));
Module.print(UTF8ToString(theStr));
}
else
{
// console.info (UTF8ToString(aStr));
// console.info (UTF8ToString(theStr));
}
});

View File

@@ -89,12 +89,6 @@ public:
//! Sets camera used by the view.
virtual void SetCamera(const Handle(Graphic3d_Camera)& theCamera) { myCamera = theCamera; }
//! Returns necessity to flip OY in projection matrix
virtual Standard_Boolean ToFlipOutput() const { return Standard_False; }
//! Sets state of flip OY necessity in projection matrix
virtual void SetToFlipOutput(const Standard_Boolean) {}
public:
//! Returns default Shading Model of the view; Graphic3d_TypeOfShadingModel_Phong by default.
Graphic3d_TypeOfShadingModel ShadingModel() const { return myRenderParams.ShadingModel; }

View File

@@ -63,28 +63,16 @@ static android_LogPriority getAndroidLogPriority(const Message_Gravity theGravit
#include <emscripten/emscripten.h>
//! Print message to console.debug().
EM_JS(void, occJSConsoleDebug, (const char* theStr), {
const aStr = Number(theStr); // bigintToI53Checked(theStr);
console.debug(UTF8ToString(aStr));
});
EM_JS(void, occJSConsoleDebug, (const char* theStr), { console.debug(UTF8ToString(theStr)); });
//! Print message to console.info().
EM_JS(void, occJSConsoleInfo, (const char* theStr), {
const aStr = Number(theStr); // bigintToI53Checked(theStr);
console.info(UTF8ToString(aStr));
});
EM_JS(void, occJSConsoleInfo, (const char* theStr), { console.info(UTF8ToString(theStr)); });
//! Print message to console.warn().
EM_JS(void, occJSConsoleWarn, (const char* theStr), {
const aStr = Number(theStr); // bigintToI53Checked(theStr);
console.warn(UTF8ToString(aStr));
});
EM_JS(void, occJSConsoleWarn, (const char* theStr), { console.warn(UTF8ToString(theStr)); });
//! Print message to console.error().
EM_JS(void, occJSConsoleError, (const char* theStr), {
const aStr = Number(theStr); // bigintToI53Checked(theStr);
console.error(UTF8ToString(aStr));
});
EM_JS(void, occJSConsoleError, (const char* theStr), { console.error(UTF8ToString(theStr)); });
#else
#include <syslog.h>

View File

@@ -37,7 +37,7 @@
#include <emscripten.h>
//! Return WebAssembly heap size in bytes.
EM_JS(double, OSD_MemInfo_getModuleHeapLength, (), { return Module.HEAP8.length; });
EM_JS(size_t, OSD_MemInfo_getModuleHeapLength, (), { return Module.HEAP8.length; });
#endif
// =======================================================================
@@ -168,7 +168,7 @@ void OSD_MemInfo::Update()
}
if (IsActive(MemVirtual))
{
myCounters[MemVirtual] = (size_t)OSD_MemInfo_getModuleHeapLength();
myCounters[MemVirtual] = OSD_MemInfo_getModuleHeapLength();
}
#elif (defined(__linux__) || defined(__linux))
if (IsActive(MemHeapUsage))

View File

@@ -3137,7 +3137,7 @@ bool OpenGl_Context::GetBufferSubData(unsigned int theTarget,
}
#ifdef __EMSCRIPTEN__
EM_ASM_(
{ Module.ctx.getBufferSubData($0, Number($1), HEAPU8.subarray(Number($2), Number($2 + $3))); },
{ Module.ctx.getBufferSubData($0, $1, HEAPU8.subarray($2, $2 + $3)); },
theTarget,
theOffset,
theData,

View File

@@ -666,7 +666,7 @@ void OpenGl_GraduatedTrihedron::Render(const Handle(OpenGl_Workspace)& theWorksp
if (anAxesState & OOZ_XOZ)
{
renderLine(myAxes[0].Line, theWorkspace, aModelMatrix, myMin.x(), myMin.y(), myMax.z());
renderLine(myAxes[0].Line, theWorkspace, aModelMatrix, myMin.z(), myMin.y(), myMax.z());
}
if (anAxesState & OOZ_OYZ)

View File

@@ -340,15 +340,6 @@ public: //! @name obsolete Graduated Trihedron functionality
const Graphic3d_Vec3 theMax)
Standard_OVERRIDE;
//! Returns necessity to flip OY in projection matrix
virtual Standard_Boolean ToFlipOutput() const Standard_OVERRIDE { return myToFlipOutput; }
//! Sets state of flip OY necessity in projection matrix
virtual void SetToFlipOutput(const Standard_Boolean theFlip) Standard_OVERRIDE
{
myToFlipOutput = theFlip;
}
protected: //! @name Internal methods for managing GL resources
//! Initializes OpenGl resource for environment texture.
void initTextureEnv(const Handle(OpenGl_Context)& theContext);

View File

@@ -93,7 +93,6 @@ Standard_TypeDef.hxx
Standard_TypeMismatch.hxx
Standard_Underflow.hxx
Standard_UUID.hxx
Standard_VersionInfo.cxx
Standard_VersionInfo.hxx
Standard_Version.hxx
Standard_WarningsDisable.hxx
Standard_WarningsRestore.hxx

View File

@@ -1,5 +1,6 @@
// Created on: @OCCT_VERSION_DATE@
// Copyright (c) 2002-2025 OPEN CASCADE SAS
// Created on: 2002-07-09
// Created by: Andrey BETENEV
// Copyright (c) 2002-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
@@ -36,21 +37,21 @@ major, minor, and patch number
#define _Standard_Version_HeaderFile
// Primary definitions
#define OCC_VERSION_MAJOR @OCC_VERSION_MAJOR@
#define OCC_VERSION_MINOR @OCC_VERSION_MINOR@
#define OCC_VERSION_MAINTENANCE @OCC_VERSION_MAINTENANCE@
#define OCC_VERSION_MAJOR 7
#define OCC_VERSION_MINOR 8
#define OCC_VERSION_MAINTENANCE 2
//! This macro must be commented in official release, and set to non-empty
//! string in other situations, to identify specifics of the version, e.g.:
//! - "dev" for development version between releases
//! - "beta..." or "rc..." for beta releases or release candidates
//! - "project..." for version containing project-specific fixes
@SET_OCC_VERSION_DEVELOPMENT@
#define OCC_VERSION_DEVELOPMENT "dev"
// Derived (manually): version as real and string (major.minor)
#define OCC_VERSION @OCC_VERSION_MAJOR@.@OCC_VERSION_MINOR@
#define OCC_VERSION_STRING "@OCC_VERSION_MAJOR@.@OCC_VERSION_MINOR@"
#define OCC_VERSION_COMPLETE "@OCC_VERSION_MAJOR@.@OCC_VERSION_MINOR@.@OCC_VERSION_MAINTENANCE@"
#define OCC_VERSION 7.8
#define OCC_VERSION_STRING "7.8"
#define OCC_VERSION_COMPLETE "7.8.2"
//! Derived: extended version as string ("major.minor.maintenance.dev")
#ifdef OCC_VERSION_DEVELOPMENT

View File

@@ -1,55 +0,0 @@
// Copyright (c) 2025 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Standard_VersionInfo.hxx>
#include <Standard_Version.hxx>
//=================================================================================================
const char* OCCT_DevelopmentVersion()
{
#ifdef OCC_VERSION_DEVELOPMENT
return OCC_VERSION_DEVELOPMENT;
#else
return "";
#endif
}
//=================================================================================================
double OCCT_Version_Double()
{
return OCC_VERSION;
}
//=================================================================================================
const char* OCCT_Version_String()
{
return OCC_VERSION_STRING;
}
//=================================================================================================
const char* OCCT_Version_String_Complete()
{
return OCC_VERSION_COMPLETE;
}
//=================================================================================================
const char* OCCT_Version_String_Extended()
{
return OCC_VERSION_STRING_EXT;
}

View File

@@ -1,48 +0,0 @@
// Copyright (c) 2025 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _Standard_VersionInfo_HeaderFile
#define _Standard_VersionInfo_HeaderFile
#include <Standard_Macro.hxx>
#ifdef __cplusplus
extern "C"
{
#endif
//! Returns development version of Open CASCADE Technology.
//! "" - in case of official release,
//! "dev" - in case of development version between releases,
//! "beta..." or "rc..." - in case of beta releases or release candidates,
//! "project..." - in case of version containing project-specific fixes.
Standard_EXPORT const char* OCCT_DevelopmentVersion();
//! Returns version of Open CASCADE Technology as a double "major.minor"
Standard_EXPORT double OCCT_Version_Double();
//! Returns version of Open CASCADE Technology as a string "major.minor"
Standard_EXPORT const char* OCCT_Version_String();
//! Returns complete version of Open CASCADE Technology as a string "major.minor.maintenance"
Standard_EXPORT const char* OCCT_Version_String_Complete();
//! Returns extended version of Open CASCADE Technology as a string
//! "major.minor.maintenance.devext". In case if no development version is defined, returns the
//! same as OCCT_Version_String_Complete().
Standard_EXPORT const char* OCCT_Version_String_Extended();
#ifdef __cplusplus
}
#endif
#endif /* _Standard_VersionInfo_HeaderFile */

View File

@@ -12,5 +12,7 @@ TKGeomAlgo
TKHLR
CSF_user32
CSF_gdi32
CSF_OpenGlLibs
CSF_XwLibs
CSF_FREETYPE
CSF_TBB

View File

@@ -5193,8 +5193,6 @@ static int VDisplay2(Draw_Interpretor& theDI, Standard_Integer theArgNb, const c
}
}
// invalidate picking cache
ViewerTest::CurrentEventManager()->ResetPreviousMoveTo();
return 0;
}

View File

@@ -134,19 +134,13 @@ typedef Aspect_NeutralWindow ViewerTest_Window;
#endif
#if defined(__EMSCRIPTEN__)
#if defined(_LP64)
EM_JS(char*, occJSNumberToPtr, (double thePtr), { return BigInt(thePtr); });
#else
EM_JS(char*, occJSNumberToPtr, (double thePtr), { return thePtr; });
#endif
//! Return DOM id of default WebGL canvas from Module.canvas.
EM_JS(char*, occJSModuleCanvasId, (), {
const aCanvasId = Module.canvas.id;
const aNbBytes = lengthBytesUTF8(aCanvasId) + 1;
const aStrPtr = Module._malloc(aNbBytes);
stringToUTF8(aCanvasId, aStrPtr, aNbBytes);
return occJSNumberToPtr(aStrPtr);
return aStrPtr;
});
//! Return DOM id of default WebGL canvas from Module.canvas.
@@ -11033,20 +11027,6 @@ static Standard_Integer VRenderParams(Draw_Interpretor& theDI,
++anArgIter;
}
}
else if (aFlag == "-flip")
{
if (toPrint)
{
theDI << (aView->View()->ToFlipOutput() ? "on " : "off ");
continue;
}
Standard_Boolean isToFlipOutput = Standard_False;
if (anArgIter + 1 < theArgNb && Draw::ParseOnOff(theArgVec[anArgIter + 1], isToFlipOutput))
{
aView->View()->SetToFlipOutput(isToFlipOutput);
++anArgIter;
}
}
else if (aFlag == "-rendscale" || aFlag == "-renderscale" || aFlag == "-renderresolutionscale")
{
if (toPrint)
@@ -12104,7 +12084,6 @@ static int VManipulator(Draw_Interpretor& theDi, Standard_Integer theArgsNb, con
gp_XYZ aLocation(RealLast(), RealLast(), RealLast()), aVDir, anXDir;
//
bool toDetach = false;
bool toAddObject = false;
AIS_Manipulator::OptionsForAttach anAttachOptions;
Handle(AIS_InteractiveObject) anAttachObject;
Handle(V3d_View) aViewAffinity;
@@ -12294,10 +12273,6 @@ static int VManipulator(Draw_Interpretor& theDi, Standard_Integer theArgsNb, con
aTrsf.SetRotation(gp_Ax1(gp_Pnt(aRotPnt), gp_Dir(aRotAxis)), aTmpReal);
}
//
else if (anArg == "-addobject")
{
toAddObject = true;
}
else if (anArg == "-detach")
{
toDetach = true;
@@ -12454,18 +12429,9 @@ static int VManipulator(Draw_Interpretor& theDi, Standard_Integer theArgsNb, con
// ---------------------------------------------------
if (!anAttachObject.IsNull())
{
if (toAddObject && aManipulator->IsAttached())
{
Handle(AIS_ManipulatorObjectSequence) anAttachObjects = aManipulator->Objects();
anAttachObjects->Append(anAttachObject);
aManipulator->Attach(anAttachObjects, anAttachOptions);
}
else
{
aManipulator->Attach(anAttachObject, anAttachOptions);
}
}
if (!aViewAffinity.IsNull())
{
for (ViewerTest_ViewerCommandsViewMap::Iterator anIter(ViewerTest_myViews); anIter.More();
@@ -14416,7 +14382,7 @@ vrenderparams [-raster] [-shadingModel {unlit|facet|gouraud|phong|pbr|pbr_facet}
[-shadows {on|off}=on] [-shadowMapResolution value=1024] [-shadowMapBias value=0.005]
[-depthPrePass {on|off}=off] [-alphaToCoverage {on|off}=on]
[-frustumCulling {on|off|noupdate}=on] [-lineFeather width=1.0]
[-sync {default|views}] [-reset] [-flip {on|off}=off]
[-sync {default|views}] [-reset]
-raster Disables GPU ray-tracing.
-shadingModel Controls shading model.
-msaa Specifies number of samples for MSAA.
@@ -14438,7 +14404,6 @@ vrenderparams [-raster] [-shadingModel {unlit|facet|gouraud|phong|pbr|pbr_facet}
sets state to check structures culled previously.
-sync Sets active View parameters as Viewer defaults / to other Views.
-reset Resets active View parameters to Viewer defaults.
-flip Flips View Vertically.
Diagnostic output (on-screen overlay):
vrenderparams [-perfCounters none|fps|cpu|layers|structures|groups|arrays|triangles|points
@@ -14525,7 +14490,6 @@ Options:
'-enableModes {0|1}' enable modes when attaching
'-view {active | [name of view]}' display manipulator only in defined view,
by default it is displayed in all views of the current viewer
'-addObject allows attach manipulator to multiple objects (replace by default)
'-detach' detach manipulator
'-startTransform mouse_x mouse_y' - invoke start of transformation
'-transform mouse_x mouse_y' - invoke transformation

View File

@@ -168,9 +168,13 @@ TDF_Label XCAFDoc_ColorTool::AddColor(const Quantity_ColorRGBA& theColor) const
if (XCAFDoc_ColorTool_AutoNaming)
{
// set name according to color value
const NCollection_Vec4<float>& anRgbaF = theColor;
const NCollection_Vec4<unsigned int> anRgba(anRgbaF * 255.0f);
char aColorHex[32];
Sprintf(aColorHex, "%02X%02X%02X%02X", anRgba.r(), anRgba.g(), anRgba.b(), anRgba.a());
const TCollection_AsciiString aName =
TCollection_AsciiString(Quantity_Color::StringName(theColor.GetRGB().Name())) + " ("
+ Quantity_ColorRGBA::ColorToHex(theColor) + ")";
TCollection_AsciiString(Quantity_Color::StringName(theColor.GetRGB().Name())) + " (#"
+ aColorHex + ")";
TDataStd_Name::Set(aLab, aName);
}

View File

@@ -32,10 +32,8 @@
IMPLEMENT_STANDARD_RTTIEXT(XSControl_WorkSession, IFSelect_WorkSession)
namespace
{
static Standard_Mutex WS_GLOBAL_MUTEX; //!< Mutex to prevent data races during reading and writing.
}
// Initializing static mutex.
Standard_Mutex XSControl_WorkSession::myGlobalMutex;
//=================================================================================================
@@ -72,7 +70,7 @@ void XSControl_WorkSession::ClearData(const Standard_Integer mode)
Standard_Boolean XSControl_WorkSession::SelectNorm(const Standard_CString normname)
{
const Standard_Mutex::Sentry aMutexLock(WS_GLOBAL_MUTEX);
const Standard_Mutex::Sentry aMutexLock(myGlobalMutex);
// Old norm and results
myTransferReader->Clear(-1);
// ???? En toute rigueur, menage a faire dans XWS : virer les items
@@ -430,7 +428,7 @@ Standard_Integer XSControl_WorkSession::TransferReadRoots(const Message_Progress
Handle(Interface_InterfaceModel) XSControl_WorkSession::NewModel()
{
const Standard_Mutex::Sentry aMutexLock(WS_GLOBAL_MUTEX);
const Standard_Mutex::Sentry aMutexLock(myGlobalMutex);
Handle(Interface_InterfaceModel) newmod;
if (myController.IsNull())
return newmod;
@@ -453,7 +451,7 @@ IFSelect_ReturnStatus XSControl_WorkSession::TransferWriteShape(
const Standard_Boolean compgraph,
const Message_ProgressRange& theProgress)
{
const Standard_Mutex::Sentry aMutexLock(WS_GLOBAL_MUTEX);
const Standard_Mutex::Sentry aMutexLock(myGlobalMutex);
IFSelect_ReturnStatus status;
if (myController.IsNull())
return IFSelect_RetError;

View File

@@ -202,6 +202,8 @@ private:
Handle(XSControl_TransferWriter) myTransferWriter;
XSControl_WorkSessionMap myContext;
Handle(XSControl_Vars) myVars;
static Standard_Mutex myGlobalMutex; //!< Mutex to prevent data races during reading and writing.
};
#endif // _XSControl_WorkSession_HeaderFile

View File

@@ -1,4 +1,5 @@
pload XDE
pload QAcommands
set subgroup step

View File

@@ -1,4 +1,3 @@
# Check performance of STEPCAFControl_Reader/Writer constructors in multithreading environment.
# If no crash occures, its fine.
pload QAcommands
OCC33657_1

View File

@@ -1,4 +1,3 @@
# Check performance of STEPControl_Reader in multithreading environment.
# If no crash occures, its fine.
pload QAcommands
OCC33657_2 [locate_data_file bug21802_as1-oc-214.stp]

View File

@@ -1,4 +1,3 @@
# Check performance of STEPControl_Writer in multithreading environment.
# If no crash occures, its fine.
pload QAcommands
OCC33657_1

View File

@@ -1,3 +1,2 @@
# Check performance of STEPControl_Reader/Writer in multithreading environment.
pload QAcommands
OCC33657_4 [locate_data_file bug21802_as1-oc-214.stp]

View File

@@ -1,41 +0,0 @@
puts "============"
puts "0032116: Visualization - AIS_Manipulator is unusable when attaching to objects with Graphic3d_TMF_ZoomPers"
puts "============"
puts ""
pload MODELING VISUALIZATION
box b1 10 10 10 10 20 30
box b2 50 50 50 10 20 30
vinit View1
vdisplay b1 -dispmode 1 -trsfPers zoom -trsfPersPos 0 0 0
vdisplay b2 -dispmode 1 -trsfPers zoom -trsfPersPos 10 10 10
vfit
vmanipulator m -attach b1 -addObject
vmanipulator m -attach b2 -addObject
set mouse_pick {90 225}
set mouse_drag {90 150}
vmoveto {*}$mouse_pick
vselect {*}$mouse_pick
vmanipulator m -startTransform {*}$mouse_pick
vmanipulator m -transform {*}$mouse_drag
vmanipulator m -stopTransform
vmoveto {*}$mouse_drag
if { [vreadpixel {*}$mouse_drag -rgb -name] != "CYAN" } { puts "Error: wrong manipulator position" }
if { [vreadpixel 115 170 -rgb -name] != "DARKGOLDENROD" } { puts "Error: wrong b1 tranformation" }
if { [vreadpixel 400 10 -rgb -name] != "DARKGOLDENROD" } { puts "Error: wrong b2 tranformation" }
vdump ${imagedir}/${casename}_1.png
vmoveto 0 0
vzoom 0.2
if { [vreadpixel 210 170 -rgb -name] != "DARKGOLDENROD" } { puts "Error: wrong b1 tranformation" }
if { [vreadpixel 310 120 -rgb -name] != "DARKGOLDENROD" } { puts "Error: wrong b2 tranformation" }
vdump ${imagedir}/${casename}_2.png