X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAPI%2FGeomAPI_Trsf.cpp;h=b2df2368d23654278ca988a470f47d7dec6286a7;hb=82b778ce7a74acd9487eed62a62084184344a047;hp=701e0bdff3871f59b88cfac9ae5a972b780f2424;hpb=517e702f8072ad116543beaf90a69b3f4fc05220;p=modules%2Fshaper.git diff --git a/src/GeomAPI/GeomAPI_Trsf.cpp b/src/GeomAPI/GeomAPI_Trsf.cpp index 701e0bdff..b2df2368d 100644 --- a/src/GeomAPI/GeomAPI_Trsf.cpp +++ b/src/GeomAPI/GeomAPI_Trsf.cpp @@ -1,10 +1,21 @@ -// Copyright (C) 2014-2016 CEA/DEN, EDF R&D - -// File: GeomAPI_Trsf.cpp -// Created: 13 Jul 2015 -// Author: Mikhail PONIKAROV +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// 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 @@ -28,7 +39,7 @@ GeomAPI_Trsf::GeomAPI_Trsf() //================================================================================================= GeomAPI_Trsf::GeomAPI_Trsf(void* theTrsf) -: GeomAPI_Interface(theTrsf) +: GeomAPI_Interface((gp_Trsf*)theTrsf) { } @@ -59,6 +70,25 @@ void GeomAPI_Trsf::setRotation(const std::shared_ptr theAxis, 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) {