]> OCCT Git - occt.git/commitdiff
Fix: don't move grid during panning CR30979_4
authormzernova <mzernova@opencascade.com>
Tue, 4 Feb 2025 16:46:26 +0000 (16:46 +0000)
committermzernova <mzernova@opencascade.com>
Tue, 4 Feb 2025 16:46:26 +0000 (16:46 +0000)
src/AIS/AIS_ViewController.cxx
src/Graphic3d/Graphic3d_Camera.hxx
src/OpenGl/OpenGl_View.cxx

index 9a463779af916bf671e57c7bd00753933e036197..2ab3858d521a9b89259a0291c093c8104bd05bdf 100644 (file)
@@ -1510,6 +1510,10 @@ void AIS_ViewController::handlePanning (const Handle(V3d_View)& theView)
   AbortViewAnimation();
 
   const Handle(Graphic3d_Camera)& aCam = theView->Camera();
+  aCam->SetPanningVector(aCam->PanningVector() +
+                         gp_Vec2d(theView->Convert(myGL.Panning.Delta.x()),
+                                  theView->Convert(myGL.Panning.Delta.y())));
+
   if (aCam->IsOrthographic()
   || !hasPanningAnchorPoint())
   {
index 17875b5c74aea6f662fb85929d631f3fc1981cdd..2d93ecd9f78b4f6ec38b1083934d0f04ec6103c0 100644 (file)
@@ -289,6 +289,17 @@ public:
     myRotationPoint = theRotationPoint;
   };
 
+  //! Get panning translation.
+  //! @return the panning translation.
+  gp_Vec2d PanningVector() const { return myPanningVector; }
+
+  //! Sets panning translation.
+  //! @param thePanningVector [in] the panning translation.
+  void SetPanningVector(const gp_Vec2d &thePanningVector)
+  {
+    myPanningVector = thePanningVector;
+  };
+
   //! Get distance of Eye from camera Center.
   //! @return the distance.
   Standard_Real Distance() const { return myDistance; }
@@ -854,6 +865,7 @@ private:
   gp_Dir        myDirection;//!< Camera view direction (from eye)
   gp_Pnt        myEye;      //!< Camera eye position
   gp_Pnt        myRotationPoint;
+  gp_Vec2d      myPanningVector;
   Standard_Real myDistance; //!< distance from Eye to Center
 
   gp_XYZ myAxialScale; //!< World axial scale.
index d6b9b776a9cf0c440addb72e9f9c8d7bd7f8ec32..6def227cf8bebf9746bdbbc59168a88f7be781c2 100644 (file)
@@ -2599,6 +2599,9 @@ void OpenGl_View::renderGrid()
     aTranslationInv.SetColumn (3, -aRotationVec);
     OpenGl_Mat4 aWorldViewStateCorrected = aTranslationInv * aWorldViewCurrent * aTranslation;
     aPosition.ChangeCoord() += gp_XYZ (aWorldViewStateCorrected (0, 3), aWorldViewStateCorrected (1, 3), -aZFar);
+
+    gp_XYZ aPanningVector (aCamera->PanningVector().X(), aCamera->PanningVector().Y(), 0.0);
+    aPosition.ChangeCoord() -= aPanningVector;
   }
   OpenGl_Mat4 aTranslation;
   aTranslation.SetColumn (3, Graphic3d_Vec4 ((float)aPosition.X(), (float)aPosition.Y(), (float)aPosition.Z(), 1.0));