Salome HOME
Issue #1942: group - names are empty strings
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_Translation.cpp
index 148bfacf8658fa71431e12bb905c5144e8e74dc6..55ed0e89caebdb654ace2add8987a55b9a022021 100644 (file)
@@ -36,6 +36,17 @@ GeomAlgoAPI_Translation::GeomAlgoAPI_Translation(std::shared_ptr<GeomAPI_Shape>
   myDz = theDz;
 }
 
+//=================================================================================================
+GeomAlgoAPI_Translation::GeomAlgoAPI_Translation(std::shared_ptr<GeomAPI_Shape> theSourceShape,
+                                                 std::shared_ptr<GeomAPI_Pnt>   theStartPoint,
+                                                 std::shared_ptr<GeomAPI_Pnt>   theEndPoint)
+{
+  myMethodType = BY_POINTS;
+  mySourceShape = theSourceShape;
+  myStartPoint = theStartPoint;
+  myEndPoint = theEndPoint;
+}
+
 //=================================================================================================
 bool GeomAlgoAPI_Translation::check()
 {
@@ -45,7 +56,6 @@ bool GeomAlgoAPI_Translation::check()
         myError = "Translation builder :: axis is invalid.";
         return false;
       }
-      // TODO : verification de la distance
       if (!mySourceShape) {
         myError = "Translation builder :: source shape is invalid.";
         return false;
@@ -53,10 +63,19 @@ bool GeomAlgoAPI_Translation::check()
       return true;
     }
     case BY_DIM: {
-      if ((fabs(myDx) < Precision::Confusion()) &&
-          (fabs(myDy) < Precision::Confusion()) &&
-          (fabs(myDz) < Precision::Confusion())) {
-        myError = "Translation builder :: Dx, Dy and Dz are null.";
+      if (!mySourceShape) {
+        myError = "Translation builder :: source shape is invalid.";
+        return false;
+      }
+      return true;
+    }
+    case BY_POINTS: {
+      if (!myStartPoint) {
+        myError = "Translation builder :: start point is invalid.";
+        return false;
+      }
+      if (!myEndPoint) {
+        myError = "Translation builder :: start point is invalid.";
         return false;
       }
       if (!mySourceShape) {
@@ -87,6 +106,12 @@ void GeomAlgoAPI_Translation::build()
       aTrsf->SetTranslation(gp_Vec(myDx, myDy, myDz));
       break;
     }
+    case BY_POINTS: {
+      const gp_Pnt& aStartPoint = myStartPoint->impl<gp_Pnt>();
+      const gp_Pnt& aEndPoint = myEndPoint->impl<gp_Pnt>();
+      aTrsf->SetTranslation(aStartPoint, aEndPoint);
+      break;
+    }
     default: {
       myError = "Translation builder :: method not supported";
       return;
@@ -103,7 +128,7 @@ void GeomAlgoAPI_Translation::build()
   // Transform the shape while copying it.
   BRepBuilderAPI_Transform* aBuilder = new BRepBuilderAPI_Transform(aSourceShape, *aTrsf, true);
   if(!aBuilder) {
-    myError = "Translation builder :: source shape does not contain any actual shape.";
+    myError = "Translation builder :: transform initialization failed.";
     return;
   }
 
@@ -111,7 +136,7 @@ void GeomAlgoAPI_Translation::build()
   setBuilderType(OCCT_BRepBuilderAPI_MakeShape);
 
   if(!aBuilder->IsDone()) {
-    myError = "Translation builder :: source shape does not contain any actual shape.";
+    myError = "Translation builder :: algorithm failed.";
     return;
   }