From 1b63268eb229e78b3c615975c54e273d6372cd0f Mon Sep 17 00:00:00 2001 From: kgv Date: Mon, 8 Oct 2018 19:16:06 +0300 Subject: [PATCH] 0030218: Visualization - custom selection presentation is not updated within SelectMgr_SelectableObject::UpdateTransformation() SelectMgr_SelectableObject now assigns transformation to mySelectionPrs and myHilightPrs presentations. Removed confusing method PrsMgr_PresentableObject::UpdateTransformation() with presentation as argument. --- src/PrsMgr/PrsMgr_PresentableObject.cxx | 11 +--------- src/PrsMgr/PrsMgr_PresentableObject.hxx | 9 ++++---- src/SelectMgr/SelectMgr_SelectableObject.cxx | 10 +++++++++ tests/bugs/vis/bug30218 | 22 ++++++++++++++++++++ 4 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 tests/bugs/vis/bug30218 diff --git a/src/PrsMgr/PrsMgr_PresentableObject.cxx b/src/PrsMgr/PrsMgr_PresentableObject.cxx index 46e0bb97a7..eab673c75a 100644 --- a/src/PrsMgr/PrsMgr_PresentableObject.cxx +++ b/src/PrsMgr/PrsMgr_PresentableObject.cxx @@ -77,7 +77,7 @@ void PrsMgr_PresentableObject::Fill (const Handle(PrsMgr_PresentationManager)& t { Handle(Prs3d_Presentation) aStruct3d = thePrs->Presentation(); Compute (thePrsMgr, aStruct3d, theMode); - UpdateTransformation (aStruct3d); + aStruct3d->SetTransformation (myTransformation); aStruct3d->SetClipPlanes (myClipPlanes); aStruct3d->SetTransformPersistence (TransformPersistence()); } @@ -296,15 +296,6 @@ void PrsMgr_PresentableObject::UpdateTransformation() } } -//======================================================================= -//function : UpdateTransformation -//purpose : -//======================================================================= -void PrsMgr_PresentableObject::UpdateTransformation(const Handle(Prs3d_Presentation)& P) -{ - P->SetTransformation (myTransformation); -} - //======================================================================= //function : SetTransformPersistence //purpose : diff --git a/src/PrsMgr/PrsMgr_PresentableObject.hxx b/src/PrsMgr/PrsMgr_PresentableObject.hxx index 00b378b1d9..17fc574f4d 100644 --- a/src/PrsMgr/PrsMgr_PresentableObject.hxx +++ b/src/PrsMgr/PrsMgr_PresentableObject.hxx @@ -157,14 +157,13 @@ public: : getIdentityTrsf(); } const gp_GTrsf& InversedTransformation() const { return myInvTransformation; } - + //! resets local transformation to identity. Standard_EXPORT virtual void ResetTransformation(); - + + //! Updates final transformation (parent + local) of presentable object and its presentations. Standard_EXPORT virtual void UpdateTransformation(); - - Standard_EXPORT virtual void UpdateTransformation (const Handle(Prs3d_Presentation)& P); - + //! Set Z layer ID and update all presentations of the presentable object. //! The layers mechanism allows drawing objects in higher layers in overlay of objects in lower layers. Standard_EXPORT virtual void SetZLayer (const Graphic3d_ZLayerId theLayerId); diff --git a/src/SelectMgr/SelectMgr_SelectableObject.cxx b/src/SelectMgr/SelectMgr_SelectableObject.cxx index e9e48bbda6..6bcd9e3088 100644 --- a/src/SelectMgr/SelectMgr_SelectableObject.cxx +++ b/src/SelectMgr/SelectMgr_SelectableObject.cxx @@ -256,6 +256,14 @@ void SelectMgr_SelectableObject::UpdateTransformation() } PrsMgr_PresentableObject::UpdateTransformation(); + if (!mySelectionPrs.IsNull()) + { + mySelectionPrs->SetTransformation (TransformationGeom()); + } + if (!myHilightPrs.IsNull()) + { + myHilightPrs->SetTransformation (TransformationGeom()); + } } //======================================================================= @@ -349,6 +357,7 @@ Handle(Prs3d_Presentation) SelectMgr_SelectableObject::GetHilightPresentation (c myHilightPrs = new Prs3d_Presentation (theMgr->StructureManager()); myHilightPrs->SetTransformPersistence (TransformPersistence()); myHilightPrs->SetClipPlanes (myClipPlanes); + myHilightPrs->SetTransformation (TransformationGeom()); } return myHilightPrs; @@ -366,6 +375,7 @@ Handle(Prs3d_Presentation) SelectMgr_SelectableObject::GetSelectPresentation (co mySelectionPrs = new Prs3d_Presentation (theMgr->StructureManager()); mySelectionPrs->SetTransformPersistence (TransformPersistence()); mySelectionPrs->SetClipPlanes (myClipPlanes); + mySelectionPrs->SetTransformation (TransformationGeom()); } return mySelectionPrs; diff --git a/tests/bugs/vis/bug30218 b/tests/bugs/vis/bug30218 new file mode 100644 index 0000000000..4cd2363131 --- /dev/null +++ b/tests/bugs/vis/bug30218 @@ -0,0 +1,22 @@ +puts "=============" +puts "0030218: Visualization - custom selection presentation is not updated within SelectMgr_SelectableObject::UpdateTransformation()" +puts "=============" + +pload XDE VISUALIZATION + +vclear +vinit View1 +meshfromstl m [locate_data_file OCC6652.stl] +vfit +vzoom 0.75 + +vsetdispmode m 3 +vselmode m 8 1 + +vselect 5 5 200 200 +vlocation m -setLocation 500 0 0 +vmoveto 370 370 +if { [vreadpixel 145 145 rgb name] != "BLACK" } { puts "Error: MeshVS highlighting has wrong location" } +if { [vreadpixel 300 215 rgb name] != "GRAY80" } { puts "Error: MeshVS highlighting has wrong location" } + +vdump ${imagedir}/${casename}.png