mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-02-03 19:50:33 +05:00
Mantis issue 0021934: [CEA 694] Delete the internal faces of an object.
This commit is contained in:
parent
7b119929a6
commit
bf456e30c0
@ -22,8 +22,7 @@
|
|||||||
// File: GEOMAlgo_RemoverWebs.cxx
|
// File: GEOMAlgo_RemoverWebs.cxx
|
||||||
// Created: Thu Mar 28 07:40:32 2013
|
// Created: Thu Mar 28 07:40:32 2013
|
||||||
// Author: Peter KURNEV
|
// Author: Peter KURNEV
|
||||||
// <pkv@irinox>
|
|
||||||
//
|
|
||||||
#include <GEOMAlgo_RemoverWebs.hxx>
|
#include <GEOMAlgo_RemoverWebs.hxx>
|
||||||
|
|
||||||
#include <TopoDS_Iterator.hxx>
|
#include <TopoDS_Iterator.hxx>
|
||||||
@ -35,6 +34,8 @@
|
|||||||
#include <TopTools_IndexedMapOfShape.hxx>
|
#include <TopTools_IndexedMapOfShape.hxx>
|
||||||
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||||||
#include <TopTools_ListOfShape.hxx>
|
#include <TopTools_ListOfShape.hxx>
|
||||||
|
#include <TopTools_MapOfShape.hxx>
|
||||||
|
#include <TopTools_MapIteratorOfMapOfShape.hxx>
|
||||||
|
|
||||||
#include <TopExp.hxx>
|
#include <TopExp.hxx>
|
||||||
|
|
||||||
@ -46,9 +47,8 @@
|
|||||||
#include <GEOMAlgo_BuilderSolid.hxx>
|
#include <GEOMAlgo_BuilderSolid.hxx>
|
||||||
#include <GEOMAlgo_Tools3D.hxx>
|
#include <GEOMAlgo_Tools3D.hxx>
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function :
|
//function :
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
GEOMAlgo_RemoverWebs::GEOMAlgo_RemoverWebs()
|
GEOMAlgo_RemoverWebs::GEOMAlgo_RemoverWebs()
|
||||||
@ -118,20 +118,52 @@ void GEOMAlgo_RemoverWebs::Perform()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_RemoverWebs::BuildSolid()
|
void GEOMAlgo_RemoverWebs::BuildSolid()
|
||||||
{
|
{
|
||||||
Standard_Integer i, aNbF, aNbSx, iErr, aNbSI, aNbF2;
|
Standard_Integer i, aNbF, aNbSx, iErr, aNbSI, aNbF2, aNbS, aNbR;
|
||||||
TopAbs_Orientation aOr;
|
TopAbs_Orientation aOr;
|
||||||
TopoDS_Iterator aIt1, aIt2;
|
TopoDS_Iterator aIt1, aIt2;
|
||||||
|
TopoDS_Shape aShape;
|
||||||
BRep_Builder aBB;
|
BRep_Builder aBB;
|
||||||
|
TopTools_MapOfShape aMFence;
|
||||||
TopTools_IndexedMapOfShape aMSI;
|
TopTools_IndexedMapOfShape aMSI;
|
||||||
TopTools_IndexedDataMapOfShapeListOfShape aMFS;
|
TopTools_IndexedDataMapOfShapeListOfShape aMFS;
|
||||||
TopTools_ListOfShape aSFS;
|
TopTools_ListOfShape aSFS;
|
||||||
TopTools_ListIteratorOfListOfShape aItLS;
|
TopTools_ListIteratorOfListOfShape aItLS;
|
||||||
GEOMAlgo_BuilderSolid aSB;
|
GEOMAlgo_BuilderSolid aSB;
|
||||||
//
|
//
|
||||||
|
//modified by NIZNHY-PKV Fri Jul 12 07:22:58 2013f
|
||||||
|
//
|
||||||
|
// 0.
|
||||||
|
// The compound myShape may contain equal solids
|
||||||
|
// (itz.brep for e.g.). The block is to refine
|
||||||
|
// such data if it is necessary. The shape to treat
|
||||||
|
// will be aShape (not myShape).
|
||||||
|
//
|
||||||
|
aShape=myShape;
|
||||||
|
//
|
||||||
|
aIt1.Initialize(myShape);
|
||||||
|
for (aNbS=0; aIt1.More(); aIt1.Next(), ++aNbS) {
|
||||||
|
const TopoDS_Shape& aS=aIt1.Value();
|
||||||
|
aMFence.Add(aS);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
aNbR=aMFence.Extent();
|
||||||
|
if (aNbS!=aNbR) {
|
||||||
|
TopTools_MapIteratorOfMapOfShape aItMS;
|
||||||
|
//
|
||||||
|
GEOMAlgo_Tools3D::MakeContainer(TopAbs_COMPOUND, aShape);
|
||||||
|
//
|
||||||
|
aItMS.Initialize(aMFence);
|
||||||
|
for (; aItMS.More(); aItMS.Next()) {
|
||||||
|
const TopoDS_Shape& aS=aItMS.Key();
|
||||||
|
aBB.Add(aShape, aS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//modified by NIZNHY-PKV Fri Jul 12 07:23:02 2013t
|
||||||
|
//
|
||||||
aNbF2=0;
|
aNbF2=0;
|
||||||
//
|
//
|
||||||
// 1. aSFS: Faces
|
// 1. aSFS: Faces
|
||||||
TopExp::MapShapesAndAncestors(myShape, TopAbs_FACE, TopAbs_SOLID, aMFS);
|
TopExp::MapShapesAndAncestors(aShape, TopAbs_FACE, TopAbs_SOLID, aMFS);
|
||||||
//
|
//
|
||||||
aNbF=aMFS.Extent();
|
aNbF=aMFS.Extent();
|
||||||
for (i=1; i<=aNbF; ++i) {
|
for (i=1; i<=aNbF; ++i) {
|
||||||
@ -159,18 +191,18 @@ void GEOMAlgo_RemoverWebs::BuildSolid()
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if (!aNbF2) { // nothing to do here
|
if (!aNbF2) { // nothing to do here
|
||||||
myResult=myShape;
|
myResult=aShape;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// 2 Internal shapes: edges, vertices
|
// 2 Internal shapes: edges, vertices
|
||||||
aIt1.Initialize(myShape);
|
aIt1.Initialize(aShape);
|
||||||
for (; aIt1.More(); aIt1.Next()) {
|
for (; aIt1.More(); aIt1.Next()) {
|
||||||
const TopoDS_Shape& aSD=aIt1.Value();
|
const TopoDS_Shape& aSD=aIt1.Value();
|
||||||
//
|
//
|
||||||
aIt2.Initialize(aSD);
|
aIt2.Initialize(aSD);
|
||||||
for (; aIt2.More(); aIt2.Next()) {
|
for (; aIt2.More(); aIt2.Next()) {
|
||||||
const TopoDS_Shape& aSi=aIt2.Value();
|
const TopoDS_Shape& aSi=aIt2.Value();
|
||||||
if (aSi.ShapeType()!=TopAbs_SHELL) {
|
if (aSi.ShapeType()!=TopAbs_SHELL) {
|
||||||
aOr=aSi.Orientation();
|
aOr=aSi.Orientation();
|
||||||
if (aOr==TopAbs_INTERNAL) {
|
if (aOr==TopAbs_INTERNAL) {
|
||||||
@ -182,7 +214,7 @@ void GEOMAlgo_RemoverWebs::BuildSolid()
|
|||||||
aNbSI=aMSI.Extent();
|
aNbSI=aMSI.Extent();
|
||||||
//
|
//
|
||||||
// 3 Solids without internals
|
// 3 Solids without internals
|
||||||
GEOMAlgo_Tools3D::MakeContainer(TopAbs_COMPOUND, myResult);
|
GEOMAlgo_Tools3D::MakeContainer(TopAbs_COMPOUND, myResult);
|
||||||
//
|
//
|
||||||
aSB.SetContext(myContext);
|
aSB.SetContext(myContext);
|
||||||
aSB.SetShapes(aSFS);
|
aSB.SetShapes(aSFS);
|
||||||
@ -194,7 +226,7 @@ void GEOMAlgo_RemoverWebs::BuildSolid()
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
const TopTools_ListOfShape& aLSR=aSB.Areas();
|
const TopTools_ListOfShape& aLSR=aSB.Areas();
|
||||||
//
|
//
|
||||||
// 4 Add the internals
|
// 4 Add the internals
|
||||||
if (aNbSI) {
|
if (aNbSI) {
|
||||||
AddInternalShapes(aLSR, aMSI);
|
AddInternalShapes(aLSR, aMSI);
|
||||||
@ -209,13 +241,13 @@ void GEOMAlgo_RemoverWebs::BuildSolid()
|
|||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : AddInternalShapes
|
//function : AddInternalShapes
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
void GEOMAlgo_RemoverWebs::AddInternalShapes(const TopTools_ListOfShape& aLSR,
|
void GEOMAlgo_RemoverWebs::AddInternalShapes(const TopTools_ListOfShape& aLSR,
|
||||||
const TopTools_IndexedMapOfShape& aMSI)
|
const TopTools_IndexedMapOfShape& aMSI)
|
||||||
{
|
{
|
||||||
Standard_Integer i, aNbSI;
|
Standard_Integer i, aNbSI;
|
||||||
TopAbs_State aState;
|
TopAbs_State aState;
|
||||||
TopoDS_Solid aSd;
|
TopoDS_Solid aSd;
|
||||||
BRep_Builder aBB;
|
BRep_Builder aBB;
|
||||||
TopTools_ListIteratorOfListOfShape aItLS;
|
TopTools_ListIteratorOfListOfShape aItLS;
|
||||||
|
Loading…
Reference in New Issue
Block a user