X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMImpl%2FGEOMImpl_ITransformOperations.cxx;h=42ab3f44fd3d07f68be91a2b5279a34f585cab95;hb=3059f9d5521dd7c91c35c50afbd6beb18b8826fd;hp=d7e2397c071b392340d9bb2b97c0962b76e6aaf4;hpb=d3dd282390888d7dc091ba2c2ffe7923bd7458e6;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx index d7e2397c0..42ab3f44f 100644 --- a/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ITransformOperations.cxx @@ -1,34 +1,58 @@ -using namespace std; - -#include "GEOMImpl_ITransformOperations.hxx" +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// 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. +// +// 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 +// + +#include + +#include #include "utilities.h" -#include "OpUtil.hxx" -#include "Utils_ExceptHandlers.hxx" +#include +#include #include #include #include #include -#include "GEOM_Function.hxx" +#include +#include -#include "GEOMImpl_TranslateDriver.hxx" -#include "GEOMImpl_MirrorDriver.hxx" -#include "GEOMImpl_OffsetDriver.hxx" -#include "GEOMImpl_ScaleDriver.hxx" -#include "GEOMImpl_RotateDriver.hxx" -#include "GEOMImpl_PositionDriver.hxx" +#include +#include +#include +#include +#include +#include -#include "GEOMImpl_ITranslate.hxx" -#include "GEOMImpl_IMirror.hxx" -#include "GEOMImpl_IOffset.hxx" -#include "GEOMImpl_IScale.hxx" -#include "GEOMImpl_IRotate.hxx" -#include "GEOMImpl_IPosition.hxx" +#include +#include +#include +#include +#include +#include -#include "GEOMImpl_Types.hxx" +#include +#include #include // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC //============================================================================= @@ -89,6 +113,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateTwoPoints //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -101,15 +128,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateTwoPoints } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.TranslateTwoPoints("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(thePoint1->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(thePoint2->GetEntry(), anEntry); - aDescr += (anEntry+")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.TranslateTwoPoints(" + << theObject << ", " << thePoint1 << ", " << thePoint2 << ")"; SetErrorCode(OK); return theObject; @@ -146,6 +166,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateDXDYDZ //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -158,14 +181,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateDXDYDZ } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.TranslateDXDXYDZ("); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theX)+", "); - aDescr += (TCollection_AsciiString(theY)+", "); - aDescr += (TCollection_AsciiString(theZ)+")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TranslateDXDYDZ(" + << theObject << ", " << theX << ", " << theY << ", " << theZ << ")"; SetErrorCode(OK); return theObject; @@ -205,6 +222,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateTwoPointsCopy //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -217,16 +237,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateTwoPointsCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.TranslateTwoPointsCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(thePoint1->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(thePoint2->GetEntry(), anEntry); - aDescr += (anEntry+")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeTranslationTwoPoints(" + << theObject << ", " << thePoint1 << ", " << thePoint2 << ")"; SetErrorCode(OK); return aCopy; @@ -265,6 +277,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateDXDYDZCopy //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -277,15 +292,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateDXDYDZCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.TranslateDXDXYDZCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theX)+", "); - aDescr += (TCollection_AsciiString(theY)+", "); - aDescr += (TCollection_AsciiString(theZ)+")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeTranslation(" + << theObject << ", " << theX << ", " << theY << ", " << theZ << ")"; SetErrorCode(OK); return aCopy; @@ -324,6 +332,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVector //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -336,18 +347,12 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVector } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.TranslateVector("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theVector->GetEntry(), anEntry); - aDescr += (anEntry+") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.TranslateVector(" + << theObject << ", " << theVector << ")"; SetErrorCode(OK); return theObject; } - //============================================================================= /*! * TranslateVectorCopy @@ -380,6 +385,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVectorCopy //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -392,19 +400,80 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVectorCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.TranslateVectorCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theVector->GetEntry(), anEntry); - aDescr += (anEntry+")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeTranslationVector(" + << theObject << ", " << theVector << ")"; SetErrorCode(OK); return aCopy; } +//============================================================================= +/*! + * TranslateVectorDistance + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ITransformOperations::TranslateVectorDistance + (Handle(GEOM_Object) theObject, Handle(GEOM_Object) theVector, double theDistance, bool theCopy) +{ + SetErrorCode(KO); + + if (theObject.IsNull() || theVector.IsNull()) return NULL; + + Handle(GEOM_Function) aLastFunction = theObject->GetLastFunction(); + if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be moved + + Handle(GEOM_Object) aCopy; //Add a new Copy object + Handle(GEOM_Function) aFunction; + + //Add a translate function + if (theCopy) { + aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType()); + aFunction = aCopy->AddFunction(GEOMImpl_TranslateDriver::GetID(), TRANSLATE_VECTOR_DISTANCE); + } + else { + aFunction = theObject->AddFunction(GEOMImpl_TranslateDriver::GetID(), TRANSLATE_VECTOR_DISTANCE); + } + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_TranslateDriver::GetID()) return NULL; + + GEOMImpl_ITranslate aTI(aFunction); + aTI.SetVector(theVector->GetLastFunction()); + aTI.SetDistance(theDistance); +// aTI.SetShape(theObject->GetValue()); + aTI.SetOriginal(aLastFunction); + + //Compute the translation + try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Translation driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + if (theCopy) { + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeTranslationVectorDistance(" + << theObject << ", " << theVector << ", " << theDistance << ")"; + SetErrorCode(OK); + return aCopy; + } + + GEOM::TPythonDump(aFunction) << "geompy.TranslateVectorDistance(" + << theObject << ", " << theVector << ", " << theDistance << ", " << theCopy << ")"; + SetErrorCode(OK); + return theObject; +} + //============================================================================= /*! * Translate1D @@ -439,6 +508,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate1D //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -451,17 +523,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate1D } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.Translate1D("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theVector->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theStep)+", "); - aDescr += (TCollection_AsciiString(theNbTimes)+") "); - - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeMultiTranslation1D(" + << theObject << ", " << theVector << ", " << theStep << ", " << theNbTimes << ")"; SetErrorCode(OK); return aCopy; @@ -473,12 +536,12 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate1D */ //============================================================================= Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate2D (Handle(GEOM_Object) theObject, - Handle(GEOM_Object) theVector, - double theStep1, - Standard_Integer theNbTimes1, - Handle(GEOM_Object) theVector2, - double theStep2, - Standard_Integer theNbTimes2) + Handle(GEOM_Object) theVector, + double theStep1, + Standard_Integer theNbTimes1, + Handle(GEOM_Object) theVector2, + double theStep2, + Standard_Integer theNbTimes2) { SetErrorCode(KO); @@ -508,6 +571,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate2D (Handle(GEOM_Obje //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Translation driver failed"); return NULL; @@ -520,21 +586,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate2D (Handle(GEOM_Obje } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.Translate2D("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theVector->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theStep1)+", "); - aDescr += (TCollection_AsciiString(theNbTimes2)+", "); - TDF_Tool::Entry(theVector2->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theStep2)+", "); - aDescr += (TCollection_AsciiString(theNbTimes2)+") "); - - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeMultiTranslation2D(" + << theObject << ", " << theVector << ", " << theStep1 << ", " << theNbTimes1 + << ", " << theVector2 << ", " << theStep2 << ", " << theNbTimes2 << ")"; SetErrorCode(OK); return aCopy; @@ -573,6 +627,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPlane //Compute the mirror try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -585,13 +642,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPlane } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry + " = ITransformOperations.MirrorPlane("); - aDescr += (anEntry + ", "); - TDF_Tool::Entry(thePlane->GetEntry(), anEntry); - aDescr += (anEntry + ") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.MirrorPlane(" + << theObject << ", " << thePlane << ")"; SetErrorCode(OK); return theObject; @@ -628,6 +680,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPlaneCopy //Compute the mirror try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -640,14 +695,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPlaneCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry + " = ITransformOperations.MirrorPlaneCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry + ", "); - TDF_Tool::Entry(thePlane->GetEntry(), anEntry); - aDescr += (anEntry + ")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeMirrorByPlane(" + << theObject << ", " << thePlane << ")"; SetErrorCode(OK); return aCopy; @@ -685,6 +734,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPoint //Compute the mirror try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -697,13 +749,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPoint } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry + " = ITransformOperations.MirrorPoint("); - aDescr += (anEntry + ", "); - TDF_Tool::Entry(thePoint->GetEntry(), anEntry); - aDescr += (anEntry + ") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.MirrorPoint(" + << theObject << ", " << thePoint << ")"; SetErrorCode(OK); return NULL; @@ -740,6 +787,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPointCopy //Compute the mirror try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -752,14 +802,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorPointCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry + " = ITransformOperations.MirrorPointCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry + ", "); - TDF_Tool::Entry(thePoint->GetEntry(), anEntry); - aDescr += (anEntry + ")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeMirrorByPoint(" + << theObject << ", " << thePoint << ")"; SetErrorCode(OK); return aCopy; @@ -797,6 +841,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorAxis //Compute the mirror try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -809,13 +856,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorAxis } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry + " = ITransformOperations.MirrorAxis("); - aDescr += (anEntry + ", "); - TDF_Tool::Entry(theAxis->GetEntry(), anEntry); - aDescr += (anEntry + ") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.MirrorAxis(" + << theObject << ", " << theAxis << ")"; SetErrorCode(OK); return NULL; @@ -852,6 +894,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorAxisCopy //Compute the mirror try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Mirror driver failed"); return NULL; @@ -864,14 +909,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::MirrorAxisCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry + " = ITransformOperations.MirrorAxisCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry + ", "); - TDF_Tool::Entry(theAxis->GetEntry(), anEntry); - aDescr += (anEntry + ")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeMirrorByAxis(" + << theObject << ", " << theAxis << ")"; SetErrorCode(OK); return aCopy; @@ -907,6 +946,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShape //Compute the offset try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Offset driver failed"); return NULL; @@ -919,12 +961,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShape } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.OffsetShape("); - aDescr += (anEntry+", "); - aDescr += TCollection_AsciiString(theOffset)+")"; - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.OffsetShape(" + << theObject << ", " << theOffset << ")"; SetErrorCode(OK); return theObject; @@ -962,6 +1000,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShapeCopy //Compute the offset try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Offset driver failed"); return NULL; @@ -974,13 +1015,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::OffsetShapeCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.OffsetShapeCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += TCollection_AsciiString(theOffset)+")"; - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeOffset(" + << theObject << ", " << theOffset << ")"; SetErrorCode(OK); return aCopy; @@ -997,14 +1033,11 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShape { SetErrorCode(KO); - if (theObject.IsNull() || thePoint.IsNull()) return NULL; + if (theObject.IsNull()) return NULL; Handle(GEOM_Function) anOriginal = theObject->GetLastFunction(); if (anOriginal.IsNull()) return NULL; //There is no function which creates an object to be scaled - // Get last functions of the arguments - Handle(GEOM_Function) aPF = thePoint->GetLastFunction(); - //Add a scale function Handle(GEOM_Function) aFunction = theObject->AddFunction(GEOMImpl_ScaleDriver::GetID(), SCALE_SHAPE); @@ -1013,13 +1046,22 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShape //Check if the function is set correctly if (aFunction->GetDriverGUID() != GEOMImpl_ScaleDriver::GetID()) return NULL; + // Set arguments GEOMImpl_IScale aTI (aFunction); aTI.SetShape(anOriginal); - aTI.SetPoint(aPF); aTI.SetFactor(theFactor); + // Set point argument + if (!thePoint.IsNull()) { + Handle(GEOM_Function) aPF = thePoint->GetLastFunction(); + aTI.SetPoint(aPF); + } + //Compute the scale try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Scale driver failed"); return NULL; @@ -1032,14 +1074,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShape } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.ScaleShape("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(thePoint->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += TCollection_AsciiString(theFactor)+")"; - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.ScaleShape(" + << theObject << ", " << thePoint << ", " << theFactor << ")"; SetErrorCode(OK); return theObject; @@ -1055,7 +1091,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShapeCopy { SetErrorCode(KO); - if (theObject.IsNull() || thePoint.IsNull()) return NULL; + if (theObject.IsNull()) return NULL; Handle(GEOM_Function) anOriginal = theObject->GetLastFunction(); if (anOriginal.IsNull()) return NULL; //There is no function which creates an object to be scaled @@ -1071,13 +1107,22 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShapeCopy //Check if the function is set correctly if (aFunction->GetDriverGUID() != GEOMImpl_ScaleDriver::GetID()) return NULL; + // Set arguments GEOMImpl_IScale aTI (aFunction); aTI.SetShape(anOriginal); - aTI.SetPoint(thePoint->GetLastFunction()); aTI.SetFactor(theFactor); + // Set point argument + if (!thePoint.IsNull()) { + Handle(GEOM_Function) aPF = thePoint->GetLastFunction(); + aTI.SetPoint(aPF); + } + //Compute the scale try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Scale driver failed"); return NULL; @@ -1090,20 +1135,92 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShapeCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.ScaleShapeCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(thePoint->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += TCollection_AsciiString(theFactor)+")"; - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeScaleTransform(" + << theObject << ", " << thePoint << ", " << theFactor << ")"; SetErrorCode(OK); return aCopy; } +//============================================================================= +/*! + * ScaleShapeAlongAxes + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ITransformOperations::ScaleShapeAlongAxes (Handle(GEOM_Object) theObject, + Handle(GEOM_Object) thePoint, + double theFactorX, + double theFactorY, + double theFactorZ, + bool doCopy) +{ + SetErrorCode(KO); + + if (theObject.IsNull()) return NULL; + + Handle(GEOM_Function) anOriginal = theObject->GetLastFunction(); + if (anOriginal.IsNull()) return NULL; //There is no function which creates an object to be scaled + + //Add a scale function + Handle(GEOM_Object) aCopy; //Add a new Copy object + Handle(GEOM_Function) aFunction; + if (doCopy) { + aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType()); + aFunction = aCopy->AddFunction(GEOMImpl_ScaleDriver::GetID(), SCALE_SHAPE_AXES_COPY); + } + else { + aFunction = theObject->AddFunction(GEOMImpl_ScaleDriver::GetID(), SCALE_SHAPE_AXES); + } + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_ScaleDriver::GetID()) return NULL; + + // Set arguments + GEOMImpl_IScale aTI (aFunction); + aTI.SetShape(anOriginal); + aTI.SetFactorX(theFactorX); + aTI.SetFactorY(theFactorY); + aTI.SetFactorZ(theFactorZ); + + // Set point (optional argument) + if (!thePoint.IsNull()) { + Handle(GEOM_Function) aPF = thePoint->GetLastFunction(); + aTI.SetPoint(aPF); + } + + //Compute the scale + try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Scale driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + SetErrorCode(OK); + + //Make a Python command + if (doCopy) { + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeScaleAlongAxes(" + << theObject << ", " << thePoint << ", " + << theFactorX << ", " << theFactorY << ", " << theFactorZ << ")"; + return aCopy; + } + + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.ScaleShapeAlongAxes(" + << theObject << ", " << thePoint << ", " + << theFactorX << ", " << theFactorY << ", " << theFactorZ << ")"; + return theObject; +} + //============================================================================= /*! * PositionShape @@ -1114,30 +1231,34 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShape { SetErrorCode(KO); - if (theObject.IsNull() || theStartLCS.IsNull() || theEndLCS.IsNull()) return NULL; + if (theObject.IsNull() || theEndLCS.IsNull()) return NULL; Handle(GEOM_Function) anOriginal = theObject->GetLastFunction(); if (anOriginal.IsNull()) return NULL; //There is no function which creates an object to be set in position - // Get last functions of the arguments - Handle(GEOM_Function) aStartLCS = theStartLCS->GetLastFunction(); - Handle(GEOM_Function) aEndLCS = theEndLCS->GetLastFunction(); - //Add a Position function + Standard_Integer aType = POSITION_SHAPE; + if (theStartLCS.IsNull()) aType = POSITION_SHAPE_FROM_GLOBAL; + Handle(GEOM_Function) aFunction = - theObject->AddFunction(GEOMImpl_PositionDriver::GetID(), POSITION_SHAPE); + theObject->AddFunction(GEOMImpl_PositionDriver::GetID(), aType); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly if (aFunction->GetDriverGUID() != GEOMImpl_PositionDriver::GetID()) return NULL; + //Set operation arguments GEOMImpl_IPosition aTI (aFunction); aTI.SetShape(anOriginal); - aTI.SetStartLCS(aStartLCS); - aTI.SetEndLCS(aEndLCS); + aTI.SetEndLCS(theEndLCS->GetLastFunction()); + if (!theStartLCS.IsNull()) + aTI.SetStartLCS(theObject == theStartLCS ? anOriginal : theStartLCS->GetLastFunction()); //Compute the Position try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Position driver failed"); return NULL; @@ -1150,15 +1271,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShape } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.PositionShape("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theStartLCS->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theEndLCS->GetEntry(), anEntry); - aDescr += (anEntry+") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.PositionShape(" + << theObject << ", " << theStartLCS << ", " << theEndLCS << ")"; SetErrorCode(OK); return theObject; @@ -1174,7 +1288,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShapeCopy { SetErrorCode(KO); - if (theObject.IsNull() || theStartLCS.IsNull() || theEndLCS.IsNull()) return NULL; + if (theObject.IsNull() || theEndLCS.IsNull()) return NULL; Handle(GEOM_Function) anOriginal = theObject->GetLastFunction(); if (anOriginal.IsNull()) return NULL; //There is no function which creates an object to be set in position @@ -1183,8 +1297,11 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShapeCopy Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType()); //Add a position function + Standard_Integer aType = POSITION_SHAPE_COPY; + if (theStartLCS.IsNull()) aType = POSITION_SHAPE_FROM_GLOBAL_COPY; + Handle(GEOM_Function) aFunction = - aCopy->AddFunction(GEOMImpl_PositionDriver::GetID(), POSITION_SHAPE_COPY); + aCopy->AddFunction(GEOMImpl_PositionDriver::GetID(), aType); if (aFunction.IsNull()) return NULL; //Check if the function is set correctly @@ -1192,11 +1309,15 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShapeCopy GEOMImpl_IPosition aTI (aFunction); aTI.SetShape(anOriginal); - aTI.SetStartLCS(theStartLCS->GetLastFunction()); aTI.SetEndLCS(theEndLCS->GetLastFunction()); + if (!theStartLCS.IsNull()) + aTI.SetStartLCS(theStartLCS->GetLastFunction()); //Compute the position try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Position driver failed"); return NULL; @@ -1209,21 +1330,82 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShapeCopy } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(aCopy->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.PositionShapeCopy("); - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theStartLCS->GetEntry(), anEntry); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theEndLCS->GetEntry(), anEntry); - aDescr += (anEntry+")"); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakePosition(" + << theObject << ", " << theStartLCS << ", " << theEndLCS << ")"; SetErrorCode(OK); return aCopy; } +//============================================================================= +/*! + * PositionAlongPath + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionAlongPath + (Handle(GEOM_Object) theObject, Handle(GEOM_Object) thePath, + double theDistance, bool theCopy, bool theReverse) +{ + SetErrorCode(KO); + + if (theObject.IsNull() || thePath.IsNull()) return NULL; + + Handle(GEOM_Function) anOriginal = theObject->GetLastFunction(); + if (anOriginal.IsNull()) return NULL; //There is no function which creates an object to be set in position + + //Add a position function + Handle(GEOM_Function) aFunction; + Handle(GEOM_Object) aCopy; + + if (theCopy) { + aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType()); + aFunction = aCopy->AddFunction(GEOMImpl_PositionDriver::GetID(), POSITION_ALONG_PATH); + } + else + aFunction = theObject->AddFunction(GEOMImpl_PositionDriver::GetID(), POSITION_ALONG_PATH); + + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_PositionDriver::GetID()) return NULL; + + GEOMImpl_IPosition aTI (aFunction); + aTI.SetShape(anOriginal); + aTI.SetPath(thePath->GetLastFunction()); + aTI.SetDistance(theDistance); + aTI.SetReverse(theReverse); + + //Compute the position + try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Position driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + if (theCopy) { + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.PositionAlongPath(" + << theObject << ", " << thePath << ", " << theDistance << ", " << theCopy << ", " << theReverse << ")"; + SetErrorCode(OK); + return aCopy; + } + + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.PositionAlongPath(" + << theObject << ", " << thePath << ", " << theDistance << ", " << theCopy << ", " << theReverse << ")"; + + SetErrorCode(OK); + return theObject; +} + //============================================================================= /*! * Rotate @@ -1258,6 +1440,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate (Handle(GEOM_Object) t //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1270,14 +1455,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate (Handle(GEOM_Object) t } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.Rotate("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theAxis->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theAngle)+") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.Rotate(" << theObject + << ", " << theAxis << ", " << theAngle * 180.0 / PI << "*math.pi/180.0)"; SetErrorCode(OK); return theObject; @@ -1314,6 +1493,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateCopy (Handle(GEOM_Objec //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1326,14 +1508,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateCopy (Handle(GEOM_Objec } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.RotateCopy("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theAxis->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theAngle)+") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeRotation(" << theObject + << ", " << theAxis << ", " << theAngle * 180.0 / PI << "*math.pi/180.0)"; SetErrorCode(OK); return aCopy; @@ -1372,6 +1548,9 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1384,14 +1563,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.Rotate1D("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theAxis->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theNbTimes)+") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MultiRotate1D(" + << theObject << ", " << theAxis << ", " << theNbTimes << ")"; SetErrorCode(OK); return aCopy; @@ -1403,11 +1576,11 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) */ //============================================================================= Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) theObject, - Handle(GEOM_Object) theAxis, - double theAngle, - Standard_Integer theNbTimes1, - double theStep, - Standard_Integer theNbTimes2) + Handle(GEOM_Object) theAxis, + double theAngle, + Standard_Integer theNbTimes1, + double theStep, + Standard_Integer theNbTimes2) { SetErrorCode(KO); @@ -1436,6 +1609,71 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) //Compute the translation try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Rotate driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MultiRotate2D(" + << theObject << ", " << theAxis << ", " << theAngle << ", " + << theNbTimes1 << ", " << theStep << ", " << theNbTimes2 << ")"; + + SetErrorCode(OK); + return aCopy; +} + +//============================================================================= +/*! + * RotateThreePoints + */ +//============================================================================= +Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateThreePoints (Handle(GEOM_Object) theObject, + Handle(GEOM_Object) theCentPoint, + Handle(GEOM_Object) thePoint1, + Handle(GEOM_Object) thePoint2) +{ + SetErrorCode(KO); + + if (theObject.IsNull() || theCentPoint.IsNull() || thePoint1.IsNull() || thePoint2.IsNull()) return NULL; + + Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); + if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated + + // Get last functions of the arguments + Handle(GEOM_Function) aCPF = theCentPoint->GetLastFunction(); + Handle(GEOM_Function) aP1F = thePoint1->GetLastFunction(); + Handle(GEOM_Function) aP2F = thePoint2->GetLastFunction(); + + + //Add a rotate function + aFunction = theObject->AddFunction(GEOMImpl_RotateDriver::GetID(), ROTATE_THREE_POINTS); + + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_RotateDriver::GetID()) return NULL; + + GEOMImpl_IRotate aRI(aFunction); + aRI.SetCentPoint(aCPF); + aRI.SetPoint1(aP1F); + aRI.SetPoint2(aP2F); + aRI.SetOriginal(aLastFunction); + + //Compute the translation + try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (!GetSolver()->ComputeFunction(aFunction)) { SetErrorCode("Rotate driver failed"); return NULL; @@ -1448,18 +1686,67 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) } //Make a Python command - TCollection_AsciiString anEntry, aDescr; - TDF_Tool::Entry(theObject->GetEntry(), anEntry); - aDescr += (anEntry+" = ITransformOperations.Rotate2D("); - aDescr += (anEntry+", "); - TDF_Tool::Entry(theAxis->GetEntry(), anEntry); - aDescr += (anEntry+", "); - aDescr += (TCollection_AsciiString(theAngle)+", "); - aDescr += (TCollection_AsciiString(theNbTimes1)+", "); - aDescr += (TCollection_AsciiString(theStep)+", "); - aDescr += (TCollection_AsciiString(theNbTimes2)+") "); - aFunction->SetDescription(aDescr); + GEOM::TPythonDump(aFunction) << "geompy.TrsfOp.RotateThreePoints(" << theObject + << ", " << theCentPoint << ", "<GetLastFunction(); + if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated + + //Add a new Copy object + Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType()); + + //Add a rotate function + aFunction = aCopy->AddFunction(GEOMImpl_RotateDriver::GetID(), ROTATE_THREE_POINTS_COPY); + if (aFunction.IsNull()) return NULL; + + //Check if the function is set correctly + if (aFunction->GetDriverGUID() != GEOMImpl_RotateDriver::GetID()) return NULL; + + GEOMImpl_IRotate aRI(aFunction); + aRI.SetCentPoint(theCentPoint->GetLastFunction()); + aRI.SetPoint1(thePoint1->GetLastFunction()); + aRI.SetPoint2(thePoint2->GetLastFunction()); + aRI.SetOriginal(aLastFunction); + + //Compute the translation + try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif + if (!GetSolver()->ComputeFunction(aFunction)) { + SetErrorCode("Rotate driver failed"); + return NULL; + } + } + catch (Standard_Failure) { + Handle(Standard_Failure) aFail = Standard_Failure::Caught(); + SetErrorCode(aFail->GetMessageString()); + return NULL; + } + + //Make a Python command + GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MakeRotationThreePoints(" << theObject + << ", " << theCentPoint << ", "<