+ 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();
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ if (CORBA::is_nil(theObject))
+ return aGEOMObject._retn();
+
+ //check if the object is a subshape
+ 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 = 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 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()->RotateThreePointsCopy(aBasicObject, aCentPoint, aPoint1, aPoint2);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ 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();