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
|
|
|
|
//
|
2006-06-01 17:32:40 +06:00
|
|
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
2005-12-05 21:23:52 +05:00
|
|
|
//
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <Standard_Stream.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <GEOMImpl_ILocalOperations.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <GEOM_Function.hxx>
|
|
|
|
#include <GEOM_PythonDump.hxx>
|
2005-06-02 13:17:09 +06:00
|
|
|
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <GEOMImpl_Types.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <GEOMImpl_FilletDriver.hxx>
|
|
|
|
#include <GEOMImpl_ChamferDriver.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <GEOMImpl_IFillet.hxx>
|
|
|
|
#include <GEOMImpl_IChamfer.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <GEOMImpl_IArchimede.hxx>
|
|
|
|
#include <GEOMImpl_ArchimedeDriver.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2006-05-06 14:44:32 +06:00
|
|
|
#include <GEOMImpl_Gen.hxx>
|
|
|
|
#include <GEOMImpl_IShapesOperations.hxx>
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
#include "utilities.h"
|
2005-08-11 10:43:57 +06:00
|
|
|
#include <OpUtil.hxx>
|
|
|
|
#include <Utils_ExceptHandlers.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
#include <TFunction_DriverTable.hxx>
|
|
|
|
#include <TFunction_Driver.hxx>
|
|
|
|
#include <TFunction_Logbook.hxx>
|
|
|
|
#include <TDF_Tool.hxx>
|
|
|
|
|
|
|
|
#include <TopExp.hxx>
|
|
|
|
#include <TopoDS_TShape.hxx>
|
|
|
|
#include <TopTools_IndexedMapOfShape.hxx>
|
|
|
|
|
2006-09-04 17:33:22 +06:00
|
|
|
#include <Standard_Failure.hxx>
|
2004-12-01 15:39:14 +05:00
|
|
|
#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* constructor:
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOMImpl_ILocalOperations::GEOMImpl_ILocalOperations (GEOM_Engine* theEngine, int theDocID)
|
|
|
|
: GEOM_IOperations(theEngine, theDocID)
|
|
|
|
{
|
|
|
|
MESSAGE("GEOMImpl_ILocalOperations::GEOMImpl_ILocalOperations");
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* destructor
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
GEOMImpl_ILocalOperations::~GEOMImpl_ILocalOperations()
|
|
|
|
{
|
|
|
|
MESSAGE("GEOMImpl_ILocalOperations::~GEOMImpl_ILocalOperations");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFilletAll
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletAll
|
|
|
|
(Handle(GEOM_Object) theShape, double theR)
|
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Fillet object
|
|
|
|
Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
|
|
|
|
|
|
|
|
//Add a new Fillet function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_ALL);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IFillet aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetR(theR);
|
|
|
|
|
|
|
|
//Compute the Fillet value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Fillet driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump(aFunction) << aFillet << " = geompy.MakeFilletAll("
|
|
|
|
<< theShape << ", " << theR << ")";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aFillet;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFilletEdges
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletEdges
|
2008-07-14 11:11:31 +06:00
|
|
|
(Handle(GEOM_Object) theShape, double theR, std::list<int> theEdges)
|
2004-12-01 15:39:14 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Fillet object
|
|
|
|
Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
|
|
|
|
|
|
|
|
//Add a new Fillet function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_EDGES);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IFillet aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetR(theR);
|
|
|
|
int aLen = theEdges.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theEdges.begin();
|
2004-12-01 15:39:14 +05:00
|
|
|
for (; it != theEdges.end(); it++, ind++) {
|
|
|
|
aCI.SetEdge(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Fillet value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Fillet driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aFillet << " = geompy.MakeFillet(" << theShape
|
|
|
|
<< ", " << theR << ", geompy.ShapeType[\"EDGE\"], [";
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
it = theEdges.begin();
|
2005-06-02 13:17:09 +06:00
|
|
|
pd << (*it++);
|
|
|
|
while (it != theEdges.end()) {
|
|
|
|
pd << ", " << (*it++);
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
2005-06-02 13:17:09 +06:00
|
|
|
pd << "])";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aFillet;
|
|
|
|
}
|
|
|
|
|
2008-02-06 20:43:50 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFilletEdges R1 R2
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletEdgesR1R2
|
2008-07-14 11:11:31 +06:00
|
|
|
(Handle(GEOM_Object) theShape, double theR1, double theR2, std::list<int> theEdges)
|
2008-02-06 20:43:50 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Fillet object
|
|
|
|
Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
|
|
|
|
|
|
|
|
//Add a new Fillet function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_EDGES_2R);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IFillet aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetR1(theR1);
|
|
|
|
aCI.SetR2(theR2);
|
|
|
|
int aLen = theEdges.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theEdges.begin();
|
2008-02-06 20:43:50 +05:00
|
|
|
for (; it != theEdges.end(); it++, ind++) {
|
|
|
|
aCI.SetEdge(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Fillet value
|
|
|
|
try {
|
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Fillet driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aFillet << " = geompy.MakeFilletR1R2(" << theShape
|
|
|
|
<< ", " << theR1 << ", " <<theR2 << ", geompy.ShapeType[\"EDGE\"], [";
|
|
|
|
|
|
|
|
it = theEdges.begin();
|
|
|
|
pd << (*it++);
|
|
|
|
while (it != theEdges.end()) {
|
|
|
|
pd << ", " << (*it++);
|
|
|
|
}
|
|
|
|
pd << "])";
|
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aFillet;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFilletFaces
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletFaces
|
2008-07-14 11:11:31 +06:00
|
|
|
(Handle(GEOM_Object) theShape, double theR, std::list<int> theFaces)
|
2004-12-01 15:39:14 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Fillet object
|
|
|
|
Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
|
|
|
|
|
|
|
|
//Add a new Fillet function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_FACES);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IFillet aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetR(theR);
|
|
|
|
int aLen = theFaces.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theFaces.begin();
|
2004-12-01 15:39:14 +05:00
|
|
|
for (; it != theFaces.end(); it++, ind++) {
|
|
|
|
aCI.SetFace(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Fillet value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Fillet driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aFillet << " = geompy.MakeFillet(" << theShape
|
|
|
|
<< ", " << theR << ", geompy.ShapeType[\"FACE\"], [";
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
it = theFaces.begin();
|
2005-06-02 13:17:09 +06:00
|
|
|
pd << (*it++);
|
|
|
|
while (it != theFaces.end()) {
|
|
|
|
pd << ", " << (*it++);
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
2005-06-02 13:17:09 +06:00
|
|
|
pd << "])";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aFillet;
|
|
|
|
}
|
|
|
|
|
2008-02-06 20:43:50 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeFilletFaces R1 R2
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletFacesR1R2
|
2008-07-14 11:11:31 +06:00
|
|
|
(Handle(GEOM_Object) theShape, double theR1, double theR2, std::list<int> theFaces)
|
2008-02-06 20:43:50 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Fillet object
|
|
|
|
Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
|
|
|
|
|
|
|
|
//Add a new Fillet function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_FACES_2R);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IFillet aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetR1(theR1);
|
|
|
|
aCI.SetR2(theR2);
|
|
|
|
int aLen = theFaces.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theFaces.begin();
|
2008-02-06 20:43:50 +05:00
|
|
|
for (; it != theFaces.end(); it++, ind++) {
|
|
|
|
aCI.SetFace(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Fillet value
|
|
|
|
try {
|
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Fillet driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aFillet << " = geompy.MakeFilletR1R2(" << theShape
|
|
|
|
<< ", " << theR1 << ", " << theR2 << ", geompy.ShapeType[\"FACE\"], [";
|
|
|
|
|
|
|
|
it = theFaces.begin();
|
|
|
|
pd << (*it++);
|
|
|
|
while (it != theFaces.end()) {
|
|
|
|
pd << ", " << (*it++);
|
|
|
|
}
|
|
|
|
pd << "])";
|
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aFillet;
|
|
|
|
}
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferAll
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferAll (Handle(GEOM_Object) theShape, double theD)
|
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_ALL);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD(theD);
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump(aFunction) << aChamfer << " = geompy.MakeChamferAll("
|
|
|
|
<< theShape << ", " << theD << ")";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferEdge
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdge
|
|
|
|
(Handle(GEOM_Object) theShape, double theD1, double theD2,
|
|
|
|
int theFace1, int theFace2)
|
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGE);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD1(theD1);
|
|
|
|
aCI.SetD2(theD2);
|
|
|
|
aCI.SetFace1(theFace1);
|
|
|
|
aCI.SetFace2(theFace2);
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump(aFunction) << aChamfer
|
|
|
|
<< " = geompy.MakeChamferEdge(" << theShape << ", " << theD1
|
|
|
|
<< ", " << theD2 << ", " << theFace1 << ", " << theFace2 << ")";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
2008-02-06 20:43:50 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferEdgeAD
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdgeAD
|
|
|
|
(Handle(GEOM_Object) theShape, double theD, double theAngle,
|
|
|
|
int theFace1, int theFace2)
|
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGE_AD);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD(theD);
|
|
|
|
aCI.SetAngle(theAngle);
|
|
|
|
aCI.SetFace1(theFace1);
|
|
|
|
aCI.SetFace2(theFace2);
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
|
|
|
GEOM::TPythonDump(aFunction) << aChamfer
|
|
|
|
<< " = geompy.MakeChamferEdgeAD(" << theShape << ", " << theD
|
|
|
|
<< ", " << theAngle << ", " << theFace1 << ", " << theFace2 << ")";
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferFaces
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferFaces
|
|
|
|
(Handle(GEOM_Object) theShape, double theD1, double theD2,
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int> theFaces)
|
2004-12-01 15:39:14 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_FACES);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD1(theD1);
|
|
|
|
aCI.SetD2(theD2);
|
|
|
|
int aLen = theFaces.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theFaces.begin();
|
2004-12-01 15:39:14 +05:00
|
|
|
for (; it != theFaces.end(); it++, ind++) {
|
|
|
|
aCI.SetFace(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aChamfer << " = geompy.MakeChamferFaces(" << theShape
|
|
|
|
<< ", " << theD1 << ", " << theD2 << ", [";
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
it = theFaces.begin();
|
2005-06-02 13:17:09 +06:00
|
|
|
pd << (*it++);
|
|
|
|
while (it != theFaces.end()) {
|
|
|
|
pd << ", " << (*it++);
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
2005-06-02 13:17:09 +06:00
|
|
|
pd << "])";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
2008-02-06 20:43:50 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferFacesAD
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferFacesAD
|
|
|
|
(Handle(GEOM_Object) theShape, double theD, double theAngle,
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int> theFaces)
|
2008-02-06 20:43:50 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_FACES_AD);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD(theD);
|
|
|
|
aCI.SetAngle(theAngle);
|
|
|
|
int aLen = theFaces.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theFaces.begin();
|
2008-02-06 20:43:50 +05:00
|
|
|
for (; it != theFaces.end(); it++, ind++) {
|
|
|
|
aCI.SetFace(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aChamfer << " = geompy.MakeChamferFacesAD(" << theShape
|
|
|
|
<< ", " << theD << ", " << theAngle << ", [";
|
|
|
|
|
|
|
|
it = theFaces.begin();
|
|
|
|
pd << (*it++);
|
|
|
|
while (it != theFaces.end()) {
|
|
|
|
pd << ", " << (*it++);
|
|
|
|
}
|
|
|
|
pd << "])";
|
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferEdges
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdges
|
|
|
|
(Handle(GEOM_Object) theShape, double theD1, double theD2,
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int> theEdges)
|
2008-02-06 20:43:50 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGES);
|
2008-07-21 19:51:52 +06:00
|
|
|
if (aFunction.IsNull()) { MESSAGE ( "Edges Function is NULL!!!" ); return NULL;}
|
2008-02-06 20:43:50 +05:00
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID())
|
2008-07-21 19:51:52 +06:00
|
|
|
{ MESSAGE ( "Chamfer Driver is NULL!!!" ); return NULL; }
|
2008-02-06 20:43:50 +05:00
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
2008-07-21 19:51:52 +06:00
|
|
|
if (aRefShape.IsNull()) { MESSAGE ("Shape is NULL!!!"); return NULL;}
|
2008-02-06 20:43:50 +05:00
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD1(theD1);
|
|
|
|
aCI.SetD2(theD2);
|
|
|
|
int aLen = theEdges.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theEdges.begin();
|
2008-02-06 20:43:50 +05:00
|
|
|
for (; it != theEdges.end(); it++, ind++) {
|
|
|
|
aCI.SetEdge(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aChamfer << " = geompy.MakeChamferEdges(" << theShape
|
|
|
|
<< ", " << theD1 << ", " << theD2 << ", [";
|
|
|
|
|
|
|
|
it = theEdges.begin();
|
|
|
|
pd << (*it++);
|
|
|
|
while (it != theEdges.end()) {
|
|
|
|
pd << ", " << (*it++);
|
|
|
|
}
|
|
|
|
pd << "])";
|
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* MakeChamferEdgesAD
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdgesAD
|
|
|
|
(Handle(GEOM_Object) theShape, double theD, double theAngle,
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int> theEdges)
|
2008-02-06 20:43:50 +05:00
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Chamfer object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
|
|
|
|
|
|
|
|
//Add a new Chamfer function
|
|
|
|
Handle(GEOM_Function) aFunction =
|
|
|
|
aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGES_AD);
|
2008-07-21 19:51:52 +06:00
|
|
|
if (aFunction.IsNull()) { MESSAGE ( "Edges Function is NULL!!!" ); return NULL; }
|
2008-02-06 20:43:50 +05:00
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID())
|
2008-07-21 19:51:52 +06:00
|
|
|
{ MESSAGE("Chamfer Driver is NULL!!!"); return NULL;}
|
2008-02-06 20:43:50 +05:00
|
|
|
|
|
|
|
GEOMImpl_IChamfer aCI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
2008-07-21 19:51:52 +06:00
|
|
|
if (aRefShape.IsNull()) { MESSAGE ("Shape is NULL!!!"); return NULL;}
|
2008-02-06 20:43:50 +05:00
|
|
|
|
|
|
|
aCI.SetShape(aRefShape);
|
|
|
|
aCI.SetD(theD);
|
|
|
|
aCI.SetAngle(theAngle);
|
|
|
|
int aLen = theEdges.size();
|
|
|
|
aCI.SetLength(aLen);
|
|
|
|
|
|
|
|
int ind = 1;
|
2008-07-14 11:11:31 +06:00
|
|
|
std::list<int>::iterator it = theEdges.begin();
|
2008-02-06 20:43:50 +05:00
|
|
|
for (; it != theEdges.end(); it++, ind++) {
|
|
|
|
aCI.SetEdge(ind, (*it));
|
|
|
|
}
|
|
|
|
|
|
|
|
//Compute the Chamfer value
|
|
|
|
try {
|
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Chamfer driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
|
|
|
GEOM::TPythonDump pd (aFunction);
|
|
|
|
pd << aChamfer << " = geompy.MakeChamferEdgesAD(" << theShape
|
|
|
|
<< ", " << theD << ", " << theAngle << ", [";
|
|
|
|
|
|
|
|
it = theEdges.begin();
|
|
|
|
pd << (*it++);
|
|
|
|
while (it != theEdges.end()) {
|
|
|
|
pd << ", " << (*it++);
|
|
|
|
}
|
|
|
|
pd << "])";
|
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* Archimede
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeArchimede (Handle(GEOM_Object) theShape,
|
|
|
|
double theWeight,
|
|
|
|
double theWaterDensity,
|
|
|
|
double theMeshingDeflection)
|
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
|
|
|
//Add a new Archimede object
|
|
|
|
Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_ARCHIMEDE);
|
|
|
|
|
|
|
|
//Add a new Archimede function
|
|
|
|
Handle(GEOM_Function) aFunction = aChamfer->AddFunction(GEOMImpl_ArchimedeDriver::GetID(), ARCHIMEDE_TYPE);
|
|
|
|
if (aFunction.IsNull()) return NULL;
|
|
|
|
|
|
|
|
//Check if the function is set correctly
|
|
|
|
if (aFunction->GetDriverGUID() != GEOMImpl_ArchimedeDriver::GetID()) return NULL;
|
|
|
|
|
|
|
|
GEOMImpl_IArchimede aAI (aFunction);
|
|
|
|
|
|
|
|
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
|
|
|
if (aRefShape.IsNull()) return NULL;
|
|
|
|
|
|
|
|
aAI.SetBasicShape(aRefShape);
|
|
|
|
aAI.SetWeight(theWeight);
|
|
|
|
aAI.SetDensity(theWaterDensity);
|
|
|
|
aAI.SetDeflection(theMeshingDeflection);
|
|
|
|
|
|
|
|
//Compute the Archimede value
|
|
|
|
try {
|
2006-09-04 17:33:22 +06:00
|
|
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
|
|
|
OCC_CATCH_SIGNALS;
|
|
|
|
#endif
|
2004-12-01 15:39:14 +05:00
|
|
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
|
|
|
SetErrorCode("Archimede driver failed");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Standard_Failure) {
|
|
|
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
|
|
|
SetErrorCode(aFail->GetMessageString());
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Make a Python command
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOM::TPythonDump(aFunction) << aChamfer
|
|
|
|
<< " = geompy.Archimede(" << theShape << ", " << theWeight << ", "
|
|
|
|
<< theWaterDensity << ", " << theMeshingDeflection << ")";
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
SetErrorCode(OK);
|
|
|
|
return aChamfer;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetSubShape
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
bool GEOMImpl_ILocalOperations::GetSubShape (const TopoDS_Shape& theShape, const int theIndex,
|
|
|
|
TopoDS_Shape& theSubShape)
|
|
|
|
{
|
|
|
|
if (theShape.IsNull() || theIndex < 1)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
TopTools_IndexedMapOfShape anIndices;
|
|
|
|
TopExp::MapShapes(theShape, anIndices);
|
|
|
|
if (theIndex > anIndices.Extent()) return false;
|
|
|
|
theSubShape = anIndices.FindKey(theIndex);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
* GetSubShapeIndex
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
Standard_Integer GEOMImpl_ILocalOperations::GetSubShapeIndex (Handle(GEOM_Object) theShape,
|
|
|
|
Handle(GEOM_Object) theSubShape)
|
|
|
|
{
|
|
|
|
SetErrorCode(KO);
|
|
|
|
|
2006-05-06 14:44:32 +06:00
|
|
|
Standard_Integer anInd = -1;
|
|
|
|
GEOM_Engine* anEngine = GetEngine();
|
|
|
|
//GEOMImpl_Gen* aGen = dynamic_cast<GEOMImpl_Gen*>(anEngine);
|
|
|
|
GEOMImpl_Gen* aGen = (GEOMImpl_Gen*)anEngine;
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2006-05-06 14:44:32 +06:00
|
|
|
if (aGen) {
|
|
|
|
GEOMImpl_IShapesOperations* anIShapesOperations =
|
|
|
|
aGen->GetIShapesOperations(GetDocID());
|
|
|
|
anInd = anIShapesOperations->GetSubShapeIndex(theShape, theSubShape);
|
|
|
|
SetErrorCode(anIShapesOperations->GetErrorCode());
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
|
|
|
|
2006-05-06 14:44:32 +06:00
|
|
|
return anInd;
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|