X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAPI%2FGeomAPI_Trsf.cpp;h=8114b0595da397cbadcc5d2b39d5e26315437f59;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=7983c91e606ba41c10c9ed5bc33e951c77de6b84;hpb=2c892f5ecdcdbdce82da2b0bbd8f0c878971a076;p=modules%2Fshaper.git diff --git a/src/GeomAPI/GeomAPI_Trsf.cpp b/src/GeomAPI/GeomAPI_Trsf.cpp index 7983c91e6..8114b0595 100644 --- a/src/GeomAPI/GeomAPI_Trsf.cpp +++ b/src/GeomAPI/GeomAPI_Trsf.cpp @@ -1,20 +1,36 @@ -// Copyright (C) 2014-2016 CEA/DEN, EDF R&D - -// File: GeomAPI_Trsf.cpp -// Created: 13 Jul 2015 -// Author: Mikhail PONIKAROV +// Copyright (C) 2014-2023 CEA, EDF +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// Modified by Clarisse Genrault (CEA) : 17 Nov 2016 #include #include +#include #include -#include +#include +#include +#include #define MY_TRSF implPtr() +#include + //================================================================================================= GeomAPI_Trsf::GeomAPI_Trsf() : GeomAPI_Interface(new gp_Trsf()) @@ -23,7 +39,7 @@ GeomAPI_Trsf::GeomAPI_Trsf() //================================================================================================= GeomAPI_Trsf::GeomAPI_Trsf(void* theTrsf) -: GeomAPI_Interface(theTrsf) +: GeomAPI_Interface((gp_Trsf*)theTrsf) { } @@ -40,9 +56,60 @@ void GeomAPI_Trsf::setTranslation(const double theDx, const double theDy, const MY_TRSF->SetTranslation(gp_Vec(theDx, theDy, theDz)); } +//================================================================================================= +void GeomAPI_Trsf::setTranslation(const std::shared_ptr theStartPoint, + const std::shared_ptr theEndPoint) +{ + MY_TRSF->SetTranslation(theStartPoint->impl(), theEndPoint->impl()); +} + //================================================================================================= void GeomAPI_Trsf::setRotation(const std::shared_ptr theAxis, const double theAngle) { MY_TRSF->SetRotation(theAxis->impl(), theAngle / 180.0 * M_PI); } + +//================================================================================================= +void GeomAPI_Trsf::setRotation(const std::shared_ptr theCenterPoint, + const std::shared_ptr theStartPoint, + const std::shared_ptr theEndPoint) +{ + gp_Pnt aCenterPoint = theCenterPoint->impl(); + gp_Pnt aStartPoint = theStartPoint->impl(); + gp_Pnt aEndPoint = theEndPoint->impl(); + + gp_Vec aVec1(aCenterPoint, aStartPoint); + gp_Vec aVec2(aCenterPoint, aEndPoint); + gp_Dir aDir(aVec1 ^ aVec2); + gp_Ax1 anAxis(aCenterPoint, aDir); + double anAngle = aVec1.Angle(aVec2); + if (fabs(anAngle) < Precision::Angular()) anAngle += 2.*M_PI; // Taken from old GEOM code + + MY_TRSF->SetRotation(anAxis, anAngle); +} + +//================================================================================================= +void GeomAPI_Trsf::setSymmetry(const std::shared_ptr thePoint) +{ + MY_TRSF->SetMirror(thePoint->impl()); +} + +//================================================================================================= +void GeomAPI_Trsf::setSymmetry(const std::shared_ptr theAxis) +{ + MY_TRSF->SetMirror(theAxis->impl()); +} + +//================================================================================================= +void GeomAPI_Trsf::setSymmetry(const std::shared_ptr thePlane) +{ + MY_TRSF->SetMirror(thePlane->impl()); +} + +//================================================================================================= +void GeomAPI_Trsf::setScale(const std::shared_ptr& theCenter, + const double theScale) +{ + MY_TRSF->SetScale(theCenter->impl(), theScale); +}