X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOM_I%2FGEOM_ICurvesOperations_i.cc;h=831ca9bde26c60c58fb30e67ecda1fa5aac46ee4;hb=refs%2Ftags%2FV6_3_0a1;hp=d8f185eceac594f9e0ee57a2935d2feba505b222;hpb=f931ebe5b663153f8e276d607d870aa401a91048;p=modules%2Fgeom.git diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc index d8f185ece..831ca9bde 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.cc +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.cc @@ -1,3 +1,24 @@ +// 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_ICurvesOperations_i.hh" @@ -14,8 +35,8 @@ */ //============================================================================= GEOM_ICurvesOperations_i::GEOM_ICurvesOperations_i (PortableServer::POA_ptr thePOA, - GEOM::GEOM_Gen_ptr theEngine, - ::GEOMImpl_ICurvesOperations* theImpl) + GEOM::GEOM_Gen_ptr theEngine, + ::GEOMImpl_ICurvesOperations* theImpl) :GEOM_IOperations_i(thePOA, theEngine, theImpl) { MESSAGE("GEOM_ICurvesOperations_i::GEOM_ICurvesOperations_i"); @@ -36,25 +57,30 @@ GEOM_ICurvesOperations_i::~GEOM_ICurvesOperations_i() /*! * MakeCirclePntVecR */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCirclePntVecR (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, - CORBA::Double theR) + CORBA::Double theR) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + //if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); - //Get the reference points - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePnt->GetStudyID(), thePnt->GetEntry()); - Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject - (theVec->GetStudyID(), theVec->GetEntry()); - - if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + //Get the arguments + Handle(GEOM_Object) aPnt, aVec; + if (!CORBA::is_nil(thePnt)) { + aPnt = GetObjectImpl(thePnt); + if (aPnt.IsNull()) return aGEOMObject._retn(); + } + if (!CORBA::is_nil(theVec)) { + aVec = GetObjectImpl(theVec); + if (aVec.IsNull()) return aGEOMObject._retn(); + } // Make Circle Handle(GEOM_Object) anObject = @@ -69,25 +95,20 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCirclePntVecR /*! * MakeCircleThreePnt */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCircleThreePnt (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2, - GEOM::GEOM_Object_ptr thePnt3) + GEOM::GEOM_Object_ptr thePnt3) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (thePnt1 == NULL || thePnt2 == NULL || thePnt3 == NULL) return aGEOMObject._retn(); - //Get the reference points - Handle(GEOM_Object) aPnt1 = GetOperations()->GetEngine()->GetObject - (thePnt1->GetStudyID(), thePnt1->GetEntry()); - Handle(GEOM_Object) aPnt2 = GetOperations()->GetEngine()->GetObject - (thePnt2->GetStudyID(), thePnt2->GetEntry()); - Handle(GEOM_Object) aPnt3 = GetOperations()->GetEngine()->GetObject - (thePnt3->GetStudyID(), thePnt3->GetEntry()); + Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1); + Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2); + Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3); if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn(); @@ -100,33 +121,111 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCircleThreePnt return GetObject(anObject); } +//============================================================================= +/*! + * MakeCircleCenter2Pnt + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCircleCenter2Pnt + (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2, + GEOM::GEOM_Object_ptr thePnt3) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference points + Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1); + Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2); + Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3); + + if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn(); + + // Make Circle + Handle(GEOM_Object) anObject = GetOperations()->MakeCircleCenter2Pnt(aPnt1, aPnt2, aPnt3); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakeEllipse */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipse (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, - CORBA::Double theRMajor, double theRMinor) + CORBA::Double theRMajor, double theRMinor) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + //if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); - //Get the reference points - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePnt->GetStudyID(), thePnt->GetEntry()); - Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject - (theVec->GetStudyID(), theVec->GetEntry()); + //Get the arguments + Handle(GEOM_Object) aPnt, aVec, aVecMaj; + if (!CORBA::is_nil(thePnt)) { + aPnt = GetObjectImpl(thePnt); + if (aPnt.IsNull()) return aGEOMObject._retn(); + } + if (!CORBA::is_nil(theVec)) { + aVec = GetObjectImpl(theVec); + if (aVec.IsNull()) return aGEOMObject._retn(); + } - if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + // Make Ellipse + Handle(GEOM_Object) anObject = + GetOperations()->MakeEllipse(aPnt, aVec, theRMajor, theRMinor, aVecMaj); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeEllipseVec + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipseVec + (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, + CORBA::Double theRMajor, double theRMinor, + GEOM::GEOM_Object_ptr theVecMaj) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + // Not set theVecMaj means X axis of global CS + //if (thePnt == NULL || theVec == NULL || theVecMaj == NULL) return aGEOMObject._retn(); + + //Get the arguments + Handle(GEOM_Object) aPnt, aVec, aVecMaj; + if (!CORBA::is_nil(thePnt)) { + aPnt = GetObjectImpl(thePnt); + if (aPnt.IsNull()) return aGEOMObject._retn(); + } + if (!CORBA::is_nil(theVec)) { + aVec = GetObjectImpl(theVec); + if (aVec.IsNull()) return aGEOMObject._retn(); + } + if (!CORBA::is_nil(theVecMaj)) { + aVecMaj = GetObjectImpl(theVecMaj); + if (aVecMaj.IsNull()) return aGEOMObject._retn(); + } // Make Ellipse Handle(GEOM_Object) anObject = - GetOperations()->MakeEllipse(aPnt, aVec, theRMajor, theRMinor); + GetOperations()->MakeEllipse(aPnt, aVec, theRMajor, theRMinor, aVecMaj); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -137,26 +236,21 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipse /*! * MakeArc */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeArc (GEOM::GEOM_Object_ptr thePnt1, - GEOM::GEOM_Object_ptr thePnt2, - GEOM::GEOM_Object_ptr thePnt3) + GEOM::GEOM_Object_ptr thePnt2, + GEOM::GEOM_Object_ptr thePnt3) { GEOM::GEOM_Object_var aGEOMObject; //Set a not done flag GetOperations()->SetNotDone(); - if (thePnt1 == NULL || thePnt2 == NULL || thePnt3 == NULL) return aGEOMObject._retn(); - //Get the reference points - Handle(GEOM_Object) aPnt1 = GetOperations()->GetEngine()->GetObject - (thePnt1->GetStudyID(), thePnt1->GetEntry()); - Handle(GEOM_Object) aPnt2 = GetOperations()->GetEngine()->GetObject - (thePnt2->GetStudyID(), thePnt2->GetEntry()); - Handle(GEOM_Object) aPnt3 = GetOperations()->GetEngine()->GetObject - (thePnt3->GetStudyID(), thePnt3->GetEntry()); + Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1); + Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2); + Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3); if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn(); @@ -169,13 +263,78 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeArc return GetObject(anObject); } + +//============================================================================= +/*! + * MakeArcCenter + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeArcCenter + (GEOM::GEOM_Object_ptr thePnt1, + GEOM::GEOM_Object_ptr thePnt2, + GEOM::GEOM_Object_ptr thePnt3, + CORBA::Boolean theSense) + +{ + GEOM::GEOM_Object_var aGEOMObject; + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference points + Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1); + Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2); + Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3); + + if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn(); + + // Make ArcCenter + Handle(GEOM_Object) anObject = + GetOperations()->MakeArcCenter(aPnt1, aPnt2, aPnt3,theSense); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeArc + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeArcOfEllipse + (GEOM::GEOM_Object_ptr thePnt1, + GEOM::GEOM_Object_ptr thePnt2, + GEOM::GEOM_Object_ptr thePnt3) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + //Get the reference points + Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1); + Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2); + Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3); + + if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn(); + + // Make Arc + Handle(GEOM_Object) anObject = + GetOperations()->MakeArcOfEllipse(aPnt1, aPnt2, aPnt3); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + //============================================================================= /*! * MakePolyline */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline - (const GEOM::ListOfGO& thePoints) + (const GEOM::ListOfGO& thePoints, + CORBA::Boolean theIsClosed) { GEOM::GEOM_Object_var aGEOMObject; @@ -185,20 +344,16 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline //Get the reference point int ind = 0; int aLen = thePoints.length(); - list aPoints; + std::list aPoints; for (; ind < aLen; ind++) { - if (thePoints[ind] == NULL) return aGEOMObject._retn(); - - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePoints[ind]->GetStudyID(), thePoints[ind]->GetEntry()); - + Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]); if (aPnt.IsNull()) return aGEOMObject._retn(); aPoints.push_back(aPnt); } // Make Polyline Handle(GEOM_Object) anObject = - GetOperations()->MakePolyline(aPoints); + GetOperations()->MakePolyline(aPoints, theIsClosed); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -209,9 +364,10 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline /*! * MakeSplineBezier */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineBezier - (const GEOM::ListOfGO& thePoints) + (const GEOM::ListOfGO& thePoints, + CORBA::Boolean theIsClosed) { GEOM::GEOM_Object_var aGEOMObject; @@ -221,20 +377,16 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineBezier //Get the reference point int ind = 0; int aLen = thePoints.length(); - list aPoints; + std::list aPoints; for (; ind < aLen; ind++) { - if (thePoints[ind] == NULL) return aGEOMObject._retn(); - - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePoints[ind]->GetStudyID(), thePoints[ind]->GetEntry()); - + Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]); if (aPnt.IsNull()) return aGEOMObject._retn(); aPoints.push_back(aPnt); } // Make Bezier curve Handle(GEOM_Object) anObject = - GetOperations()->MakeSplineBezier(aPoints); + GetOperations()->MakeSplineBezier(aPoints, theIsClosed); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -245,9 +397,11 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineBezier /*! * MakeSplineInterpolation */ -//============================================================================= +//============================================================================= GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation - (const GEOM::ListOfGO& thePoints) + (const GEOM::ListOfGO& thePoints, + CORBA::Boolean theIsClosed, + CORBA::Boolean theDoReordering) { GEOM::GEOM_Object_var aGEOMObject; @@ -257,20 +411,16 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation //Get the reference point int ind = 0; int aLen = thePoints.length(); - list aPoints; + std::list aPoints; for (; ind < aLen; ind++) { - if (thePoints[ind] == NULL) return aGEOMObject._retn(); - - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePoints[ind]->GetStudyID(), thePoints[ind]->GetEntry()); - + Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]); if (aPnt.IsNull()) return aGEOMObject._retn(); aPoints.push_back(aPnt); } // Make Polyline Handle(GEOM_Object) anObject = - GetOperations()->MakeSplineInterpolation(aPoints); + GetOperations()->MakeSplineInterpolation(aPoints, theIsClosed, theDoReordering); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); @@ -281,50 +431,72 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation /*! * MakeSketcher */ -//============================================================================= -GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSketcher (const char* theCommand, const GEOM::ListOfDouble& theWorkingPlane) +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSketcher + (const char* theCommand, const GEOM::ListOfDouble& theWorkingPlane) { - GEOM::GEOM_Object_var aGEOMObject; - //Set a not done flag GetOperations()->SetNotDone(); int ind = 0; int aLen = theWorkingPlane.length(); - list aWorkingPlane; + std::list aWorkingPlane; for (; ind < aLen; ind++) aWorkingPlane.push_back(theWorkingPlane[ind]); // Make Sketcher Handle(GEOM_Object) anObject = - GetOperations()->MakeSketcher(theCommand, aWorkingPlane); + GetOperations()->MakeSketcher(theCommand, aWorkingPlane); if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); + return GEOM::GEOM_Object::_nil(); return GetObject(anObject); } +//============================================================================= +/*! + * Make3DSketcher + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::Make3DSketcher + (const GEOM::ListOfDouble& theCoordinates) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + + int ind = 0; + int aLen = theCoordinates.length(); + std::list aCoords; + for (; ind < aLen; ind++) + aCoords.push_back(theCoordinates[ind]); + + // Make Sketcher + Handle(GEOM_Object) anObject = + GetOperations()->Make3DSketcher(aCoords); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return GEOM::GEOM_Object::_nil(); + + return GetObject(anObject); +} //============================================================================= /*! * MakeSketcherOnPlane */ -//============================================================================= -GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSketcherOnPlane (const char* theCommand, GEOM::GEOM_Object_ptr theWorkingPlane) +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSketcherOnPlane + (const char* theCommand, GEOM::GEOM_Object_ptr theWorkingPlane) { - GEOM::GEOM_Object_var aGEOMObject; - //Set a not done flag GetOperations()->SetNotDone(); - Handle(GEOM_Object) aWorkingPlane = GetOperations()->GetEngine()->GetObject - (theWorkingPlane->GetStudyID(), theWorkingPlane->GetEntry()); + Handle(GEOM_Object) aWorkingPlane = GetObjectImpl(theWorkingPlane); // Make Sketcher Handle(GEOM_Object) anObject = GetOperations()->MakeSketcherOnPlane(theCommand, aWorkingPlane); if (!GetOperations()->IsDone() || anObject.IsNull()) - return aGEOMObject._retn(); + return GEOM::GEOM_Object::_nil(); return GetObject(anObject); }