]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/GeomAlgoAPI/GeomAlgoAPI_Translation.cpp
Salome HOME
Revert "Revert "Add a new method for translation : translation by two points.""
[modules/shaper.git] / src / GeomAlgoAPI / GeomAlgoAPI_Translation.cpp
index 9fee16ebf9495f790b2979f999034f28c10473f1..574b63d23b74c208f94451a019ee337f19eb3648 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()
 {
@@ -58,6 +69,21 @@ bool GeomAlgoAPI_Translation::check()
       }
       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) {
+        myError = "Translation builder :: source shape is invalid.";
+        return false;
+      }
+      return true;
+    }
     default: {
       myError = "Translation builder :: method not implemented.";
       return false;
@@ -80,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;