X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOM_I%2FGEOM_ITransformOperations_i.cc;h=ef9b61ea6602f897e0fa452653b62d83c8375b5e;hb=22b9c99081495ff0b7c053b9b7e779b105a73044;hp=07f027b5e4ebc793df55233d68114bdbda260580;hpb=d3dd282390888d7dc091ba2c2ffe7923bd7458e6;p=modules%2Fgeom.git diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.cc b/src/GEOM_I/GEOM_ITransformOperations_i.cc index 07f027b5e..ef9b61ea6 100644 --- a/src/GEOM_I/GEOM_ITransformOperations_i.cc +++ b/src/GEOM_I/GEOM_ITransformOperations_i.cc @@ -1,4 +1,26 @@ -using namespace std; +// 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 "GEOM_ITransformOperations_i.hh" @@ -21,8 +43,8 @@ using namespace std; //============================================================================= GEOM_ITransformOperations_i::GEOM_ITransformOperations_i (PortableServer::POA_ptr thePOA, - GEOM::GEOM_Gen_ptr theEngine, - ::GEOMImpl_ITransformOperations* theImpl) + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_ITransformOperations* theImpl) :GEOM_IOperations_i(thePOA, theEngine, theImpl) { MESSAGE("GEOM_ITransformOperations_i::GEOM_ITransformOperations_i"); @@ -44,20 +66,20 @@ GEOM_ITransformOperations_i::~GEOM_ITransformOperations_i() /*! * TranslateTwoPoints */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPoints (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePoint1, - GEOM::GEOM_Object_ptr thePoint2) + GEOM::GEOM_Object_ptr thePoint1, + GEOM::GEOM_Object_ptr thePoint2) { //Set a not done flag GetOperations()->SetNotDone(); GEOM::GEOM_Object_var aGEOMObject; - - if (thePoint1 == NULL || thePoint2 == NULL || theObject == NULL) return aGEOMObject._retn(); + + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } @@ -65,18 +87,15 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPoints aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the first point of translation - Handle(GEOM_Object) aPoint1 = - GetOperations()->GetEngine()->GetObject(thePoint1->GetStudyID(), thePoint1->GetEntry()); + Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1); if (aPoint1.IsNull()) return aGEOMObject._retn(); //Get the second point of translation - Handle(GEOM_Object) aPoint2 = - GetOperations()->GetEngine()->GetObject(thePoint2->GetStudyID(), thePoint2->GetEntry()); + Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2); if (aPoint2.IsNull()) return aGEOMObject._retn(); //Perform the translation @@ -89,32 +108,27 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPoints /*! * TranslateTwoPointsCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPointsCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePoint1, - GEOM::GEOM_Object_ptr thePoint2) + GEOM::GEOM_Object_ptr thePoint1, + GEOM::GEOM_Object_ptr thePoint2) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (thePoint1 == NULL || thePoint2 == NULL || theObject == NULL) return aGEOMObject._retn(); - //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the first point of translation - Handle(GEOM_Object) aPoint1 = - GetOperations()->GetEngine()->GetObject(thePoint1->GetStudyID(), thePoint1->GetEntry()); + Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1); if (aPoint1.IsNull()) return aGEOMObject._retn(); //Get the second point of translation - Handle(GEOM_Object) aPoint2 = - GetOperations()->GetEngine()->GetObject(thePoint2->GetStudyID(), thePoint2->GetEntry()); + Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2); if (aPoint2.IsNull()) return aGEOMObject._retn(); //Create the translated shape @@ -130,18 +144,19 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPointsCopy /*! * TranslateDXDYDZ */ -//============================================================================= -GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZ (GEOM::GEOM_Object_ptr theObject, - CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ) +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZ + (GEOM::GEOM_Object_ptr theObject, + CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ) { //Set a not done flag - GetOperations()->SetNotDone(); - GEOM::GEOM_Object_var aGEOMObject ; + GetOperations()->SetNotDone(); + GEOM::GEOM_Object_var aGEOMObject; - if (theObject == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } @@ -149,8 +164,7 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZ (GEOM::GEOM_O aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Perform the translation @@ -159,29 +173,24 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZ (GEOM::GEOM_O return aGEOMObject._retn(); } - //============================================================================= /*! * TranslateDXDYDZCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZCopy - (GEOM::GEOM_Object_ptr theObject, CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ) + (GEOM::GEOM_Object_ptr theObject, + CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (theObject == NULL) return aGEOMObject._retn(); - //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); - - //Create the translated shape Handle(GEOM_Object) anObject = GetOperations()->TranslateDXDYDZCopy(aBasicObject, theDX, theDY, theDZ); @@ -191,98 +200,137 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZCopy return GetObject(anObject); } - //============================================================================= /*! * TranslateVector */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateVector (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theVector) + GEOM::GEOM_Object_ptr theVector) { //Set a not done flag - GetOperations()->SetNotDone(); + GetOperations()->SetNotDone(); GEOM::GEOM_Object_var aGEOMObject; - if (theObject == NULL || theVector == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } - aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); + aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the vector of translation - Handle(GEOM_Object) aVector = - GetOperations()->GetEngine()->GetObject(theVector->GetStudyID(), theVector->GetEntry()); + Handle(GEOM_Object) aVector = GetObjectImpl(theVector); if (aVector.IsNull()) return aGEOMObject._retn(); - + //Perform the translation - GetOperations()->TranslateVector(anObject, aVector); + GetOperations()->TranslateVector(anObject, aVector); - return aGEOMObject._retn(); + return aGEOMObject._retn(); } - + //============================================================================= /*! * TranslateVectorCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateVectorCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theVector) + GEOM::GEOM_Object_ptr theVector) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || theVector == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the vector of translation - Handle(GEOM_Object) aVector = - GetOperations()->GetEngine()->GetObject(theVector->GetStudyID(), theVector->GetEntry()); + Handle(GEOM_Object) aVector = GetObjectImpl(theVector); if (aVector.IsNull()) return aGEOMObject._retn(); - + //Perform the translation - Handle(GEOM_Object) anObject = GetOperations()->TranslateVectorCopy(aBasicObject, aVector); + Handle(GEOM_Object) anObject = GetOperations()->TranslateVectorCopy(aBasicObject, aVector); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } +//============================================================================= +/*! + * TranslateVectorDistance + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateVectorDistance + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr theVector, + CORBA::Double theDistance, + CORBA::Boolean theCopy) +{ + GEOM::GEOM_Object_var aGEOMObject; + GetOperations()->SetNotDone(); //Set a not done flag + + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); + + //check if the object is a subshape + if (!theCopy && !theObject->IsMainShape()) { + GetOperations()->SetErrorCode(SUBSHAPE_ERROR); + return aGEOMObject._retn(); + } + + if (!theCopy) + aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); + + //Get the object itself + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); + if (aBasicObject.IsNull()) return aGEOMObject._retn(); + + //Get the vector of translation + Handle(GEOM_Object) aVector = GetObjectImpl(theVector); + if (aVector.IsNull()) return aGEOMObject._retn(); + + //Perform the translation + if (theCopy) { + Handle(GEOM_Object) anObject = GetOperations()-> + TranslateVectorDistance(aBasicObject, aVector, theDistance, theCopy); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); + } + + GetOperations()->TranslateVectorDistance(aBasicObject, aVector, theDistance, theCopy); + return aGEOMObject._retn(); +} //============================================================================= /*! * Rotate */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::Rotate (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theAxis, - CORBA::Double theAngle) + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theAngle) { //Set a not done flag - GetOperations()->SetNotDone(); + GetOperations()->SetNotDone(); GEOM::GEOM_Object_var aGEOMObject; - if (theObject == NULL || theAxis == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } @@ -290,298 +338,271 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::Rotate (GEOM::GEOM_Object_ptr aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Get the object itself - Handle(GEOM_Object) anObject = GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the axis of revolution - Handle(GEOM_Object) anAxis = - GetOperations()->GetEngine()->GetObject(theAxis->GetStudyID(), theAxis->GetEntry()); + Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis); if (anAxis.IsNull()) return aGEOMObject._retn(); - + //Perform the rotation - GetOperations()->Rotate(anObject, anAxis, theAngle); + GetOperations()->Rotate(anObject, anAxis, theAngle); - return aGEOMObject._retn(); + return aGEOMObject._retn(); } //============================================================================= /*! * RotateCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theAxis, - CORBA::Double theAngle) + GEOM::GEOM_Object_ptr theAxis, + CORBA::Double theAngle) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || theAxis == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the axis of rotation - Handle(GEOM_Object) anAxis = - GetOperations()->GetEngine()->GetObject(theAxis->GetStudyID(), theAxis->GetEntry()); + Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis); if (anAxis.IsNull()) return aGEOMObject._retn(); - + //Perform the rotation - Handle(GEOM_Object) anObject = GetOperations()->RotateCopy(aBasicObject, anAxis, theAngle); + Handle(GEOM_Object) anObject = GetOperations()->RotateCopy(aBasicObject, anAxis, theAngle); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } - //============================================================================= /*! * MirrorPlane */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPlane (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePlane) + GEOM::GEOM_Object_ptr thePlane) { GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Set a not done flag - GetOperations()->SetNotDone(); + GetOperations()->SetNotDone(); - if (theObject == NULL || thePlane == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the plane - Handle(GEOM_Object) aPlane = - GetOperations()->GetEngine()->GetObject(thePlane->GetStudyID(), thePlane->GetEntry()); + Handle(GEOM_Object) aPlane = GetObjectImpl(thePlane); if (aPlane.IsNull()) return aGEOMObject._retn(); //Perform the mirror - GetOperations()->MirrorPlane(anObject, aPlane); + GetOperations()->MirrorPlane(anObject, aPlane); - return aGEOMObject._retn(); + return aGEOMObject._retn(); } - + //============================================================================= /*! * MirrorPlaneCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPlaneCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePlane) + GEOM::GEOM_Object_ptr thePlane) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || thePlane == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the vector of translation - Handle(GEOM_Object) aPlane = - GetOperations()->GetEngine()->GetObject(thePlane->GetStudyID(), thePlane->GetEntry()); + Handle(GEOM_Object) aPlane = GetObjectImpl(thePlane); if (aPlane.IsNull()) return aGEOMObject._retn(); - + //Perform the mirror - Handle(GEOM_Object) anObject = GetOperations()->MirrorPlaneCopy(aBasicObject, aPlane); + Handle(GEOM_Object) anObject = GetOperations()->MirrorPlaneCopy(aBasicObject, aPlane); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } //============================================================================= /*! * MirrorAxis */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorAxis (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theAxis) + GEOM::GEOM_Object_ptr theAxis) { GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Set a not done flag - GetOperations()->SetNotDone(); + GetOperations()->SetNotDone(); - if (theObject == NULL || theAxis == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the axis - Handle(GEOM_Object) aAxis = - GetOperations()->GetEngine()->GetObject(theAxis->GetStudyID(), theAxis->GetEntry()); + Handle(GEOM_Object) aAxis = GetObjectImpl(theAxis); if (aAxis.IsNull()) return aGEOMObject._retn(); //Perform the mirror - GetOperations()->MirrorAxis(anObject, aAxis); + GetOperations()->MirrorAxis(anObject, aAxis); - return aGEOMObject._retn(); + return aGEOMObject._retn(); } - + //============================================================================= /*! * MirrorAxisCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorAxisCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theAxis) + GEOM::GEOM_Object_ptr theAxis) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || theAxis == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the vector of translation - Handle(GEOM_Object) aAxis = - GetOperations()->GetEngine()->GetObject(theAxis->GetStudyID(), theAxis->GetEntry()); + Handle(GEOM_Object) aAxis = GetObjectImpl(theAxis); if (aAxis.IsNull()) return aGEOMObject._retn(); - + //Perform the mirror - Handle(GEOM_Object) anObject = GetOperations()->MirrorAxisCopy(aBasicObject, aAxis); + Handle(GEOM_Object) anObject = GetOperations()->MirrorAxisCopy(aBasicObject, aAxis); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } //============================================================================= /*! * MirrorPoint */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPoint (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePoint) + GEOM::GEOM_Object_ptr thePoint) { GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Set a not done flag - GetOperations()->SetNotDone(); + GetOperations()->SetNotDone(); - if (theObject == NULL || thePoint == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the point - Handle(GEOM_Object) aPoint = - GetOperations()->GetEngine()->GetObject(thePoint->GetStudyID(), thePoint->GetEntry()); + Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint); if (aPoint.IsNull()) return aGEOMObject._retn(); //Perform the mirror - GetOperations()->MirrorPoint(anObject, aPoint); + GetOperations()->MirrorPoint(anObject, aPoint); - return aGEOMObject._retn(); + return aGEOMObject._retn(); } - + //============================================================================= /*! * MirrorPointCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPointCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePoint) + GEOM::GEOM_Object_ptr thePoint) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || thePoint == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the vector of translation - Handle(GEOM_Object) aPoint = - GetOperations()->GetEngine()->GetObject(thePoint->GetStudyID(), thePoint->GetEntry()); + Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint); if (aPoint.IsNull()) return aGEOMObject._retn(); - + //Perform the mirror - Handle(GEOM_Object) anObject = GetOperations()->MirrorPointCopy(aBasicObject, aPoint); + Handle(GEOM_Object) anObject = GetOperations()->MirrorPointCopy(aBasicObject, aPoint); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } - //============================================================================= /*! * OffsetShape */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::OffsetShape (GEOM::GEOM_Object_ptr theObject, - CORBA::Double theOffset) + CORBA::Double theOffset) { GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Set a not done flag GetOperations()->SetNotDone(); - if (theObject == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } - //Get the basic object - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Create the offset shape @@ -594,21 +615,18 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::OffsetShape /*! * OffsetShapeCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::OffsetShapeCopy (GEOM::GEOM_Object_ptr theObject, - CORBA::Double theOffset) + CORBA::Double theOffset) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (theObject == NULL) return aGEOMObject._retn(); - //Get the basic object - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Create the offset shape @@ -619,39 +637,39 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::OffsetShapeCopy return GetObject(anObject); } - //============================================================================= /*! * ScaleShape */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShape (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePoint, - CORBA::Double theFactor) + GEOM::GEOM_Object_ptr thePoint, + CORBA::Double theFactor) { GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Set a not done flag GetOperations()->SetNotDone(); - if (thePoint == NULL || theObject == NULL) return aGEOMObject._retn(); + if (theObject->_is_nil()) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } //Get the object itself - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); //Get the point - Handle(GEOM_Object) aPoint = - GetOperations()->GetEngine()->GetObject(thePoint->GetStudyID(), thePoint->GetEntry()); - if (aPoint.IsNull()) return aGEOMObject._retn(); + Handle(GEOM_Object) aPoint; + if (!thePoint->_is_nil()) { + aPoint = GetObjectImpl(thePoint); + if (aPoint.IsNull()) return aGEOMObject._retn(); + } //Perform the scale GetOperations()->ScaleShape(anObject, aPoint, theFactor); @@ -663,28 +681,27 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShape /*! * ScaleShapeCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr thePoint, - CORBA::Double theFactor) + GEOM::GEOM_Object_ptr thePoint, + CORBA::Double theFactor) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (thePoint == NULL || theObject == NULL) return aGEOMObject._retn(); - //Get the basic object - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the point - Handle(GEOM_Object) aPoint = - GetOperations()->GetEngine()->GetObject(thePoint->GetStudyID(), thePoint->GetEntry()); - if (aPoint.IsNull()) return aGEOMObject._retn(); + Handle(GEOM_Object) aPoint; + if (!thePoint->_is_nil()) { + aPoint = GetObjectImpl(thePoint); + if (aPoint.IsNull()) return aGEOMObject._retn(); + } //Perform the scale Handle(GEOM_Object) anObject = @@ -695,43 +712,123 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeCopy return GetObject(anObject); } +//============================================================================= +/*! + * ScaleShapeAlongAxes + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeAlongAxes + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr thePoint, + CORBA::Double theFactorX, + CORBA::Double theFactorY, + CORBA::Double theFactorZ) +{ + GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); + + //Set a not done flag + GetOperations()->SetNotDone(); + + if (theObject->_is_nil()) return aGEOMObject._retn(); + + //check if the object is a subshape + if (!theObject->IsMainShape()) { + GetOperations()->SetErrorCode(SUBSHAPE_ERROR); + return aGEOMObject._retn(); + } + + //Get the object itself + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); + if (anObject.IsNull()) return aGEOMObject._retn(); + + //Get the point + Handle(GEOM_Object) aPoint; + if (!thePoint->_is_nil()) { + aPoint = GetObjectImpl(thePoint); + if (aPoint.IsNull()) return aGEOMObject._retn(); + } + + //Perform the scale + GetOperations()->ScaleShapeAlongAxes + (anObject, aPoint, theFactorX, theFactorY, theFactorZ, /*doCopy*/false); + + return aGEOMObject._retn(); +} + +//============================================================================= +/*! + * ScaleShapeAlongAxesCopy + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeAlongAxesCopy + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr thePoint, + CORBA::Double theFactorX, + CORBA::Double theFactorY, + CORBA::Double theFactorZ) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the basic object + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); + if (aBasicObject.IsNull()) return aGEOMObject._retn(); + + //Get the point + Handle(GEOM_Object) aPoint; + if (!thePoint->_is_nil()) { + aPoint = GetObjectImpl(thePoint); + if (aPoint.IsNull()) return aGEOMObject._retn(); + } + + //Perform the scale + Handle(GEOM_Object) anObject = GetOperations()->ScaleShapeAlongAxes + (aBasicObject, aPoint, theFactorX, theFactorY, theFactorZ, /*doCopy*/true); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * PositionShape */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionShape (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theStartLCS, - GEOM::GEOM_Object_ptr theEndLCS) + GEOM::GEOM_Object_ptr theStartLCS, + GEOM::GEOM_Object_ptr theEndLCS) { GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); //Set a not done flag GetOperations()->SetNotDone(); - if (theObject == NULL || theStartLCS == NULL || theEndLCS == NULL) + if (CORBA::is_nil(theObject) || CORBA::is_nil(theEndLCS)) return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } //Get the basic object - Handle(GEOM_Object) anObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); if (anObject.IsNull()) return aGEOMObject._retn(); - //Get the Start LCS - Handle(GEOM_Object) aStartLCS = - GetOperations()->GetEngine()->GetObject(theStartLCS->GetStudyID(), theStartLCS->GetEntry()); - if (aStartLCS.IsNull()) return aGEOMObject._retn(); + //Get the Start LCS (may be NULL for positioning from global LCS) + Handle(GEOM_Object) aStartLCS; + if (!CORBA::is_nil(theStartLCS)) { + aStartLCS = GetObjectImpl(theStartLCS); + if (aStartLCS.IsNull()) return aGEOMObject._retn(); + } //Get the End LCS - Handle(GEOM_Object) aEndLCS = - GetOperations()->GetEngine()->GetObject(theEndLCS->GetStudyID(), theEndLCS->GetEntry()); + Handle(GEOM_Object) aEndLCS = GetObjectImpl(theEndLCS); if (aEndLCS.IsNull()) return aGEOMObject._retn(); //Perform the Position @@ -744,33 +841,30 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionShape /*! * PositionShapeCopy */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionShapeCopy (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theStartLCS, - GEOM::GEOM_Object_ptr theEndLCS) + GEOM::GEOM_Object_ptr theStartLCS, + GEOM::GEOM_Object_ptr theEndLCS) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (theObject == NULL || theStartLCS == NULL || theEndLCS == NULL) - return aGEOMObject._retn(); - //Get the basic object - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); - //Get the Start LCS - Handle(GEOM_Object) aStartLCS = - GetOperations()->GetEngine()->GetObject(theStartLCS->GetStudyID(), theStartLCS->GetEntry()); - if (aStartLCS.IsNull()) return aGEOMObject._retn(); + //Get the Start LCS (may be NULL for positioning from global LCS) + Handle(GEOM_Object) aStartLCS; + if (!CORBA::is_nil(theStartLCS)) { + aStartLCS = GetObjectImpl(theStartLCS); + if (aStartLCS.IsNull()) return aGEOMObject._retn(); + } //Get the End LCS - Handle(GEOM_Object) aEndLCS = - GetOperations()->GetEngine()->GetObject(theEndLCS->GetStudyID(), theEndLCS->GetEntry()); + Handle(GEOM_Object) aEndLCS = GetObjectImpl(theEndLCS); if (aEndLCS.IsNull()) return aGEOMObject._retn(); //Perform the position @@ -784,161 +878,282 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionShapeCopy //============================================================================= /*! - * MultiTranslate1D + * PositionAlongPath */ -//============================================================================= -GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate1D (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr theVector, CORBA::Double theStep, CORBA::Long theNbTimes) +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionAlongPath + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr thePath, + CORBA::Double theDistance, + CORBA::Boolean theCopy, + CORBA::Boolean theReverse) { GEOM::GEOM_Object_var aGEOMObject; - //Set a not done flag - GetOperations()->SetNotDone(); + //Set a not done flag + GetOperations()->SetNotDone(); - if (theObject == NULL || theVector == NULL) return aGEOMObject._retn(); + //Get the basic object + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); + if (aBasicObject.IsNull()) return aGEOMObject._retn(); - //check if the object is a subshape - if(!theObject->IsMainShape()) { - GetOperations()->SetErrorCode(SUBSHAPE_ERROR); - return aGEOMObject._retn(); - } - - //Get the object itself - Handle(GEOM_Object) aBasicObject = GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); - if (aBasicObject.IsNull()) return aGEOMObject._retn(); - - //Get the vector of translation - Handle(GEOM_Object) aVector = GetOperations()->GetEngine()->GetObject(theVector->GetStudyID(), theVector->GetEntry()); - if (aVector.IsNull()) return aGEOMObject._retn(); - - //Perform the translation - Handle(GEOM_Object) anObject = GetOperations()->Translate1D(aBasicObject, aVector, theStep, theNbTimes); - if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - - return GetObject(anObject); + //Get the path object + Handle(GEOM_Object) aPathObject = GetObjectImpl(thePath); + if (aPathObject.IsNull()) return aGEOMObject._retn(); + + //Perform the position + Handle(GEOM_Object) anObject = + GetOperations()->PositionAlongPath(aBasicObject, aPathObject, theDistance, theCopy, theReverse); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); } //============================================================================= /*! - * MultiTranslate2D + * MultiTranslate1D */ -//============================================================================= -GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate2D (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theVector1, - CORBA::Double theStep1, - CORBA::Long theNbTimes1, - GEOM::GEOM_Object_ptr theVector2, - CORBA::Double theStep2, - CORBA::Long theNbTimes2) +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate1D + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr theVector, + CORBA::Double theStep, CORBA::Long theNbTimes) { + //Set a not done flag + GetOperations()->SetNotDone(); + GEOM::GEOM_Object_var aGEOMObject; + //Get the object itself + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); + if (aBasicObject.IsNull()) return aGEOMObject._retn(); + + //Get the vector of translation + Handle(GEOM_Object) aVector = GetObjectImpl(theVector); + if (aVector.IsNull()) return aGEOMObject._retn(); + + //Perform the translation + Handle(GEOM_Object) anObject = + GetOperations()->Translate1D(aBasicObject, aVector, theStep, theNbTimes); + if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MultiTranslate2D + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate2D (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr theVector1, + CORBA::Double theStep1, + CORBA::Long theNbTimes1, + GEOM::GEOM_Object_ptr theVector2, + CORBA::Double theStep2, + CORBA::Long theNbTimes2) +{ //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || theVector1 == NULL || theVector2 == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); - //check if the object is a subshape - if(!theObject->IsMainShape()) { - GetOperations()->SetErrorCode(SUBSHAPE_ERROR); - return aGEOMObject._retn(); - } + GEOM::GEOM_Object_var aGEOMObject; //Get the object itself - Handle(GEOM_Object) aBasicObject = GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the vector1 of translation - Handle(GEOM_Object) aVector1 = GetOperations()->GetEngine()->GetObject(theVector1->GetStudyID(), theVector1->GetEntry()); + Handle(GEOM_Object) aVector1 = GetObjectImpl(theVector1); if (aVector1.IsNull()) return aGEOMObject._retn(); - //Get the vector2 of translation - Handle(GEOM_Object) aVector2 = GetOperations()->GetEngine()->GetObject(theVector2->GetStudyID(), theVector2->GetEntry()); + //Get the vector2 of translation + Handle(GEOM_Object) aVector2 = GetObjectImpl(theVector2); if (aVector2.IsNull()) return aGEOMObject._retn(); - + //Perform the translation - Handle(GEOM_Object) anObject = GetOperations()->Translate2D(aBasicObject, aVector1, theStep1, theNbTimes1, aVector2, theStep2, theNbTimes2); + Handle(GEOM_Object) anObject = GetOperations()->Translate2D + (aBasicObject, aVector1, theStep1, theNbTimes1, aVector2, theStep2, theNbTimes2); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } //============================================================================= /*! * MultiRotate1D */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate1D (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theVector, - CORBA::Long theNbTimes) + GEOM::GEOM_Object_ptr theVector, + CORBA::Long theNbTimes) { - GEOM::GEOM_Object_var aGEOMObject; - //Set a not done flag - GetOperations()->SetNotDone(); - - if (theObject == NULL || theVector == NULL) return aGEOMObject._retn(); + GetOperations()->SetNotDone(); - //check if the object is a subshape - if(!theObject->IsMainShape()) { - GetOperations()->SetErrorCode(SUBSHAPE_ERROR); - return aGEOMObject._retn(); - } + GEOM::GEOM_Object_var aGEOMObject; //Get the object itself - Handle(GEOM_Object) aBasicObject = - GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); //Get the a directon of rotation - Handle(GEOM_Object) aVector = GetOperations()->GetEngine()->GetObject(theVector->GetStudyID(), theVector->GetEntry()); + Handle(GEOM_Object) aVector = GetObjectImpl(theVector); if (aVector.IsNull()) return aGEOMObject._retn(); - //Perform the rotation - Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theNbTimes); + Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theNbTimes); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); - return GetObject(anObject); + return GetObject(anObject); } //============================================================================= /*! * MultiRotate2D */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2D (GEOM::GEOM_Object_ptr theObject, - GEOM::GEOM_Object_ptr theVector, - CORBA::Double theAngle, - CORBA::Long theNbTimes1, - CORBA::Double theStep, - CORBA::Long theNbTimes2) + GEOM::GEOM_Object_ptr theVector, + CORBA::Double theAngle, + CORBA::Long theNbTimes1, + CORBA::Double theStep, + CORBA::Long theNbTimes2) { + //Set a not done flag + GetOperations()->SetNotDone(); + GEOM::GEOM_Object_var aGEOMObject; + //Get the object itself + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); + if (aBasicObject.IsNull()) return aGEOMObject._retn(); + + //Get the a directon of rotation + Handle(GEOM_Object) aVector = GetObjectImpl(theVector); + if (aVector.IsNull()) return aGEOMObject._retn(); + + //Perform the rotation + Handle(GEOM_Object) anObject = GetOperations()->Rotate2D + (aBasicObject, aVector, theAngle, theNbTimes1, theStep, theNbTimes2); + if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * RotateThreePoints + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateThreePoints + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr theCentPoint, + GEOM::GEOM_Object_ptr thePoint1, + GEOM::GEOM_Object_ptr thePoint2) +{ //Set a not done flag - GetOperations()->SetNotDone(); + GetOperations()->SetNotDone(); + GEOM::GEOM_Object_var aGEOMObject; - if (theObject == NULL || theVector == NULL) return aGEOMObject._retn(); + if (CORBA::is_nil(theObject)) + return aGEOMObject._retn(); //check if the object is a subshape - if(!theObject->IsMainShape()) { + if (!theObject->IsMainShape()) { GetOperations()->SetErrorCode(SUBSHAPE_ERROR); return aGEOMObject._retn(); } + aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); + + //Get the object itself + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); + if (anObject.IsNull()) return aGEOMObject._retn(); + + //Get the central point of rotation + Handle(GEOM_Object) aCentPoint = GetObjectImpl(theCentPoint); + if (aCentPoint.IsNull()) return aGEOMObject._retn(); + + //Get the first point + Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1); + if (aPoint1.IsNull()) return aGEOMObject._retn(); + + //Get the second point + Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2); + if (aPoint2.IsNull()) return aGEOMObject._retn(); + + //Perform the translation + GetOperations()->RotateThreePoints(anObject, aCentPoint, aPoint1, aPoint2); + + return aGEOMObject._retn(); +} + +//============================================================================= +/*! + * RotateThreePointsCopy + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateThreePointsCopy + (GEOM::GEOM_Object_ptr theObject, + GEOM::GEOM_Object_ptr theCentPoint, + GEOM::GEOM_Object_ptr thePoint1, + GEOM::GEOM_Object_ptr thePoint2) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + //Get the object itself - Handle(GEOM_Object) aBasicObject = GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), theObject->GetEntry()); + Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject); if (aBasicObject.IsNull()) return aGEOMObject._retn(); + //Get the central point of rotation + Handle(GEOM_Object) aCentPoint = GetObjectImpl(theCentPoint); + if (aCentPoint.IsNull()) return aGEOMObject._retn(); - //Get the a directon of rotation - Handle(GEOM_Object) aVector = GetOperations()->GetEngine()->GetObject(theVector->GetStudyID(), theVector->GetEntry()); - if (aVector.IsNull()) return aGEOMObject._retn(); + //Get the first point + Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1); + if (aPoint1.IsNull()) return aGEOMObject._retn(); + + //Get the second point + Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2); + if (aPoint2.IsNull()) return aGEOMObject._retn(); - //Perform the rotation - Handle(GEOM_Object) anObject = GetOperations()->Rotate2D(aBasicObject, aVector, theAngle, theNbTimes1, theStep, theNbTimes2); - if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); + Handle(GEOM_Object) anObject = + GetOperations()->RotateThreePointsCopy(aBasicObject, aCentPoint, aPoint1, aPoint2); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} - return GetObject(anObject); +//============================================================================= +/*! + * RecomputeObject + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RecomputeObject + (GEOM::GEOM_Object_ptr theObject) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + GEOM::GEOM_Object_var aGEOMObject; + + if (CORBA::is_nil(theObject)) return aGEOMObject._retn(); + + aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); + + //Get the object itself + Handle(GEOM_Object) anObject = GetObjectImpl(theObject); + if (anObject.IsNull()) return aGEOMObject._retn(); + + //Perform the recomputation + Handle(GEOM_Function) aLastFunction = anObject->GetLastFunction(); + if (aLastFunction.IsNull()) return aGEOMObject._retn(); + GetOperations()->GetSolver()->ComputeFunction(aLastFunction); + + return aGEOMObject._retn(); }