]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
INT PAL 0052613: Creation of clipping plane with absolute mode is incorrect
authormpa <mpa@opencascade.com>
Thu, 5 Feb 2015 09:40:52 +0000 (12:40 +0300)
committermpa <mpa@opencascade.com>
Thu, 5 Feb 2015 09:40:52 +0000 (12:40 +0300)
src/OCCViewer/OCCViewer_ClipPlane.cxx
src/OCCViewer/OCCViewer_ClippingDlg.cxx

index 8584ddcb03e261a947f6c1bcfd445decc406a65d..5a57eeb74b69b709a9bddd701fa66b8f88546c1a 100644 (file)
@@ -117,9 +117,10 @@ void OCCViewer_ClipPlane::OrientationToXYZ( double &theDx, double &theDy, double
         break;
 
       case AbsoluteCustom :
-        theDx = AbsoluteOrientation.Dx;
-        theDy = AbsoluteOrientation.Dy;
-        theDz = AbsoluteOrientation.Dz;
+        int anInvertCoeff = AbsoluteOrientation.IsInvert ? 1 : -1;
+        theDx = anInvertCoeff * AbsoluteOrientation.Dx;
+        theDy = anInvertCoeff * AbsoluteOrientation.Dy;
+        theDz = anInvertCoeff * AbsoluteOrientation.Dz;
         break;
     }
 
index 2c993287b88d4b1f749a61981607c80e007d97ea..a1792961b65b99783c84d2a082be1fa02383a5ad 100644 (file)
@@ -744,6 +744,7 @@ void OCCViewer_ClippingDlg::setPlaneParam( OCCViewer_ClipPlane& thePlane )
       thePlane.AbsoluteOrientation.Dx = SpinBox_Dx->value();
       thePlane.AbsoluteOrientation.Dy = SpinBox_Dy->value();
       thePlane.AbsoluteOrientation.Dz = SpinBox_Dz->value();
+      thePlane.AbsoluteOrientation.IsInvert = false;
     }
     else
     {
@@ -1261,6 +1262,7 @@ void OCCViewer_ClippingDlg::onReset()
   SpinBox_Z->setValue(0);
   myBusy = false;
 
+  SetCurrentPlaneParam();
   updateClipping();
 }
 
@@ -1311,47 +1313,50 @@ void OCCViewer_ClippingDlg::onOrientationAbsoluteChanged( int mode )
   SpinBox_Dy->setEnabled( isUserMode );
   SpinBox_Dz->setEnabled( isUserMode );
 
-  if ( !isUserMode ) {
-
-    double aDx = 0, aDy = 0, aDz = 0;
+  int aCurPlaneIndex = ComboBoxPlanes->currentIndex();
+  OCCViewer_ClipPlane& aPlane = getClipPlane( aCurPlaneIndex );
+  double aDx = 0, aDy = 0, aDz = 0;
 
-    if ( mode == 1 )
-    {
-      aDz = 1;
-      TextLabelZ->setEnabled( true );
-      SpinBox_Z->setEnabled( true );
-      SpinBox_Z->setFocus();
-    }
-    else if ( mode == 2 )
-    {
-      aDx = 1;
-      TextLabelX->setEnabled( true );
-      SpinBox_X->setEnabled( true );
-      SpinBox_X->setFocus();
-    }
-    else if ( mode == 3 )
-    {
-      aDy = 1;
-      TextLabelY->setEnabled( true );
-      SpinBox_Y->setEnabled( true );
-      SpinBox_Y->setFocus();
-    }
-    
-    int aCurPlaneIndex = ComboBoxPlanes->currentIndex();
-    OCCViewer_ClipPlane& aPlane = getClipPlane( aCurPlaneIndex );
-    if ( aPlane.AbsoluteOrientation.IsInvert == true )
-    {
-      aDx = -aDx;
-      aDy = -aDy;
-      aDz = -aDz;
-    }
+  if ( mode == 0 )
+  {
+    aDx = aPlane.AbsoluteOrientation.Dx;
+    aDy = aPlane.AbsoluteOrientation.Dy;
+    aDz = aPlane.AbsoluteOrientation.Dz;
+  }
+  else if ( mode == 1 )
+  {
+    aDz = 1;
+    TextLabelZ->setEnabled( true );
+    SpinBox_Z->setEnabled( true );
+    SpinBox_Z->setFocus();
+  }
+  else if ( mode == 2 )
+  {
+    aDx = 1;
+    TextLabelX->setEnabled( true );
+    SpinBox_X->setEnabled( true );
+    SpinBox_X->setFocus();
+  }
+  else if ( mode == 3 )
+  {
+    aDy = 1;
+    TextLabelY->setEnabled( true );
+    SpinBox_Y->setEnabled( true );
+    SpinBox_Y->setFocus();
+  }
     
-    myBusy = true;
-    SpinBox_Dx->setValue( aDx );
-    SpinBox_Dy->setValue( aDy );
-    SpinBox_Dz->setValue( aDz );
-    myBusy = false;
+  if ( aPlane.AbsoluteOrientation.IsInvert == true )
+  {
+    aDx = -aDx;
+    aDy = -aDy;
+    aDz = -aDz;
   }
+    
+  myBusy = true;
+  SpinBox_Dx->setValue( aDx );
+  SpinBox_Dy->setValue( aDy );
+  SpinBox_Dz->setValue( aDz );
+  myBusy = false;
 
   if ( !myIsUpdatingControls )
   {
@@ -1478,9 +1483,10 @@ void OCCViewer_ClippingDlg::onPlaneDragged( const Handle(AIS_Plane)& thePlane )
     {
       if ( aClipPlane.OrientationType == OCCViewer_ClipPlane::AbsoluteCustom )
       {
-        aClipPlane.AbsoluteOrientation.Dx = aPlaneN.X();
-        aClipPlane.AbsoluteOrientation.Dy = aPlaneN.Y();
-        aClipPlane.AbsoluteOrientation.Dz = aPlaneN.Z();
+        int anInvertCoeff = aClipPlane.AbsoluteOrientation.IsInvert ? 1 : -1;
+        aClipPlane.AbsoluteOrientation.Dx = anInvertCoeff * aPlaneN.X();
+        aClipPlane.AbsoluteOrientation.Dy = anInvertCoeff * aPlaneN.Y();
+        aClipPlane.AbsoluteOrientation.Dz = anInvertCoeff * aPlaneN.Z();
       }
     }
     else