IMPs 19766 (Wire from unconnected edges) and 20004 (NumberOfSolids)

This commit is contained in:
jfa 2009-05-27 11:46:05 +00:00
parent f465b18263
commit 8e1ef24a91
21 changed files with 323 additions and 188 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -6,12 +6,15 @@
\n You can create a \b Wire from several connected edges and wires by \n You can create a \b Wire from several connected edges and wires by
selecting them in the object browser or in the viewer holding Shift selecting them in the object browser or in the viewer holding Shift
button. button. Select \b Tolerance which will be used to check
connections. If you use \b Tolerance more than 1e-07, and gap,
covered by this tolerance, is detected, edges will be modified to
connect in the middle of the gap.
\n The \b Result will be a \b GEOM_Object (WIRE). \n The \b Result will be a \b GEOM_Object (WIRE).
\n <b>TUI Command:</b> <em>geompy.MakeWire(ListOfShape)</em> \n <b>TUI Command:</b> <em>geompy.MakeWire(ListOfShape, Tolerance)</em>
<b>Arguments:</b> Name + List of connected wires or edges. <b>Arguments:</b> Name + List of connected wires or edges + Tolerance.
\n <b>Dialog Box:</b> \n <b>Dialog Box:</b>

View File

@ -40,11 +40,8 @@
\anchor swig_MakeChamfer \anchor swig_MakeChamfer
\until id_MakeChamfer \until id_MakeChamfer
\anchor swig_NumberOfFaces \anchor swig_NumberOf
\until Bad number of faces \until Bad number of shapes
\anchor swig_NumberOfEdges
\until Bad number of edges
\anchor swig_MakeBlockExplode \anchor swig_MakeBlockExplode
\until id_MakeBlockExplode \until id_MakeBlockExplode

View File

@ -1202,9 +1202,12 @@ module GEOM
/*! /*!
* Create a wire from the set of edges and wires. * Create a wire from the set of edges and wires.
* \param theEdgesAndWires List of edge and/or wires. * \param theEdgesAndWires List of edge and/or wires.
* \param theTolerance Maximum distance between vertices, that will be merged.
* Values less than 1e-07 are equivalent to 1e-07 (Precision::Confusion()).
* \return New GEOM_Object, containing the created wire. * \return New GEOM_Object, containing the created wire.
*/ */
GEOM_Object MakeWire (in ListOfGO theEdgesAndWires); GEOM_Object MakeWire (in ListOfGO theEdgesAndWires,
in double theTolerance);
/*! /*!
* Create a face on the given wire. * Create a face on the given wire.
@ -1358,6 +1361,15 @@ module GEOM
*/ */
long NumberOfEdges (in GEOM_Object theShape); long NumberOfEdges (in GEOM_Object theShape);
/*!
* Count number of subshapes of type \a theShapeType in the given shape.
* \param theShape Shape to count subshapes in.
* \param theShapeType The type of subshapes to count.
* \return Number of subshapes of type \a theShapeType in \a theShape.
*/
long NumberOfSubShapes (in GEOM_Object theShape,
in long theShapeType);
/*! /*!
* Reverses an orientation the given shape. * Reverses an orientation the given shape.
* \param theShape Shape to be reversed. * \param theShape Shape to be reversed.

View File

@ -360,7 +360,8 @@ module GEOM
//-----------------------------------------------------------// //-----------------------------------------------------------//
GEOM_Object MakeEdge (in GEOM_Object thePnt1, GEOM_Object MakeEdge (in GEOM_Object thePnt1,
in GEOM_Object thePnt2) ; in GEOM_Object thePnt2) ;
GEOM_Object MakeWire (in GEOM_List theEdgesAndWires) ; GEOM_Object MakeWire (in GEOM_List theEdgesAndWires,
in double theTolerance) ;
GEOM_Object MakeFace (in GEOM_Object theWire, GEOM_Object MakeFace (in GEOM_Object theWire,
in boolean isPlanarWanted) ; in boolean isPlanarWanted) ;
GEOM_Object MakeFaceWires (in GEOM_List theWires, GEOM_Object MakeFaceWires (in GEOM_List theWires,

View File

@ -22,7 +22,7 @@
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : BuildGUI_WireDlg.cxx // File : BuildGUI_WireDlg.cxx
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
//
#include "BuildGUI_WireDlg.h" #include "BuildGUI_WireDlg.h"
#include <GEOMImpl_Types.hxx> #include <GEOMImpl_Types.hxx>
@ -37,6 +37,7 @@
#include <LightApp_SelectionMgr.h> #include <LightApp_SelectionMgr.h>
#include <TColStd_MapOfInteger.hxx> #include <TColStd_MapOfInteger.hxx>
#include <Precision.hxx>
//================================================================================= //=================================================================================
// class : BuildGUI_WireDlg() // class : BuildGUI_WireDlg()
@ -61,16 +62,22 @@ BuildGUI_WireDlg::BuildGUI_WireDlg( GeometryGUI* theGeometryGUI, QWidget* parent
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
mainFrame()->RadioButton3->close(); mainFrame()->RadioButton3->close();
GroupPoints = new DlgRef_1Sel( centralWidget() ); GroupArgs = new DlgRef_1Sel1Spin( centralWidget() );
GroupPoints->GroupBox1->setTitle( tr( "GEOM_WIRE_CONNECT" ) ); GroupArgs->GroupBox1->setTitle( tr( "GEOM_WIRE_CONNECT" ) );
GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECTS" ) ); GroupArgs->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
GroupPoints->PushButton1->setIcon( image1 ); GroupArgs->PushButton1->setIcon( image1 );
GroupPoints->LineEdit1->setReadOnly( true ); GroupArgs->LineEdit1->setReadOnly( true );
GroupArgs->TextLabel2->setText( tr( "GEOM_TOLERANCE" ) );
double SpecificStep = 0.0001;
double prec = Precision::Confusion();
initSpinBox(GroupArgs->SpinBox_DX, prec, MAX_NUMBER, SpecificStep, 9);
GroupArgs->SpinBox_DX->setValue(prec);
QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
layout->setMargin( 0 ); layout->setSpacing( 6 ); layout->setMargin( 0 ); layout->setSpacing( 6 );
layout->addWidget( GroupPoints ); layout->addWidget( GroupArgs );
/***************************************************************/ /***************************************************************/
setHelpFileName( "create_wire_page.html" ); setHelpFileName( "create_wire_page.html" );
@ -97,8 +104,8 @@ BuildGUI_WireDlg::~BuildGUI_WireDlg()
void BuildGUI_WireDlg::Init() void BuildGUI_WireDlg::Init()
{ {
/* init variables */ /* init variables */
myEditCurrentArgument = GroupPoints->LineEdit1; myEditCurrentArgument = GroupArgs->LineEdit1;
GroupPoints->LineEdit1->setReadOnly( true ); GroupArgs->LineEdit1->setReadOnly( true );
myOkEdgesAndWires = false; myOkEdgesAndWires = false;
@ -110,7 +117,7 @@ void BuildGUI_WireDlg::Init()
/* signals and slots connections */ /* signals and slots connections */
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupArgs->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
@ -180,14 +187,14 @@ void BuildGUI_WireDlg::SelectionIntoArgument()
void BuildGUI_WireDlg::SetEditCurrentArgument() void BuildGUI_WireDlg::SetEditCurrentArgument()
{ {
QPushButton* send = (QPushButton*)sender(); QPushButton* send = (QPushButton*)sender();
if ( send != GroupPoints->PushButton1 ) if ( send != GroupArgs->PushButton1 )
return; return;
TColStd_MapOfInteger aMap; TColStd_MapOfInteger aMap;
aMap.Add( GEOM_WIRE ); aMap.Add( GEOM_WIRE );
aMap.Add( GEOM_EDGE ); aMap.Add( GEOM_EDGE );
globalSelection( aMap ); globalSelection( aMap );
myEditCurrentArgument = GroupPoints->LineEdit1; myEditCurrentArgument = GroupArgs->LineEdit1;
myEditCurrentArgument->setFocus(); myEditCurrentArgument->setFocus();
SelectionIntoArgument(); SelectionIntoArgument();
@ -233,25 +240,25 @@ GEOM::GEOM_IOperations_ptr BuildGUI_WireDlg::createOperation()
// function : isValid // function : isValid
// purpose : // purpose :
//================================================================================= //=================================================================================
bool BuildGUI_WireDlg::isValid( QString& ) bool BuildGUI_WireDlg::isValid (QString& msg)
{ {
return myOkEdgesAndWires; bool ok = GroupArgs->SpinBox_DX->isValid(msg, !IsPreview());
return myOkEdgesAndWires && ok;
} }
//================================================================================= //=================================================================================
// function : execute // function : execute
// purpose : // purpose :
//================================================================================= //=================================================================================
bool BuildGUI_WireDlg::execute( ObjectList& objects ) bool BuildGUI_WireDlg::execute (ObjectList& objects)
{ {
GEOM::GEOM_Object_var anObj; GEOM::GEOM_Object_var anObj;
anObj = GEOM::GEOM_IShapesOperations::_narrow( anObj = GEOM::GEOM_IShapesOperations::_narrow(getOperation())->
getOperation() )->MakeWire( myEdgesAndWires ); MakeWire(myEdgesAndWires, GroupArgs->SpinBox_DX->value());
if ( !anObj->_is_nil() ) if (!anObj->_is_nil())
objects.push_back( anObj._retn() ); objects.push_back(anObj._retn());
return true; return true;
} }

View File

@ -22,13 +22,13 @@
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : BuildGUI_WireDlg.h // File : BuildGUI_WireDlg.h
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
//
#ifndef BUILDGUI_WIREDLG_H #ifndef BUILDGUI_WIREDLG_H
#define BUILDGUI_WIREDLG_H #define BUILDGUI_WIREDLG_H
#include <GEOMBase_Skeleton.h> #include <GEOMBase_Skeleton.h>
class DlgRef_1Sel; class DlgRef_1Sel1Spin;
//================================================================================= //=================================================================================
// class : BuildGUI_WireDlg // class : BuildGUI_WireDlg
@ -56,7 +56,7 @@ private:
GEOM::ListOfGO myEdgesAndWires; GEOM::ListOfGO myEdgesAndWires;
bool myOkEdgesAndWires; /* to check when arguments is defined */ bool myOkEdgesAndWires; /* to check when arguments is defined */
DlgRef_1Sel* GroupPoints; DlgRef_1Sel1Spin* GroupArgs;
private slots: private slots:
void ClickOnOk(); void ClickOnOk();

View File

@ -18,7 +18,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
#include <GEOMImpl_I3DPrimOperations.hxx> #include <GEOMImpl_I3DPrimOperations.hxx>
@ -61,7 +61,6 @@
#include <GEOMImpl_IPrism.hxx> #include <GEOMImpl_IPrism.hxx>
#include <GEOMImpl_IPipe.hxx> #include <GEOMImpl_IPipe.hxx>
#include <GEOMImpl_IRevolution.hxx> #include <GEOMImpl_IRevolution.hxx>
#include <GEOMImpl_IShapes.hxx>
#include <GEOMImpl_IFilling.hxx> #include <GEOMImpl_IFilling.hxx>
#include <GEOMImpl_IThruSections.hxx> #include <GEOMImpl_IThruSections.hxx>
#include <GEOMImpl_IPipeDiffSect.hxx> #include <GEOMImpl_IPipeDiffSect.hxx>
@ -1447,59 +1446,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle2Ways
return aRevolution; return aRevolution;
} }
//=============================================================================
/*!
* MakeSolidShell
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeSolidShell (Handle(GEOM_Object) theShell)
{
SetErrorCode(KO);
if (theShell.IsNull()) return NULL;
//Add a new Solid object
Handle(GEOM_Object) aSolid = GetEngine()->AddObject(GetDocID(), GEOM_SOLID);
//Add a new Solid function for creation a solid from a shell
Handle(GEOM_Function) aFunction =
aSolid->AddFunction(GEOMImpl_ShapeDriver::GetID(), SOLID_SHELL);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) return NULL;
GEOMImpl_IShapes aCI (aFunction);
Handle(GEOM_Function) aRefShell = theShell->GetLastFunction();
if (aRefShell.IsNull()) return NULL;
aCI.SetBase(aRefShell);
//Compute the Solid value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Solid 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) << aSolid << " = geompy.MakeSolid(" << theShell << ")";
SetErrorCode(OK);
return aSolid;
}
//============================================================================= //=============================================================================
/*! /*!
* MakeFilling * MakeFilling

View File

@ -18,7 +18,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifndef _GEOMImpl_I3DPrimOperations_HXX_ #ifndef _GEOMImpl_I3DPrimOperations_HXX_
#define _GEOMImpl_I3DPrimOperations_HXX_ #define _GEOMImpl_I3DPrimOperations_HXX_
@ -97,11 +97,13 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
Handle(GEOM_Object) theAxis, Handle(GEOM_Object) theAxis,
double theAngle); double theAngle);
Standard_EXPORT Handle(GEOM_Object) MakeSolidShell (Handle(GEOM_Object) theShell); Standard_EXPORT Handle(GEOM_Object) MakeFilling (Handle(GEOM_Object) theShape,
int theMinDeg, int theMaxDeg,
double theTol2D, double theTol3D,
int theNbIter, bool isApprox);
Standard_EXPORT Handle(GEOM_Object) MakeFilling (Handle(GEOM_Object) theShape, int theMinDeg, int theMaxDeg, double theTol2D, double theTol3D, int theNbIter, bool isApprox); Standard_EXPORT Handle(GEOM_Object) MakeThruSections
(const Handle(TColStd_HSequenceOfTransient)& theSeqSections,
Standard_EXPORT Handle(GEOM_Object) MakeThruSections(const Handle(TColStd_HSequenceOfTransient)& theSeqSections,
bool theModeSolid, bool theModeSolid,
double thePreci, double thePreci,
bool theRuled); bool theRuled);

View File

@ -21,25 +21,25 @@
// //
// NOTE: This is an intreface to a function for the Shapes // NOTE: This is an intreface to a function for the Shapes
// (Wire, Face, Shell, Solid and Compound) creation. // (Wire, Face, Shell, Solid and Compound) creation.
//
#include "GEOM_Function.hxx" #include "GEOM_Function.hxx"
#include "TColStd_HSequenceOfTransient.hxx" #include "TColStd_HSequenceOfTransient.hxx"
#include "TColStd_HArray1OfInteger.hxx" #include "TColStd_HArray1OfInteger.hxx"
#define SHAPE_ARG_SHAPES 1 // for Wire, Shell, Solid and Compound
#define SHAPE_ARG_BASE 2 // for Face, Solid and Sub-shape
#define SHAPE_ARG_PLANAR 3 // for Face
#define SHAPE_ARG_SUBTYPE 4 // for Sub-shape
#define SHAPE_ARG_INDICES 5 // for Sub-shape
class GEOMImpl_IShapes class GEOMImpl_IShapes
{ {
public: public:
enum {
SHAPE_ARG_SHAPES = 1, // for Wire, Shell, Solid and Compound
SHAPE_ARG_BASE = 2, // for Face, Solid and Sub-shape
SHAPE_ARG_PLANAR = 3, // for Face
SHAPE_ARG_SUBTYPE = 4, // for Sub-shape
SHAPE_ARG_INDICES = 5, // for Sub-shape
SHAPE_ARG_TOLERANCE = 6 // for Wire
};
GEOMImpl_IShapes(Handle(GEOM_Function) theFunction): _func(theFunction) {} GEOMImpl_IShapes(Handle(GEOM_Function) theFunction): _func(theFunction) {}
void SetShapes(const Handle(TColStd_HSequenceOfTransient)& theShapes) void SetShapes(const Handle(TColStd_HSequenceOfTransient)& theShapes)
@ -69,6 +69,11 @@ class GEOMImpl_IShapes
Handle(TColStd_HArray1OfInteger) GetIndices() Handle(TColStd_HArray1OfInteger) GetIndices()
{ return _func->GetIntegerArray(SHAPE_ARG_INDICES); } { return _func->GetIntegerArray(SHAPE_ARG_INDICES); }
void SetTolerance(const Standard_Real theValue)
{ _func->SetReal(SHAPE_ARG_TOLERANCE, theValue); }
Standard_Integer GetTolerance() { return _func->GetReal(SHAPE_ARG_TOLERANCE); }
private: private:
Handle(GEOM_Function) _func; Handle(GEOM_Function) _func;

View File

@ -214,9 +214,71 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdge
*/ */
//============================================================================= //=============================================================================
Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeWire Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeWire
(std::list<Handle(GEOM_Object)> theShapes) (std::list<Handle(GEOM_Object)> theShapes,
const Standard_Real theTolerance)
{ {
return MakeShape(theShapes, GEOM_WIRE, WIRE_EDGES, "MakeWire"); SetErrorCode(KO);
//Add a new object
Handle(GEOM_Object) aWire = GetEngine()->AddObject(GetDocID(), GEOM_WIRE);
//Add a new function
Handle(GEOM_Function) aFunction =
aWire->AddFunction(GEOMImpl_ShapeDriver::GetID(), WIRE_EDGES);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) return NULL;
GEOMImpl_IShapes aCI (aFunction);
aCI.SetTolerance(theTolerance);
Handle(TColStd_HSequenceOfTransient) aShapesSeq = new TColStd_HSequenceOfTransient;
// Shapes
std::list<Handle(GEOM_Object)>::iterator it = theShapes.begin();
for (; it != theShapes.end(); it++) {
Handle(GEOM_Function) aRefSh = (*it)->GetLastFunction();
if (aRefSh.IsNull()) {
SetErrorCode("NULL argument shape for the shape construction");
return NULL;
}
aShapesSeq->Append(aRefSh);
}
aCI.SetShapes(aShapesSeq);
//Compute the shape
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Shape 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 << aWire << " = geompy.MakeWire([";
// Shapes
it = theShapes.begin();
if (it != theShapes.end()) {
pd << (*it++);
while (it != theShapes.end()) {
pd << ", " << (*it++);
}
}
pd << "])";
SetErrorCode(OK);
return aWire;
} }
//============================================================================= //=============================================================================
@ -1103,54 +1165,83 @@ TCollection_AsciiString GEOMImpl_IShapesOperations::GetShapeTypeString (Handle(G
//============================================================================= //=============================================================================
/*! /*!
* NumberOfFaces * NumberOfSubShapes
*/ */
//============================================================================= //=============================================================================
Standard_Integer GEOMImpl_IShapesOperations::NumberOfFaces (Handle(GEOM_Object) theShape) Standard_Integer GEOMImpl_IShapesOperations::NumberOfSubShapes
(Handle(GEOM_Object) theShape,
const Standard_Integer theShapeType)
{ {
SetErrorCode(KO); SetErrorCode(KO);
Standard_Integer nbShapes = 0;
Standard_Integer nb = 0;
if (theShape.IsNull()) return -1; if (theShape.IsNull()) return -1;
TopoDS_Shape aShape = theShape->GetValue(); TopoDS_Shape aShape = theShape->GetValue();
if (aShape.IsNull()) return -1; if (aShape.IsNull()) return -1;
/*
TopTools_MapOfShape mapShape; TopTools_MapOfShape mapShape;
TopExp_Explorer exp (aShape, TopAbs_FACE); if (aShape.ShapeType() == TopAbs_COMPOUND &&
(TopAbs_ShapeEnum(theShapeType) == TopAbs_SHAPE ||
TopAbs_ShapeEnum(theShapeType) == TopAbs_COMPSOLID ||
TopAbs_ShapeEnum(theShapeType) == TopAbs_COMPOUND)) {
TopoDS_Iterator It (aShape, Standard_True, Standard_True);
for (; It.More(); It.Next()) {
if (mapShape.Add(It.Value())) {
if (TopAbs_ShapeEnum(theShapeType) == TopAbs_SHAPE ||
TopAbs_ShapeEnum(theShapeType) == It.Value().ShapeType()) {
nbShapes++;
}
}
}
} else {
TopExp_Explorer exp (aShape, TopAbs_ShapeEnum(theShapeType));
for (; exp.More(); exp.Next()) for (; exp.More(); exp.Next())
if (mapShape.Add(exp.Current())) if (mapShape.Add(exp.Current()))
nb++; nbShapes++;
}
SetErrorCode(OK);
return nb;
}
//=============================================================================
/*!
* NumberOfEdges
*/ */
//=============================================================================
Standard_Integer GEOMImpl_IShapesOperations::NumberOfEdges (Handle(GEOM_Object) theShape)
{
SetErrorCode(KO);
Standard_Integer nb = 0; try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
int iType, nbTypes [TopAbs_SHAPE];
for (iType = 0; iType < TopAbs_SHAPE; ++iType)
nbTypes[iType] = 0;
nbTypes[aShape.ShapeType()]++;
if (theShape.IsNull()) return -1; TopTools_MapOfShape aMapOfShape;
TopoDS_Shape aShape = theShape->GetValue(); aMapOfShape.Add(aShape);
if (aShape.IsNull()) return -1; TopTools_ListOfShape aListOfShape;
aListOfShape.Append(aShape);
TopTools_MapOfShape mapShape; TopTools_ListIteratorOfListOfShape itL (aListOfShape);
for (; itL.More(); itL.Next()) {
TopoDS_Iterator it (itL.Value());
for (; it.More(); it.Next()) {
TopoDS_Shape s = it.Value();
if (aMapOfShape.Add(s)) {
aListOfShape.Append(s);
nbTypes[s.ShapeType()]++;
}
}
}
TopExp_Explorer exp (aShape, TopAbs_EDGE); if (TopAbs_ShapeEnum(theShapeType) == TopAbs_SHAPE)
for (; exp.More(); exp.Next()) nbShapes = aMapOfShape.Extent();
if (mapShape.Add(exp.Current())) else
nb++; nbShapes = nbTypes[theShapeType];
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return -1;
}
SetErrorCode(OK); SetErrorCode(OK);
return nb; return nbShapes;
} }
//============================================================================= //=============================================================================

View File

@ -26,7 +26,7 @@
// Project : SALOME // Project : SALOME
// $Header$ // $Header$
//============================================================================= //=============================================================================
//
#ifndef _GEOMImpl_IShapesOperations_HXX_ #ifndef _GEOMImpl_IShapesOperations_HXX_
#define _GEOMImpl_IShapesOperations_HXX_ #define _GEOMImpl_IShapesOperations_HXX_
@ -56,7 +56,8 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations
Standard_EXPORT Handle(GEOM_Object) MakeEdge (Handle(GEOM_Object) thePoint1, Standard_EXPORT Handle(GEOM_Object) MakeEdge (Handle(GEOM_Object) thePoint1,
Handle(GEOM_Object) thePoint2); Handle(GEOM_Object) thePoint2);
Standard_EXPORT Handle(GEOM_Object) MakeWire (std::list<Handle(GEOM_Object)> theEdgesAndWires); Standard_EXPORT Handle(GEOM_Object) MakeWire (std::list<Handle(GEOM_Object)> theEdgesAndWires,
const Standard_Real theTolerance);
Standard_EXPORT Handle(GEOM_Object) MakeFace (Handle(GEOM_Object) theWire, const bool isPlanarWanted); Standard_EXPORT Handle(GEOM_Object) MakeFace (Handle(GEOM_Object) theWire, const bool isPlanarWanted);
@ -102,8 +103,8 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations
Standard_EXPORT TCollection_AsciiString GetShapeTypeString (Handle(GEOM_Object) theShape); Standard_EXPORT TCollection_AsciiString GetShapeTypeString (Handle(GEOM_Object) theShape);
Standard_EXPORT Standard_Integer NumberOfFaces (Handle(GEOM_Object) theShape); Standard_EXPORT Standard_Integer NumberOfSubShapes (Handle(GEOM_Object) theShape,
Standard_EXPORT Standard_Integer NumberOfEdges (Handle(GEOM_Object) theShape); const Standard_Integer theShapeType);
Standard_EXPORT Handle(GEOM_Object) ReverseShape(Handle(GEOM_Object) theShapes); Standard_EXPORT Handle(GEOM_Object) ReverseShape(Handle(GEOM_Object) theShapes);

View File

@ -18,7 +18,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <GEOMImpl_ShapeDriver.hxx> #include <GEOMImpl_ShapeDriver.hxx>
#include <GEOMImpl_IShapes.hxx> #include <GEOMImpl_IShapes.hxx>
@ -29,6 +29,7 @@
// OCCT Includes // OCCT Includes
#include <ShapeFix_Wire.hxx> #include <ShapeFix_Wire.hxx>
#include <ShapeFix_Edge.hxx>
#include <BRep_Tool.hxx> #include <BRep_Tool.hxx>
#include <BRep_Builder.hxx> #include <BRep_Builder.hxx>
@ -152,17 +153,37 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
Standard_ConstructionError::Raise("Wire construction failed: several loops detected"); Standard_ConstructionError::Raise("Wire construction failed: several loops detected");
} else if (aFW->StatusReorder(ShapeExtend_FAIL)) { } else if (aFW->StatusReorder(ShapeExtend_FAIL)) {
Standard_ConstructionError::Raise("Wire construction failed"); Standard_ConstructionError::Raise("Wire construction failed");
} else if (aFW->StatusReorder(ShapeExtend_DONE2)) { //} else if (aFW->StatusReorder(ShapeExtend_DONE2)) {
Standard_ConstructionError::Raise("Wire construction failed: some gaps detected"); // Standard_ConstructionError::Raise("Wire construction failed: some gaps detected");
} else { } else {
} }
// IMP 0019766: Building a Wire from unconnected edges by introducing a tolerance
Standard_Real aTolerance = aCI.GetTolerance();
if (aTolerance < Precision::Confusion())
aTolerance = Precision::Confusion();
aFW->ClosedWireMode() = Standard_False; aFW->ClosedWireMode() = Standard_False;
aFW->FixConnected(); aFW->FixConnected(aTolerance);
if (aFW->StatusConnected(ShapeExtend_FAIL)) { if (aFW->StatusConnected(ShapeExtend_FAIL)) {
Standard_ConstructionError::Raise("Wire construction failed: cannot build connected wire"); Standard_ConstructionError::Raise("Wire construction failed: cannot build connected wire");
} }
// IMP 0019766
aFW->FixGapsByRangesMode() = Standard_True;
if (aFW->FixGaps3d()) {
Handle(ShapeExtend_WireData) sbwd = aFW->WireData();
Handle(ShapeFix_Edge) aFe = new ShapeFix_Edge;
for (Standard_Integer iedge = 1; iedge <= sbwd->NbEdges(); iedge++) {
TopoDS_Edge aEdge = TopoDS::Edge(sbwd->Edge(iedge));
aFe->FixVertexTolerance(aEdge);
aFe->FixSameParameter(aEdge);
}
}
else if (aFW->StatusGaps3d(ShapeExtend_FAIL)) {
Standard_ConstructionError::Raise("Wire construction failed: cannot fix 3d gaps");
}
aShape = aFW->WireAPIMake(); aShape = aFW->WireAPIMake();
} }
} }
@ -446,7 +467,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
// Check shape validity // Check shape validity
BRepCheck_Analyzer ana (aShape, false); BRepCheck_Analyzer ana (aShape, false);
if (!ana.IsValid()) { if (!ana.IsValid()) {
Standard_ConstructionError::Raise("Algorithm have produced an invalid shape result"); //Standard_ConstructionError::Raise("Algorithm have produced an invalid shape result");
} }
aFunction->SetValue(aShape); aFunction->SetValue(aShape);

View File

@ -29,6 +29,7 @@
#include "GEOM_Object_i.hh" #include "GEOM_Object_i.hh"
#include <strstream> #include <strstream>
//#include <sstream>
#include "Utils_CorbaException.hxx" #include "Utils_CorbaException.hxx"
#include "OpUtil.hxx" #include "OpUtil.hxx"
@ -326,7 +327,8 @@ SALOMEDS::TMPFile* GEOM_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
// Prepare a file name to open // Prepare a file name to open
TCollection_AsciiString aNameWithExt(""); TCollection_AsciiString aNameWithExt("");
if (isMultiFile) if (isMultiFile)
aNameWithExt = TCollection_AsciiString((char*)(SALOMEDS_Tool::GetNameFromPath(theComponent->GetStudy()->URL())).c_str()); aNameWithExt = TCollection_AsciiString((char*)(SALOMEDS_Tool::GetNameFromPath
(theComponent->GetStudy()->URL())).c_str());
aNameWithExt += TCollection_AsciiString("_GEOM.sgd"); aNameWithExt += TCollection_AsciiString("_GEOM.sgd");
aSeq[0] = CORBA::string_dup(aNameWithExt.ToCString()); aSeq[0] = CORBA::string_dup(aNameWithExt.ToCString());
// Build a full file name of temporary file // Build a full file name of temporary file
@ -389,7 +391,8 @@ CORBA::Boolean GEOM_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
// Prepare a file name to open // Prepare a file name to open
TCollection_AsciiString aNameWithExt(""); TCollection_AsciiString aNameWithExt("");
if (isMultiFile) if (isMultiFile)
aNameWithExt = TCollection_AsciiString((char*)(SALOMEDS_Tool::GetNameFromPath(theComponent->GetStudy()->URL())).c_str()); aNameWithExt = TCollection_AsciiString((char*)(SALOMEDS_Tool::GetNameFromPath
(theComponent->GetStudy()->URL())).c_str());
aNameWithExt += TCollection_AsciiString("_GEOM.sgd"); aNameWithExt += TCollection_AsciiString("_GEOM.sgd");
TCollection_AsciiString aFullName = (TCollection_AsciiString((char*)aTmpDir.c_str()) + aNameWithExt); TCollection_AsciiString aFullName = (TCollection_AsciiString((char*)aTmpDir.c_str()) + aNameWithExt);
@ -448,14 +451,16 @@ CORBA::Boolean GEOM_Gen_i::CanCopy(SALOMEDS::SObject_ptr theObject) {
// function : CopyFrom() // function : CopyFrom()
// purpose : // purpose :
//============================================================================ //============================================================================
SALOMEDS::TMPFile* GEOM_Gen_i::CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID) { SALOMEDS::TMPFile* GEOM_Gen_i::CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID)
{
// Declare a sequence of the byte to store the copied object // Declare a sequence of the byte to store the copied object
SALOMEDS::TMPFile_var aStreamFile = new SALOMEDS::TMPFile; SALOMEDS::TMPFile_var aStreamFile = new SALOMEDS::TMPFile;
// Try to get GEOM_Object object by given SObject // Try to get GEOM_Object object by given SObject
SALOMEDS::GenericAttribute_var anAttr; SALOMEDS::GenericAttribute_var anAttr;
if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return aStreamFile._retn(); if (!theObject->FindAttribute(anAttr, "AttributeIOR")) return aStreamFile._retn();
GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow(_orb->string_to_object(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value())); GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow
(_orb->string_to_object(SALOMEDS::AttributeIOR::_narrow(anAttr)->Value()));
if (anObject->_is_nil()) return aStreamFile._retn(); if (anObject->_is_nil()) return aStreamFile._retn();
aStreamFile = anObject->GetShapeStream(); aStreamFile = anObject->GetShapeStream();
@ -1360,7 +1365,7 @@ char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry)
aGeomObject = GEOM::GEOM_Object::_narrow(anObject); aGeomObject = GEOM::GEOM_Object::_narrow(anObject);
} }
char* aTypeInfo = "Object"; const char* aTypeInfo = "Object";
if ( !aGeomObject->_is_nil() ) { if ( !aGeomObject->_is_nil() ) {
GEOM::GEOM_IKindOfShape::shape_kind aKind; GEOM::GEOM_IKindOfShape::shape_kind aKind;
GEOM::ListOfLong_var anInts; GEOM::ListOfLong_var anInts;

View File

@ -30,6 +30,7 @@
#include "GEOM_Engine.hxx" #include "GEOM_Engine.hxx"
#include "GEOM_Object.hxx" #include "GEOM_Object.hxx"
#include <TopAbs.hxx>
#include <TColStd_HSequenceOfTransient.hxx> #include <TColStd_HSequenceOfTransient.hxx>
#include <TColStd_HArray1OfInteger.hxx> #include <TColStd_HArray1OfInteger.hxx>
@ -90,7 +91,8 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeEdge
*/ */
//============================================================================= //=============================================================================
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeWire GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeWire
(const GEOM::ListOfGO& theEdgesAndWires) (const GEOM::ListOfGO& theEdgesAndWires,
const CORBA::Double theTolerance)
{ {
GEOM::GEOM_Object_var aGEOMObject; GEOM::GEOM_Object_var aGEOMObject;
@ -110,7 +112,7 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeWire
// Make Solid // Make Solid
Handle(GEOM_Object) anObject = Handle(GEOM_Object) anObject =
GetOperations()->MakeWire(aShapes); GetOperations()->MakeWire(aShapes, theTolerance);
if (!GetOperations()->IsDone() || anObject.IsNull()) if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn(); return aGEOMObject._retn();
@ -554,13 +556,7 @@ char* GEOM_IShapesOperations_i::GetShapeTypeString (GEOM::GEOM_Object_ptr theSha
//============================================================================= //=============================================================================
CORBA::Long GEOM_IShapesOperations_i::NumberOfFaces (GEOM::GEOM_Object_ptr theShape) CORBA::Long GEOM_IShapesOperations_i::NumberOfFaces (GEOM::GEOM_Object_ptr theShape)
{ {
Handle(GEOM_Object) aShape = GetObjectImpl(theShape); return NumberOfSubShapes(theShape, Standard_Integer(TopAbs_FACE));
if (aShape.IsNull()) return -1;
CORBA::Long aNb = GetOperations()->NumberOfFaces(aShape);
if (!GetOperations()->IsDone()) return -1;
return aNb;
} }
//============================================================================= //=============================================================================
@ -569,11 +565,22 @@ CORBA::Long GEOM_IShapesOperations_i::NumberOfFaces (GEOM::GEOM_Object_ptr theSh
*/ */
//============================================================================= //=============================================================================
CORBA::Long GEOM_IShapesOperations_i::NumberOfEdges (GEOM::GEOM_Object_ptr theShape) CORBA::Long GEOM_IShapesOperations_i::NumberOfEdges (GEOM::GEOM_Object_ptr theShape)
{
return NumberOfSubShapes(theShape, Standard_Integer(TopAbs_EDGE));
}
//=============================================================================
/*!
* NumberOfSubShapes
*/
//=============================================================================
CORBA::Long GEOM_IShapesOperations_i::NumberOfSubShapes (GEOM::GEOM_Object_ptr theShape,
const CORBA::Long theShapeType)
{ {
Handle(GEOM_Object) aShape = GetObjectImpl(theShape); Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
if (aShape.IsNull()) return -1; if (aShape.IsNull()) return -1;
CORBA::Long aNb = GetOperations()->NumberOfEdges(aShape); CORBA::Long aNb = GetOperations()->NumberOfSubShapes(aShape, theShapeType);
if (!GetOperations()->IsDone()) return -1; if (!GetOperations()->IsDone()) return -1;
return aNb; return aNb;

View File

@ -18,7 +18,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifndef _GEOM_IShapesOperations_i_HeaderFile #ifndef _GEOM_IShapesOperations_i_HeaderFile
#define _GEOM_IShapesOperations_i_HeaderFile #define _GEOM_IShapesOperations_i_HeaderFile
@ -45,7 +45,8 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i :
GEOM::GEOM_Object_ptr MakeEdge (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr MakeEdge (GEOM::GEOM_Object_ptr thePnt1,
GEOM::GEOM_Object_ptr thePnt2); GEOM::GEOM_Object_ptr thePnt2);
GEOM::GEOM_Object_ptr MakeWire (const GEOM::ListOfGO& theEdgesAndWires); GEOM::GEOM_Object_ptr MakeWire (const GEOM::ListOfGO& theEdgesAndWires,
const CORBA::Double theTolerance);
GEOM::GEOM_Object_ptr MakeFace (GEOM::GEOM_Object_ptr theWire, GEOM::GEOM_Object_ptr MakeFace (GEOM::GEOM_Object_ptr theWire,
CORBA::Boolean isPlanarWanted); CORBA::Boolean isPlanarWanted);
@ -95,6 +96,8 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i :
CORBA::Long NumberOfFaces (GEOM::GEOM_Object_ptr theShape); CORBA::Long NumberOfFaces (GEOM::GEOM_Object_ptr theShape);
CORBA::Long NumberOfEdges (GEOM::GEOM_Object_ptr theShape); CORBA::Long NumberOfEdges (GEOM::GEOM_Object_ptr theShape);
CORBA::Long NumberOfSubShapes (GEOM::GEOM_Object_ptr theShape,
const CORBA::Long theShapeType);
GEOM::GEOM_Object_ptr ChangeOrientation (GEOM::GEOM_Object_ptr theShape); GEOM::GEOM_Object_ptr ChangeOrientation (GEOM::GEOM_Object_ptr theShape);

View File

@ -18,17 +18,17 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_OStream.hxx> #include <Standard_OStream.hxx>
#include <GEOM_Object_i.hh> #include <GEOM_Object_i.hh>
//#include <GEOM_Gen_i.hh>
#include <GEOM_ISubShape.hxx> #include <GEOM_ISubShape.hxx>
#include <GEOMImpl_Types.hxx> #include <GEOMImpl_Types.hxx>
#include "utilities.h" #include "utilities.h"
#include <fstream> #include <fstream>
#include <strstream> #include <strstream>
//#include <sstream>
#include <OpUtil.hxx> #include <OpUtil.hxx>
#include <Utils_ExceptHandlers.hxx> #include <Utils_ExceptHandlers.hxx>

View File

@ -1886,14 +1886,15 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeEdge (GEOM::GEOM_Object_ptr thePnt1,
//============================================================================= //=============================================================================
// MakeWire: // MakeWire:
//============================================================================= //=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeWire (GEOM::GEOM_List_ptr theEdgesAndWires) GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeWire (GEOM::GEOM_List_ptr theEdgesAndWires,
CORBA::Double theTolerance)
{ {
beginService( " GEOM_Superv_i::MakeWire" ); beginService( " GEOM_Superv_i::MakeWire" );
MESSAGE("GEOM_Superv_i::MakeWire"); MESSAGE("GEOM_Superv_i::MakeWire");
if (GEOM_List_i<GEOM::ListOfGO>* aListImplEW = if (GEOM_List_i<GEOM::ListOfGO>* aListImplEW =
dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theEdgesAndWires, myPOA).in())) { dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(theEdgesAndWires, myPOA).in())) {
getShapesOp(); getShapesOp();
GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeWire(aListImplEW->GetList()); GEOM::GEOM_Object_ptr anObj = myShapesOp->MakeWire(aListImplEW->GetList(), theTolerance);
endService( " GEOM_Superv_i::MakeWire" ); endService( " GEOM_Superv_i::MakeWire" );
return anObj; return anObj;
} }

View File

@ -438,7 +438,8 @@ public:
//-----------------------------------------------------------// //-----------------------------------------------------------//
GEOM::GEOM_Object_ptr MakeEdge (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr MakeEdge (GEOM::GEOM_Object_ptr thePnt1,
GEOM::GEOM_Object_ptr thePnt2); GEOM::GEOM_Object_ptr thePnt2);
GEOM::GEOM_Object_ptr MakeWire (GEOM::GEOM_List_ptr theEdgesAndWires); GEOM::GEOM_Object_ptr MakeWire (GEOM::GEOM_List_ptr theEdgesAndWires,
CORBA::Double theTolerance);
GEOM::GEOM_Object_ptr MakeFace (GEOM::GEOM_Object_ptr theWire, GEOM::GEOM_Object_ptr MakeFace (GEOM::GEOM_Object_ptr theWire,
CORBA::Boolean isPlanarWanted); CORBA::Boolean isPlanarWanted);
GEOM::GEOM_Object_ptr MakeFaceWires (GEOM::GEOM_List_ptr theWires, GEOM::GEOM_Object_ptr MakeFaceWires (GEOM::GEOM_List_ptr theWires,

View File

@ -203,16 +203,23 @@ def TestOtherOperations (geompy, math):
[f_ind_1, f_ind_2, f_ind_3]) [f_ind_1, f_ind_2, f_ind_3])
id_MakeChamfer = geompy.addToStudy(MakeChamfer, "MakeChamfer") id_MakeChamfer = geompy.addToStudy(MakeChamfer, "MakeChamfer")
# NumberOfFaces # NumberOf
NumberOfFaces = geompy.NumberOfFaces(Box) NumberOfFaces = geompy.NumberOfFaces(Box)
if NumberOfFaces != 6: if NumberOfFaces != 6:
print "Bad number of faces in BOX!" print "Bad number of faces in BOX!"
# NumberOfEdges
NumberOfEdges = geompy.NumberOfEdges(Box) NumberOfEdges = geompy.NumberOfEdges(Box)
if NumberOfEdges != 12: if NumberOfEdges != 12:
print "Bad number of edges in BOX!" print "Bad number of edges in BOX!"
NumberOfSolids = geompy.NumberOfSolids(Box)
if NumberOfSolids != 1:
print "Bad number of solids in BOX!"
NumberOfShapes = geompy.NumberOfSubShapes(Box, geompy.ShapeType["SHAPE"])
if NumberOfShapes != 34:
print "Bad number of shapes in BOX!"
# MakeBlockExplode # MakeBlockExplode
Compound = geompy.MakeCompound([Box, Sphere]) Compound = geompy.MakeCompound([Box, Sphere])
MakeBlockExplode = geompy.MakeBlockExplode(Compound, 6, 6) MakeBlockExplode = geompy.MakeBlockExplode(Compound, 6, 6)

View File

@ -1388,12 +1388,14 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Create a wire from the set of edges and wires. ## Create a wire from the set of edges and wires.
# @param theEdgesAndWires List of edges and/or wires. # @param theEdgesAndWires List of edges and/or wires.
# @param theTolerance Maximum distance between vertices, that will be merged.
# Values less than 1e-07 are equivalent to 1e-07 (Precision::Confusion()).
# @return New GEOM_Object, containing the created wire. # @return New GEOM_Object, containing the created wire.
# #
# @ref tui_creation_wire "Example" # @ref tui_creation_wire "Example"
def MakeWire(self,theEdgesAndWires): def MakeWire(self, theEdgesAndWires, theTolerance = 1e-07):
# Example: see GEOM_TestAll.py # Example: see GEOM_TestAll.py
anObj = self.ShapesOp.MakeWire(theEdgesAndWires) anObj = self.ShapesOp.MakeWire(theEdgesAndWires, theTolerance)
RaiseIfFailed("MakeWire", self.ShapesOp) RaiseIfFailed("MakeWire", self.ShapesOp)
return anObj return anObj
@ -1475,8 +1477,8 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @param theShape Shape to count faces of. # @param theShape Shape to count faces of.
# @return Quantity of faces. # @return Quantity of faces.
# #
# @ref swig_NumberOfFaces "Example" # @ref swig_NumberOf "Example"
def NumberOfFaces(self,theShape): def NumberOfFaces(self, theShape):
# Example: see GEOM_TestOthers.py # Example: see GEOM_TestOthers.py
nb_faces = self.ShapesOp.NumberOfFaces(theShape) nb_faces = self.ShapesOp.NumberOfFaces(theShape)
RaiseIfFailed("NumberOfFaces", self.ShapesOp) RaiseIfFailed("NumberOfFaces", self.ShapesOp)
@ -1486,13 +1488,36 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @param theShape Shape to count edges of. # @param theShape Shape to count edges of.
# @return Quantity of edges. # @return Quantity of edges.
# #
# @ref swig_NumberOfEdges "Example" # @ref swig_NumberOf "Example"
def NumberOfEdges(self,theShape): def NumberOfEdges(self, theShape):
# Example: see GEOM_TestOthers.py # Example: see GEOM_TestOthers.py
nb_edges = self.ShapesOp.NumberOfEdges(theShape) nb_edges = self.ShapesOp.NumberOfEdges(theShape)
RaiseIfFailed("NumberOfEdges", self.ShapesOp) RaiseIfFailed("NumberOfEdges", self.ShapesOp)
return nb_edges return nb_edges
## Gives quantity of subshapes of type theShapeType in the given shape.
# @param theShape Shape to count subshapes of.
# @param theShapeType Type of subshapes to count.
# @return Quantity of subshapes of given type.
#
# @ref swig_NumberOf "Example"
def NumberOfSubShapes(self, theShape, theShapeType):
# Example: see GEOM_TestOthers.py
nb_ss = self.ShapesOp.NumberOfSubShapes(theShape, theShapeType)
RaiseIfFailed("NumberOfSubShapes", self.ShapesOp)
return nb_ss
## Gives quantity of solids in the given shape.
# @param theShape Shape to count solids in.
# @return Quantity of solids.
#
# @ref swig_NumberOf "Example"
def NumberOfSolids(self, theShape):
# Example: see GEOM_TestOthers.py
nb_solids = self.ShapesOp.NumberOfSubShapes(theShape, ShapeType["SOLID"])
RaiseIfFailed("NumberOfSolids", self.ShapesOp)
return nb_solids
# end of l2_measure # end of l2_measure
## @} ## @}