-using namespace std;
+// Copyright (C) 2007-2022 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, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include <Standard_Stream.hxx>
#include "GEOM_I3DPrimOperations_i.hh"
#include "GEOM_Engine.hxx"
#include "GEOM_Object.hxx"
+#define SUBSHAPE_ERROR "Sub shape cannot be transformed"
+
//=============================================================================
/*!
* constructor:
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxDXDYDZ (CORBA::Double theDX,
- CORBA::Double theDY,
- CORBA::Double theDZ)
+ CORBA::Double theDY,
+ CORBA::Double theDZ)
{
GEOM::GEOM_Object_var aGEOMObject;
GetOperations()->SetNotDone();
//Create the Box
- Handle(GEOM_Object) anObject = GetOperations()->MakeBoxDXDYDZ(theDX, theDY, theDZ);
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeBoxDXDYDZ(theDX, theDY, theDZ);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//Set a not done flag
GetOperations()->SetNotDone();
- if (thePnt1 == NULL || thePnt2 == 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) aPnt1 = GetObjectImpl(thePnt1);
+ Handle(::GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
if (aPnt1.IsNull() || aPnt2.IsNull()) return aGEOMObject._retn();
//Create the Box
- Handle(GEOM_Object) anObject = GetOperations()->MakeBoxTwoPnt(aPnt1, aPnt2);
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeBoxTwoPnt(aPnt1, aPnt2);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeFaceHW
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
+ CORBA::Double theW,
+ CORBA::Short theOrientation)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ if (theH == 0 || theW == 0)
+ return aGEOMObject._retn();
+
+ //Create the Face
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW, theOrientation);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeFaceObjHW
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceObjHW
+ (GEOM::GEOM_Object_ptr theObj,
+ CORBA::Double theH,
+ CORBA::Double theW)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference object
+ Handle(::GEOM_Object) anObj = GetObjectImpl(theObj);
+
+ if (anObj.IsNull())
+ return aGEOMObject._retn();
+
+ //Create the Face
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeFaceObjHW(anObj, theH, theW);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeDiskPntVecR
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskPntVecR
+ (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
+ CORBA::Double theR)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference points
+ Handle(::GEOM_Object) aPnt = GetObjectImpl(thePnt);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
+
+ if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
+
+ // Make Disk
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakeDiskPntVecR(aPnt, aVec, theR);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeDiskThreePnt
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskThreePnt
+ (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 Disk
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakeDiskThreePnt(aPnt1, aPnt2, aPnt3);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeDiskR
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR,
+ CORBA::Short theOrientation)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ if (theR == 0)
+ return aGEOMObject._retn();
+
+ //Create the Face
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeDiskR(theR, theOrientation);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR,
- CORBA::Double theH)
+ CORBA::Double theH)
{
GEOM::GEOM_Object_var aGEOMObject;
GetOperations()->SetNotDone();
//Create the Cylinder
- Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH);
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeCylinderRHA
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRHA (CORBA::Double theR,
+ CORBA::Double theH,
+ CORBA::Double theA)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Create the Cylinder
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeCylinderRHA(theR, theH, theA);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH
(GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
- CORBA::Double theR, CORBA::Double theH)
+ CORBA::Double theR, CORBA::Double theH)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn();
+ //Get the reference points
+ Handle(::GEOM_Object) aPnt = GetObjectImpl(thePnt);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
+
+ if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
+
+ //Create the Cylinder
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeCylinderPntVecRHA
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRHA
+ (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
+ CORBA::Double theR, CORBA::Double theH, CORBA::Double theA)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
//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());
+ Handle(::GEOM_Object) aPnt = GetObjectImpl(thePnt);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
//Create the Cylinder
- Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH);
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRHA(aPnt, aVec, theR, theH, theA);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConeR1R2H (CORBA::Double theR1,
- CORBA::Double theR2,
- CORBA::Double theH)
+ CORBA::Double theR2,
+ CORBA::Double theH)
{
GEOM::GEOM_Object_var aGEOMObject;
GetOperations()->SetNotDone();
//Create the Cone
- Handle(GEOM_Object) anObject = GetOperations()->MakeConeR1R2H(theR1, theR2, theH);
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeConeR1R2H(theR1, theR2, theH);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConePntVecR1R2H
(GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
- CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH)
+ CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- 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());
+ Handle(::GEOM_Object) aPnt = GetObjectImpl(thePnt);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
//Create the Cone
- Handle(GEOM_Object) anObject =
+ Handle(::GEOM_Object) anObject =
GetOperations()->MakeConePntVecR1R2H(aPnt, aVec, theR1, theR2, theH);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
GetOperations()->SetNotDone();
//Create the Cone
- Handle(GEOM_Object) anObject = GetOperations()->MakeSphereR(theR);
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeSphereR(theR);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//Set a not done flag
GetOperations()->SetNotDone();
- if (thePnt == NULL) return aGEOMObject._retn();
-
//Get the reference point
- Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject
- (thePnt->GetStudyID(), thePnt->GetEntry());
+ Handle(::GEOM_Object) aPnt = GetObjectImpl(thePnt);
if (aPnt.IsNull()) return aGEOMObject._retn();
//Create the Sphere
- Handle(GEOM_Object) anObject =
- GetOperations()->MakeSpherePntR(aPnt, theR);
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakeSpherePntR(aPnt, theR);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
GetOperations()->SetNotDone();
// Make Torus
- Handle(GEOM_Object) anObject =
+ Handle(::GEOM_Object) anObject =
GetOperations()->MakeTorusRR(theRMajor, theRMinor);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusPntVecRR
(GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
- CORBA::Double theRMajor, CORBA::Double theRMinor)
+ CORBA::Double theRMajor, CORBA::Double theRMinor)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- 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());
+ Handle(::GEOM_Object) aPnt = GetObjectImpl(thePnt);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
// Make Torus
- Handle(GEOM_Object) anObject =
+ Handle(::GEOM_Object) anObject =
GetOperations()->MakeTorusPntVecRR(aPnt, aVec, theRMajor, theRMinor);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
(GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
- CORBA::Double theH)
+ CORBA::Double theH)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- if (theBase == NULL || theVec == NULL) return aGEOMObject._retn();
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
+
+ if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismVecH(aBase, aVec, theH);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePrismVecH2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
+ (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
+ CORBA::Double theH)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
//Get the reference objects
- Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
- (theBase->GetStudyID(), theBase->GetEntry());
- Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject
- (theVec->GetStudyID(), theVec->GetEntry());
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
//Create the Prism
- Handle(GEOM_Object) anObject =
- GetOperations()->MakePrismVecH(aBase, aVec, theH);
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePrismVecH
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecHWithScaling
+ (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
+ CORBA::Double theH, CORBA::Double theScaleFactor)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
+
+ if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismVecH(aBase, aVec, theH, theScaleFactor);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt
(GEOM::GEOM_Object_ptr theBase,
- 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 (theBase == NULL || thePoint1 == NULL || thePoint2 == NULL)
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
+ Handle(::GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
+
+ if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
+ return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePrismTwoPnt2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
+ (GEOM::GEOM_Object_ptr theBase,
+ GEOM::GEOM_Object_ptr thePoint1,
+ GEOM::GEOM_Object_ptr thePoint2)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
//Get the reference objects
- Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
- (theBase->GetStudyID(), theBase->GetEntry());
- Handle(GEOM_Object) aPoint1 = GetOperations()->GetEngine()->GetObject
- (thePoint1->GetStudyID(), thePoint1->GetEntry());
- Handle(GEOM_Object) aPoint2 = GetOperations()->GetEngine()->GetObject
- (thePoint2->GetStudyID(), thePoint2->GetEntry());
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
+ Handle(::GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
return aGEOMObject._retn();
//Create the Prism
- Handle(GEOM_Object) anObject =
- GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2);
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
//=============================================================================
/*!
- * MakePipe
+ * MakePrismTwoPnt
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPntWithScaling
+ (GEOM::GEOM_Object_ptr theBase,
+ GEOM::GEOM_Object_ptr thePoint1,
+ GEOM::GEOM_Object_ptr thePoint2,
+ CORBA::Double theScaleFactor)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
+ Handle(::GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
+
+ if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
+ return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2, theScaleFactor);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePrismDXDYDZ
*/
//=============================================================================
-GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe
- (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath)
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ
+ (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
+ CORBA::Double theDY, CORBA::Double theDZ)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- if (theBase == NULL || thePath == NULL) return aGEOMObject._retn();
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+
+ if (aBase.IsNull()) return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePrismDXDYDZ2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ2Ways
+ (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
+ CORBA::Double theDY, CORBA::Double theDZ)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
//Get the reference objects
- Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
- (theBase->GetStudyID(), theBase->GetEntry());
- Handle(GEOM_Object) aPath = GetOperations()->GetEngine()->GetObject
- (thePath->GetStudyID(), thePath->GetEntry());
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
- if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn();
+ if (aBase.IsNull()) return aGEOMObject._retn();
- //Create the Pipe
- Handle(GEOM_Object) anObject =
- GetOperations()->MakePipe(aBase, aPath);
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismDXDYDZ2Ways(aBase, theDX, theDY, theDZ);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePrismDXDYDZ
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZWithScaling
+ (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
+ CORBA::Double theDY, CORBA::Double theDZ,
+ CORBA::Double theScaleFactor)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+
+ if (aBase.IsNull()) return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ, theScaleFactor);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeDraftPrism
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDraftPrism
+ (GEOM::GEOM_Object_ptr theInitShape, GEOM::GEOM_Object_ptr theBase,
+ CORBA::Double theHeight,
+ CORBA::Double theAngle,
+ CORBA::Boolean theFuse,
+ CORBA::Boolean theInvert)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference objects
+ Handle(::GEOM_Object) aInit = GetObjectImpl(theInitShape);
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+
+ if (aBase.IsNull() || aInit.IsNull()) return aGEOMObject._retn();
+
+ //Create the Prism
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeDraftPrism(aInit, aBase, theHeight, theAngle, theFuse, theInvert);
+
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
+//=============================================================================
+/*!
+ * MakePipe
+ */
+//=============================================================================
+GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipe
+ (GEOM::GEOM_Object_ptr theBase,
+ GEOM::GEOM_Object_ptr thePath,
+ CORBA::Boolean IsGenerateGroups)
+{
+ GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aPath = GetObjectImpl(thePath);
+
+ if (aBase.IsNull() || aPath.IsNull()) return aSeq._retn();
+
+ //Create the Pipe
+ Handle(TColStd_HSequenceOfTransient) aHSeq =
+ GetOperations()->MakePipe(aBase, aPath, IsGenerateGroups);
+ if (!GetOperations()->IsDone() || aHSeq.IsNull())
+ return aSeq._retn();
+
+ Standard_Integer aLength = aHSeq->Length();
+ aSeq->length(aLength);
+ for (Standard_Integer i = 1; i <= aLength; i++)
+ aSeq[i-1] = GetObject(Handle(::GEOM_Object)::DownCast(aHSeq->Value(i)));
+
+ return aSeq._retn();
+}
+
//=============================================================================
/*!
* MakeRevolutionAxisAngle
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
(GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
- CORBA::Double theAngle)
+ CORBA::Double theAngle)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- if (theBase == NULL || theAxis == NULL) return aGEOMObject._retn();
-
//Get the reference objects
- Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
- (theBase->GetStudyID(), theBase->GetEntry());
- Handle(GEOM_Object) anAxis = GetOperations()->GetEngine()->GetObject
- (theAxis->GetStudyID(), theAxis->GetEntry());
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) anAxis = GetObjectImpl(theAxis);
if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
//Create the Revolution
- Handle(GEOM_Object) anObject =
+ Handle(::GEOM_Object) anObject =
GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
+//=============================================================================
+/*!
+ * MakeRevolutionAxisAngle2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
+ (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
+ CORBA::Double theAngle)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference objects
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) anAxis = GetObjectImpl(theAxis);
+
+ if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
+
+ //Create the Revolution
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
//=============================================================================
/*!
* MakeFilling
*/
//=============================================================================
-GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
- CORBA::Long theMinDeg,
- CORBA::Long theMaxDeg,
- CORBA::Double theTol2D,
- CORBA::Double theTol3D,
- CORBA::Long theNbIter)
+GEOM::GEOM_Object_ptr
+GEOM_I3DPrimOperations_i::MakeFilling(const GEOM::ListOfGO& theContours,
+ CORBA::Long theMinDeg,
+ CORBA::Long theMaxDeg,
+ CORBA::Double theTol2D,
+ CORBA::Double theTol3D,
+ CORBA::Long theNbIter,
+ GEOM::filling_oper_method theMethod,
+ CORBA::Boolean theApprox)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
- if (theShape == NULL) return aGEOMObject._retn();
+ //Get the reference objects
+ std::list< Handle(::GEOM_Object) > aShapes;
+ if (! GetListOfObjectsImpl( theContours, aShapes ))
+ return aGEOMObject._retn();
+
+ int aMethod = 0;
+ switch (theMethod) {
+ case GEOM::FOM_Default:
+ {
+ // Default (standard behaviour)
+ aMethod = 0;
+ }
+ break;
+ case GEOM::FOM_UseOri:
+ {
+ // Use edges orientation
+ aMethod = 1;
+ }
+ break;
+ case GEOM::FOM_AutoCorrect:
+ {
+ // Auto-correct edges orientation
+ aMethod = 2;
+ }
+ break;
+ default:
+ {}
+ }
+
+ //Create the Solid
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeFilling
+ (aShapes, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, aMethod, theApprox);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakeThruSections
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
+ CORBA::Boolean theModeSolid,
+ CORBA::Double thePreci,
+ CORBA::Boolean theRuled)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+ Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
+ int ind, aLen;
+
+ //Get the shapes
+ aLen = theSeqSections.length();
+ for (ind = 0; ind < aLen; ind++) {
+ Handle(::GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
+ if (!aSh.IsNull())
+ aSeqSections->Append(aSh);
+ }
+ if (!aSeqSections->Length())
+ return aGEOMObject._retn();
+
+ // Make shell or solid
+ Handle(::GEOM_Object) anObject =
+ GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * MakePipeWithDifferentSections
+ */
+//=============================================================================
+GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
+ (const GEOM::ListOfGO &theBases,
+ const GEOM::ListOfGO &theLocations,
+ GEOM::GEOM_Object_ptr thePath,
+ CORBA::Boolean theWithContact,
+ CORBA::Boolean theWithCorrections,
+ CORBA::Boolean IsBySteps,
+ CORBA::Boolean IsGenerateGroups)
+{
+ GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+ Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
+ Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
+ int ind=0, aNbBases =0,aNbLocs=0;
+
+ //Get the shapes
+ aNbBases = theBases.length();
+ aNbLocs = theLocations.length();
+
+ if (aNbLocs && aNbBases != aNbLocs)
+ return aSeq._retn();
+
+ Handle(::GEOM_Object) aPath = GetObjectImpl(thePath);
+ if (aPath.IsNull())
+ return aSeq._retn();
+
+ for (ind = 0; ind < aNbBases; ind++) {
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
+ if (aBase.IsNull())
+ continue;
+ if (aNbLocs)
+ {
+ Handle(::GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
+ if (aLoc.IsNull())
+ continue;
+ aSeqLocations->Append(aLoc);
+ }
+ aSeqBases->Append(aBase);
+ }
+ if (!aSeqBases->Length())
+ return aSeq._retn();
+
+ // Make pipe
+ Handle(TColStd_HSequenceOfTransient) aHSeq =
+ GetOperations()->MakePipeWithDifferentSections
+ (aSeqBases, aSeqLocations,
+ aPath, theWithContact,
+ theWithCorrections, IsBySteps, IsGenerateGroups);
+ if (!GetOperations()->IsDone() || aHSeq.IsNull())
+ return aSeq._retn();
+
+ Standard_Integer aLength = aHSeq->Length();
+ aSeq->length(aLength);
+ for (Standard_Integer i = 1; i <= aLength; i++)
+ aSeq[i-1] = GetObject(Handle(::GEOM_Object)::DownCast(aHSeq->Value(i)));
+
+ return aSeq._retn();
+}
+
+
+//=============================================================================
+/*!
+ * MakePipeWithShellSections
+ */
+//=============================================================================
+GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeWithShellSections
+ (const GEOM::ListOfGO &theBases,
+ const GEOM::ListOfGO &theSubBases,
+ const GEOM::ListOfGO &theLocations,
+ GEOM::GEOM_Object_ptr thePath,
+ CORBA::Boolean theWithContact,
+ CORBA::Boolean theWithCorrections,
+ CORBA::Boolean IsGenerateGroups)
+{
+ GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+ Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
+ Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
+ Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
+ int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
+
+ //Get the shapes
+ aNbBases = theBases.length();
+ aNbSubBases = theSubBases.length();
+ aNbLocs = theLocations.length();
+
+ if (aNbLocs && aNbBases != aNbLocs)
+ return aSeq._retn();
+
+ Handle(::GEOM_Object) aPath = GetObjectImpl(thePath);
+ if (aPath.IsNull())
+ return aSeq._retn();
+
+ for (ind = 0; ind < aNbBases; ind++) {
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
+ if (aBase.IsNull())
+ continue;
+ if (aNbLocs) {
+ Handle(::GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
+ if (aLoc.IsNull())
+ continue;
+ aSeqLocations->Append(aLoc);
+ }
+ aSeqBases->Append(aBase);
+
+ if (aNbSubBases >= aNbBases) {
+ Handle(::GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
+ if (aSubBase.IsNull()) {
+ aSeqSubBases->Clear();
+ aNbSubBases = 0;
+ continue;
+ }
+ aSeqSubBases->Append(aSubBase);
+ }
+ }
+ if (!aSeqBases->Length())
+ return aSeq._retn();
+
+ // Make pipe
+ Handle(TColStd_HSequenceOfTransient) aHSeq =
+ GetOperations()->MakePipeWithShellSections
+ (aSeqBases, aSeqSubBases,
+ aSeqLocations, aPath,
+ theWithContact, theWithCorrections, IsGenerateGroups);
+ if (!GetOperations()->IsDone() || aHSeq.IsNull())
+ return aSeq._retn();
+
+ Standard_Integer aLength = aHSeq->Length();
+ aSeq->length(aLength);
+ for (Standard_Integer i = 1; i <= aLength; i++)
+ aSeq[i-1] = GetObject(Handle(::GEOM_Object)::DownCast(aHSeq->Value(i)));
+
+ return aSeq._retn();
+}
+
+
+//=============================================================================
+/*!
+ * MakePipeShellsWithoutPath
+ */
+//=============================================================================
+GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
+ (const GEOM::ListOfGO &theBases,
+ const GEOM::ListOfGO &theLocations,
+ CORBA::Boolean IsGenerateGroups)
+{
+ GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+ Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
+ Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
+ int ind=0, aNbBases=0, aNbLocs=0;
+
+ //Get the shapes
+ aNbBases = theBases.length();
+ aNbLocs = theLocations.length();
+
+ if (aNbLocs && aNbBases != aNbLocs)
+ return aSeq._retn();
+
+ for (ind = 0; ind < aNbBases; ind++) {
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
+ if (aBase.IsNull())
+ continue;
+ if (aNbLocs) {
+ Handle(::GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
+ if (aLoc.IsNull())
+ continue;
+ aSeqLocations->Append(aLoc);
+ }
+ aSeqBases->Append(aBase);
+ }
+
+ if (!aSeqBases->Length())
+ return aSeq._retn();
+
+ // Make pipe
+ Handle(TColStd_HSequenceOfTransient) aHSeq =
+ GetOperations()->MakePipeShellsWithoutPath
+ (aSeqBases, aSeqLocations, IsGenerateGroups);
+
+ if (!GetOperations()->IsDone() || aHSeq.IsNull())
+ return aSeq._retn();
+
+ Standard_Integer aLength = aHSeq->Length();
+ aSeq->length(aLength);
+ for (Standard_Integer i = 1; i <= aLength; i++)
+ aSeq[i-1] = GetObject(Handle(::GEOM_Object)::DownCast(aHSeq->Value(i)));
+
+ return aSeq._retn();
+}
+
+//=============================================================================
+/*!
+ * MakePipeBiNormalAlongVector
+ */
+//=============================================================================
+GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
+ (GEOM::GEOM_Object_ptr theBase,
+ GEOM::GEOM_Object_ptr thePath,
+ GEOM::GEOM_Object_ptr theVec,
+ CORBA::Boolean IsGenerateGroups)
+{
+ GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
//Get the reference objects
- Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
- (theShape->GetStudyID(), theShape->GetEntry());
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase);
+ Handle(::GEOM_Object) aPath = GetObjectImpl(thePath);
+ Handle(::GEOM_Object) aVec = GetObjectImpl(theVec);
+
+ if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aSeq._retn();
+
+ //Create the Pipe
+ Handle(TColStd_HSequenceOfTransient) aHSeq =
+ GetOperations()->MakePipeBiNormalAlongVector
+ (aBase, aPath, aVec, IsGenerateGroups);
+ if (!GetOperations()->IsDone() || aHSeq.IsNull())
+ return aSeq._retn();
+
+ Standard_Integer aLength = aHSeq->Length();
+ aSeq->length(aLength);
+ for (Standard_Integer i = 1; i <= aLength; i++)
+ aSeq[i-1] = GetObject(Handle(::GEOM_Object)::DownCast(aHSeq->Value(i)));
+
+ return aSeq._retn();
+}
+
+//=============================================================================
+/*!
+ * MakeThickening
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening
+ (GEOM::GEOM_Object_ptr theObject,
+ const GEOM::ListOfLong &theFacesIDs,
+ CORBA::Double theOffset,
+ CORBA::Boolean doCopy,
+ CORBA::Boolean theInside)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+ if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
+
+ //check if the object is a sub-shape
+ if (!theObject->IsMainShape() && !doCopy) {
+ GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
+ return aGEOMObject._retn();
+ }
+
+ if (!doCopy)
+ aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
+
+ //Get the basic object
+ Handle(::GEOM_Object) aBasicObject = GetObjectImpl(theObject);
+ if (aBasicObject.IsNull()) return aGEOMObject._retn();
+
+ // Get faces IDs.
+ Handle(TColStd_HArray1OfInteger) aFaceIDs;
+ Standard_Integer aNbIDs = theFacesIDs.length();
+ Standard_Integer i;
+
+ if (aNbIDs > 0) {
+ aFaceIDs = new TColStd_HArray1OfInteger (1, aNbIDs);
+
+ for (i = 0; i < aNbIDs; i++) {
+ aFaceIDs->SetValue(i + 1, theFacesIDs[i]);
+ }
+ }
+
+ //Create the thickened shape
+ if (doCopy)
+ {
+ Handle(::GEOM_Object) anObject = GetOperations()->MakeThickening(
+ aBasicObject, aFaceIDs, theOffset, doCopy, theInside);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+ }
+ else
+ {
+ GetOperations()->MakeThickening(aBasicObject, aFaceIDs, theOffset, doCopy, theInside);
+
+ // Update GUI.
+ UpdateGUIForObject(theObject);
+
+ return aGEOMObject._retn();
+ }
+}
+
+//=============================================================================
+/*!
+ * RestorePath
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePath
+ (GEOM::GEOM_Object_ptr theShape,
+ GEOM::GEOM_Object_ptr theBase1,
+ GEOM::GEOM_Object_ptr theBase2)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ // Set a not done flag
+ GetOperations()->SetNotDone();
+
+ // Get the reference objects
+ Handle(::GEOM_Object) aShape = GetObjectImpl(theShape);
+ Handle(::GEOM_Object) aBase1 = GetObjectImpl(theBase1);
+ Handle(::GEOM_Object) aBase2 = GetObjectImpl(theBase2);
+
+ if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) return aGEOMObject._retn();
+
+ // Create the Path
+ Handle(::GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aBase1, aBase2);
+ if (!GetOperations()->IsDone() || anObject.IsNull())
+ return aGEOMObject._retn();
+
+ return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ * RestorePathEdges
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePathEdges
+ (GEOM::GEOM_Object_ptr theShape,
+ const GEOM::ListOfGO& theBase1,
+ const GEOM::ListOfGO& theBase2)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ // Set a not done flag
+ GetOperations()->SetNotDone();
+
+ // Get the reference objects
+ Handle(::GEOM_Object) aShape = GetObjectImpl(theShape);
if (aShape.IsNull()) return aGEOMObject._retn();
- //Create the Solid
- Handle(GEOM_Object) anObject = GetOperations()->MakeFilling(aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter);
+ Handle(TColStd_HSequenceOfTransient) aSeqBases1 = new TColStd_HSequenceOfTransient;
+ Handle(TColStd_HSequenceOfTransient) aSeqBases2 = new TColStd_HSequenceOfTransient;
+
+ int ind;
+ int aNbBases1 = theBase1.length();
+ int aNbBases2 = theBase2.length();
+
+ for (ind = 0; ind < aNbBases1; ind++) {
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase1[ind]);
+ if (!aBase.IsNull())
+ aSeqBases1->Append(aBase);
+ }
+ for (ind = 0; ind < aNbBases2; ind++) {
+ Handle(::GEOM_Object) aBase = GetObjectImpl(theBase2[ind]);
+ if (!aBase.IsNull())
+ aSeqBases2->Append(aBase);
+ }
+
+ if (!aSeqBases1->Length() || !aSeqBases2->Length())
+ return aGEOMObject._retn();
+
+ // Create the Path
+ Handle(::GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aSeqBases1, aSeqBases2);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();