2005-12-05 21:23:52 +05:00
|
|
|
// Copyright (C) 2005 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/
|
|
|
|
//
|
2005-08-11 10:14:22 +06:00
|
|
|
#include <Standard_Stream.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
#include "GEOM_IShapesOperations_i.hh"
|
|
|
|
|
|
|
|
#include "utilities.h"
|
|
|
|
#include "OpUtil.hxx"
|
|
|
|
#include "Utils_ExceptHandlers.hxx"
|
|
|
|
|
|
|
|
#include "GEOM_Engine.hxx"
|
|
|
|
#include "GEOM_Object.hxx"
|
|
|
|
|
|
|
|
#include <TColStd_HSequenceOfTransient.hxx>
|
|
|
|
#include <TColStd_HArray1OfInteger.hxx>
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* constructor:
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM_IShapesOperations_i::GEOM_IShapesOperations_i (PortableServer::POA_ptr thePOA,
|
|
|
|
GEOM::GEOM_Gen_ptr theEngine,
|
|
|
|
::GEOMImpl_IShapesOperations* theImpl)
|
|
|
|
:GEOM_IOperations_i(thePOA, theEngine, theImpl)
|
|
|
|
{
|
|
|
|
MESSAGE("GEOM_IShapesOperations_i::GEOM_IShapesOperations_i");
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* destructor
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM_IShapesOperations_i::~GEOM_IShapesOperations_i()
|
|
|
|
{
|
|
|
|
MESSAGE("GEOM_IShapesOperations_i::~GEOM_IShapesOperations_i");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeEdge
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeEdge
|
|
|
|
(GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//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());
|
|
|
|
|
|
|
|
if (aPnt1.IsNull() || aPnt2.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Create the Edge
|
|
|
|
Handle(GEOM_Object) anObject = GetOperations()->MakeEdge(aPnt1, aPnt2);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeWire
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeWire
|
|
|
|
(const GEOM::ListOfGO& theEdgesAndWires)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
int ind, aLen;
|
|
|
|
list<Handle(GEOM_Object)> aShapes;
|
|
|
|
|
|
|
|
//Get the shapes
|
|
|
|
aLen = theEdgesAndWires.length();
|
|
|
|
for (ind = 0; ind < aLen; ind++) {
|
|
|
|
if (theEdgesAndWires[ind] == NULL) return aGEOMObject._retn();
|
|
|
|
Handle(GEOM_Object) aSh = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theEdgesAndWires[ind]->GetStudyID(), theEdgesAndWires[ind]->GetEntry());
|
|
|
|
if (aSh.IsNull()) return aGEOMObject._retn();
|
|
|
|
aShapes.push_back(aSh);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make Solid
|
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->MakeWire(aShapes);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFace
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeFace
|
2005-01-20 11:24:17 +05:00
|
|
|
(GEOM::GEOM_Object_ptr theWire,
|
|
|
|
const CORBA::Boolean isPlanarWanted)
|
2004-12-01 15:39:14 +05:00
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theWire == NULL) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get the reference wire
|
|
|
|
Handle(GEOM_Object) aWire = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theWire->GetStudyID(), theWire->GetEntry());
|
|
|
|
|
|
|
|
if (aWire.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Create the Face
|
|
|
|
Handle(GEOM_Object) anObject = GetOperations()->MakeFace(aWire, isPlanarWanted);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFaceWires
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeFaceWires
|
|
|
|
(const GEOM::ListOfGO& theWires,
|
2005-01-20 11:24:17 +05:00
|
|
|
const CORBA::Boolean isPlanarWanted)
|
2004-12-01 15:39:14 +05:00
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
int ind, aLen;
|
|
|
|
list<Handle(GEOM_Object)> aShapes;
|
|
|
|
|
|
|
|
//Get the shapes
|
|
|
|
aLen = theWires.length();
|
|
|
|
for (ind = 0; ind < aLen; ind++) {
|
|
|
|
if (theWires[ind] == NULL) return aGEOMObject._retn();
|
|
|
|
Handle(GEOM_Object) aSh = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theWires[ind]->GetStudyID(), theWires[ind]->GetEntry());
|
|
|
|
if (aSh.IsNull()) return aGEOMObject._retn();
|
|
|
|
aShapes.push_back(aSh);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make Face
|
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->MakeFaceWires(aShapes, isPlanarWanted);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeShell
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeShell
|
|
|
|
(const GEOM::ListOfGO& theFacesAndShells)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
int ind, aLen;
|
|
|
|
list<Handle(GEOM_Object)> aShapes;
|
|
|
|
|
|
|
|
//Get the shapes
|
|
|
|
aLen = theFacesAndShells.length();
|
|
|
|
for (ind = 0; ind < aLen; ind++) {
|
|
|
|
if (theFacesAndShells[ind] == NULL) return aGEOMObject._retn();
|
|
|
|
Handle(GEOM_Object) aSh = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theFacesAndShells[ind]->GetStudyID(), theFacesAndShells[ind]->GetEntry());
|
|
|
|
if (aSh.IsNull()) return aGEOMObject._retn();
|
|
|
|
aShapes.push_back(aSh);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make Solid
|
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->MakeShell(aShapes);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeSolidShell
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeSolidShell
|
|
|
|
(GEOM::GEOM_Object_ptr theShell)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShell == NULL) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShell = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShell->GetStudyID(), theShell->GetEntry());
|
|
|
|
|
|
|
|
if (aShell.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Create the Solid
|
|
|
|
Handle(GEOM_Object) anObject = GetOperations()->MakeSolidShell(aShell);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeSolidShells
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeSolidShells
|
|
|
|
(const GEOM::ListOfGO& theShells)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
int ind, aLen;
|
|
|
|
list<Handle(GEOM_Object)> aShapes;
|
|
|
|
|
|
|
|
//Get the shapes
|
|
|
|
aLen = theShells.length();
|
|
|
|
for (ind = 0; ind < aLen; ind++) {
|
|
|
|
if (theShells[ind] == NULL) return aGEOMObject._retn();
|
|
|
|
Handle(GEOM_Object) aSh = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShells[ind]->GetStudyID(), theShells[ind]->GetEntry());
|
|
|
|
if (aSh.IsNull()) return aGEOMObject._retn();
|
|
|
|
aShapes.push_back(aSh);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make Solid
|
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->MakeSolidShells(aShapes);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeCompound
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeCompound
|
|
|
|
(const GEOM::ListOfGO& theShapes)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
int ind, aLen;
|
|
|
|
list<Handle(GEOM_Object)> aShapes;
|
|
|
|
|
|
|
|
//Get the shapes
|
|
|
|
aLen = theShapes.length();
|
|
|
|
for (ind = 0; ind < aLen; ind++) {
|
|
|
|
if (theShapes[ind] == NULL) return aGEOMObject._retn();
|
|
|
|
Handle(GEOM_Object) aSh = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShapes[ind]->GetStudyID(), theShapes[ind]->GetEntry());
|
|
|
|
if (aSh.IsNull()) return aGEOMObject._retn();
|
|
|
|
aShapes.push_back(aSh);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Make Solid
|
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->MakeCompound(aShapes);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeGlueFaces
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeGlueFaces
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Double theTolerance)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
//Perform the gluing
|
2004-12-01 15:39:14 +05:00
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->MakeGlueFaces(aShape, theTolerance);
|
2005-01-20 11:24:17 +05:00
|
|
|
//if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
// to allow warning
|
|
|
|
if (anObject.IsNull())
|
2004-12-01 15:39:14 +05:00
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeExplode
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfGO* GEOM_IShapesOperations_i::MakeExplode (GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
const CORBA::Boolean isSorted)
|
|
|
|
{
|
|
|
|
GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
|
2005-01-20 11:24:17 +05:00
|
|
|
if (theShape == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
Handle(TColStd_HSequenceOfTransient) aHSeq =
|
|
|
|
GetOperations()->MakeExplode(aShape, theShapeType, isSorted);
|
|
|
|
if (!GetOperations()->IsDone() || aHSeq.IsNull())
|
|
|
|
return aSeq._retn();
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* SubShapeAllIDs
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfLong* GEOM_IShapesOperations_i::SubShapeAllIDs (GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
const CORBA::Boolean isSorted)
|
|
|
|
{
|
|
|
|
GEOM::ListOfLong_var aSeq = new GEOM::ListOfLong;
|
|
|
|
if (theShape == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
Handle(TColStd_HSequenceOfInteger) aHSeq =
|
|
|
|
GetOperations()->SubShapeAllIDs(aShape, theShapeType, isSorted);
|
|
|
|
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] = aHSeq->Value(i);
|
|
|
|
|
|
|
|
return aSeq._retn();
|
|
|
|
}
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetSubShape
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::GetSubShape
|
|
|
|
(GEOM::GEOM_Object_ptr theMainShape,
|
|
|
|
const CORBA::Long theID)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theMainShape == NULL) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theMainShape->GetStudyID(), theMainShape->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
Handle(GEOM_Object) anObject = GetOperations()->GetSubShape(aShape, theID);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* NumberOfFaces
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
CORBA::Long GEOM_IShapesOperations_i::NumberOfFaces (GEOM::GEOM_Object_ptr theShape)
|
|
|
|
{
|
|
|
|
if (theShape == NULL) return -1;
|
|
|
|
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
CORBA::Long aNb = GetOperations()->NumberOfFaces(aShape);
|
|
|
|
if (!GetOperations()->IsDone()) return -1;
|
|
|
|
|
|
|
|
return aNb;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* NumberOfEdges
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
CORBA::Long GEOM_IShapesOperations_i::NumberOfEdges (GEOM::GEOM_Object_ptr theShape)
|
|
|
|
{
|
|
|
|
if (theShape == NULL) return -1;
|
|
|
|
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
CORBA::Long aNb = GetOperations()->NumberOfEdges(aShape);
|
|
|
|
if (!GetOperations()->IsDone()) return -1;
|
|
|
|
|
|
|
|
return aNb;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
2005-01-20 11:24:17 +05:00
|
|
|
* ChangeOrientation
|
2004-12-01 15:39:14 +05:00
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::ChangeOrientation
|
|
|
|
(GEOM::GEOM_Object_ptr theShape)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Create the Solid
|
|
|
|
Handle(GEOM_Object) anObject = GetOperations()->ReverseShape(aShape);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetFreeFacesIDs
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfLong* GEOM_IShapesOperations_i::GetFreeFacesIDs (GEOM::GEOM_Object_ptr theShape)
|
|
|
|
{
|
2005-01-21 14:16:41 +05:00
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
GEOM::ListOfLong_var aSeq = new GEOM::ListOfLong;
|
|
|
|
if (theShape == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
|
|
|
|
Handle(TColStd_HSequenceOfInteger) aHSeq =
|
|
|
|
GetOperations()->GetFreeFacesIDs(aShape);
|
|
|
|
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] = aHSeq->Value(i);
|
|
|
|
|
|
|
|
return aSeq._retn();
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetSharedShapes
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfGO* GEOM_IShapesOperations_i::GetSharedShapes
|
|
|
|
(GEOM::GEOM_Object_ptr theShape1,
|
|
|
|
GEOM::GEOM_Object_ptr theShape2,
|
|
|
|
const CORBA::Long theShapeType)
|
|
|
|
{
|
2005-01-21 14:16:41 +05:00
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
|
|
|
|
if (theShape1 == NULL ||
|
|
|
|
theShape2 == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
Handle(GEOM_Object) aShape1 = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape1->GetStudyID(), theShape1->GetEntry());
|
|
|
|
Handle(GEOM_Object) aShape2 = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape2->GetStudyID(), theShape2->GetEntry());
|
|
|
|
|
|
|
|
if (aShape1.IsNull() ||
|
|
|
|
aShape2.IsNull()) return aSeq._retn();
|
|
|
|
|
|
|
|
Handle(TColStd_HSequenceOfTransient) aHSeq =
|
|
|
|
GetOperations()->GetSharedShapes(aShape1, aShape2, theShapeType);
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
static GEOMAlgo_State ShapeState (const GEOM::shape_state theState)
|
|
|
|
{
|
|
|
|
GEOMAlgo_State aState = GEOMAlgo_ST_UNKNOWN;
|
|
|
|
|
|
|
|
switch (theState) {
|
|
|
|
case GEOM::ST_ON:
|
|
|
|
aState = GEOMAlgo_ST_ON;
|
|
|
|
break;
|
|
|
|
case GEOM::ST_OUT:
|
|
|
|
aState = GEOMAlgo_ST_OUT;
|
|
|
|
break;
|
|
|
|
case GEOM::ST_ONOUT:
|
|
|
|
aState = GEOMAlgo_ST_ONOUT;
|
|
|
|
break;
|
|
|
|
case GEOM::ST_IN:
|
|
|
|
aState = GEOMAlgo_ST_IN;
|
|
|
|
break;
|
|
|
|
case GEOM::ST_ONIN:
|
|
|
|
aState = GEOMAlgo_ST_ONIN;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return aState;
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnPlane
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2005-01-21 14:16:41 +05:00
|
|
|
GEOM::ListOfGO* GEOM_IShapesOperations_i::GetShapesOnPlane
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theAx1,
|
|
|
|
const GEOM::shape_state theState)
|
2005-01-20 11:24:17 +05:00
|
|
|
{
|
2005-01-25 11:19:13 +05:00
|
|
|
GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
if (theShape == NULL || theAx1 == NULL) return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
2005-01-21 14:16:41 +05:00
|
|
|
Handle(GEOM_Object) anAx1 = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theAx1->GetStudyID(), theAx1->GetEntry());
|
2005-01-20 11:24:17 +05:00
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
if (aShape.IsNull() || anAx1.IsNull()) return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Get Shapes On Plane
|
2005-01-21 14:16:41 +05:00
|
|
|
Handle(TColStd_HSequenceOfTransient) aHSeq =
|
|
|
|
GetOperations()->GetShapesOnPlane(aShape, theShapeType, anAx1, ShapeState(theState));
|
|
|
|
if (!GetOperations()->IsDone() || aHSeq.IsNull())
|
|
|
|
return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
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();
|
2005-01-20 11:24:17 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnCylinder
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2005-01-21 14:16:41 +05:00
|
|
|
GEOM::ListOfGO* GEOM_IShapesOperations_i::GetShapesOnCylinder
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theAxis,
|
|
|
|
const CORBA::Double theRadius,
|
|
|
|
const GEOM::shape_state theState)
|
2005-01-20 11:24:17 +05:00
|
|
|
{
|
2005-01-25 11:19:13 +05:00
|
|
|
GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
if (theShape == NULL || theAxis == NULL) return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) anAxis = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theAxis->GetStudyID(), theAxis->GetEntry());
|
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
if (aShape.IsNull() || anAxis.IsNull()) return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Get Shapes On Cylinder
|
2005-01-21 14:16:41 +05:00
|
|
|
Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->GetShapesOnCylinder
|
|
|
|
(aShape, theShapeType, anAxis, theRadius, ShapeState(theState));
|
|
|
|
if (!GetOperations()->IsDone() || aHSeq.IsNull())
|
|
|
|
return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
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();
|
2005-01-20 11:24:17 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnSphere
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2005-01-21 14:16:41 +05:00
|
|
|
GEOM::ListOfGO* GEOM_IShapesOperations_i::GetShapesOnSphere
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theCenter,
|
|
|
|
const CORBA::Double theRadius,
|
|
|
|
const GEOM::shape_state theState)
|
2005-01-20 11:24:17 +05:00
|
|
|
{
|
2005-01-25 11:19:13 +05:00
|
|
|
GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
if (theShape == NULL || theCenter == NULL) return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) aCenter = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theCenter->GetStudyID(), theCenter->GetEntry());
|
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
if (aShape.IsNull() || aCenter.IsNull()) return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
|
|
|
//Get Shapes On Sphere
|
2005-01-21 14:16:41 +05:00
|
|
|
Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->GetShapesOnSphere
|
|
|
|
(aShape, theShapeType, aCenter, theRadius, ShapeState(theState));
|
|
|
|
if (!GetOperations()->IsDone() || aHSeq.IsNull())
|
|
|
|
return aSeq._retn();
|
2005-01-20 11:24:17 +05:00
|
|
|
|
2005-01-21 14:16:41 +05:00
|
|
|
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();
|
2005-01-20 11:24:17 +05:00
|
|
|
}
|
|
|
|
|
2005-10-14 19:01:47 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnQuadrangle
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfGO* GEOM_IShapesOperations_i::GetShapesOnQuadrangle
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theTopLeftPoint,
|
|
|
|
GEOM::GEOM_Object_ptr theTopRigthPoint,
|
|
|
|
GEOM::GEOM_Object_ptr theBottomLeftPoint,
|
|
|
|
GEOM::GEOM_Object_ptr theBottomRigthPoint,
|
|
|
|
GEOM::shape_state theState)
|
|
|
|
{
|
|
|
|
GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL ||
|
|
|
|
theTopLeftPoint == NULL ||
|
|
|
|
theTopRigthPoint == NULL ||
|
|
|
|
theBottomLeftPoint == NULL ||
|
|
|
|
theBottomRigthPoint == NULL )
|
|
|
|
return aSeq._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) aTopLeftPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theTopLeftPoint->GetEntry());
|
|
|
|
Handle(GEOM_Object) aTopRigthPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theTopRigthPoint->GetEntry());
|
|
|
|
Handle(GEOM_Object) aBottomLeftPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theBottomLeftPoint->GetEntry());
|
|
|
|
Handle(GEOM_Object) aBottomRigthPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theBottomRigthPoint->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull() ||
|
|
|
|
aTopLeftPoint.IsNull() ||
|
|
|
|
aTopRigthPoint.IsNull() ||
|
|
|
|
aBottomLeftPoint.IsNull() ||
|
|
|
|
aBottomRigthPoint.IsNull() )
|
|
|
|
return aSeq._retn();
|
|
|
|
|
|
|
|
//Get Shapes On Quadrangle
|
|
|
|
Handle(TColStd_HSequenceOfTransient) aHSeq = GetOperations()->GetShapesOnQuadrangle
|
|
|
|
(aShape, theShapeType,
|
|
|
|
aTopLeftPoint, aTopRigthPoint, aBottomLeftPoint, aBottomRigthPoint,
|
|
|
|
ShapeState(theState));
|
|
|
|
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();
|
|
|
|
}
|
|
|
|
|
2005-03-23 12:27:20 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnPlaneIDs
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfLong* GEOM_IShapesOperations_i::GetShapesOnPlaneIDs
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theAx1,
|
|
|
|
const GEOM::shape_state theState)
|
|
|
|
{
|
|
|
|
GEOM::ListOfLong_var aSeq = new GEOM::ListOfLong;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL || theAx1 == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) anAx1 = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theAx1->GetStudyID(), theAx1->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull() || anAx1.IsNull()) return aSeq._retn();
|
|
|
|
|
|
|
|
//Get Shapes On Plane
|
|
|
|
Handle(TColStd_HSequenceOfInteger) aHSeq =
|
|
|
|
GetOperations()->GetShapesOnPlaneIDs(aShape, theShapeType, anAx1, ShapeState(theState));
|
|
|
|
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] = aHSeq->Value(i);
|
|
|
|
|
|
|
|
return aSeq._retn();
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnCylinderIDs
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfLong* GEOM_IShapesOperations_i::GetShapesOnCylinderIDs
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theAxis,
|
|
|
|
const CORBA::Double theRadius,
|
|
|
|
const GEOM::shape_state theState)
|
|
|
|
{
|
|
|
|
GEOM::ListOfLong_var aSeq = new GEOM::ListOfLong;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL || theAxis == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) anAxis = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theAxis->GetStudyID(), theAxis->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull() || anAxis.IsNull()) return aSeq._retn();
|
|
|
|
|
|
|
|
//Get Shapes On Cylinder
|
|
|
|
Handle(TColStd_HSequenceOfInteger) aHSeq = GetOperations()->GetShapesOnCylinderIDs
|
|
|
|
(aShape, theShapeType, anAxis, theRadius, ShapeState(theState));
|
|
|
|
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] = aHSeq->Value(i);
|
|
|
|
|
|
|
|
return aSeq._retn();
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnSphereIDs
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfLong* GEOM_IShapesOperations_i::GetShapesOnSphereIDs
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
const CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theCenter,
|
|
|
|
const CORBA::Double theRadius,
|
|
|
|
const GEOM::shape_state theState)
|
|
|
|
{
|
|
|
|
GEOM::ListOfLong_var aSeq = new GEOM::ListOfLong;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL || theCenter == NULL) return aSeq._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) aCenter = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theCenter->GetStudyID(), theCenter->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull() || aCenter.IsNull()) return aSeq._retn();
|
|
|
|
|
|
|
|
//Get Shapes On Sphere
|
|
|
|
Handle(TColStd_HSequenceOfInteger) aHSeq = GetOperations()->GetShapesOnSphereIDs
|
|
|
|
(aShape, theShapeType, aCenter, theRadius, ShapeState(theState));
|
|
|
|
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] = aHSeq->Value(i);
|
|
|
|
|
|
|
|
return aSeq._retn();
|
|
|
|
}
|
|
|
|
|
2005-10-14 19:01:47 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetShapesOnQuadrangleIDs
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::ListOfLong* GEOM_IShapesOperations_i::GetShapesOnQuadrangleIDs
|
|
|
|
(GEOM::GEOM_Object_ptr theShape,
|
|
|
|
CORBA::Long theShapeType,
|
|
|
|
GEOM::GEOM_Object_ptr theTopLeftPoint,
|
|
|
|
GEOM::GEOM_Object_ptr theTopRigthPoint,
|
|
|
|
GEOM::GEOM_Object_ptr theBottomLeftPoint,
|
|
|
|
GEOM::GEOM_Object_ptr theBottomRigthPoint,
|
|
|
|
GEOM::shape_state theState)
|
|
|
|
{
|
|
|
|
GEOM::ListOfLong_var aSeq = new GEOM::ListOfLong;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShape == NULL ||
|
|
|
|
theTopLeftPoint == NULL ||
|
|
|
|
theTopRigthPoint == NULL ||
|
|
|
|
theBottomLeftPoint == NULL ||
|
|
|
|
theBottomRigthPoint == NULL )
|
|
|
|
return aSeq._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShape = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theShape->GetEntry());
|
|
|
|
Handle(GEOM_Object) aTopLeftPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theTopLeftPoint->GetEntry());
|
|
|
|
Handle(GEOM_Object) aTopRigthPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theTopRigthPoint->GetEntry());
|
|
|
|
Handle(GEOM_Object) aBottomLeftPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theBottomLeftPoint->GetEntry());
|
|
|
|
Handle(GEOM_Object) aBottomRigthPoint = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShape->GetStudyID(), theBottomRigthPoint->GetEntry());
|
|
|
|
|
|
|
|
if (aShape.IsNull() ||
|
|
|
|
aTopLeftPoint.IsNull() ||
|
|
|
|
aTopRigthPoint.IsNull() ||
|
|
|
|
aBottomLeftPoint.IsNull() ||
|
|
|
|
aBottomRigthPoint.IsNull() )
|
|
|
|
return aSeq._retn();
|
|
|
|
|
|
|
|
//Get Shapes On Quadrangle
|
|
|
|
Handle(TColStd_HSequenceOfInteger) aHSeq = GetOperations()->GetShapesOnQuadrangleIDs
|
|
|
|
(aShape, theShapeType,
|
|
|
|
aTopLeftPoint, aTopRigthPoint, aBottomLeftPoint, aBottomRigthPoint,
|
|
|
|
ShapeState(theState));
|
|
|
|
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] = aHSeq->Value(i);
|
|
|
|
|
|
|
|
return aSeq._retn();
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:24:17 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetInPlace
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::GetInPlace
|
|
|
|
(GEOM::GEOM_Object_ptr theShapeWhere,
|
|
|
|
GEOM::GEOM_Object_ptr theShapeWhat)
|
|
|
|
{
|
|
|
|
GEOM::GEOM_Object_var aGEOMObject;
|
|
|
|
|
|
|
|
//Set a not done flag
|
|
|
|
GetOperations()->SetNotDone();
|
|
|
|
|
|
|
|
if (theShapeWhere == NULL ||
|
|
|
|
theShapeWhat == NULL) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get the reference objects
|
|
|
|
Handle(GEOM_Object) aShapeWhere = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShapeWhere->GetStudyID(), theShapeWhere->GetEntry());
|
|
|
|
Handle(GEOM_Object) aShapeWhat = GetOperations()->GetEngine()->GetObject
|
|
|
|
(theShapeWhat->GetStudyID(), theShapeWhat->GetEntry());
|
|
|
|
|
|
|
|
if (aShapeWhere.IsNull() ||
|
|
|
|
aShapeWhat.IsNull()) return aGEOMObject._retn();
|
|
|
|
|
|
|
|
//Get Shapes in place of aShapeWhat
|
|
|
|
Handle(GEOM_Object) anObject =
|
|
|
|
GetOperations()->GetInPlace(aShapeWhere, aShapeWhat);
|
|
|
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
|
|
|
return aGEOMObject._retn();
|
|
|
|
|
|
|
|
return GetObject(anObject);
|
|
|
|
}
|