mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-08 15:50:35 +05:00
153 lines
3.7 KiB
C++
153 lines
3.7 KiB
C++
|
// File: GEOMAlgo_WireSolid.cxx
|
||
|
// Created: Wed Jan 12 10:19:31 2005
|
||
|
// Author: Peter KURNEV
|
||
|
// <pkv@irinox>
|
||
|
|
||
|
|
||
|
#include <GEOMAlgo_WireSolid.ixx>
|
||
|
|
||
|
#include <Standard_Failure.hxx>
|
||
|
|
||
|
#include <TopAbs_ShapeEnum.hxx>
|
||
|
|
||
|
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||
|
|
||
|
#include <BOPTColStd_Dump.hxx>
|
||
|
|
||
|
#include <BooleanOperations_ShapesDataStructure.hxx>
|
||
|
#include <BooleanOperations_StateOfShape.hxx>
|
||
|
|
||
|
#include <BOPTools_PaveFiller.hxx>
|
||
|
#include <BOPTools_SplitShapesPool.hxx>
|
||
|
#include <BOPTools_PaveBlock.hxx>
|
||
|
#include <BOPTools_ListOfPaveBlock.hxx>
|
||
|
#include <BOPTools_DSFiller.hxx>
|
||
|
#include <BOPTools_WireStateFiller.hxx>
|
||
|
|
||
|
//=======================================================================
|
||
|
//function : GEOMAlgo_WireSolid
|
||
|
//purpose :
|
||
|
//=======================================================================
|
||
|
GEOMAlgo_WireSolid::GEOMAlgo_WireSolid()
|
||
|
:
|
||
|
GEOMAlgo_ShapeSolid()
|
||
|
{
|
||
|
}
|
||
|
//=======================================================================
|
||
|
//function : ~
|
||
|
//purpose :
|
||
|
//=======================================================================
|
||
|
GEOMAlgo_WireSolid::~GEOMAlgo_WireSolid()
|
||
|
{
|
||
|
}
|
||
|
//=======================================================================
|
||
|
// function: Perform
|
||
|
// purpose:
|
||
|
//=======================================================================
|
||
|
void GEOMAlgo_WireSolid::Perform()
|
||
|
{
|
||
|
myErrorStatus=0;
|
||
|
//
|
||
|
try {
|
||
|
if (myDSFiller==NULL) {
|
||
|
myErrorStatus=10;
|
||
|
return;
|
||
|
}
|
||
|
if(!myDSFiller->IsDone()) {
|
||
|
myErrorStatus=11;
|
||
|
return;
|
||
|
}
|
||
|
//
|
||
|
Standard_Boolean bIsNewFiller;
|
||
|
//
|
||
|
bIsNewFiller=myDSFiller->IsNewFiller();
|
||
|
|
||
|
if (bIsNewFiller) {
|
||
|
Prepare();
|
||
|
myDSFiller->SetNewFiller(!bIsNewFiller);
|
||
|
}
|
||
|
BuildResult();
|
||
|
}
|
||
|
//
|
||
|
catch (Standard_Failure) {
|
||
|
myErrorStatus= 12;
|
||
|
}
|
||
|
}
|
||
|
//=======================================================================
|
||
|
// function: Prepare
|
||
|
// purpose:
|
||
|
//=======================================================================
|
||
|
void GEOMAlgo_WireSolid::Prepare()
|
||
|
{
|
||
|
const BOPTools_PaveFiller& aPaveFiller=myDSFiller->PaveFiller();
|
||
|
//
|
||
|
BOPTools_WireStateFiller aStateFiller(aPaveFiller);
|
||
|
aStateFiller.Do();
|
||
|
//
|
||
|
}
|
||
|
//=======================================================================
|
||
|
// function: BuildResult
|
||
|
// purpose:
|
||
|
//=======================================================================
|
||
|
void GEOMAlgo_WireSolid::BuildResult()
|
||
|
{
|
||
|
const BooleanOperations_ShapesDataStructure& aDS=myDSFiller->DS();
|
||
|
const BOPTools_PaveFiller& aPaveFiller=myDSFiller->PaveFiller();
|
||
|
const BOPTools_SplitShapesPool& aSplitShapesPool=aPaveFiller.SplitShapesPool();
|
||
|
//
|
||
|
Standard_Integer i, aNbPB, nSp, iBeg, iEnd;
|
||
|
TopAbs_ShapeEnum aType;
|
||
|
BooleanOperations_StateOfShape aState;
|
||
|
//
|
||
|
myLSIN.Clear();
|
||
|
myLSOUT.Clear();
|
||
|
myLSON.Clear();
|
||
|
//
|
||
|
iBeg=1;
|
||
|
iEnd=aDS.NumberOfShapesOfTheObject();
|
||
|
if (aDS.Tool().ShapeType()==TopAbs_WIRE) {
|
||
|
iBeg=iEnd+1;
|
||
|
iEnd=aDS.NumberOfSourceShapes();
|
||
|
}
|
||
|
//
|
||
|
for (i=iBeg; i<=iEnd; ++i) {
|
||
|
aType=aDS.GetShapeType(i);
|
||
|
if (aType==TopAbs_EDGE) {
|
||
|
const TopoDS_Shape& aE=aDS.Shape(i);
|
||
|
const BOPTools_ListOfPaveBlock& aLPB=aSplitShapesPool(aDS.RefEdge(i));
|
||
|
aNbPB=aLPB.Extent();
|
||
|
//
|
||
|
if (!aNbPB) {
|
||
|
aState=aDS.GetState(i);
|
||
|
//
|
||
|
if (aState==BooleanOperations_IN) {
|
||
|
myLSIN.Append(aE);
|
||
|
}
|
||
|
else if (aState==BooleanOperations_OUT) {
|
||
|
myLSOUT.Append(aE);
|
||
|
}
|
||
|
else if (aState==BooleanOperations_ON) {
|
||
|
myLSON.Append(aE);
|
||
|
}
|
||
|
}
|
||
|
//
|
||
|
else if (aNbPB==1) {
|
||
|
const BOPTools_PaveBlock& aPB=aLPB.First();
|
||
|
nSp=aPB.Edge();
|
||
|
const TopoDS_Shape& aSp=aDS.Shape(nSp);
|
||
|
aState=aDS.GetState(nSp);
|
||
|
//
|
||
|
if (aState==BooleanOperations_IN) {
|
||
|
myLSIN.Append(aE);
|
||
|
}
|
||
|
else if (aState==BooleanOperations_OUT) {
|
||
|
myLSOUT.Append(aE);
|
||
|
}
|
||
|
else if (aState==BooleanOperations_ON) {
|
||
|
myLSON.Append(aE);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|