aba [Thu, 11 Sep 2014 09:34:30 +0000 (13:34 +0400)]
0024904: Visualization - Integration of VIS component:
Added new toolkit TKIVtk:
- TKIVtk toolkit includes IVtkVTK, IVtkTools, IVtkOCC, IVtk packages.
- TKIVtk provides OCC interface for VTK library functionality: it allows to use VTK window and event managment for OCC objects (shapes)
Porting on VTK 6:
- shape source inherits vtkPolyDataAlgorithm now (vtkPolyDataSource was removed form VTK as deprecated functionality).
- added factory auto-initialization in IVtkVTK_View
- remove using of deprecated methods of pipeline mechanism.
Get rid from warning in SelectMgr_SelectableObject. Removed firendship from SelectMgr_SelectableObject.
Corrected projector parameters for selection algorithm.
duv [Thu, 28 Aug 2014 12:38:28 +0000 (16:38 +0400)]
0024837: Visualization - revise design and implementation of connected Interactive Objects 0023422: Selection problems when using SetLocation. 0024756: AIS_ConnectedInteractive does not support nested AIS_ConnectedInteractive 0025103: Visualization - Regression in interactive detection
Each PrsMgr_PresentableObject has list of PrsMgr _PresentableObject called myChildren.
Transformation PrsMgr_PresentableObject applied to its children every time when its own transformation affected. This hierarchy does not propagate to Graphic3d level and below.
PrsMgr_PresentableObject send its combined (according to hierarchy) transform down to Graphic3d_Structure.
AIS_ConnectedInteractive and AIS_MultiplyConnectedInteractive are reused but behavior has been changed.
AIS_ConnectedInteractive now is an instance of object. It reuses geometry of connected object but have own transformation, material, visibility flag etc. This connection propagated down to OpenGl level to OpenGl_Structure. For this task old “connected” mechanism has been reused.
AIS_MultiplyConnectedInteractive represents assembly which doesn’t have its own presentation. Assemblies are able to participate is scene hierarchy and intended to handle a grouped set of instanced objects. It behaves as single object in terms of selection. It applies high level transform to all sub-elements since it located above in the hierarchy.
All AIS_MultiplyConnectedInteractive are able to have child assemblies. Deep copy of object instances performed when one assembly attached to another.
san [Thu, 28 Aug 2014 07:55:06 +0000 (11:55 +0400)]
0025133: TKOpenGl - Crash on closing a view containing presentations with capping
OpenGl_Element destruction and resource deallocation methods now accept
a pointer to OpenGl_Context instead of a handle to avoid double deletion
of the context.
san [Thu, 28 Aug 2014 10:52:48 +0000 (14:52 +0400)]
0025132: Visualization - treat any TopoDS_Solid as closed volume
Advanced mechanism implemented:
- BRep_Tool::IsClosed() method is used to detect non-manifold solids and open shells
- Non-manifold solids are split into closed and open shells
nbv [Fri, 15 Aug 2014 10:35:04 +0000 (14:35 +0400)]
0024915: Wrong intersection curves between two cylinders
Existing method of Cylinder-Cylinder intersection computing is based on finding the analytic line (as a function of one argument) and converting one into the walking-line with set of equidistant (along the line parameter) points.
The main advantage of applied method is using adaptively computed step. Necessary step is computed into every point of the obtained walking-line. At that we receive final walking-line directly (without preliminary analytic line) and we determine moments more precisely, when it should be split (see IntPatch_ImpImpIntersection_4.gxx).
The main disadvantages is bad working this method for non-trimmed cylinders (with infinite bounds), because step value is depend on the boundaries values.
More over, new method always returns walking-line, while intersection result can be an analytic curve (lines, circle, ellipse). That is NO good. Therefore, analytic curve is computed by existing method.
In conclusion, in spite of covering almost all more often meeting cases, new method has limited application. Then we should use the existing old method.
Additionally, method MinMax() is added (see Standard_Real.hxx file). It uses into new algorithm.
Some test cases is changed according to their new behavior.
Test case for issue CR24915 is added.
Into GeometryTest_APICommands.cxx only tabulations were chaged.
"Extending" of isolines (see Geom2dHatch_Hatcher.cxx).
emv [Thu, 21 Aug 2014 08:17:36 +0000 (12:17 +0400)]
0025043: there is no possibility to know what exactly subshape of source shape has detected problems by BRepAlgoAPI_Check
Since there is a possibility to run the check on self-intersection (BOPAlgo_CheckerSI algorithm) in non-destructive mode (source shape will not be modified)
there is no need to make copies of the arguments of BRepAlgoAPI_Check.
pkv [Thu, 21 Aug 2014 08:14:53 +0000 (12:14 +0400)]
0025163: Wrong result of common operation for faces.
Changes:
class BOPAlgo_WireSplitter
static function:
Standard_Boolean RefineAngle2D(const TopoDS_Vertex& aV,
const TopoDS_Edge& aE,
const TopoDS_Face& myFace,
const Standard_Real aA1,
const Standard_Real aA2,
Standard_Real& aA)
The contents of Domain 2D for the straight line has been changed.
class BOPTools_AlgoTools2D
method:
void BOPTools_AlgoTools2D::AdjustPCurveOnFace
(const TopoDS_Face& aF,
const Standard_Real aFirst,
const Standard_Real aLast,
const Handle(Geom2d_Curve)& aC2D,
Handle(Geom2d_Curve)& aC2DA)
The treatment of cylindrical surfaces has been changed taking into account
existing values of tolerances of the edges.
aba [Thu, 14 Aug 2014 08:20:09 +0000 (12:20 +0400)]
0023649: Visualization, AIS_LocalContext - make highlighting of already selected objects consistent with and without Shift modifier
1) Add SelectMgr_EntityOwner::IsSelected() and SelectMgr_EntityOwner::SetSelected() methods to determine if corresponding entity is selected.
They replace functionality of SelectMgr_EntityOwner::State() methods that are deprecated now.
2) AIS_InteractiveContext::ToHilightSelected() and AIS_InteractiveContext::SetToHilightSelected() is to be used to enable highlighting of selected objects.
3) By default selected objects are highlighted (new behavior)
4) Add ViewerTest_ViewerCommands: vhighlightselected command to enable/disable 'highlight selected objects' mode.
5) AIS_LocalContext, AIS_InteractiveContext : style changes in Select and ShiftSelect methods.
6) Add test cases /bugs/vis bug23649_1 and /bugs/vis bug23649_2 to test highlighting of selected objects in local context.
7) Add test cases /bugs/vis bug23649_3 and /bugs/vis bug23649_4 to test highlighting of selected objects in neutral point.
- class VMap in Draw was removed
- NCollection_DataMap is used to store objects
- name of object is used to associate Tcl variable with the object
- creation and changing of objects are correclty handled
Redundant casts were removed.
Initial value is restored if variable is protected.
Tests for bug #24863 were added.
Some test cases and tcl command "save" were improved.
0024943: Port MFC samples to UNICODE for compatibility with VS2013
Add vc12 project files for MFC samples.
CMake - add Unicode option for MFC samples
CMake - do not set MFC option globally
Update description of Cmake building procedure for MFC sample
Correction of cmake.md and automake.md
0024943: Port MFC sample to UNICODE for compatibility with VS2013
The formatting of developer guides about OCCT building with various build systems has been improved.
Generation of default path for test results corrected to have "results" as subdirectory and not prefix.
Parsing images in test results restricted to take only files with name of the test case without suffix or with suffix separated by underscore or dash, to avoid fetching images from different test case if its name starts like current test case.
0025057: Message_Algorithm fails to find messages defined for base class
New method HasMsg() is added in Message_MsgFile class to check if message with given key is registered.
That method is used in Message_Algorithm to check if message is defined on given level of class hierarchy.
Generation of error message in Message_MsgFile::Msg() is revised: now it includes a message key and gets added to the registry, to avoid re-generation in case of multiple requests.
Access to message registry maintained by the Message_MsgFile class is protected from concurrent access by mutex.
The patch changes the algorithm of choosing the initial approximation for Newton's method. Instead of searching for a point on the fine shifted grid, the algorithm performs initial search for candidate points in the original coarse grid (which is cached in new version). After that particle swarm optimization (PSO) is used to localize the global minimum. This algorithm optimizes a problem by having a population of candidate solutions ("particles"), and moving these particles around in the search-space according to simple mathematical formula over the particle's position and velocity. Each particle's movement is influenced by its local best known position but, is also guided toward the best known positions in the search-space, which are updated as better positions are found by other particles. This strategy has reported good results in solving complex global optimization problems.
Current patch implements initial version of PSO for using in Extrema_GenExtCS class. Typically new approach allows to reduce the number of evaluations by 5-10 times. There are only few cases there the numbers of evaluations are comparable.
0024996: Visualization - newly displayed objects are clipped until first
camera movement
AutoZFit operation now may be applied on Visual3d_View level.
Visual3d_View tracks Graphic3d_Structure updates and call AutoZFit within
Visual3d_View::Redraw if necessary.
In order to get AutoZFit functionality on Visual3d_View level ZfitAll
method moved from V3d_View into Graphic3d_Camera. AutoZFit method and
AutoZFitMode flag now part of Visual3d_View.
0023814: Drop plugin interface for Graphic3d_GraphicDriver instantiation
Drop Graphic3d_GraphicDriver::Begin() and ::End() methods.
Initialization is performed within driver constructor.
Drop dummy argument for Graphic3d_GraphicDriver constructor with library name.
Display connection now should be set instead
Drop Graphic3d::InitGraphicDriver() function and Graphic3d.hxx header.
Application code should explicitly link against TKOpenGl toolkit and instantiate OpenGl_GraphicDriver class.
Drop MetaGraphicDriverFactory implementation within TKOpenGl.