mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-04 13:13:25 +03:00
0032133: Modeling Data - Restriction of access to internal arrays for Poly_Triangulation, revision of API
Removed methods from Poly_Triangulation/Poly_PolygonOnTriangulation giving access to internal arrays of 2d and 3d nodes, triangles and normals.
This commit is contained in:
@@ -334,7 +334,6 @@ static Standard_Integer tessellate (Draw_Interpretor& /*di*/, Standard_Integer n
|
||||
new Poly_Triangulation (aNbNodes, aNbTriangles, Standard_False);
|
||||
|
||||
// fill nodes
|
||||
TColgp_Array1OfPnt &aNodes = aTriangulation->ChangeNodes();
|
||||
GeomAdaptor_Surface anAdSurf (aSurf);
|
||||
double aDU = (aUMax - aUMin) / aNbU;
|
||||
double aDV = (aVMax - aVMin) / aNbV;
|
||||
@@ -345,12 +344,11 @@ static Standard_Integer tessellate (Draw_Interpretor& /*di*/, Standard_Integer n
|
||||
{
|
||||
double aV = aVMin + iV * aDV;
|
||||
gp_Pnt aP = anAdSurf.Value (aU, aV);
|
||||
aNodes.SetValue (iShift + iV, aP);
|
||||
aTriangulation->SetNode (iShift + iV, aP);
|
||||
}
|
||||
}
|
||||
|
||||
// fill triangles
|
||||
Poly_Array1OfTriangle &aTriangles = aTriangulation->ChangeTriangles();
|
||||
for (int iU = 0, iShift = 1, iTri = 0; iU < aNbU; iU++, iShift += aNbV + 1)
|
||||
{
|
||||
for (int iV = 0; iV < aNbV; iV++)
|
||||
@@ -358,8 +356,8 @@ static Standard_Integer tessellate (Draw_Interpretor& /*di*/, Standard_Integer n
|
||||
int iBase = iShift + iV;
|
||||
Poly_Triangle aTri1 (iBase, iBase + aNbV + 2, iBase + 1);
|
||||
Poly_Triangle aTri2 (iBase, iBase + aNbV + 1, iBase + aNbV + 2);
|
||||
aTriangles.SetValue (++iTri, aTri1);
|
||||
aTriangles.SetValue (++iTri, aTri2);
|
||||
aTriangulation->SetTriangle (++iTri, aTri1);
|
||||
aTriangulation->SetTriangle (++iTri, aTri2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -574,21 +572,18 @@ static Standard_Integer veriftriangles(Draw_Interpretor& di, Standard_Integer n,
|
||||
Standard_Real deflemax = 0, deflemin = 1.e100;
|
||||
if (!T.IsNull()) {
|
||||
Standard_Real defstock = T->Deflection();
|
||||
const Poly_Array1OfTriangle& triangles = T->Triangles();
|
||||
const TColgp_Array1OfPnt2d& Nodes2d = T->UVNodes();
|
||||
const TColgp_Array1OfPnt& Nodes = T->Nodes();
|
||||
|
||||
S = BRep_Tool::Surface(F, L);
|
||||
|
||||
for(i = 1; i <= triangles.Length(); i++) {
|
||||
for(i = 1; i <= T->NbTriangles(); i++) {
|
||||
if (F.Orientation() == TopAbs_REVERSED)
|
||||
triangles(i).Get(n1,n3,n2);
|
||||
T->Triangle (i).Get (n1,n3,n2);
|
||||
else
|
||||
triangles(i).Get(n1,n2,n3);
|
||||
T->Triangle (i).Get (n1,n2,n3);
|
||||
|
||||
const gp_XY& xy1 = Nodes2d(n1).XY();
|
||||
const gp_XY& xy2 = Nodes2d(n2).XY();
|
||||
const gp_XY& xy3 = Nodes2d(n3).XY();
|
||||
const gp_XY& xy1 = T->UVNode (n1).XY();
|
||||
const gp_XY& xy2 = T->UVNode (n2).XY();
|
||||
const gp_XY& xy3 = T->UVNode (n3).XY();
|
||||
|
||||
mi2d1.SetCoord((xy2.X()+xy3.X())*0.5,
|
||||
(xy2.Y()+xy3.Y())*0.5);
|
||||
@@ -597,9 +592,9 @@ static Standard_Integer veriftriangles(Draw_Interpretor& di, Standard_Integer n,
|
||||
mi2d3.SetCoord((xy1.X()+xy2.X())*0.5,
|
||||
(xy1.Y()+xy2.Y())*0.5);
|
||||
|
||||
gp_XYZ p1 = Nodes(n1).Transformed(L.Transformation()).XYZ();
|
||||
gp_XYZ p2 = Nodes(n2).Transformed(L.Transformation()).XYZ();
|
||||
gp_XYZ p3 = Nodes(n3).Transformed(L.Transformation()).XYZ();
|
||||
gp_XYZ p1 = T->Node (n1).Transformed (L.Transformation()).XYZ();
|
||||
gp_XYZ p2 = T->Node (n2).Transformed (L.Transformation()).XYZ();
|
||||
gp_XYZ p3 = T->Node (n3).Transformed (L.Transformation()).XYZ();
|
||||
|
||||
vecEd1=p2-p1;
|
||||
vecEd2=p3-p2;
|
||||
@@ -721,11 +716,10 @@ static Standard_Integer tri2d(Draw_Interpretor&, Standard_Integer n, const char*
|
||||
TColStd_Array1OfInteger Internal(0,2*nInternal);
|
||||
|
||||
Standard_Integer fr = 1, in = 1;
|
||||
const Poly_Array1OfTriangle& triangles = T->Triangles();
|
||||
Standard_Integer nodes[3];
|
||||
for (i = 1; i <= nbTriangles; i++) {
|
||||
pc.Triangles(i,t[0],t[1],t[2]);
|
||||
triangles(i).Get(nodes[0],nodes[1],nodes[2]);
|
||||
T->Triangle (i).Get (nodes[0],nodes[1],nodes[2]);
|
||||
for (j = 0; j < 3; j++) {
|
||||
Standard_Integer k = (j+1) % 3;
|
||||
if (t[j] == 0) {
|
||||
@@ -744,17 +738,15 @@ static Standard_Integer tri2d(Draw_Interpretor&, Standard_Integer n, const char*
|
||||
|
||||
// Display the edges
|
||||
if (T->HasUVNodes()) {
|
||||
const TColgp_Array1OfPnt2d& Nodes2d = T->UVNodes();
|
||||
|
||||
Handle(Draw_Segment2D) Seg;
|
||||
|
||||
// free edges
|
||||
Standard_Integer nn;
|
||||
nn = Free.Length() / 2;
|
||||
for (i = 1; i <= nn; i++) {
|
||||
Seg = new Draw_Segment2D(Nodes2d(Free(2*i-1)),
|
||||
Nodes2d(Free(2*i)),
|
||||
Draw_rouge);
|
||||
Seg = new Draw_Segment2D (T->UVNode (Free[2*i-1]),
|
||||
T->UVNode (Free[2*i]),
|
||||
Draw_rouge);
|
||||
dout << Seg;
|
||||
}
|
||||
|
||||
@@ -762,9 +754,9 @@ static Standard_Integer tri2d(Draw_Interpretor&, Standard_Integer n, const char*
|
||||
|
||||
nn = nInternal;
|
||||
for (i = 1; i <= nn; i++) {
|
||||
Seg = new Draw_Segment2D(Nodes2d(Internal(2*i-1)),
|
||||
Nodes2d(Internal(2*i)),
|
||||
Draw_bleu);
|
||||
Seg = new Draw_Segment2D (T->UVNode (Internal[2*i-1]),
|
||||
T->UVNode (Internal[2*i]),
|
||||
Draw_bleu);
|
||||
dout << Seg;
|
||||
}
|
||||
}
|
||||
@@ -833,11 +825,10 @@ static Standard_Integer wavefront(Draw_Interpretor&, Standard_Integer nbarg, con
|
||||
|
||||
if (!Tr.IsNull()) {
|
||||
nbNodes = Tr->NbNodes();
|
||||
const TColgp_Array1OfPnt& Nodes = Tr->Nodes();
|
||||
|
||||
// les noeuds.
|
||||
for (i = 1; i <= nbNodes; i++) {
|
||||
gp_Pnt Pnt = Nodes(i).Transformed(L.Transformation());
|
||||
gp_Pnt Pnt = Tr->Node (i).Transformed (L.Transformation());
|
||||
x = Pnt.X();
|
||||
y = Pnt.Y();
|
||||
z = Pnt.Z();
|
||||
@@ -850,12 +841,11 @@ static Standard_Integer wavefront(Draw_Interpretor&, Standard_Integer nbarg, con
|
||||
// les normales.
|
||||
|
||||
if (Tr->HasUVNodes()) {
|
||||
const TColgp_Array1OfPnt2d& UVNodes = Tr->UVNodes();
|
||||
BRepAdaptor_Surface BS(F, Standard_False);
|
||||
|
||||
for (i = 1; i <= nbNodes; i++) {
|
||||
U = UVNodes(i).X();
|
||||
V = UVNodes(i).Y();
|
||||
U = Tr->UVNode (i).X();
|
||||
V = Tr->UVNode (i).Y();
|
||||
|
||||
BS.D1(U,V,P,D1U,D1V);
|
||||
CSLib::Normal (D1U, D1V, Precision::Angular(), aStatus, Nor);
|
||||
@@ -875,14 +865,12 @@ static Standard_Integer wavefront(Draw_Interpretor&, Standard_Integer nbarg, con
|
||||
|
||||
// les triangles.
|
||||
Standard_Integer nbTriangles = Tr->NbTriangles();
|
||||
const Poly_Array1OfTriangle& triangles = Tr->Triangles();
|
||||
|
||||
|
||||
for (i = 1; i <= nbTriangles; i++) {
|
||||
if (F.Orientation() == TopAbs_REVERSED)
|
||||
triangles(i).Get(n1, n3, n2);
|
||||
Tr->Triangle (i).Get (n1, n3, n2);
|
||||
else
|
||||
triangles(i).Get(n1, n2, n3);
|
||||
Tr->Triangle (i).Get (n1, n2, n3);
|
||||
k1 = n1+totalnodes;
|
||||
k2 = n2+totalnodes;
|
||||
k3 = n3+totalnodes;
|
||||
@@ -950,14 +938,13 @@ static Standard_Integer triedgepoints(Draw_Interpretor& di, Standard_Integer nba
|
||||
BRep_Tool::PolygonOnTriangulation(TopoDS::Edge(it.Key()), aPoly, aT, aLoc);
|
||||
if ( aT.IsNull() || aPoly.IsNull() )
|
||||
continue;
|
||||
|
||||
const TColgp_Array1OfPnt& Nodes = aT->Nodes();
|
||||
|
||||
const TColStd_Array1OfInteger& Indices = aPoly->Nodes();
|
||||
const Standard_Integer nbnodes = Indices.Length();
|
||||
|
||||
for( Standard_Integer j = 1; j <= nbnodes; j++ )
|
||||
{
|
||||
gp_Pnt P3d = Nodes(Indices(j));
|
||||
gp_Pnt P3d = aT->Node (Indices[j]);
|
||||
if( !aLoc.IsIdentity() )
|
||||
P3d.Transform(aLoc.Transformation());
|
||||
|
||||
|
@@ -112,8 +112,6 @@ void MeshTest_CheckTopology::Perform (Draw_Interpretor& di)
|
||||
// check distances between corresponding points
|
||||
Standard_Real aSqDefle = BRep_Tool::Tolerance(aEdge);
|
||||
aSqDefle *= aSqDefle;
|
||||
const TColgp_Array1OfPnt& aPoints1 = aT1->Nodes();
|
||||
const TColgp_Array1OfPnt& aPoints2 = aT2->Nodes();
|
||||
Standard_Integer iF1 = aMapF.FindIndex(aFace1);
|
||||
Standard_Integer iF2 = aMapF.FindIndex(aFace2);
|
||||
Standard_Integer i1 = aNodes1.Lower();
|
||||
@@ -121,17 +119,17 @@ void MeshTest_CheckTopology::Perform (Draw_Interpretor& di)
|
||||
const gp_Trsf &aTrsf1 = aFace1.Location().Transformation();
|
||||
const gp_Trsf &aTrsf2 = aFace2.Location().Transformation();
|
||||
for (; i1 <= aNodes1.Upper(); i1++, i2++) {
|
||||
const gp_Pnt aP1 = aPoints1(aNodes1(i1)).Transformed(aTrsf1);
|
||||
const gp_Pnt aP2 = aPoints2(aNodes2(i2)).Transformed(aTrsf2);
|
||||
const Standard_Real aSqDist = aP1.SquareDistance(aP2);
|
||||
const gp_Pnt aP1 = aT1->Node (aNodes1[i1]).Transformed (aTrsf1);
|
||||
const gp_Pnt aP2 = aT2->Node (aNodes2[i2]).Transformed (aTrsf2);
|
||||
const Standard_Real aSqDist = aP1.SquareDistance(aP2);
|
||||
if (aSqDist > aSqDefle)
|
||||
{
|
||||
myErrors.Append(iF1);
|
||||
myErrors.Append(i1);
|
||||
myErrors.Append(iF2);
|
||||
myErrors.Append(i2);
|
||||
myErrors.Append(iF1);
|
||||
myErrors.Append(i1);
|
||||
myErrors.Append(iF2);
|
||||
myErrors.Append(i2);
|
||||
myErrorsVal.Append(Sqrt(aSqDist));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -167,10 +165,9 @@ void MeshTest_CheckTopology::Perform (Draw_Interpretor& di)
|
||||
|
||||
// check of free links and nodes
|
||||
Poly_Connect aConn(aT);
|
||||
const Poly_Array1OfTriangle& aTriangles = aT->Triangles();
|
||||
Standard_Integer nbTri = aT->NbTriangles(), i, j, n[3], t[3];
|
||||
for (i = 1; i <= nbTri; i++) {
|
||||
aTriangles(i).Get(n[0], n[1], n[2]);
|
||||
aT->Triangle (i).Get (n[0], n[1], n[2]);
|
||||
|
||||
aUsedNodes.Add (n[0]);
|
||||
aUsedNodes.Add (n[1]);
|
||||
|
@@ -303,15 +303,14 @@ static Standard_Integer triarea (Draw_Interpretor& di, int n, const char ** a)
|
||||
std::cout << "face "<<i<<" has no triangulation"<<std::endl;
|
||||
continue;
|
||||
}
|
||||
const Poly_Array1OfTriangle& triangles = aPoly->Triangles();
|
||||
const TColgp_Array1OfPnt& nodes = aPoly->Nodes();
|
||||
for (int j=triangles.Lower(); j <= triangles.Upper(); j++) {
|
||||
const Poly_Triangle& tri = triangles(j);
|
||||
for (int j = 1; j <= aPoly->NbTriangles(); j++)
|
||||
{
|
||||
const Poly_Triangle tri = aPoly->Triangle (j);
|
||||
int n1, n2, n3;
|
||||
tri.Get (n1, n2, n3);
|
||||
const gp_Pnt& p1 = nodes(n1);
|
||||
const gp_Pnt& p2 = nodes(n2);
|
||||
const gp_Pnt& p3 = nodes(n3);
|
||||
const gp_Pnt p1 = aPoly->Node (n1);
|
||||
const gp_Pnt p2 = aPoly->Node (n2);
|
||||
const gp_Pnt p3 = aPoly->Node (n3);
|
||||
gp_Vec v1(p1, p2);
|
||||
gp_Vec v2(p1, p3);
|
||||
double ar = v1.CrossMagnitude(v2);
|
||||
@@ -370,7 +369,6 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
const TopoDS_Face& aFace = TopoDS::Face(aShape);
|
||||
TopLoc_Location aLoc;
|
||||
Handle(Poly_Triangulation) aT = BRep_Tool::Triangulation(aFace, aLoc);
|
||||
const TColgp_Array1OfPnt& aPoints = aT->Nodes();
|
||||
const gp_Trsf& trsf = aLoc.Transformation();
|
||||
|
||||
TColgp_Array1OfPnt pnts(1,2);
|
||||
@@ -379,17 +377,16 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
Standard_Integer n1, n2;
|
||||
aCheck.GetFreeLink(k, i, n1, n2);
|
||||
di << "{" << n1 << " " << n2 << "} ";
|
||||
pnts(1) = aPoints(n1).Transformed(trsf);
|
||||
pnts(2) = aPoints(n2).Transformed(trsf);
|
||||
pnts (1) = aT->Node (n1).Transformed (trsf);
|
||||
pnts (2) = aT->Node (n2).Transformed (trsf);
|
||||
Handle(Poly_Polygon3D) poly = new Poly_Polygon3D (pnts);
|
||||
DrawTrSurf::Set (name, poly);
|
||||
DrawTrSurf::Set (name, pnts(1));
|
||||
DrawTrSurf::Set (name, pnts(2));
|
||||
if (aT->HasUVNodes())
|
||||
{
|
||||
const TColgp_Array1OfPnt2d& aPoints2d = aT->UVNodes();
|
||||
pnts2d(1) = aPoints2d(n1);
|
||||
pnts2d(2) = aPoints2d(n2);
|
||||
pnts2d (1) = aT->UVNode (n1);
|
||||
pnts2d (2) = aT->UVNode (n2);
|
||||
Handle(Poly_Polygon2D) poly2d = new Poly_Polygon2D (pnts2d);
|
||||
DrawTrSurf::Set (name, poly2d);
|
||||
DrawTrSurf::Set (name, pnts2d(1));
|
||||
@@ -435,12 +432,11 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
const TopoDS_Face& aFace = TopoDS::Face(aMapF.FindKey(iface));
|
||||
TopLoc_Location aLoc;
|
||||
Handle(Poly_Triangulation) aT = BRep_Tool::Triangulation(aFace, aLoc);
|
||||
const TColgp_Array1OfPnt& aPoints = aT->Nodes();
|
||||
const gp_Trsf& trsf = aLoc.Transformation();
|
||||
DrawTrSurf::Set (name, aPoints(inode).Transformed(trsf));
|
||||
DrawTrSurf::Set (name, aT->Node (inode).Transformed (trsf));
|
||||
if (aT->HasUVNodes())
|
||||
{
|
||||
DrawTrSurf::Set (name, aT->UVNodes()(inode));
|
||||
DrawTrSurf::Set (name, aT->UVNode (inode));
|
||||
}
|
||||
|
||||
di << "{" << iface << " " << inode << "} ";
|
||||
@@ -464,12 +460,11 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
const Poly_Triangle &aTri = aT->Triangle(aTriID);
|
||||
Standard_Integer aN1, aN2, aN3;
|
||||
aTri.Get(aN1, aN2, aN3);
|
||||
const TColgp_Array1OfPnt& aPoints = aT->Nodes();
|
||||
|
||||
TColgp_Array1OfPnt aPoles(1, 4);
|
||||
aPoles(1) = aPoles(4) = aPoints(aN1).Transformed(aTrsf);
|
||||
aPoles(2) = aPoints(aN2).Transformed(aTrsf);
|
||||
aPoles(3) = aPoints(aN3).Transformed(aTrsf);
|
||||
aPoles (1) = aPoles (4) = aT->Node (aN1).Transformed (aTrsf);
|
||||
aPoles (2) = aT->Node (aN2).Transformed (aTrsf);
|
||||
aPoles (3) = aT->Node (aN3).Transformed (aTrsf);
|
||||
|
||||
TColStd_Array1OfInteger aMults(1, 4);
|
||||
aMults(1) = aMults(4) = 2;
|
||||
@@ -488,9 +483,9 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
if (aT->HasUVNodes())
|
||||
{
|
||||
TColgp_Array1OfPnt2d aPoles2d(1, 4);
|
||||
aPoles2d(1) = aPoles2d(4) = aT->UVNodes()(aN1);
|
||||
aPoles2d(2) = aT->UVNodes()(aN2);
|
||||
aPoles2d(3) = aT->UVNodes()(aN3);
|
||||
aPoles2d (1) = aPoles2d (4) = aT->UVNode (aN1);
|
||||
aPoles2d (2) = aT->UVNode (aN2);
|
||||
aPoles2d (3) = aT->UVNode (aN3);
|
||||
|
||||
Handle(Geom2d_BSplineCurve) aBS2d = new Geom2d_BSplineCurve(aPoles2d, aKnots, aMults, 1);
|
||||
|
||||
@@ -562,12 +557,11 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
break;
|
||||
}
|
||||
|
||||
const Poly_Array1OfTriangle& aTris = aT->Triangles();
|
||||
NCollection_Map<BRepMesh_Edge> aFreeEdgeMap;
|
||||
Standard_Integer aTriNum = aTris.Length();
|
||||
const Standard_Integer aTriNum = aT->NbTriangles();
|
||||
for ( Standard_Integer aTriIndx = 1; aTriIndx <= aTriNum; aTriIndx++ )
|
||||
{
|
||||
const Poly_Triangle& aTri = aTris(aTriIndx);
|
||||
const Poly_Triangle aTri = aT->Triangle (aTriIndx);
|
||||
Standard_Integer aTriNodes[3] = { aTri.Value(1), aTri.Value(2), aTri.Value(3)};
|
||||
|
||||
for (Standard_Integer j = 1; j <= 3; ++j)
|
||||
@@ -590,7 +584,6 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
{
|
||||
di << "Not connected mesh inside face " << aFaceId << "\n";
|
||||
|
||||
const TColgp_Array1OfPnt& aPoints = aT->Nodes();
|
||||
const gp_Trsf& trsf = aLoc.Transformation();
|
||||
|
||||
TColgp_Array1OfPnt pnts(1,2);
|
||||
@@ -600,17 +593,16 @@ static Standard_Integer tricheck (Draw_Interpretor& di, int n, const char ** a)
|
||||
{
|
||||
const BRepMesh_Edge& aLink = aMapIt.Key();
|
||||
di << "{" << aLink.FirstNode() << " " << aLink.LastNode() << "} ";
|
||||
pnts(1) = aPoints(aLink.FirstNode()).Transformed(trsf);
|
||||
pnts(2) = aPoints(aLink.LastNode()).Transformed(trsf);
|
||||
pnts (1) = aT->Node (aLink.FirstNode()).Transformed (trsf);
|
||||
pnts (2) = aT->Node (aLink.LastNode()).Transformed (trsf);
|
||||
Handle(Poly_Polygon3D) poly = new Poly_Polygon3D (pnts);
|
||||
DrawTrSurf::Set (name, poly);
|
||||
DrawTrSurf::Set (name, pnts(1));
|
||||
DrawTrSurf::Set (name, pnts(2));
|
||||
if (aT->HasUVNodes())
|
||||
{
|
||||
const TColgp_Array1OfPnt2d& aPoints2d = aT->UVNodes();
|
||||
pnts2d(1) = aPoints2d(aLink.FirstNode());
|
||||
pnts2d(2) = aPoints2d(aLink.LastNode());
|
||||
pnts2d (1) = aT->UVNode (aLink.FirstNode());
|
||||
pnts2d (2) = aT->UVNode (aLink.LastNode());
|
||||
Handle(Poly_Polygon2D) poly2d = new Poly_Polygon2D (pnts2d);
|
||||
DrawTrSurf::Set (name, poly2d);
|
||||
DrawTrSurf::Set (name, pnts2d(1));
|
||||
|
Reference in New Issue
Block a user