+ TopoDS_Shape aReallyBase = theBaseShapes.front()->impl<TopoDS_Shape>();
+ gp_Trsf aTrsf = getPathToBaseTranslation(aReallyBase, aPathWire);
+
+ GeomShapePtr anOldPath(new GeomAPI_Shape), aNewPath(new GeomAPI_Shape);
+ anOldPath->setImpl(new TopoDS_Shape(aPathWire));
+ aPathWire.Move(aTrsf);
+ aNewPath->setImpl(new TopoDS_Shape(aPathWire));
+ if (!anOldPath->isSame(aNewPath))
+ addMovedPath(anOldPath, aNewPath);
+
+ // Get locations after moving path shape.
+ std::list<TopoDS_Vertex> aLocations;
+ for (ListOfShape::const_iterator aLocIt = theLocations.cbegin();
+ aLocIt != theLocations.cend();
+ ++aLocIt)
+ {
+ GeomShapePtr aLocation = *aLocIt;
+ if (!aLocation.get() || aLocation->shapeType() != GeomAPI_Shape::VERTEX) {
+ return;
+ }
+
+ TopoDS_Vertex aLocationVertex = aLocation->impl<TopoDS_Vertex>();
+ TopoDS_Vertex aMovedVertex;
+ for (TopExp_Explorer anExp(aPathWire, TopAbs_VERTEX); anExp.More(); anExp.Next()) {
+ if (anExp.Current().IsPartner(aLocationVertex)) {
+ aMovedVertex = TopoDS::Vertex(anExp.Current());
+ aLocations.push_back(aMovedVertex);
+ break;
+ }
+ }
+ if (aMovedVertex.IsNull()) {
+ return;
+ }
+ }
+
+ if (theLocations.size() != aLocations.size()) {