mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-25 17:00:35 +05:00
[bos #33687] EDF 26791 - Points cloud on face
This commit is contained in:
parent
c586fe244b
commit
5a3993c7b0
@ -1178,8 +1178,11 @@ Standard_Integer GEOMAlgo_AlgoTools::PointCloudInFace(const TopoDS_Face& theFace
|
|||||||
|
|
||||||
aBB.Add (aGlobalRes, res);
|
aBB.Add (aGlobalRes, res);
|
||||||
|
|
||||||
|
int iface = 1;
|
||||||
aBB.MakeCompound (theCompound);
|
aBB.MakeCompound (theCompound);
|
||||||
for (TopExp_Explorer aGlobalExplo(aGlobalRes, TopAbs_FACE); aGlobalExplo.More(); aGlobalExplo.Next())
|
for (TopExp_Explorer aGlobalExplo (aGlobalRes, TopAbs_FACE);
|
||||||
|
aGlobalExplo.More(), iface <= theNbPnts;
|
||||||
|
aGlobalExplo.Next(), iface++)
|
||||||
{
|
{
|
||||||
const TopoDS_Face& aFace = TopoDS::Face (aGlobalExplo.Current());
|
const TopoDS_Face& aFace = TopoDS::Face (aGlobalExplo.Current());
|
||||||
Standard_Boolean anIsNaturalRestrictions = Standard_True;
|
Standard_Boolean anIsNaturalRestrictions = Standard_True;
|
||||||
@ -1283,9 +1286,11 @@ gp_Pnt GetMidPnt2d(const TopoDS_Face& theFace,
|
|||||||
|
|
||||||
BRepTools_WireExplorer aWexp (aWire, theFace);
|
BRepTools_WireExplorer aWexp (aWire, theFace);
|
||||||
Standard_Integer anInd = 0;
|
Standard_Integer anInd = 0;
|
||||||
|
TopTools_MapOfShape aUsedEmap;
|
||||||
for (; aWexp.More(); aWexp.Next())
|
for (; aWexp.More(); aWexp.Next())
|
||||||
{
|
{
|
||||||
const TopoDS_Edge& anEdge = aWexp.Current();
|
const TopoDS_Edge& anEdge = aWexp.Current();
|
||||||
|
if (!aUsedEmap.Add(anEdge)) continue;
|
||||||
BRepAdaptor_Curve2d aBAcurve2d (anEdge, theFace);
|
BRepAdaptor_Curve2d aBAcurve2d (anEdge, theFace);
|
||||||
Standard_Real aDelta = (aBAcurve2d.LastParameter() - aBAcurve2d.FirstParameter())/aNbSamples;
|
Standard_Real aDelta = (aBAcurve2d.LastParameter() - aBAcurve2d.FirstParameter())/aNbSamples;
|
||||||
for (Standard_Integer ii = 0; ii < aNbSamples; ii++)
|
for (Standard_Integer ii = 0; ii < aNbSamples; ii++)
|
||||||
@ -1353,6 +1358,9 @@ void ModifyFacesForGlobalResult(const TopoDS_Face& theInputFace,
|
|||||||
TopoDS_Shape& theGlobalRes,
|
TopoDS_Shape& theGlobalRes,
|
||||||
TopTools_MapOfShape& theRemovedFaces)
|
TopTools_MapOfShape& theRemovedFaces)
|
||||||
{
|
{
|
||||||
|
BRepAdaptor_Surface aBAsurf (theInputFace, Standard_False);
|
||||||
|
GeomAbs_SurfaceType aType = aBAsurf.GetType();
|
||||||
|
|
||||||
BRep_Builder aBB;
|
BRep_Builder aBB;
|
||||||
const Standard_Integer aNbFaces = (Standard_Integer) theFacesAndAreas.size();
|
const Standard_Integer aNbFaces = (Standard_Integer) theFacesAndAreas.size();
|
||||||
|
|
||||||
@ -1456,6 +1464,19 @@ void ModifyFacesForGlobalResult(const TopoDS_Face& theInputFace,
|
|||||||
if (aFace.IsSame (aStartFace))
|
if (aFace.IsSame (aStartFace))
|
||||||
{
|
{
|
||||||
anIsRound = Standard_True;
|
anIsRound = Standard_True;
|
||||||
|
if (aType > GeomAbs_Torus) { // non-elementary surfaces
|
||||||
|
// remove last face to prevent close tape creation
|
||||||
|
// it is a workaround for Tulip bos #26791
|
||||||
|
// as there is a problem with closed tape on some surface types
|
||||||
|
aBB.Remove (aShell, aCurrentFace);
|
||||||
|
aNbFacesInTape--;
|
||||||
|
anAreaOfTape -= theFaceAreaMap(aCurrentFace);
|
||||||
|
aBB.Add(theRes, aCurrentFace); // aaajfa ???
|
||||||
|
theRemovedFaces.Remove(aCurrentFace);
|
||||||
|
if (theExtremalFaces.Contains(aCurrentFace)) {
|
||||||
|
aNbFacesDone--;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (theRemovedFaces.Contains(aFace))
|
if (theRemovedFaces.Contains(aFace))
|
||||||
@ -1511,7 +1532,9 @@ void ModifyFacesForGlobalResult(const TopoDS_Face& theInputFace,
|
|||||||
if (aNewNumberToSplit < aNbFacesInTape)
|
if (aNewNumberToSplit < aNbFacesInTape)
|
||||||
{
|
{
|
||||||
Standard_Integer aNumberToIncrease = aNewNumberToSplit - aNumberToSplit;
|
Standard_Integer aNumberToIncrease = aNewNumberToSplit - aNumberToSplit;
|
||||||
for (Standard_Integer jj = theNbExtremalFaces; jj < theNbExtremalFaces + aNumberToIncrease; jj++)
|
for (Standard_Integer jj = theNbExtremalFaces;
|
||||||
|
jj < theNbExtremalFaces + aNumberToIncrease && jj < aNbFaces;
|
||||||
|
jj++)
|
||||||
theExtremalFaces.Add (theFacesAndAreas[jj].first);
|
theExtremalFaces.Add (theFacesAndAreas[jj].first);
|
||||||
theNbExtremalFaces += aNumberToIncrease;
|
theNbExtremalFaces += aNumberToIncrease;
|
||||||
aNumberToSplit = aNewNumberToSplit;
|
aNumberToSplit = aNewNumberToSplit;
|
||||||
@ -1521,7 +1544,9 @@ void ModifyFacesForGlobalResult(const TopoDS_Face& theInputFace,
|
|||||||
if (anIsRound && aNumberToSplit <= 1)
|
if (anIsRound && aNumberToSplit <= 1)
|
||||||
{
|
{
|
||||||
Standard_Integer aNumberToIncrease = 3 - aNumberToSplit;
|
Standard_Integer aNumberToIncrease = 3 - aNumberToSplit;
|
||||||
for (Standard_Integer jj = theNbExtremalFaces; jj < theNbExtremalFaces + aNumberToIncrease; jj++)
|
for (Standard_Integer jj = theNbExtremalFaces;
|
||||||
|
jj < theNbExtremalFaces + aNumberToIncrease && jj < aNbFaces;
|
||||||
|
jj++)
|
||||||
theExtremalFaces.Add (theFacesAndAreas[jj].first);
|
theExtremalFaces.Add (theFacesAndAreas[jj].first);
|
||||||
theNbExtremalFaces += aNumberToIncrease;
|
theNbExtremalFaces += aNumberToIncrease;
|
||||||
aNumberToSplit = 3;
|
aNumberToSplit = 3;
|
||||||
@ -1556,10 +1581,12 @@ void ModifyFacesForGlobalResult(const TopoDS_Face& theInputFace,
|
|||||||
aNbFacesInLocalResult = 1;
|
aNbFacesInLocalResult = 1;
|
||||||
if (aNumberToSplit == 0)
|
if (aNumberToSplit == 0)
|
||||||
{
|
{
|
||||||
|
if (theNbExtremalFaces < aNbFaces) {
|
||||||
theExtremalFaces.Add (theFacesAndAreas[theNbExtremalFaces].first);
|
theExtremalFaces.Add (theFacesAndAreas[theNbExtremalFaces].first);
|
||||||
theNbExtremalFaces++;
|
theNbExtremalFaces++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
aBB.Add (theGlobalRes, aLocalResult);
|
aBB.Add (theGlobalRes, aLocalResult);
|
||||||
|
|
||||||
aSum += Abs(aNbFacesInTape - aNbFacesInLocalResult);
|
aSum += Abs(aNbFacesInTape - aNbFacesInLocalResult);
|
||||||
|
Loading…
Reference in New Issue
Block a user