Next version of partition.

This commit is contained in:
skl 2007-01-30 14:06:11 +00:00
parent 4d98127e08
commit a8871229bd
7 changed files with 600 additions and 233 deletions

View File

@ -578,7 +578,77 @@ void MakeInternalWires(const TopTools_MapOfShape& theME,
theWires.Append(aW); theWires.Append(aW);
} }
} }
//=======================================================================
//function : IsInside
//purpose :
//=======================================================================
Standard_Boolean IsInside(const TopoDS_Shape& theHole,
const TopoDS_Shape& theF2,
IntTools_PContext& theContext)
{
Standard_Boolean bRet;
Standard_Real aT, aU, aV;
TopAbs_State aState;
TopExp_Explorer aExp;
TopTools_IndexedMapOfShape aME2;
gp_Pnt2d aP2D;
//
bRet=Standard_False;
aState=TopAbs_UNKNOWN;
const TopoDS_Face& aF2=TopoDS::Face(theF2);
//
TopExp::MapShapes(aF2, TopAbs_EDGE, aME2);
//
aExp.Init(theHole, TopAbs_EDGE);
if (aExp.More()) {
const TopoDS_Edge& aE = TopoDS::Edge(aExp.Current());
if (aME2.Contains(aE)) {
return bRet;
}
//
aT=BOPTools_Tools2D::IntermediatePoint(aE);
BOPTools_Tools2D::PointOnSurface(aE, aF2, aT, aU, aV);
aP2D.SetCoord(aU, aV);
//
IntTools_FClass2d& aClsf=theContext->FClass2d(aF2);
aState=aClsf.Perform(aP2D);
bRet=(aState==TopAbs_IN);
}
//
return bRet;
}
//=======================================================================
//function : IsGrowthWire
//purpose :
//=======================================================================
Standard_Boolean IsGrowthWire(const TopoDS_Shape& theWire,
const TopTools_IndexedMapOfShape& theMHE)
{
Standard_Boolean bRet;
TopoDS_Iterator aIt;
//
bRet=Standard_False;
if (theMHE.Extent()) {
aIt.Initialize(theWire);
for(; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aE=aIt.Value();
if (theMHE.Contains(aE)) {
return !bRet;
}
}
}
return bRet;
}
//BRepTools::Write(aFF, "ff");
//
// ErrorStatus :
// 11 - Null Context
// 12 - Null face generix
/*
//======================================================================= //=======================================================================
//function : IsInside //function : IsInside
//purpose : //purpose :
@ -606,71 +676,4 @@ Standard_Boolean IsInside(const TopoDS_Shape& theHole,
} }
return (aState==TopAbs_IN); return (aState==TopAbs_IN);
} }
//=======================================================================
//function : IsGrowthWire
//purpose :
//=======================================================================
Standard_Boolean IsGrowthWire(const TopoDS_Shape& theWire,
const TopTools_IndexedMapOfShape& theMHE)
{
Standard_Boolean bRet;
TopoDS_Iterator aIt;
//
bRet=Standard_False;
if (theMHE.Extent()) {
aIt.Initialize(theWire);
for(; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aE=aIt.Value();
if (theMHE.Contains(aE)) {
return !bRet;
}
}
}
return bRet;
}
//modified by NIZNHY-PKV Mon Sep 18 13:18:27 2006f
/*
static
Standard_Boolean IsHole(const TopoDS_Shape& ,
const TopoDS_Face& ,
IntTools_PContext& );
*/ */
//modified by NIZNHY-PKV Mon Sep 18 13:18:34 2006t
//modified by NIZNHY-PKV Mon Sep 18 13:18:13 2006f
/*
//=======================================================================
//function : IsHole
//purpose :
//=======================================================================
Standard_Boolean IsHole(const TopoDS_Shape& theS2,
const TopoDS_Face& theFace,
IntTools_PContext& theContext)
{
Standard_Boolean bIsHole;
Standard_Real aTol;
Handle(Geom_Surface) aS;
TopLoc_Location aLoc;
TopoDS_Face aF;
BRep_Builder aBB;
//
aTol=BRep_Tool::Tolerance(theFace);
aS=BRep_Tool::Surface(theFace, aLoc);
aBB.MakeFace(aF, aS, aLoc, aTol);
aBB.Add (aF, theS2);
//
IntTools_FClass2d& aClsf=theContext->FClass2d(aF);
//
bIsHole=aClsf.IsHole();
//
return bIsHole;
//
}
*/
//modified by NIZNHY-PKV Mon Sep 18 13:18:06 2006t
//BRepTools::Write(aFF, "ff");
//
// ErrorStatus :
// 11 - Null Context
// 12 - Null face generix

View File

@ -25,6 +25,11 @@
#include <GEOMAlgo_Gluer.ixx> #include <GEOMAlgo_Gluer.ixx>
#include <NMTDS_BoxBndTree.hxx>
#include <NCollection_UBTreeFiller.hxx>
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_ListOfInteger.hxx> #include <TColStd_ListOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx> #include <TColStd_ListIteratorOfListOfInteger.hxx>
@ -77,8 +82,8 @@
#include <GEOMAlgo_IndexedDataMapOfIntegerShape.hxx> #include <GEOMAlgo_IndexedDataMapOfIntegerShape.hxx>
#include <GEOMAlgo_IndexedDataMapOfShapeBox.hxx> #include <GEOMAlgo_IndexedDataMapOfShapeBox.hxx>
#include <GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx> //qft #include <GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx>
#include <GEOMAlgo_PassKeyShape.hxx>//qft #include <GEOMAlgo_PassKeyShape.hxx>
#include <GEOMAlgo_Tools.hxx> #include <GEOMAlgo_Tools.hxx>
// //
@ -179,11 +184,9 @@ void GEOMAlgo_Gluer::MakeVertices()
{ {
myErrorStatus=0; myErrorStatus=0;
// //
Standard_Integer j, i, aNbV, aIndex, aNbVSD; Standard_Integer j, i, aNbV, aNbVSD;
TColStd_ListIteratorOfListOfInteger aIt; TColStd_ListIteratorOfListOfInteger aIt;
Handle(Bnd_HArray1OfBox) aHAB; TopoDS_Shape aVF;
Bnd_BoundSortBox aBSB;
TopoDS_Shape aSTmp, aVF;
TopoDS_Vertex aVnew; TopoDS_Vertex aVnew;
TopTools_IndexedMapOfShape aMV, aMVProcessed; TopTools_IndexedMapOfShape aMV, aMVProcessed;
TopTools_ListIteratorOfListOfShape aItS; TopTools_ListIteratorOfListOfShape aItS;
@ -192,6 +195,11 @@ void GEOMAlgo_Gluer::MakeVertices()
GEOMAlgo_IndexedDataMapOfIntegerShape aMIS; GEOMAlgo_IndexedDataMapOfIntegerShape aMIS;
GEOMAlgo_IndexedDataMapOfShapeBox aMSB; GEOMAlgo_IndexedDataMapOfShapeBox aMSB;
// //
NMTDS_BoxBndTreeSelector aSelector;
NMTDS_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
//
//
TopExp::MapShapes(myShape, TopAbs_VERTEX, aMV); TopExp::MapShapes(myShape, TopAbs_VERTEX, aMV);
aNbV=aMV.Extent(); aNbV=aMV.Extent();
if (!aNbV) { if (!aNbV) {
@ -199,21 +207,23 @@ void GEOMAlgo_Gluer::MakeVertices()
return; return;
} }
// //
aHAB=new Bnd_HArray1OfBox(1, aNbV);
//
for (i=1; i<=aNbV; ++i) { for (i=1; i<=aNbV; ++i) {
const TopoDS_Shape& aV=aMV(i); const TopoDS_Shape& aV=aMV(i);
Bnd_Box aBox; Bnd_Box aBox;
// //
aBox.SetGap(myTol); aBox.SetGap(myTol);
BRepBndLib::Add(aV, aBox); BRepBndLib::Add(aV, aBox);
aHAB->SetValue(i, aBox); //
aTreeFiller.Add(i, aBox);
//
aMIS.Add(i, aV); aMIS.Add(i, aV);
aMSB.Add(aV, aBox); aMSB.Add(aV, aBox);
} }
// //
aBSB.Initialize(aHAB); aTreeFiller.Fill();
// //
//------------------------------
// Chains
for (i=1; i<=aNbV; ++i) { for (i=1; i<=aNbV; ++i) {
const TopoDS_Shape& aV=aMV(i); const TopoDS_Shape& aV=aMV(i);
// //
@ -221,31 +231,86 @@ void GEOMAlgo_Gluer::MakeVertices()
continue; continue;
} }
// //
const Bnd_Box& aBoxV=aMSB.FindFromKey(aV); Standard_Integer aNbIP, aIP, aNbIP1, aIP1;
const TColStd_ListOfInteger& aLI=aBSB.Compare(aBoxV);
aNbVSD=aLI.Extent();
if (!aNbVSD) {
myErrorStatus=3; // it must not be
return;
}
//
// Images
//
TopTools_ListOfShape aLVSD; TopTools_ListOfShape aLVSD;
TColStd_MapOfInteger aMIP, aMIP1, aMIPC;
TColStd_MapIteratorOfMapOfInteger aIt1;
// //
aIt.Initialize(aLI); aMIP.Add(i);
for (j=0; aIt.More(); aIt.Next(), ++j) { while(1) {
aIndex=aIt.Value(); aNbIP=aMIP.Extent();
const TopoDS_Shape& aVx=aMIS.FindFromKey(aIndex); aIt1.Initialize(aMIP);
if(!j) { for(; aIt1.More(); aIt1.Next()) {
aVF=aVx; aIP=aIt1.Key();
if (aMIPC.Contains(aIP)) {
continue;
}
//
const TopoDS_Shape& aVP=aMIS.FindFromKey(aIP);
const Bnd_Box& aBoxVP=aMSB.FindFromKey(aVP);
//
aSelector.Clear();
aSelector.SetBox(aBoxVP);
//
aNbVSD=aBBTree.Select(aSelector);
if (!aNbVSD) {
continue; // it must not be
}
//
const TColStd_ListOfInteger& aLI=aSelector.Indices();
aIt.Initialize(aLI);
for (; aIt.More(); aIt.Next()) {
aIP1=aIt.Value();
if (aMIP.Contains(aIP1)) {
continue;
}
aMIP1.Add(aIP1);
} //for (; aIt.More(); aIt.Next()) {
}//for(; aIt1.More(); aIt1.Next()) {
//
aNbIP1=aMIP1.Extent();
if (!aNbIP1) {
break;
} }
aLVSD.Append(aVx); //
aMVProcessed.Add(aVx); aIt1.Initialize(aMIP);
} for(; aIt1.More(); aIt1.Next()) {
aIP=aIt1.Key();
aMIPC.Add(aIP);
}
//
aMIP.Clear();
aIt1.Initialize(aMIP1);
for(; aIt1.More(); aIt1.Next()) {
aIP=aIt1.Key();
aMIP.Add(aIP);
}
aMIP1.Clear();
}// while(1)
// //
// Fill myImages
aNbIP=aMIPC.Extent();
//
if (!aNbIP) {// no SD vertices founded
aVF=aV;
aLVSD.Append(aV);
aMVProcessed.Add(aV);
}
else { // SD vertices founded [ aMIPC ]
aIt1.Initialize(aMIPC);
for(j=0; aIt1.More(); aIt1.Next(), ++j) {
aIP=aIt1.Key();
const TopoDS_Shape& aVP=aMIS.FindFromKey(aIP);
if (!j) {
aVF=aVP;
}
aLVSD.Append(aVP);
aMVProcessed.Add(aVP);
}
}
myImages.Bind(aVF, aLVSD); myImages.Bind(aVF, aLVSD);
} }// for (i=1; i<=aNbV; ++i) {
//------------------------------
// //
// Make new vertices // Make new vertices
aMV.Clear(); aMV.Clear();
@ -281,7 +346,6 @@ void GEOMAlgo_Gluer::MakeVertices()
for (; aItIm.More(); aItIm.Next()) { for (; aItIm.More(); aItIm.Next()) {
const TopoDS_Shape& aV=aItIm.Key(); const TopoDS_Shape& aV=aItIm.Key();
const TopTools_ListOfShape& aLVSD=aItIm.Value(); const TopTools_ListOfShape& aLVSD=aItIm.Value();
//
aItS.Initialize(aLVSD); aItS.Initialize(aLVSD);
for (; aItS.More(); aItS.Next()) { for (; aItS.More(); aItS.Next()) {
const TopoDS_Shape& aVSD=aItS.Value(); const TopoDS_Shape& aVSD=aItS.Value();
@ -424,8 +488,8 @@ void GEOMAlgo_Gluer::MakeShapes(const TopAbs_ShapeEnum aType)
TopoDS_Shape aNewShape; TopoDS_Shape aNewShape;
TopTools_IndexedMapOfShape aMF; TopTools_IndexedMapOfShape aMF;
TopTools_ListIteratorOfListOfShape aItS; TopTools_ListIteratorOfListOfShape aItS;
GEOMAlgo_PassKeyShape aPKF;//qft GEOMAlgo_PassKeyShape aPKF;
GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape aMPKLF;//qft GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape aMPKLF;
// //
TopExp::MapShapes(myShape, aType, aMF); TopExp::MapShapes(myShape, aType, aMF);
// //
@ -433,7 +497,6 @@ void GEOMAlgo_Gluer::MakeShapes(const TopAbs_ShapeEnum aType)
for (i=1; i<=aNbF; ++i) { for (i=1; i<=aNbF; ++i) {
const TopoDS_Shape& aS=aMF(i); const TopoDS_Shape& aS=aMF(i);
// //
//aPKF.Clear();//qft
if (aType==TopAbs_FACE) { if (aType==TopAbs_FACE) {
const TopoDS_Face& aF=TopoDS::Face(aS); const TopoDS_Face& aF=TopoDS::Face(aS);
FacePassKey(aF, aPKF); FacePassKey(aF, aPKF);
@ -622,21 +685,12 @@ void GEOMAlgo_Gluer::InnerTolerance()
void GEOMAlgo_Gluer::FacePassKey(const TopoDS_Face& aF, void GEOMAlgo_Gluer::FacePassKey(const TopoDS_Face& aF,
GEOMAlgo_PassKeyShape& aPK) GEOMAlgo_PassKeyShape& aPK)
{ {
Standard_Integer i, aNbE;//, aNbMax;//qft Standard_Integer i, aNbE;
TopTools_ListOfShape aLE; TopTools_ListOfShape aLE;
TopTools_IndexedMapOfShape aME; TopTools_IndexedMapOfShape aME;
// //
TopExp::MapShapes(aF, TopAbs_EDGE, aME); TopExp::MapShapes(aF, TopAbs_EDGE, aME);
aNbE=aME.Extent(); aNbE=aME.Extent();
//qf
/*
aNbMax=aPK.NbMax();
if (!aNbE || aNbE>aNbMax) {
myErrorStatus=101; // temprorary
return;
}
*/
//qt
// //
for (i=1; i<=aNbE; ++i) { for (i=1; i<=aNbE; ++i) {
const TopoDS_Shape& aE=aME(i); const TopoDS_Shape& aE=aME(i);
@ -647,10 +701,7 @@ void GEOMAlgo_Gluer::FacePassKey(const TopoDS_Face& aF,
const TopoDS_Shape& aER=myOrigins.Find(aE); const TopoDS_Shape& aER=myOrigins.Find(aE);
aLE.Append(aER); aLE.Append(aER);
} }
//qf
//aPK.SetIds(aLE);
aPK.SetShapes(aLE); aPK.SetShapes(aLE);
//qt
} }
//======================================================================= //=======================================================================
//function : EdgePassKey //function : EdgePassKey
@ -669,10 +720,7 @@ void GEOMAlgo_Gluer::EdgePassKey(const TopoDS_Edge& aE,
} }
const TopoDS_Shape& aVR1=myOrigins.Find(aV1); const TopoDS_Shape& aVR1=myOrigins.Find(aV1);
const TopoDS_Shape& aVR2=myOrigins.Find(aV2); const TopoDS_Shape& aVR2=myOrigins.Find(aV2);
//qf
//aPK.SetIds(aVR1, aVR2);
aPK.SetShapes(aVR1, aVR2); aPK.SetShapes(aVR1, aVR2);
//qt
} }
//======================================================================= //=======================================================================
//function : MakeVertex //function : MakeVertex
@ -774,7 +822,6 @@ void GEOMAlgo_Gluer::MakeEdge(const TopoDS_Edge& aE,
BOPTools_Tools::MakeSplitEdge(aEx, aVR1, aT1, aVR2, aT2, aNewEdge); BOPTools_Tools::MakeSplitEdge(aEx, aVR1, aT1, aVR2, aT2, aNewEdge);
} }
} }
//
//======================================================================= //=======================================================================
//function : MakeFace //function : MakeFace
//purpose : //purpose :
@ -834,15 +881,13 @@ void GEOMAlgo_Gluer::MakeFace(const TopoDS_Face& aF,
// //
aBB.Add(newWire, aER); aBB.Add(newWire, aER);
} }
//modified by NIZNHY-PKV Mon Jan 31 17:26:36 2005f // xf
//
TopTools_ListOfShape aLW; TopTools_ListOfShape aLW;
// //
aLW.Append(aW); aLW.Append(aW);
myImages.Bind(newWire, aLW); myImages.Bind(newWire, aLW);
myOrigins.Bind(aW, newWire); myOrigins.Bind(aW, newWire);
// // xt
//modified by NIZNHY-PKV Mon Jan 31 17:26:41 2005 t
aBB.Add(newFace, newWire); aBB.Add(newFace, newWire);
} }
aNewFace=newFace; aNewFace=newFace;
@ -963,10 +1008,10 @@ const TopTools_ListOfShape& GEOMAlgo_Gluer::Modified (const TopoDS_Shape& aS)
aType=aS.ShapeType(); aType=aS.ShapeType();
if (aType==TopAbs_VERTEX || if (aType==TopAbs_VERTEX ||
aType==TopAbs_EDGE || aType==TopAbs_EDGE ||
aType==TopAbs_WIRE || //modified by NIZNHY-PKV Mon Jan 31 17:18:36 2005ft aType==TopAbs_WIRE ||
aType==TopAbs_FACE || aType==TopAbs_FACE ||
aType==TopAbs_SHELL || //modified by NIZNHY-PKV Mon Jan 31 17:18:36 2005ft aType==TopAbs_SHELL ||
aType==TopAbs_SOLID) { //modified by NIZNHY-PKV Mon Jan 31 17:18:36 2005ft aType==TopAbs_SOLID) {
if(myOrigins.IsBound(aS)) { if(myOrigins.IsBound(aS)) {
const TopoDS_Shape& aSnew=myOrigins.Find(aS); const TopoDS_Shape& aSnew=myOrigins.Find(aS);
if (!aSnew.IsSame(aS)) { if (!aSnew.IsSame(aS)) {

View File

@ -115,7 +115,7 @@ static
//======================================================================= //=======================================================================
void GEOMAlgo_WESCorrector::DoConnexityBlocks() void GEOMAlgo_WESCorrector::DoConnexityBlocks()
{ {
Standard_Boolean bRegular; Standard_Boolean bRegular, bClosed;
Standard_Integer i, aNbV, j, aNbC, aNbVP, aNbVS; Standard_Integer i, aNbV, j, aNbC, aNbVP, aNbVS;
TopTools_ListIteratorOfListOfShape aIt; TopTools_ListIteratorOfListOfShape aIt;
TopoDS_Iterator aItE; TopoDS_Iterator aItE;
@ -208,17 +208,17 @@ static
aER=aMEC(j); aER=aMEC(j);
// //
if (aMER.Contains(aER)) { if (aMER.Contains(aER)) {
Standard_Boolean bClosed;
//
aER.Orientation(TopAbs_FORWARD); aER.Orientation(TopAbs_FORWARD);
aLEC.Append(aER); aLEC.Append(aER);
aER.Orientation(TopAbs_REVERSED); aER.Orientation(TopAbs_REVERSED);
aLEC.Append(aER); aLEC.Append(aER);
// //
bClosed=BRep_Tool::IsClosed(TopoDS::Edge(aER), myWES->Face()); //modified by NIZNHY-PKV Tue Nov 28 12:02:29 2006f
if (!bClosed) { //bClosed=BRep_Tool::IsClosed(TopoDS::Edge(aER), myWES->Face());
//if (!bClosed) {
bRegular=Standard_False; bRegular=Standard_False;
} //}
//modified by NIZNHY-PKV Tue Nov 28 12:02:33 2006t
} }
else { else {
aLEC.Append(aER); aLEC.Append(aER);
@ -234,11 +234,12 @@ static
// //
aNbVR=aMVER.Extent(); aNbVR=aMVER.Extent();
for (k=1; k<=aNbVR; ++k) { for (k=1; k<=aNbVR; ++k) {
const TopTools_ListOfShape& aLER=aMVER(k);//?? it was aMVE(k) const TopTools_ListOfShape& aLER=aMVER(k);
aNbER=aLER.Extent(); aNbER=aLER.Extent();
if (aNbER==1) { if (aNbER==1) {
const TopoDS_Edge& aEx=TopoDS::Edge(aER); const TopoDS_Edge& aEx=TopoDS::Edge(aER);
if (!BRep_Tool::IsClosed(aEx, myWES->Face())) { bClosed=BRep_Tool::IsClosed(aEx, myWES->Face());
if (!bClosed) {
bRegular=!bRegular; bRegular=!bRegular;
break; break;
} }

View File

@ -489,14 +489,6 @@ static
aTol=2.*Tolerance2D(aVb, aGAS); aTol=2.*Tolerance2D(aVb, aGAS);
aTol2=aTol*aTol; aTol2=aTol*aTol;
// //
//modified by NIZNHY-PKV Tue Nov 14 16:56:19 2006f
/*
UVTolerance2D(aVb, aGAS, aTolUVb, aTolVVb);
aTolUVb = 2.*aTolUVb;
aTolVVb = 2.*aTolVVb;
*/
//modified by NIZNHY-PKV Tue Nov 14 16:56:26 2006t
//
aNb=aLS.Length(); aNb=aLS.Length();
if (aNb>0) { if (aNb>0) {
// //
@ -517,20 +509,6 @@ static
// //
aD2=aPaPrev.SquareDistance(aPb); aD2=aPaPrev.SquareDistance(aPb);
anIsSameV2d =aD2<aTol2; anIsSameV2d =aD2<aTol2;
//
//modified by NIZNHY-PKV Tue Nov 14 16:56:49 2006f
/*
if(anIsSameV2d) {
Standard_Real udist, vdist;
//
udist=fabs(aPaPrev.X() - aPb.X());
vdist=fabs(aPaPrev.Y() - aPb.Y());
if((udist > aTolUVb) || (vdist > aTolVVb)) {
anIsSameV2d=!anIsSameV2d;
}
}
*/
//modified by NIZNHY-PKV Tue Nov 14 16:56:54 2006t
}//if (anIsSameV) { }//if (anIsSameV) {
// //
if (anIsSameV && anIsSameV2d) { if (anIsSameV && anIsSameV2d) {
@ -685,7 +663,10 @@ static
aTol2D=(aVr>anUr) ? aVr : anUr; aTol2D=(aVr>anUr) ? aVr : anUr;
// //
if (aType==GeomAbs_BSplineSurface|| if (aType==GeomAbs_BSplineSurface||
aType==GeomAbs_Sphere) { aType==GeomAbs_Sphere||
//modified by NIZNHY-PKV Wed Nov 29 10:18:50 2006f
GeomAbs_SurfaceOfRevolution) {
//modified by NIZNHY-PKV Wed Nov 29 10:18:55 2006t
if (aTol2D < aTolV3D) { if (aTol2D < aTolV3D) {
aTol2D=aTolV3D; aTol2D=aTolV3D;
} }
@ -895,29 +876,3 @@ Standard_Integer NbWaysOut(const BOP_ListOfEdgeInfo& aLEInfo)
} }
return iCnt; return iCnt;
} }
//modified by NIZNHY-PKV Tue Nov 14 16:55:31 2006f
/*
static
void UVTolerance2D (const TopoDS_Vertex& aV,
const GeomAdaptor_Surface& aGAS,
Standard_Real& aTolU,
Standard_Real& aTolV);
*/
/*
//=======================================================================
//function : UVTolerance2D
//purpose :
//=======================================================================
void UVTolerance2D (const TopoDS_Vertex& aV,
const GeomAdaptor_Surface& aGAS,
Standard_Real& aTolU,
Standard_Real& aTolV)
{
Standard_Real aTolV3D;
//
aTolV3D = BRep_Tool::Tolerance(aV);
aTolU=aGAS.UResolution(aTolV3D);
aTolV=aGAS.VResolution(aTolV3D);
}
*/
//modified by NIZNHY-PKV Tue Nov 14 16:55:39 2006

View File

@ -25,27 +25,11 @@
#include <NMTTools_PaveFiller.ixx> #include <NMTTools_PaveFiller.ixx>
// //
// Modified Thu Sep 14 14:35:18 2006
// Contribution of Samtech www.samcef.com BEGIN
#include <TColStd_ListOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <BRepBndLib.hxx>
#include <BOPTools_CArray1OfVSInterference.hxx>
#include <BOPTools_VSInterference.hxx>
// Contribution of Samtech www.samcef.com END
#include <stdio.h> #include <stdio.h>
#include <Precision.hxx> #include <Precision.hxx>
#include <NCollection_UBTreeFiller.hxx>
#include <TColStd_MapOfInteger.hxx> #include <TColStd_MapOfInteger.hxx>
#include <TColStd_IndexedMapOfInteger.hxx> #include <TColStd_IndexedMapOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <TColStd_MapOfInteger.hxx>
#include <gp_XYZ.hxx>
#include <gp_Pnt.hxx>
#include <TopoDS.hxx> #include <TopoDS.hxx>
#include <TopoDS_Edge.hxx> #include <TopoDS_Edge.hxx>
@ -53,17 +37,11 @@
#include <TopoDS_Compound.hxx> #include <TopoDS_Compound.hxx>
#include <TopTools_IndexedMapOfShape.hxx> #include <TopTools_IndexedMapOfShape.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_DataMapIteratorOfDataMapOfShapeListOfShape.hxx>
#include <TopTools_DataMapOfShapeListOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_DataMapOfShapeShape.hxx>
#include <BRep_Tool.hxx> #include <BRep_Tool.hxx>
#include <BRep_Builder.hxx> #include <BRep_Builder.hxx>
#include <Bnd_Box.hxx> #include <Bnd_Box.hxx>
#include <BRepBndLib.hxx>
#include <IntTools_ShrunkRange.hxx> #include <IntTools_ShrunkRange.hxx>
#include <IntTools_Range.hxx> #include <IntTools_Range.hxx>
@ -97,15 +75,46 @@
#include <BooleanOperations_KindOfInterference.hxx> #include <BooleanOperations_KindOfInterference.hxx>
#include <NMTDS_ShapesDataStructure.hxx> #include <NMTDS_ShapesDataStructure.hxx>
#include <NMTDS_IndexedDataMapOfIntegerShape.hxx>
#include <NMTDS_IndexedDataMapOfShapeBox.hxx>
#include <NMTDS_BoxBndTree.hxx>
#include <NMTTools_IndexedDataMapOfIndexedMapOfInteger.hxx> #include <NMTTools_IndexedDataMapOfIndexedMapOfInteger.hxx>
#include <NMTTools_ListOfCommonBlock.hxx> #include <NMTTools_ListOfCommonBlock.hxx>
#include <NMTTools_CommonBlock.hxx> #include <NMTTools_CommonBlock.hxx>
#include <NMTTools_ListIteratorOfListOfCommonBlock.hxx> #include <NMTTools_ListIteratorOfListOfCommonBlock.hxx>
// Modified Thu Sep 14 14:35:18 2006
// Contribution of Samtech www.samcef.com BEGIN
#include <TColStd_ListOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <BRepBndLib.hxx>
#include <BOPTools_CArray1OfVSInterference.hxx>
#include <BOPTools_VSInterference.hxx>
// Contribution of Samtech www.samcef.com END
//
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <Bnd_HArray1OfBox.hxx>
#include <Bnd_BoundSortBox.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_DataMapIteratorOfDataMapOfShapeListOfShape.hxx>
#include <TopTools_DataMapOfShapeListOfShape.hxx>
#include <NMTDS_IndexedDataMapOfIntegerShape.hxx>
#include <NMTDS_IndexedDataMapOfShapeBox.hxx>
#include <Bnd_Box.hxx>
#include <BRepBndLib.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_DataMapOfShapeShape.hxx>
#include <TopoDS_Vertex.hxx>
#include <gp_XYZ.hxx>
#include <gp_Pnt.hxx>
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <TColStd_MapOfInteger.hxx>
//
#include <NMTDS_BoxBndTree.hxx>
#include <NCollection_UBTreeFiller.hxx>
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
static static
void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI, void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI,
@ -117,7 +126,6 @@ static
TopoDS_Vertex& aNewVertex); TopoDS_Vertex& aNewVertex);
static static
void VertexParameters(const IntTools_CommonPrt& aCPart, void VertexParameters(const IntTools_CommonPrt& aCPart,
Standard_Real& aT1, Standard_Real& aT1,
@ -137,6 +145,7 @@ static
static static
void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB, void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
NMTTools_ListOfCommonBlock& aLCB); NMTTools_ListOfCommonBlock& aLCB);
//======================================================================= //=======================================================================
// function: PerformEE // function: PerformEE
// purpose: // purpose:
@ -447,6 +456,9 @@ static
}//for (; aIt.More(); aIt.Next()) { }//for (; aIt.More(); aIt.Next()) {
}// for (; aItIm.More(); aItIm.Next()) }// for (; aItIm.More(); aItIm.Next())
} }
//
// case: use_02
// completely rewritten
//======================================================================= //=======================================================================
//function : TreatNewVertices //function : TreatNewVertices
//purpose : //purpose :
@ -455,7 +467,7 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
TopTools_DataMapOfShapeListOfShape& myImages, TopTools_DataMapOfShapeListOfShape& myImages,
TopTools_DataMapOfShapeShape& myOrigins) TopTools_DataMapOfShapeShape& myOrigins)
{ {
Standard_Integer j, i, aNbV, aIndex, aNbVSD; Standard_Integer j, i, aNbV, aNbVSD;
Standard_Real aTol; Standard_Real aTol;
TColStd_ListIteratorOfListOfInteger aIt; TColStd_ListIteratorOfListOfInteger aIt;
TopoDS_Shape aSTmp, aVF; TopoDS_Shape aSTmp, aVF;
@ -467,12 +479,10 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
NMTDS_IndexedDataMapOfIntegerShape aMIS; NMTDS_IndexedDataMapOfIntegerShape aMIS;
NMTDS_IndexedDataMapOfShapeBox aMSB; NMTDS_IndexedDataMapOfShapeBox aMSB;
// //
//
NMTDS_BoxBndTreeSelector aSelector; NMTDS_BoxBndTreeSelector aSelector;
NMTDS_BoxBndTree aBBTree; NMTDS_BoxBndTree aBBTree;
NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree); NCollection_UBTreeFiller <Standard_Integer, Bnd_Box> aTreeFiller(aBBTree);
// //
//
myImages.Clear(); myImages.Clear();
myOrigins.Clear(); myOrigins.Clear();
// //
@ -498,6 +508,7 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
// //
aTreeFiller.Fill(); aTreeFiller.Fill();
// //
// Chains
for (i=1; i<=aNbV; ++i) { for (i=1; i<=aNbV; ++i) {
const TopoDS_Shape& aV=aMV(i); const TopoDS_Shape& aV=aMV(i);
// //
@ -505,33 +516,84 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
continue; continue;
} }
// //
const Bnd_Box& aBoxV=aMSB.FindFromKey(aV); Standard_Integer aNbIP, aIP, aNbIP1, aIP1;
aSelector.Clear();
aSelector.SetBox(aBoxV);
//
aNbVSD=aBBTree.Select(aSelector);
if (!aNbVSD) {
continue; // it must not be
}
//
// Images
//
TopTools_ListOfShape aLVSD; TopTools_ListOfShape aLVSD;
TColStd_MapOfInteger aMIP, aMIP1, aMIPC;
TColStd_MapIteratorOfMapOfInteger aIt1;
// //
const TColStd_ListOfInteger& aLI=aSelector.Indices(); aMIP.Add(i);
aIt.Initialize(aLI); while(1) {
for (j=0; aIt.More(); aIt.Next(), ++j) { aNbIP=aMIP.Extent();
aIndex=aIt.Value(); aIt1.Initialize(aMIP);
const TopoDS_Shape& aVx=aMIS.FindFromKey(aIndex); for(; aIt1.More(); aIt1.Next()) {
if(!j) { aIP=aIt1.Key();
aVF=aVx; if (aMIPC.Contains(aIP)) {
continue;
}
//
const TopoDS_Shape& aVP=aMIS.FindFromKey(aIP);
const Bnd_Box& aBoxVP=aMSB.FindFromKey(aVP);
//
aSelector.Clear();
aSelector.SetBox(aBoxVP);
//
aNbVSD=aBBTree.Select(aSelector);
if (!aNbVSD) {
continue; // it must not be
}
//
const TColStd_ListOfInteger& aLI=aSelector.Indices();
aIt.Initialize(aLI);
for (; aIt.More(); aIt.Next()) {
aIP1=aIt.Value();
if (aMIP.Contains(aIP1)) {
continue;
}
aMIP1.Add(aIP1);
} //for (; aIt.More(); aIt.Next()) {
}//for(; aIt1.More(); aIt1.Next()) {
//
aNbIP1=aMIP1.Extent();
if (!aNbIP1) {
break; // from while(1)
} }
aLVSD.Append(aVx); //
aMVProcessed.Add(aVx); aIt1.Initialize(aMIP);
for(; aIt1.More(); aIt1.Next()) {
aIP=aIt1.Key();
aMIPC.Add(aIP);
}
//
aMIP.Clear();
aIt1.Initialize(aMIP1);
for(; aIt1.More(); aIt1.Next()) {
aIP=aIt1.Key();
aMIP.Add(aIP);
}
aMIP1.Clear();
}// while(1)
//...
aNbIP=aMIPC.Extent();
if (!aNbIP) {
//modified by NIZNHY-PKV Tue Jan 9 14:26:09 2007f
aMIPC.Add(i);
//continue;
//modified by NIZNHY-PKV Tue Jan 9 14:26:12 2007t
} }
// //
aIt1.Initialize(aMIPC);
for(j=0; aIt1.More(); aIt1.Next(), ++j) {
aIP=aIt1.Key();
const TopoDS_Shape& aVP=aMIS.FindFromKey(aIP);
if (!j) {
aVF=aVP;
}
aLVSD.Append(aVP);
aMVProcessed.Add(aVP);
}
myImages.Bind(aVF, aLVSD); myImages.Bind(aVF, aLVSD);
} }// for (i=1; i<=aNbV; ++i) {
//------------------------------
// //
// Make new vertices // Make new vertices
aMV.Clear(); aMV.Clear();
@ -577,6 +639,7 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
} }
} }
} }
//
//======================================================================= //=======================================================================
//function : MakeNewVertex //function : MakeNewVertex
//purpose : //purpose :
@ -1364,3 +1427,213 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB,
} }
} }
// Contribution of Samtech www.samcef.com END // Contribution of Samtech www.samcef.com END
/*
//=======================================================================
// function:EENewVertices
// purpose:
//=======================================================================
void NMTTools_PaveFiller::EENewVertices (const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI)
{
Standard_Integer aNb, i, j, aNewShape, aNbEdges, aNbIEE, aNbVV, aNbSimple;
Standard_Integer aWhat, aWith, i1, i2, nE1, nE2, nE, nV, aFlag;
Standard_Real aT;
TopoDS_Compound aCompound;
BRep_Builder aBB;
NMTTools_IndexedDataMapOfIndexedMapOfInteger aMNVE, aMNVIEE;
BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq;
BOPTools_Pave aPave;
TopoDS_Vertex aNewVertex;
TopTools_IndexedMapOfShape aMNVComplex, aMNVSimple;
//
BOPTools_CArray1OfEEInterference& aEEs=myIntrPool->EEInterferences();
//
aNb=aMapVI.Extent();
//
if (!aNb) { // no new vertices, no new problems
return;
}
//
// 0.
if (aNb==1) {
aNewVertex=TopoDS::Vertex(aMapVI.FindKey(1));
EENewVertices(aNewVertex, aMapVI);
return;
}
//
// 1. Make compound from new vertices
aBB.MakeCompound(aCompound);
for (i=1; i<=aNb; ++i) {
const TopoDS_Shape& aV=aMapVI.FindKey(i);
aBB.Add(aCompound, aV);
}
//
// 2. VV intersection between these vertices
// using the auxiliary Filler
NMTDS_ShapesDataStructure tDS;
//
tDS.SetCompositeShape(aCompound);
tDS.Init();
//
BOPTools_InterferencePool tInterfPool(tDS);
NMTTools_PaveFiller tPaveFiller(tInterfPool);
//
tPaveFiller.Init();
//
tPaveFiller.PerformVV();
tPaveFiller.PerformNewVertices();
//
const BOPTools_CArray1OfVVInterference& aVVInterfs=tInterfPool.VVInterfs();
//
// 3. Separate Comlex and Simple new vertices
aNbVV=aVVInterfs.Extent();
for (i=1; i<=aNbVV; ++i) {
const BOPTools_VVInterference& aVV=aVVInterfs(i);
aVV.Indices(aWhat, aWith);
const TopoDS_Shape& aV1=tDS.Shape(aWhat);
const TopoDS_Shape& aV2=tDS.Shape(aWith);
aMNVComplex.Add(aV1);
aMNVComplex.Add(aV2);
}
//
for (i=1; i<=aNb; ++i) {
const TopoDS_Shape& aV=aMapVI.FindKey(i);
if (!aMNVComplex.Contains(aV)) {
aMNVSimple.Add(aV);
}
}
//
// 4. Treat Simple new Vertices
aNbSimple=aMNVSimple.Extent();
for (i=1; i<=aNbSimple; ++i) {
const TopoDS_Vertex& aV=TopoDS::Vertex(aMNVSimple(i));
EENewVertices(aV, aMapVI);
}
//
// 3. Fill Maps : NewVertex-edges (aMNVE)
// NewVertex-interferences (aMNVIEE)
for (i=1; i<=aNbVV; ++i) {
const BOPTools_VVInterference& aVV=aVVInterfs(i);
aNewShape=aVV.NewShape();
if (!aNewShape) {
continue;
}
//
if (!aMNVE.Contains(aNewShape)) {
TColStd_IndexedMapOfInteger aMx;
aMNVE.Add(aNewShape, aMx);
}
if (!aMNVIEE.Contains(aNewShape)) {
TColStd_IndexedMapOfInteger aMx;
aMNVIEE.Add(aNewShape, aMx);
}
//
TColStd_IndexedMapOfInteger& aME=aMNVE.ChangeFromKey(aNewShape);
TColStd_IndexedMapOfInteger& aMIEE=aMNVIEE.ChangeFromKey(aNewShape);
//
aVV.Indices(aWhat, aWith);
//aWhat
const TopoDS_Shape& aV1=tDS.Shape(aWhat);
i1=aMapVI.FindFromKey(aV1);
const BOPTools_EEInterference& aEE1=aEEs(i1);
aEE1.Indices(nE1, nE2);
aME.Add(nE1);
aME.Add(nE2);
aMIEE.Add(i1);
//aWith
const TopoDS_Shape& aV2=tDS.Shape(aWith);
i2=aMapVI.FindFromKey(aV2);
const BOPTools_EEInterference& aEE2=aEEs(i2);
aEE2.Indices(nE1, nE2);
aME.Add(nE1);
aME.Add(nE2);
aMIEE.Add(i2);
//
//printf(" VV: (%d, %d) -> %d\n", aWhat, aWith, aNewShape);
}
//
// 4. Process new vertices
aNb=aMNVE.Extent();
for (i=1; i<=aNb; ++i) { // xx
//
// new Vertex
nV=aMNVE.FindKey(i);
aNewVertex=TopoDS::Vertex(tDS.Shape(nV));
//
// Insert New Vertex in DS;
myDS->InsertShapeAndAncestorsSuccessors(aNewVertex, anASSeq);
aNewShape=myDS->NumberOfInsertedShapes();
myDS->SetState (aNewShape, BooleanOperations_ON);
//
// Update index of NewShape in EE interferences
const TColStd_IndexedMapOfInteger& aMIEE=aMNVIEE.FindFromKey(nV);//(i);
aNbIEE=aMIEE.Extent();
for (j=1; j<=aNbIEE; ++j) {
i1=aMIEE(j);
BOPTools_EEInterference& aEE1=aEEs(i1);
aEE1.SetNewShape(aNewShape);
}
//
// Update Paves on edges
const TColStd_IndexedMapOfInteger& aME=aMNVE(i);
aNbEdges=aME.Extent();
for (j=1; j<=aNbEdges; ++j) {
nE=aME(j);
const TopoDS_Edge aE=TopoDS::Edge(myDS->Shape(nE));//mpv
//
aFlag=myContext.ComputeVE (aNewVertex, aE, aT);
//
if (!aFlag) {
aPave.SetInterference(-1);
aPave.SetType (BooleanOperations_EdgeEdge);
aPave.SetIndex(aNewShape);
aPave.SetParam(aT);
//
BOPTools_PaveSet& aPaveSet=myPavePoolNew(myDS->RefEdge(nE));
aPaveSet.Append(aPave);
}
}
}// for (i=1; i<=aNb; ++i) {// xx
}
//=======================================================================
// function:EENewVertices
// purpose:
//=======================================================================
void NMTTools_PaveFiller::EENewVertices (const TopoDS_Vertex& aNewVertex,
const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI)
{
Standard_Integer i, aNewShape, nE1, nE2;
Standard_Real aT1, aT2;
BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq;
BOPTools_Pave aPave;
//
BOPTools_CArray1OfEEInterference& aEEs=myIntrPool->EEInterferences();
//
// one new vertex case is treated in usual way
//
// Insert New Vertex in DS;
myDS->InsertShapeAndAncestorsSuccessors(aNewVertex, anASSeq);
aNewShape=myDS->NumberOfInsertedShapes();
myDS->SetState (aNewShape, BooleanOperations_ON);
// Insert New Vertex in EE Interference
i=aMapVI.FindFromKey(aNewVertex);
BOPTools_EEInterference& aEEInterf= aEEs(i);
aEEInterf.SetNewShape(aNewShape);
// Extact interference info
aEEInterf.Indices(nE1, nE2);
const IntTools_CommonPrt& aCPart=aEEInterf.CommonPrt();
VertexParameters(aCPart, aT1, aT2);
//
// Add Paves to the myPavePoolNew
aPave.SetInterference(i);
aPave.SetType (BooleanOperations_EdgeEdge);
aPave.SetIndex(aNewShape);
// Pave for edge nE1
aPave.SetParam(aT1);
BOPTools_PaveSet& aPaveSet1=myPavePoolNew(myDS->RefEdge(nE1));
aPaveSet1.Append(aPave);
// Pave for edge nE2
aPave.SetParam(aT2);
BOPTools_PaveSet& aPaveSet2=myPavePoolNew(myDS->RefEdge(nE2));
aPaveSet2.Append(aPave);
}
*/

View File

@ -107,6 +107,8 @@
#include <TColStd_DataMapIteratorOfDataMapOfIntegerListOfInteger.hxx> #include <TColStd_DataMapIteratorOfDataMapOfIntegerListOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx> #include <TColStd_ListIteratorOfListOfInteger.hxx>
#include <NMTTools_MapOfPaveBlock.hxx> #include <NMTTools_MapOfPaveBlock.hxx>
//
#include <IntTools_ShrunkRange.hxx>
static static
Standard_Boolean IsPairFound(const Standard_Integer nF1, Standard_Boolean IsPairFound(const Standard_Integer nF1,
@ -135,6 +137,12 @@ static
TopTools_ListOfShape& aLS); TopTools_ListOfShape& aLS);
// Contribution of Samtech www.samcef.com END // Contribution of Samtech www.samcef.com END
//modified by NIZNHY-PKV Mon Dec 4 12:56:04 2006f
static
Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
IntTools_Context& aCtx);
//modified by NIZNHY-PKV Mon Dec 4 12:56:08 2006t
//======================================================================= //=======================================================================
// function: PerformFF // function: PerformFF
// purpose: // purpose:
@ -272,6 +280,7 @@ static
Standard_Boolean bIsExistingPaveBlock, bIsValidIn2D, bIsCoincided; Standard_Boolean bIsExistingPaveBlock, bIsValidIn2D, bIsCoincided;
// Contribution of Samtech www.samcef.com END // Contribution of Samtech www.samcef.com END
// //
Standard_Boolean bIsMicroEdge;
Standard_Integer i, aNbFFs, nF1, nF2, aBid=0; Standard_Integer i, aNbFFs, nF1, nF2, aBid=0;
Standard_Integer nV1, nV2, j, aNbCurves; Standard_Integer nV1, nV2, j, aNbCurves;
Standard_Real aTolR3D, aTol2D, aT1, aT2, aTolPPC=Precision::PConfusion(); Standard_Real aTolR3D, aTol2D, aT1, aT2, aTolPPC=Precision::PConfusion();
@ -510,6 +519,16 @@ static
// //
BOPTools_Tools::MakeSectEdge (aIC, aV1, aT1, aV2, aT2, aES); BOPTools_Tools::MakeSectEdge (aIC, aV1, aT1, aV2, aT2, aES);
// //
//modified by NIZNHY-PKV Mon Dec 4 12:56:35 2006f use_01
//
NMTTools_Tools::UpdateEdge (aES, aTolR3D);
bIsMicroEdge=IsMicroEdge(aES, myContext);
if (bIsMicroEdge) {
continue;
}
//
//modified by NIZNHY-PKV Mon Dec 4 12:56:38 2006t
//
//modified by NIZNHY-PKV Thu Nov 16 11:13:46 2006f SKL/PartC5 //modified by NIZNHY-PKV Thu Nov 16 11:13:46 2006f SKL/PartC5
{ {
Handle(Geom2d_Curve) aC2D1, aC2D2; Handle(Geom2d_Curve) aC2D1, aC2D2;
@ -519,7 +538,7 @@ static
// //
NMTTools_Tools::MakePCurve(aES, aF1, aC2D1); NMTTools_Tools::MakePCurve(aES, aF1, aC2D1);
NMTTools_Tools::MakePCurve(aES, aF2, aC2D2); NMTTools_Tools::MakePCurve(aES, aF2, aC2D2);
NMTTools_Tools::UpdateEdge (aES, aTolR3D); //NMTTools_Tools::UpdateEdge (aES, aTolR3D); // ft use_01
} }
// //
@ -1419,3 +1438,44 @@ void SharedEdges1(const TopoDS_Face& aF1,
} }
// //
// Contribution of Samtech www.samcef.com END // Contribution of Samtech www.samcef.com END
//modified by NIZNHY-PKV Mon Dec 4 12:30:38 2006f use_01
//=======================================================================
//function : IsMicroEdge
//purpose :
//=======================================================================
Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
IntTools_Context& aCtx)
{
Standard_Boolean bRet;
Standard_Integer iErr;
Standard_Real aT1, aT2, aTmp;
Handle(Geom_Curve) aC3D;
TopoDS_Vertex aV1, aV2;
IntTools_Range aR;
//
bRet=(BRep_Tool::Degenerated(aE) ||
!BRep_Tool::IsGeometric(aE));
if (bRet) {
return bRet;
}
//
aC3D=BRep_Tool::Curve(aE, aT1, aT2);
TopExp::Vertices(aE, aV1, aV2);
aT1=BRep_Tool::Parameter(aV1, aE);
aT2=BRep_Tool::Parameter(aV2, aE);
if (aT2<aT1) {
aTmp=aT1;
aT1=aT2;
aT2=aTmp;
}
//
aR.SetFirst(aT1);
aR.SetLast(aT2);
IntTools_ShrunkRange aSR (aE, aV1, aV2, aR, aCtx);
iErr=aSR.ErrorStatus();
bRet=!aSR.IsDone();
//
return bRet;
}
//modified by NIZNHY-PKV Mon Dec 4 12:55:50 2006t

View File

@ -196,6 +196,36 @@ static
aCBIt.Initialize(aLCB); aCBIt.Initialize(aLCB);
for (; aCBIt.More(); aCBIt.Next()) { for (; aCBIt.More(); aCBIt.Next()) {
NMTTools_CommonBlock& aCB=aCBIt.Value(); NMTTools_CommonBlock& aCB=aCBIt.Value();
//
//modified by NIZNHY-PKV Wed Nov 8 15:59:46 2006f
// Among all PBs of aCB the first PB will be one
// that have max tolerance value
{
Standard_Real aTolEx, aTolExMax;
BOPTools_ListOfPaveBlock *pLPB, aLPBx;
//
aTolExMax=-1.;
pLPB=(BOPTools_ListOfPaveBlock *)&aCB.PaveBlocks();
aPBIt.Initialize(*pLPB);
for (; aPBIt.More(); aPBIt.Next()) {
const BOPTools_PaveBlock& aPBx=aPBIt.Value();
nEx=aPBx.OriginalEdge();
const TopoDS_Edge& aEx=TopoDS::Edge(myDS->Shape(nEx));
aTolEx=BRep_Tool::Tolerance(aEx);
if (aTolEx>aTolExMax) {
aTolExMax=aTolEx;
aLPBx.Prepend(aPBx);
}
else{
aLPBx.Append(aPBx);
}
}
//
pLPB->Clear();
*pLPB=aLPBx;
}
//modified by NIZNHY-PKV Wed Nov 8 15:59:50 2006t
//
BOPTools_PaveBlock& aPB=aCB.PaveBlock1(nE); BOPTools_PaveBlock& aPB=aCB.PaveBlock1(nE);
nSp=SplitIndex(aPB); nSp=SplitIndex(aPB);
aPB.SetEdge(nSp); aPB.SetEdge(nSp);