0026348: Visualization, TKOpenGl - eliminate invalid NULL checks for transformation...
[occt.git] / src / Graphic3d / Graphic3d_Structure.cxx
index 655499a..2740194 100644 (file)
@@ -436,38 +436,12 @@ Standard_Boolean Graphic3d_Structure::IsVisible() const
 }
 
 //=============================================================================
-//function : IsRotated
-//purpose  :
-//=============================================================================
-Standard_Boolean Graphic3d_Structure::IsRotated() const
-{
-  // A somewhat light test !
-  return myCStructure->Transformation[0][1] != 0.0
-      || myCStructure->Transformation[0][2] != 0.0
-      || myCStructure->Transformation[1][0] != 0.0
-      || myCStructure->Transformation[1][2] != 0.0
-      || myCStructure->Transformation[2][0] != 0.0
-      || myCStructure->Transformation[2][1] != 0.0;
-}
-
-//=============================================================================
 //function : IsTransformed
 //purpose  :
 //=============================================================================
 Standard_Boolean Graphic3d_Structure::IsTransformed() const
 {
-  Standard_Boolean aResult = Standard_False;
-  for (Standard_Integer i = 0; i <= 3 && !aResult; ++i)
-  {
-    for (Standard_Integer j = 0; j <= 3 && !aResult; ++j)
-    {
-      if (i == j)
-        aResult = myCStructure->Transformation[i][j] != 1.0;
-      else
-        aResult = myCStructure->Transformation[i][j] != 0.0;
-    }
-  }
-  return aResult;
+  return !myCStructure->Transformation.IsIdentity();
 }
 
 //=============================================================================
@@ -1501,15 +1475,6 @@ void Graphic3d_Structure::DisconnectAll (const Graphic3d_TypeOfConnection theTyp
 }
 
 //=============================================================================
-//function : Composition
-//purpose  :
-//=============================================================================
-Graphic3d_TypeOfComposition Graphic3d_Structure::Composition() const
-{
-  return myCStructure->Composition;
-}
-
-//=============================================================================
 //function : SetTransform
 //purpose  :
 //=============================================================================
@@ -1537,17 +1502,17 @@ void Graphic3d_Structure::SetTransform (const TColStd_Array2OfReal&       theMat
     Graphic3d_TransformError::Raise ("Transform : not a 4x4 matrix");
   }
 
+  const Standard_Boolean wasTransformed = IsTransformed();
   switch (theType)
   {
     case Graphic3d_TOC_REPLACE:
     {
-      myCStructure->Composition = Graphic3d_TOC_REPLACE;
       // Update of CStructure
       for (Standard_Integer i = 0; i <= 3; ++i)
       {
         for (Standard_Integer j = 0; j <= 3; ++j)
         {
-          myCStructure->Transformation[i][j] = float (theMatrix (lr + i, lc + j));
+          myCStructure->Transformation.ChangeValue (i, j) = float (theMatrix (lr + i, lc + j));
           aNewTrsf (i, j) = theMatrix (lr + i, lc + j);
         }
       }
@@ -1555,7 +1520,6 @@ void Graphic3d_Structure::SetTransform (const TColStd_Array2OfReal&       theMat
     }
     case Graphic3d_TOC_POSTCONCATENATE:
     {
-      myCStructure->Composition = Graphic3d_TOC_POSTCONCATENATE;
       // To simplify management of indices
       for (Standard_Integer i = 0; i <= 3; ++i)
       {
@@ -1573,7 +1537,7 @@ void Graphic3d_Structure::SetTransform (const TColStd_Array2OfReal&       theMat
           aNewTrsf (i, j) = 0.0;
           for (Standard_Integer k = 0; k <= 3; ++k)
           {
-            valueoldtrsf = myCStructure->Transformation[i][k];
+            valueoldtrsf = myCStructure->Transformation.GetValue (i, k);
             valuetrsf    = aMatrix44 (k, j);
             valuenewtrsf = aNewTrsf (i, j) + valueoldtrsf * valuetrsf;
             aNewTrsf (i, j) = valuenewtrsf;
@@ -1586,7 +1550,7 @@ void Graphic3d_Structure::SetTransform (const TColStd_Array2OfReal&       theMat
       {
         for (Standard_Integer j = 0; j <= 3; ++j)
         {
-          myCStructure->Transformation[i][j] = float (aNewTrsf (i, j));
+          myCStructure->Transformation.ChangeValue (i, j) = float (aNewTrsf (i, j));
         }
       }
       break;
@@ -1594,7 +1558,7 @@ void Graphic3d_Structure::SetTransform (const TColStd_Array2OfReal&       theMat
   }
 
   // If transformation, no validation of hidden already calculated parts
-  if (IsRotated())
+  if (IsTransformed() || (!IsTransformed() && wasTransformed))
   {
     ReCompute();
   }
@@ -1624,7 +1588,7 @@ void Graphic3d_Structure::Transform (TColStd_Array2OfReal& theMatrix) const
   {
     for (Standard_Integer j = 0; j <= 3; ++j)
     {
-      theMatrix (lr + i, lc + j) = myCStructure->Transformation[i][j];
+      theMatrix (lr + i, lc + j) = myCStructure->Transformation.GetValue (i, j);
     }
   }
 }
@@ -2251,7 +2215,7 @@ void Graphic3d_Structure::GraphicTransform (const TColStd_Array2OfReal& theMatri
   {
     for (Standard_Integer j = 0; j <= 3; ++j)
     {
-      myCStructure->Transformation[i][j] = float (theMatrix (i, j));
+      myCStructure->Transformation.ChangeValue (i, j) = float (theMatrix (i, j));
     }
   }
   myCStructure->UpdateTransformation();