BRepMesh_Classifier: Two-pass approach for intersection check with possibility to run it in parallel mode.
First pass - bounding boxes of segments are checked for overlapping;
Second pass - intersection point is calculated in case if overlapping is detected.
Make NCollection_UBTree::ChangeLastNode() exported due to compilation error on Linux platform.
Reason: method does not depend on template parameters, so it should be available.
Revert previous change and try to use another trick for Linux
Fix compilation warning on MacOS: remove redundant constant
Fix regressions: do not consider insignificant loops in case of self intersections on the same wire.
More sugar solution for compilation errors on NCollection_EBTree on Linux
Test cases for issue CR24968
imported VertexInspector from BRepMesh;
imported VertexCellFilter from BRepMesh;
imported VectorOfVertex from BRepMesh;
+ imported WireInterferenceChecker from BRepMesh;
imported EdgeChecker from BRepMesh;
imported FaceChecker from BRepMesh;
class IndexedMapOfVertex instantiates IndexedMap from TCollection
(Vertex from BRepMesh, VertexHasher from BRepMesh);
-
- class BiPoint;
-
- class Array1OfBiPoint instantiates Array1 from TCollection(BiPoint from BRepMesh);
-
private class FastDiscretFace;
class FastDiscret;
FaceAttribute from BRepMesh,
ShapeMapHasher from TopTools);
- private class Classifier;
+ imported Classifier from BRepMesh;
imported ClassifierPtr; -- smart pointer on Classifier
+ imported WireChecker from BRepMesh;
imported IncrementalMesh from BRepMesh;
+++ /dev/null
--- Created on: 1997-09-18
--- Created by: Christophe MARION
--- Copyright (c) 1997-1999 Matra Datavision
--- Copyright (c) 1999-2014 OPEN CASCADE SAS
---
--- This file is part of Open CASCADE Technology software library.
---
--- This library is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License version 2.1 as published
--- by the Free Software Foundation, with special exception defined in the file
--- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
--- distribution for complete text of the license and disclaimer of any warranty.
---
--- Alternatively, this file may be used under the terms of Open CASCADE
--- commercial license or contractual agreement.
-
-class BiPoint from BRepMesh
-
-uses
- Address from Standard,
- Real from Standard,
- Integer from Standard
-
-is
- Create
- returns BiPoint from BRepMesh;
- ---C++: inline
-
- Create(X1,Y1,X2,Y2 : Real from Standard)
- returns BiPoint from BRepMesh;
-
- Indices(me) returns Address from Standard
- ---C++: inline
- is static;
-
- Coordinates(me) returns Address from Standard
- ---C++: inline
- is static;
-
-fields
- myIndices : Integer from Standard[2];
- myCoordinates : Real from Standard[6];
-
-end BiPoint;
+++ /dev/null
-// Created on: 1997-09-18
-// Created by: Christophe MARION
-// Copyright (c) 1997-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-//#define No_Exception
-
-#include <BRepMesh_BiPoint.ixx>
-
-#define PntX1 myCoordinates[0]
-#define PntY1 myCoordinates[1]
-#define PntX2 myCoordinates[2]
-#define PntY2 myCoordinates[3]
-#define VectX myCoordinates[4]
-#define VectY myCoordinates[5]
-
-#define MinSg myIndices[0]
-#define MaxSg myIndices[1]
-
-//=======================================================================
-//function : BRepMesh_BiPoint
-//purpose :
-//=======================================================================
-
-BRepMesh_BiPoint::BRepMesh_BiPoint (const Standard_Real X1,
- const Standard_Real Y1,
- const Standard_Real X2,
- const Standard_Real Y2)
-{
- PntX1 = X1;
- PntY1 = Y1;
- PntX2 = X2;
- PntY2 = Y2;
-}
-
+++ /dev/null
-// Created on: 1997-09-18
-// Created by: Christophe MARION
-// Copyright (c) 1997-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-//=======================================================================
-//function : BRepMesh_BiPoint
-//purpose :
-//=======================================================================
-
-inline BRepMesh_BiPoint::BRepMesh_BiPoint ()
-{
-}
-
-//=======================================================================
-//function : Indices
-//purpose :
-//=======================================================================
-
-inline Standard_Address BRepMesh_BiPoint::Indices () const
-{ return (Standard_Address)myIndices; }
-
-//=======================================================================
-//function : Coordinates
-//purpose :
-//=======================================================================
-
-inline Standard_Address BRepMesh_BiPoint::Coordinates () const
-{ return (Standard_Address)myCoordinates; }
-
+++ /dev/null
--- Created on: 1997-06-26
--- Created by: Laurent PAINNOT
--- Copyright (c) 1997-1999 Matra Datavision
--- Copyright (c) 1999-2014 OPEN CASCADE SAS
---
--- This file is part of Open CASCADE Technology software library.
---
--- This library is free software; you can redistribute it and/or modify it under
--- the terms of the GNU Lesser General Public License version 2.1 as published
--- by the Free Software Foundation, with special exception defined in the file
--- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
--- distribution for complete text of the license and disclaimer of any warranty.
---
--- Alternatively, this file may be used under the terms of Open CASCADE
--- commercial license or contractual agreement.
-
-private class Classifier from BRepMesh
-
-
-
-uses
- Pnt2d from gp,
- SequenceOfPnt2d from TColgp,
- Face from TopoDS,
- State from TopAbs,
- SequenceOfInteger from TColStd,
- SeqOfPtr from BRepTopAdaptor,
- DataMapOfShapePairOfPolygon from BRepMesh,
- IndexedMapOfInteger from TColStd,
- IndexedMapOfVertex from BRepMesh,
- Status from BRepMesh,
- DataStructureOfDelaun from BRepMesh
-
-is
-
- Create (theFace : Face from TopoDS;
- theTolUV : Real from Standard;
- theEdges : DataMapOfShapePairOfPolygon from BRepMesh;
- theMap : IndexedMapOfInteger from TColStd;
- theStructure : DataStructureOfDelaun from BRepMesh;
- theUmin, theUmax, theVmin, theVmax : Real from Standard)
- returns Classifier from BRepMesh;
-
-
- Perform(me; thePoint: Pnt2d from gp)
- returns State from TopAbs;
-
-
- State (me)
- returns Status from BRepMesh;
- ---C++: inline
-
-
- Destroy(me: in out);
- ---C++: alias ~
-
-
- AnalizeWire (me : in out;
- theSeqPnt2d : in SequenceOfPnt2d from TColgp;
- theUmin, theUmax, theVmin, theVmax: in Real from Standard)
- is private;
- -- Private method called from constructor after some (piece of) wire
- -- has been explored and put into <theSeqPnt2d>.
- -- Here it is triangulated if it is a hole and anyway added to the bulk.
-
-fields
-
- myTabClass : SeqOfPtr from BRepTopAdaptor;
- myTabOrient : SequenceOfInteger from TColStd;
- myTolUV : Real from Standard;
- myFace : Face from TopoDS;
- myState : Status from BRepMesh;
-
-end Classifier from BRepMesh;
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-#include <BRepMesh_Classifier.ixx>
+#include <BRepMesh_Classifier.hxx>
-// Kernel
#include <Precision.hxx>
-#include <Standard_ErrorHandler.hxx>
-#include <TColStd_ListOfTransient.hxx>
-#include <TColStd_Array1OfInteger.hxx>
-#include <TColStd_DataMapOfIntegerInteger.hxx>
-#include <ElCLib.hxx>
-// Geometry
-#include <gp_Pnt.hxx>
#include <gp_Pnt2d.hxx>
-#include <TColgp_SequenceOfPnt2d.hxx>
-#include <TColgp_Array1OfPnt2d.hxx>
-#include <GeomAbs_SurfaceType.hxx>
-#include <Geom2dInt_Geom2dCurveTool.hxx>
-#include <Geom2d_Line.hxx>
-#include <Geom2d_BezierCurve.hxx>
-#include <Geom2d_BSplineCurve.hxx>
-#include <Geom2d_TrimmedCurve.hxx>
-// Topology
-#include <BRep_Tool.hxx>
-#include <BRepTools.hxx>
-#include <BRepTools_WireExplorer.hxx>
-#include <BRepAdaptor_Curve2d.hxx>
-#include <TopAbs_Orientation.hxx>
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS.hxx>
#include <CSLib_Class2d.hxx>
-#include <Poly_PolygonOnTriangulation.hxx>
-// BRepMesh
-#include <BRepMesh_Vertex.hxx>
-#include <BRepMesh_Array1OfBiPoint.hxx>
-#include <BRepMesh_PairOfPolygon.hxx>
+#include <TColgp_Array1OfPnt2d.hxx>
+
+//=======================================================================
+//function : Constructor
+//purpose :
+//=======================================================================
+BRepMesh_Classifier::BRepMesh_Classifier()
+{
+}
-static const Standard_Real PARALL_COND = Sin(M_PI/3.0);
-static const Standard_Real RESOLUTION = 1.0E-16;
+//=======================================================================
+//function : Perform
+//purpose :
+//=======================================================================
+TopAbs_State BRepMesh_Classifier::Perform(const gp_Pnt2d& thePoint) const
+{
+ Standard_Boolean isOut = Standard_False;
+ Standard_Integer aNb = myTabClass.Length();
+
+ for (Standard_Integer i = 1; i <= aNb; i++)
+ {
+ Standard_Integer aCur = ((CSLib_Class2d*)myTabClass(i))->SiDans(thePoint);
+ if (aCur == 0)
+ {
+ // Point is ON, but mark it as OUT
+ isOut = Standard_True;
+ }
+ else
+ isOut = myTabOrient(i) ? (aCur == -1) : (aCur == 1);
+
+ if (isOut)
+ return TopAbs_OUT;
+ }
-// Real mesh is created in the grid 10E5x10E5, so intersection
-// should be cheched with double of discretization.
-static const Standard_Real MIN_DIST = 2.E-5;
+ return TopAbs_IN;
+}
//=======================================================================
-//function : AnalizeWire
+//function : RegisterWire
//purpose :
//=======================================================================
-void BRepMesh_Classifier::AnalizeWire (const TColgp_SequenceOfPnt2d& theSeqPnt2d,
- const Standard_Real theUmin, const Standard_Real theUmax,
- const Standard_Real theVmin, const Standard_Real theVmax)
+void BRepMesh_Classifier::RegisterWire(
+ const NCollection_Sequence<gp_Pnt2d>& theWire,
+ const Standard_Real theTolUV,
+ const Standard_Real theUmin,
+ const Standard_Real theUmax,
+ const Standard_Real theVmin,
+ const Standard_Real theVmax)
{
- const Standard_Integer aNbPnts = theSeqPnt2d.Length();
+ const Standard_Integer aNbPnts = theWire.Length();
if (aNbPnts < 2)
return;
// Accumulate angle
TColgp_Array1OfPnt2d aPClass(1, aNbPnts);
Standard_Real anAngle = 0.0;
- gp_Pnt2d p1 = theSeqPnt2d(1), p2 = theSeqPnt2d(2), p3;
+ gp_Pnt2d p1 = theWire(1), p2 = theWire(2), p3;
aPClass(1) = p1;
aPClass(2) = p2;
+
+ const Standard_Real aAngTol = Precision::Angular();
+ const Standard_Real aSqConfusion =
+ Precision::PConfusion() * Precision::PConfusion();
+
for (Standard_Integer i = 1; i <= aNbPnts; i++)
{
Standard_Integer ii = i + 2;
}
else
{
- p3 = theSeqPnt2d.Value(ii);
+ p3 = theWire.Value(ii);
aPClass(ii) = p3;
}
gp_Vec2d A(p1,p2), B(p2,p3);
- if (A.SquareMagnitude() > 1.e-16 && B.SquareMagnitude() > 1.e-16)
+ if (A.SquareMagnitude() > aSqConfusion &&
+ B.SquareMagnitude() > aSqConfusion)
{
const Standard_Real aCurAngle = A.Angle(B);
const Standard_Real aCurAngleAbs = Abs(aCurAngle);
// Check if vectors are opposite
- if (aCurAngleAbs > Precision::Angular() && (M_PI - aCurAngleAbs) > Precision::Angular())
+ if (aCurAngleAbs > aAngTol && (M_PI - aCurAngleAbs) > aAngTol)
{
anAngle += aCurAngle;
p1 = p2;
p2 = p3;
}
// Check for zero angle - treat self intersecting wire as outer
- if (Abs(anAngle) < Precision::Angular())
+ if (Abs(anAngle) < aAngTol)
anAngle = 0.0;
- myTabClass.Append( (void *)new CSLib_Class2d(aPClass, myTolUV, myTolUV,
- theUmin, theVmin, theUmax, theVmax) );
- myTabOrient.Append( ((anAngle < 0.0) ? 0 : 1) );
+ myTabClass.Append( (void *)new CSLib_Class2d(aPClass,
+ theTolUV, theTolUV, theUmin, theVmin, theUmax, theVmax) );
+ myTabOrient.Append( !(anAngle < 0.0) );
}
-//=======================================================================
-//function : triangle2Area
-//purpose : calculating area under triangle
-//=======================================================================
-inline static Standard_Real triangle2Area(const gp_XY& p1, const gp_XY& p2)
-{
- return p1.Crossed(p2);
-}
-
-//=======================================================================
-//function : getSegmentParams
-//purpose : extracting segment attributes
-//=======================================================================
-static Standard_Real getSegmentParams(const BRepMesh_Array1OfBiPoint& theBiPoints,
- const Standard_Integer Index,
- Standard_Real& x11,
- Standard_Real& y11,
- Standard_Real& x12,
- Standard_Real& y12,
- Standard_Real& A,
- Standard_Real& B,
- Standard_Real& C)
-{
- Standard_Real *aCoordinates;
- aCoordinates = ((Standard_Real*)(theBiPoints(Index).Coordinates()));
- x11 = aCoordinates[0];
- y11 = aCoordinates[1];
- x12 = aCoordinates[2];
- y12 = aCoordinates[3];
- A = aCoordinates[5];
- B = -aCoordinates[4];
- C = - x11*A - y11*B;
- return A*A+B*B;
-}
-
-//=======================================================================
-//function : checkWiresIntersection
-//purpose : finding intersection.
-// If the intersection is found return Standard_True
-//=======================================================================
-static Standard_Boolean checkWiresIntersection(const Standard_Integer theFirstWireId,
- const Standard_Integer theSecondWireId,
- Standard_Integer* const theFirstOuterSegmentId,
- Standard_Integer theLastOuterSegmentId,
- const TColStd_SequenceOfInteger& theWireLength,
- const BRepMesh_Array1OfBiPoint& theBiPoints,
- const Standard_Boolean findNextIntersection = Standard_False,
- const Standard_Boolean isFirstSegment = Standard_False,
- Standard_Integer* const theFirstInnerSegmentId = 0)
-{
- Standard_Real A1, B1, C1, A2, B2, C2, AB, BC, CA, xc, yc;
- Standard_Real mu1, d, mu2;
- Standard_Integer ik = *theFirstOuterSegmentId, jk;
- Standard_Real x11, x12, y11, y12, x21, x22, y21, y22;
-
- // Calculate bounds for first wire
- Standard_Integer ikEnd = theLastOuterSegmentId;
- Standard_Boolean isFirst = Standard_True;
- if ( findNextIntersection )
- isFirst = isFirstSegment;
-
- // Calculate bounds for second wire
- Standard_Integer jkStart = 0, jkEnd = 0;
- for (jk = 1; jk <= theSecondWireId; jk++)
- {
- jkStart = jkEnd + 1;
- jkEnd += theWireLength(jk);
- }
-
- // total area under polygon (area of loop)
- Standard_Real aLoopArea = 0.0;
- // area under first triangles of polygon
- Standard_Real aFirstTriangleArea = 0.0;
- // contains coordinates of the end point of segment if first intersection point is finding
- // or coordinates of the intersecting point if second intersection point is finding
- gp_XY aStartPoint;
-
- for (; ik <= ikEnd; ik++)
- {
- mu1 = getSegmentParams(theBiPoints, ik, x11, y11, x12, y12, A1, B1, C1);
- // for second intersection point we must count the area from first intersection point
- if ( !findNextIntersection )
- {
- aLoopArea = 0.0;
- aStartPoint.SetCoord(x12, y12);
- }
-
- //for theFirstWireId == theSecondWireId the algorithm check current wire on selfintersection
- if ( findNextIntersection && theFirstInnerSegmentId && isFirst)
- jk = *theFirstInnerSegmentId;
- else if (theSecondWireId == theFirstWireId)
- jk = ik + 2;
- else
- jk = jkStart;
-
- // Explore second wire
- Standard_Boolean aFirstPass = Standard_True;
- for (; jk <= jkEnd; jk++)
- {
- // don't check end's segment of the wire on selfrestriction
- if ( theSecondWireId == theFirstWireId && isFirst && jk == ikEnd )
- continue;
-
- mu2 = getSegmentParams(theBiPoints, jk, x21, y21, x22, y22, A2, B2, C2);
- gp_XY p2(x21, y21), p3(x22, y22);
-
- //different segments may have common vertex (see OCC287 bug for example)
- AB = A1*B2 - A2*B1;
- //check on minimal of distance between current segment and points of another linear segments - OCC319
- d = A1*x22 + B1*y22 + C1;
- Standard_Real dTol = MIN_DIST*MIN_DIST;
- if(theFirstWireId != theSecondWireId && // if compared wires are different &&
- AB*AB > PARALL_COND*PARALL_COND*mu1*mu2 && // angle between two segments greater then PARALL_COND &&
- d*d < dTol*mu1 && // distance between vertex of the segment and other one's less then MIN_DIST
- (x22-x11)*(x22-x12) < 0.0 && (y22-y11)*(y22-y12) < 0.0)
- {
- // if we finding the second intersection we must return Standard_False for setting
- // self-intersection result flag
- if ( findNextIntersection )
- return Standard_False;
-
- // we can step here when finding first intersection, return self-intersection flag
- return Standard_True;
- }
-
- if( aFirstPass )
- aFirstTriangleArea = triangle2Area(aStartPoint, p2);
-
- Standard_Real aTmpArea = triangle2Area(p2, p3);
-
- //look for intersection of two linear segments
- if(Abs(AB) <= RESOLUTION)
- {
- aLoopArea += aTmpArea;
- continue; //current segments seem parallel - no intersection
- }
-
- //calculate coordinates of point of the intersection
- BC = B1*C2 - B2*C1; xc = BC/AB;
- CA = C1*A2 - C2*A1; yc = CA/AB;
-
- // remember current intersection point and area of first triangle
- if( findNextIntersection && ik == *theFirstOuterSegmentId && jk == *theFirstInnerSegmentId )
- {
- aStartPoint.SetCoord(xc, yc);
- continue;
- }
-
- //check on belonging of intersection point to the both of segments
- Standard_Boolean isOnLines = Standard_True;
-
- Standard_Real dd[2][4] = { {(xc-x11), (xc-x12), (xc-x21), (xc-x22)}, //dX
- {(yc-y11), (yc-y12), (yc-y21), (yc-y22)} }; //dY
-
- for( Standard_Integer i = 0; i < 2; i++ )
- {
- if ( dd[i][0] * dd[i][1] > RESOLUTION || dd[i][2] * dd[i][3] > RESOLUTION )
- {
- isOnLines = Standard_False;
- break;
- }
- }
-
- // check the intersection point is on the ends of segments
- if ( isOnLines )
- {
- for( Standard_Integer i = 0; i < 2; i++ )
- {
- // if it's the last segment and intersection point lies at the end
- if ( ( jk == jkEnd ||
- // dX && dY
- // or when the start or the end point of the first segment
- (Abs(dd[0][0]) < MIN_DIST && Abs(dd[1][0]) < MIN_DIST) ||
- (Abs(dd[0][1]) < MIN_DIST && Abs(dd[1][1]) < MIN_DIST)) &&
- // is equal to one of the end points of the second
- (Abs(dd[0][i+2]) < MIN_DIST && Abs(dd[1][i+2]) < MIN_DIST))
- {
- // no intersection
- isOnLines = Standard_False;
- aLoopArea = aTmpArea = 0.0;
- aFirstPass = Standard_True;
- break;
- }
- }
- }
-
-
- if( isOnLines )
- {
- p3.SetX(xc); p3.SetY(yc);
- aLoopArea += aFirstTriangleArea; // First triangle area
- aLoopArea += triangle2Area(p2, p3);
- aLoopArea += triangle2Area(p3, aStartPoint); // Last triangle area
-
- if( Abs(aLoopArea)/2 > M_PI*MIN_DIST )
- {
- if ( findNextIntersection )
- {
- // intersection is found, but Standard_False returns, because area is too much
- return Standard_False;
- }
-
- if ( checkWiresIntersection(theFirstWireId, theSecondWireId, &ik, ikEnd, theWireLength,
- theBiPoints, Standard_True, isFirst, &jk) )
- {
- // small crossing is not intersection, continue cheching
- aLoopArea = aTmpArea = 0.0;
- aFirstPass = Standard_True;
- }
- else
- {
- // if we found only one intersection
- return Standard_True;
- }
- }
- else if ( findNextIntersection )
- {
- // small intersection, skip double checking
- *theFirstOuterSegmentId = ik;
- *theFirstInnerSegmentId = jk + 1;
- return Standard_True;
- }
- }
- if ( aFirstPass )
- aFirstPass = Standard_False;
-
- aLoopArea += aTmpArea;
- }
-
- if ( isFirst )
- isFirst = Standard_False;
- }
- return Standard_False;
-}
-
-
-//=======================================================================
-//function : BRepMesh_Classifier
-//purpose :
-//=======================================================================
-BRepMesh_Classifier::BRepMesh_Classifier(const TopoDS_Face& theFace,
- const Standard_Real theTolUV,
- const BRepMesh_DataMapOfShapePairOfPolygon& theEdges,
- const TColStd_IndexedMapOfInteger& theMap,
- const Handle(BRepMesh_DataStructureOfDelaun)& theStructure,
- const Standard_Real theUmin,
- const Standard_Real theUmax,
- const Standard_Real theVmin,
- const Standard_Real theVmax)
-: myTolUV( theTolUV ),
- myFace ( theFace ),
- myState( BRepMesh_NoError )
-{
- //-- impasse sur les surfs definies sur plus d une periode
- //-- once definition
- myFace.Orientation(TopAbs_FORWARD);
-
- TColgp_SequenceOfPnt2d aWirePoints, aWire;
- TColStd_SequenceOfInteger aWireLength;
-
- TopoDS_Iterator aFaceExplorer;
- for(aFaceExplorer.Initialize(myFace); aFaceExplorer.More(); aFaceExplorer.Next())
- {
- if(aFaceExplorer.Value().ShapeType() != TopAbs_WIRE)
- continue;
-
- // For each wire we create a data map, linking vertices (only
- // the ends of edges) with their positions in the sequence of
- // all 2d points from this wire.
- // When we meet some vertex for the second time - the piece
- // of sequence is treated for a HOLE and quits the sequence.
- // Actually, we must unbind the vertices belonging to the
- // loop from the map, but since they can't appear twice on the
- // valid wire, leave them for a little speed up.
- Standard_Integer aNbEdges = 0;
- Standard_Integer aFirstIndex = 0, aLastIndex = 0;
- Standard_Boolean isFalseWire = Standard_False;
-
- TColgp_SequenceOfPnt2d aSeqPnt2d;
- TColStd_DataMapOfIntegerInteger aNodeInSeq;
-
- // Start traversing the wire
- BRepTools_WireExplorer aWireExplorer;
- for (aWireExplorer.Init(TopoDS::Wire( aFaceExplorer.Value() ), myFace); aWireExplorer.More(); aWireExplorer.Next())
- {
- TopoDS_Edge anEdge = aWireExplorer.Current();
- TopAbs_Orientation anOrient = anEdge.Orientation();
- if (anOrient != TopAbs_FORWARD && anOrient != TopAbs_REVERSED)
- continue;
-
- if (theEdges.IsBound(anEdge))
- {
- // Retrieve polygon
- // Define the direction for adding points to aSeqPnt2d
- Standard_Integer aIdxFirst, aIdxLast, aIdxIncr;
-
- const BRepMesh_PairOfPolygon& aPair = theEdges.Find(anEdge);
- Handle(Poly_PolygonOnTriangulation) aNOD;
- if (anOrient == TopAbs_FORWARD)
- {
- aNOD = aPair.First();
- aIdxFirst = 1;
- aIdxLast = aNOD->NbNodes();
- aIdxIncr = 1;
- }
- else
- {
- aNOD = aPair.Last();
- aIdxFirst = aNOD->NbNodes();
- aIdxLast = 1;
- aIdxIncr = -1;
- }
- const TColStd_Array1OfInteger& anIndices = aNOD->Nodes();
-
- // anIndexFirst and anIndexLast are the indices of first and last
- // vertices of the edge in IndexedMap <Str>
- const Standard_Integer anIndexFirst = theMap.FindKey( anIndices(aIdxFirst) );
- const Standard_Integer anIndexLast = theMap.FindKey( anIndices(aIdxLast) );
-
- if (anIndexLast == anIndexFirst && (aIdxLast - aIdxFirst) == aIdxIncr)
- {
- // case of continuous set of degenerated edges
- aLastIndex = anIndexLast;
- continue;
- }
-
- // If there's a gap between edges -> raise <isFalseWire> flag
- if (aNbEdges)
- {
- if (anIndexFirst != aLastIndex)
- {
- isFalseWire = Standard_True;
- break;
- }
- }
- else
- aFirstIndex = anIndexFirst;
-
- aLastIndex = anIndexLast;
-
- // Record first vertex (to detect loops)
- aNodeInSeq.Bind(anIndexFirst, (aSeqPnt2d.Length() + 1));
-
- // Add vertices in sequence
- for (Standard_Integer i = aIdxFirst; i != aIdxLast; i += aIdxIncr)
- {
- Standard_Integer anIndex = ((i == aIdxFirst) ? anIndexFirst : theMap.FindKey( anIndices(i) ));
-
- gp_Pnt2d aPnt( theStructure->GetNode(anIndex).Coord() );
- aSeqPnt2d.Append(aPnt);
- }
-
- // Now, is there a loop?
- if (aNodeInSeq.IsBound(anIndexLast))
- {
- // Yes, treat it separately as a hole
- // 1. Divide points into main wire and a loop
- const Standard_Integer aIdxWireStart = aNodeInSeq(anIndexLast);
- if(aIdxWireStart < aSeqPnt2d.Length())
- {
- aSeqPnt2d.Split(aIdxWireStart, aWire);
- // 2. Proceed the loop
- //AnalizeWire(aLoop, Umin, Umax, Vmin, Vmax, aWirePoints, aWireLength, NbBiPoint);
- aWireLength.Append( aWire.Length() );
- aWirePoints.Append( aWire );
- }
- }
- aNbEdges++;
- }
- }
-
- if (aNbEdges)
- {
- // Isn't it open?
- if (isFalseWire || (aFirstIndex != aLastIndex) || aSeqPnt2d.Length() > 1)
- {
- myState = BRepMesh_OpenWire;
- return;
- }
- }
- }
-
- const Standard_Integer aNbWires = aWireLength.Length();
- Standard_Integer aNbBiPoint = aWirePoints.Length();
- BRepMesh_Array1OfBiPoint aBiPoints(0, aNbBiPoint);
- BRepMesh_BiPoint *aBiPoint = &(aBiPoints.ChangeValue(1));
-
- // Fill array of segments (bi-points)
- Standard_Integer k = 1;
- for (Standard_Integer i = 1; i <= aNbWires; i++)
- {
- Standard_Real x1 = 0., y1 = 0., x2, y2, aXstart = 0., aYstart = 0.;
- const Standard_Integer aLen = aWireLength(i) + 1;
- for (Standard_Integer j = 1; j <= aLen; j++)
- {
- // Obtain last point of the segment
- if (j == aLen)
- {
- x2 = aXstart;
- y2 = aYstart;
- }
- else
- {
- const gp_Pnt2d& aPnt = aWirePoints(k);
- k++;
-
- x2 = aPnt.X();
- y2 = aPnt.Y();
- }
- // Build segment (bi-point)
- if (j == 1)
- {
- aXstart = x2;
- aYstart = y2;
- }
- else
- {
- Standard_Real *aCoordinates1 = ((Standard_Real*)(aBiPoint->Coordinates()));
- aBiPoint++;
-
- aCoordinates1[0] = x1;
- aCoordinates1[1] = y1;
- aCoordinates1[2] = x2;
- aCoordinates1[3] = y2;
- aCoordinates1[4] = x2 - x1;
- aCoordinates1[5] = y2 - y1;
- }
- x1 = x2;
- y1 = y2;
- }
- }
-
- // Search the intersection
- // Explore first wire
- Standard_Integer ikEnd = 0;
- for(Standard_Integer i = 1; i <= aNbWires; i++)
- {
- Standard_Integer ik = ikEnd + 1;
- ikEnd += aWireLength(i);
-
- // Explore second wire
- for (Standard_Integer j = i; j <= aNbWires; j++)
- {
- if ( checkWiresIntersection(i, j, &ik, ikEnd, aWireLength, aBiPoints) )
- {
- myState = BRepMesh_SelfIntersectingWire;
- return;
- }
- }
- }
-
- // Find holes
- for (Standard_Integer i = aNbWires; i >= 1; i--)
- {
- aNbBiPoint = aWirePoints.Length() - aWireLength(i) + 1;
- aWirePoints.Split(aNbBiPoint, aWire);
- AnalizeWire(aWire, theUmin, theUmax, theVmin, theVmax);
- }
-}
-
-
-//=======================================================================
-//function : Perform
-//purpose :
-//=======================================================================
-TopAbs_State BRepMesh_Classifier::Perform(const gp_Pnt2d& thePoint) const
-{
- Standard_Boolean isOut = Standard_False;
- Standard_Integer aNb = myTabClass.Length();
-
- for (Standard_Integer i = 1; i <= aNb; i++)
- {
- Standard_Integer aCur = ((CSLib_Class2d*)myTabClass(i))->SiDans(thePoint);
- if (aCur == 0)
- {
- // Point is ON, but mark it as OUT
- isOut = Standard_True;
- }
- else
- isOut = myTabOrient(i)? (aCur == -1) : (aCur == 1);
-
- if (isOut)
- return TopAbs_OUT;
- }
-
- return TopAbs_IN;
-}
-
-
//=======================================================================
//function : Destroy
//purpose :
myTabClass(i) = NULL;
}
}
+
+ myTabClass.Clear();
+ myTabOrient.Clear();
}
--- /dev/null
+// Created on: 2014-06-03
+// Created by: Oleg AGASHIN
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _BRepMesh_Classifier_HeaderFile
+#define _BRepMesh_Classifier_HeaderFile
+
+#include <Standard.hxx>
+#include <Standard_DefineAlloc.hxx>
+#include <Standard_Macro.hxx>
+#include <BRepTopAdaptor_SeqOfPtr.hxx>
+#include <TColStd_SequenceOfBoolean.hxx>
+#include <TopAbs_State.hxx>
+#include <NCollection_Sequence.hxx>
+
+class gp_Pnt2d;
+class TColgp_SequenceOfPnt2d;
+
+//! Auxilary class contains information about correctness of discretized
+//! face and used for classification of points regarding face internals.
+class BRepMesh_Classifier
+{
+public:
+
+ DEFINE_STANDARD_ALLOC
+
+ //! Constructor.
+ Standard_EXPORT BRepMesh_Classifier();
+
+ //! Destructor.
+ ~BRepMesh_Classifier()
+ {
+ Destroy();
+ }
+
+ //! Method is called on destruction.
+ //! Clears internal data structures.
+ Standard_EXPORT void Destroy();
+
+ //! Performs classification of the given point regarding to face internals.
+ //! \param thePoint Point in parametric space to be classified.
+ //! \return
+ Standard_EXPORT TopAbs_State Perform(const gp_Pnt2d& thePoint) const;
+
+ //! Registers wire specified by sequence of points for
+ //! further classification of points.
+ //! \param theWire Wire to be registered. Specified by sequence of points.
+ //! \param theTolUV Tolerance to be used for calculations in parametric space.
+ //! \param theUmin Lower U boundary of the face in parametric space.
+ //! \param theUmax Upper U boundary of the face in parametric space.
+ //! \param theVmin Lower V boundary of the face in parametric space.
+ //! \param theVmax Upper V boundary of the face in parametric space.
+ void RegisterWire(
+ const NCollection_Sequence<gp_Pnt2d>& theWire,
+ const Standard_Real theTolUV,
+ const Standard_Real theUmin,
+ const Standard_Real theUmax,
+ const Standard_Real theVmin,
+ const Standard_Real theVmax);
+
+private:
+
+ BRepTopAdaptor_SeqOfPtr myTabClass;
+ TColStd_SequenceOfBoolean myTabOrient;
+};
+
+#endif
+++ /dev/null
-// Created on: 2003-11-05
-// Created by: Open CASCADE Support
-// Copyright (c) 2003-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-//=======================================================================
-//function : State
-//purpose :
-//=======================================================================
-
-inline BRepMesh_Status BRepMesh_Classifier::State() const
-{
- return myState;
-}
#ifndef BRepMesh_ClassifierPtr_HeaderFile
#define BRepMesh_ClassifierPtr_HeaderFile
-#include <BRepMesh_Classifier.hxx>
#include <NCollection_Handle.hxx>
+class BRepMesh_Classifier;
typedef NCollection_Handle<BRepMesh_Classifier> BRepMesh_ClassifierPtr;
#endif
const Standard_Real AngDeviation90Deg = 90 * AngDeviation1Deg;
const Standard_Real Angle2PI = 2 * M_PI;
-const Standard_Real Precision = Precision::PConfusion();
-const Standard_Real EndPrecision = 1 - Precision;
-const Standard_Real Precision2 = Precision * Precision;
+const Standard_Real Precision = Precision::PConfusion();
+const Standard_Real Precision2 = Precision * Precision;
const gp_XY SortingDirection(M_SQRT1_2, M_SQRT1_2);
//=======================================================================
continue;
gp_Pnt2d anIntPnt;
- IntFlag aIntFlag = intSegSeg( theLink, aPolyLink,
- isConsiderEndPointTouch, isConsiderPointOnEdge, anIntPnt );
+ BRepMesh_WireInterferenceChecker::IntFlag aIntFlag =
+ intSegSeg( theLink, aPolyLink, isConsiderEndPointTouch,
+ isConsiderPointOnEdge, anIntPnt );
- if ( aIntFlag != BRepMesh_Delaun::NoIntersection )
+ if ( aIntFlag != BRepMesh_WireInterferenceChecker::NoIntersection )
return Standard_False;
}
}
};
gp_Pnt2d anIntPnt;
- IntFlag aIntFlag = intSegSeg( *aCurEdge, *aNextEdge,
- Standard_False, Standard_True, anIntPnt );
+ BRepMesh_WireInterferenceChecker::IntFlag aIntFlag = intSegSeg( *aCurEdge,
+ *aNextEdge, Standard_False, Standard_True, anIntPnt );
- if ( aIntFlag == BRepMesh_Delaun::NoIntersection )
+ if ( aIntFlag == BRepMesh_WireInterferenceChecker::NoIntersection )
continue;
Standard_Boolean isRemoveFromFirst = Standard_False;
Standard_Boolean isAddReplacingEdge = Standard_True;
Standard_Integer aIndexToRemoveTo = aNextPolyIt;
- if ( aIntFlag == BRepMesh_Delaun::Cross )
+ if ( aIntFlag == BRepMesh_WireInterferenceChecker::Cross )
{
Standard_Real aLoopArea = polyArea( thePolygon, aPolyIt + 1, aNextPolyIt );
gp_Vec2d aVec1( anIntPnt, aCurPnts [1] );
theSkipped->Add( Abs( thePolygon( aSkippedLinkIt ) ) );
}
}
- else if ( aIntFlag == BRepMesh_Delaun::PointOnEdge )
+ else if ( aIntFlag == BRepMesh_WireInterferenceChecker::PointOnSegment )
{
// Indentify chopping link
Standard_Boolean isFirstChopping = Standard_False;
thePolygon, thePolyBoxes );
}
}
- else if ( aIntFlag == BRepMesh_Delaun::Glued )
+ else if ( aIntFlag == BRepMesh_WireInterferenceChecker::Glued )
{
if ( aCurNodes[1] == aNextNodes[0] )
{
}
// TODO: Non-adjacent glued links within the polygon
}
- else if ( aIntFlag == BRepMesh_Delaun::Same )
+ else if ( aIntFlag == BRepMesh_WireInterferenceChecker::Same )
{
processLoop( aPolyIt, aNextPolyIt, thePolygon, thePolyBoxes );
// intersection is possible...
gp_Pnt2d anIntPnt;
- IntFlag aIntFlag = intSegSeg( aCheckLink, aPolyLink,
- Standard_False, Standard_False, anIntPnt );
+ BRepMesh_WireInterferenceChecker::IntFlag aIntFlag =
+ intSegSeg( aCheckLink, aPolyLink, Standard_False,
+ Standard_False, anIntPnt );
- if( aIntFlag != BRepMesh_Delaun::NoIntersection )
+ if( aIntFlag != BRepMesh_WireInterferenceChecker::NoIntersection )
{
isIntersect = Standard_True;
break;
( aDistance[0] <= 0. && aDistance[1] <= 0. && aDistance[2] <= 0. ) ) );
}
-
-//=============================================================================
-//function : classifyPoint
-//purpose : Classifies the point in case of coincidence of two vectors.
-// Returns zero value if point is out of segment and non zero
-// value if point is between the first and the second point of segment.
-// thePoint1 - the start point of a segment (base point)
-// thePoint2 - the end point of a segment
-// thePointToCheck - the point to classify
-//=============================================================================
-Standard_Integer BRepMesh_Delaun::classifyPoint( const gp_XY& thePoint1,
- const gp_XY& thePoint2,
- const gp_XY& thePointToCheck ) const
-{
- gp_XY aP1 = thePoint2 - thePoint1;
- gp_XY aP2 = thePointToCheck - thePoint1;
-
- Standard_Real aDist = Abs( aP1 ^ aP2 );
- if ( aDist >= Precision )
- {
- aDist = ( aDist * aDist ) / aP1.SquareModulus();
- if ( aDist >= Precision2 )
- return 0; //out
- }
-
- gp_XY aMult = aP1.Multiplied( aP2 );
- if ( aMult.X() < 0.0 || aMult.Y() < 0.0 )
- return 0; //out
-
- if ( aP1.SquareModulus() < aP2.SquareModulus() )
- return 0; //out
-
- if ( thePointToCheck.IsEqual( thePoint1, Precision ) ||
- thePointToCheck.IsEqual( thePoint2, Precision ) )
- return -1; //coinsides with an end point
-
- return 1;
-}
-
//=============================================================================
//function : intSegSeg
//purpose : Checks intersection between the two segments.
//=============================================================================
-BRepMesh_Delaun::IntFlag BRepMesh_Delaun::intSegSeg( const BRepMesh_Edge& theEdg1,
- const BRepMesh_Edge& theEdg2,
- const Standard_Boolean isConsiderEndPointTouch,
- const Standard_Boolean isConsiderPointOnEdge,
- gp_Pnt2d& theIntPnt) const
+BRepMesh_WireInterferenceChecker::IntFlag BRepMesh_Delaun::intSegSeg(
+ const BRepMesh_Edge& theEdg1,
+ const BRepMesh_Edge& theEdg2,
+ const Standard_Boolean isConsiderEndPointTouch,
+ const Standard_Boolean isConsiderPointOnEdge,
+ gp_Pnt2d& theIntPnt) const
{
gp_XY p1, p2, p3, p4;
p1 = GetVertex( theEdg1.FirstNode() ).Coord();
p3 = GetVertex( theEdg2.FirstNode() ).Coord();
p4 = GetVertex( theEdg2.LastNode() ).Coord();
- Standard_Integer aPoint1 = classifyPoint( p1, p2, p3 );
- Standard_Integer aPoint2 = classifyPoint( p1, p2, p4 );
- Standard_Integer aPoint3 = classifyPoint( p3, p4, p1 );
- Standard_Integer aPoint4 = classifyPoint( p3, p4, p2 );
-
- // Consider case when edges have shared vertex
- if ( isConsiderEndPointTouch )
- {
- if ( aPoint1 < 0 || aPoint2 < 0 )
- return BRepMesh_Delaun::EndPointTouch;
- }
-
- Standard_Integer aPosHash =
- aPoint1 + aPoint2 + aPoint3 + aPoint4;
-
- /*=========================================*/
- /* 1) hash code == 1:
-
- 0+
- /
- 0 1/ 0
- +======+==========+
-
- 2) hash code == 2:
-
- 0 1 1 0
- a) +----+========+---+
-
- 0 1 1 0
- b) +-------+===+=====+
-
- */
- /*=========================================*/
- if ( aPosHash == 1 )
- {
- return isConsiderPointOnEdge ?
- BRepMesh_Delaun::PointOnEdge :
- BRepMesh_Delaun::NoIntersection;
- }
- else if ( aPosHash == 2 )
- return BRepMesh_Delaun::Glued;
-
- gp_XY aVec1 = p2 - p1;
- gp_XY aVec2 = p4 - p3;
- gp_XY aVecStartPoints = p3 - p1;
-
- Standard_Real aCrossD1D2 = aVec1 ^ aVec2;
- Standard_Real aCrossD1D3 = aVecStartPoints ^ aVec2;
-
- // is edgegs codirectional
- if ( Abs( aCrossD1D2 ) < Precision )
- {
- // just a parallel case?
- if( Abs( aCrossD1D3 ) < Precision )
- {
- /*=========================================*/
- /* Here the following cases are possible:
- 1) hash code == -4:
-
- -1 -1
- +=================+
- -1 -1
-
- 2) hash code == -2:
-
- 0 -1 0
- +--------+========+
- -1
-
- 3) hash code == -1:
-
- 0 1 -1
- +--------+========+
- -1
-
- 4) hash code == 0:
-
- 0 0 0 0
- +------+ +=======+
- 0 0 0 0
- */
- /*=========================================*/
-
- if ( aPosHash < -2 )
- return BRepMesh_Delaun::Same;
- else if ( aPosHash == -1 )
- return BRepMesh_Delaun::Glued;
-
- return BRepMesh_Delaun::NoIntersection;
- }
- else
- return BRepMesh_Delaun::NoIntersection;
- }
-
- Standard_Real aPar = aCrossD1D3 / aCrossD1D2;
- // inrersects out of first segment range
- if( aPar < Precision || aPar > EndPrecision )
- return BRepMesh_Delaun::NoIntersection;
-
- Standard_Real aCrossD2D3 = aVecStartPoints.Reversed() ^ aVec1;
- aPar = aCrossD2D3 / -aCrossD1D2;
- // inrersects out of second segment range
- if( aPar < Precision || aPar > EndPrecision )
- return BRepMesh_Delaun::NoIntersection;
-
- theIntPnt = p3 + aPar * aVec2;
- return BRepMesh_Delaun::Cross;
+ return BRepMesh_WireInterferenceChecker::Intersect(p1, p2, p3, p4,
+ isConsiderEndPointTouch, isConsiderPointOnEdge, theIntPnt);
}
//=============================================================================
#include <BRepMesh_MapOfIntegerInteger.hxx>
#include <BRepMesh_DataStructureOfDelaun.hxx>
#include <NCollection_Sequence.hxx>
+#include <BRepMesh_WireInterferenceChecker.hxx>
class Bnd_B2d;
class Bnd_Box2d;
private:
- enum IntFlag
- {
- NoIntersection,
- Cross,
- EndPointTouch,
- PointOnEdge,
- Glued,
- Same
- };
-
enum ReplaceFlag
{
Replace,
Standard_Real theSqModulus[3],
Standard_Integer& theEdgeOn) const;
- //! Classifies the point in case of coincidence of two vectors.
- //! @param thePoint1 the start point of a segment (base point)
- //! @param thePoint2 the end point of a segment
- //! @param thePointToCheck the point to classify
- //! @returns zero value if point is out of segment and non zero value if point is between the first and the second point of segment
- Standard_Integer classifyPoint (const gp_XY& thePoint1,
- const gp_XY& thePoint2,
- const gp_XY& thePointToCheck) const;
-
//! Checks intersection between the two segments.
- IntFlag intSegSeg (const BRepMesh_Edge& theEdge1,
- const BRepMesh_Edge& theEdge2,
- const Standard_Boolean isConsiderEndPointTouch,
- const Standard_Boolean isConsiderPointOnEdge,
- gp_Pnt2d& theIntPnt) const;
+ BRepMesh_WireInterferenceChecker::IntFlag intSegSeg (
+ const BRepMesh_Edge& theEdge1,
+ const BRepMesh_Edge& theEdge2,
+ const Standard_Boolean isConsiderEndPointTouch,
+ const Standard_Boolean isConsiderPointOnEdge,
+ gp_Pnt2d& theIntPnt) const;
//! Returns area of the loop of the given polygon defined by indices of its start and end links.
Standard_Real polyArea (const TColStd_SequenceOfInteger& thePolygon,
is
- Create (defle : Real from Standard;
- angle : Real from Standard;
- B : Box from Bnd;
- withShare : Boolean from Standard=Standard_True;
- inshape : Boolean from Standard=Standard_False;
- relative : Boolean from Standard=Standard_False;
- shapetrigu: Boolean from Standard=Standard_False)
+ Create (defle : Real from Standard;
+ angle : Real from Standard;
+ B : Box from Bnd;
+ withShare : Boolean from Standard=Standard_True;
+ inshape : Boolean from Standard=Standard_False;
+ relative : Boolean from Standard=Standard_False;
+ shapetrigu : Boolean from Standard=Standard_False;
+ isInParallel: Boolean from Standard=Standard_False)
returns FastDiscret from BRepMesh;
- Create (defle : Real from Standard;
- shape : Shape from TopoDS;
- B : Box from Bnd;
- angle : Real from Standard;
- withShare : Boolean from Standard=Standard_True;
- inshape : Boolean from Standard=Standard_False;
- relative : Boolean from Standard=Standard_False;
- shapetrigu: Boolean from Standard=Standard_False)
+ Create (defle : Real from Standard;
+ shape : Shape from TopoDS;
+ B : Box from Bnd;
+ angle : Real from Standard;
+ withShare : Boolean from Standard=Standard_True;
+ inshape : Boolean from Standard=Standard_False;
+ relative : Boolean from Standard=Standard_False;
+ shapetrigu : Boolean from Standard=Standard_False;
+ isInParallel: Boolean from Standard=Standard_False)
---Purpose: if the boolean <relative> is True, the
-- deflection used for the polygonalisation of
-- each edge will be <defle> * Size of Edge.
#include <BRepMesh_FaceAttribute.hxx>
#include <BRepMesh_DataStructureOfDelaun.hxx>
#include <BRepMesh_ClassifierPtr.hxx>
+#include <BRepMesh_Classifier.hxx>
+#include <BRepMesh_WireChecker.hxx>
#include <BRepMesh_GeomTool.hxx>
#include <BRepMesh_PairOfPolygon.hxx>
#include <BRepMesh_DataMapOfShapePairOfPolygon.hxx>
const Standard_Boolean theWithShare,
const Standard_Boolean theInshape,
const Standard_Boolean theRelative,
- const Standard_Boolean theShapetrigu) :
- myAngle (theAngl),
+ const Standard_Boolean theShapetrigu,
+ const Standard_Boolean isInParallel)
+: myAngle (theAngl),
myDeflection (theDefle),
myWithShare (theWithShare),
- myInParallel (Standard_False),
+ myInParallel (isInParallel),
myNbLocat (0),
myRelative (theRelative),
myShapetrigu (theShapetrigu),
const Standard_Boolean theWithShare,
const Standard_Boolean theInshape,
const Standard_Boolean theRelative,
- const Standard_Boolean theShapetrigu):
- myAngle (theAngl),
+ const Standard_Boolean theShapetrigu,
+ const Standard_Boolean isInParallel)
+: myAngle (theAngl),
myDeflection (theDefle),
myWithShare (theWithShare),
- myInParallel (Standard_False),
+ myInParallel (isInParallel),
myNbLocat (0),
myRelative (theRelative),
myShapetrigu (theShapetrigu),
Standard_Integer nbVertices = myVemap.Extent();
const Standard_Real tolclass = Precision::PConfusion(); //0.03*Max(myumax-myumin, myvmax-myvmin);
- BRepMesh_ClassifierPtr classifier (
- new BRepMesh_Classifier(face, tolclass, myInternaledges, myVemap,
- myStructure, myumin, myumax, myvmin, myvmax) );
-
- myFacestate = classifier->State();
- if (myFacestate == BRepMesh_SelfIntersectingWire)
+ BRepMesh_ClassifierPtr classifier = new BRepMesh_Classifier;
{
- Standard_Integer nbmaill = 0;
- Standard_Real eps = Precision::Confusion();
- while (nbmaill < 5 && myFacestate != BRepMesh_ReMesh)
+ BRepMesh_WireChecker aDFaceChecker(face,
+ tolclass, myInternaledges, myVemap, myStructure,
+ myumin, myumax, myvmin, myvmax, myInParallel);
+ aDFaceChecker.ReCompute(classifier);
+
+ myFacestate = aDFaceChecker.Status();
+ if (myFacestate == BRepMesh_SelfIntersectingWire)
{
- nbmaill++;
-
- //clear the structure of links
- myStructure.Nullify();
- myStructure = new BRepMesh_DataStructureOfDelaun(anAlloc);
-
- myVemap.Clear();
- myLocation2d.Clear();
- myInternaledges.Clear();
-
- Standard_Integer j1;
- for(j1 = 1; j1 <= aShSeq.Length(); j1++)
+ Standard_Integer nbmaill = 0;
+ Standard_Real eps = Precision::Confusion();
+ while (nbmaill < 5 && myFacestate != BRepMesh_ReMesh)
{
- const TopoDS_Edge& edge = TopoDS::Edge(aShSeq.Value(j1));
- if (myEdges.IsBound(edge))
+ nbmaill++;
+
+ //clear the structure of links
+ myStructure.Nullify();
+ myStructure = new BRepMesh_DataStructureOfDelaun(anAlloc);
+
+ myVemap.Clear();
+ myLocation2d.Clear();
+ myInternaledges.Clear();
+
+ Standard_Integer j1;
+ for(j1 = 1; j1 <= aShSeq.Length(); j1++)
{
- myEdges.UnBind(edge);
- myInternaledges.UnBind(edge);
+ const TopoDS_Edge& edge = TopoDS::Edge(aShSeq.Value(j1));
+ if (myEdges.IsBound(edge))
+ {
+ myEdges.UnBind(edge);
+ myInternaledges.UnBind(edge);
+ }
+ }
+
+
+ for( j1 = 1; j1 <= aShSeq.Length(); j1++)
+ {
+ const TopoDS_Edge& edge = TopoDS::Edge(aShSeq.Value(j1));
+ defedge = myMapdefle(edge) / 3.;
+ defedge = Max(defedge, eps);
+ myMapdefle.Bind(edge, defedge);
+ const Handle(Geom2d_Curve)& C = aCSeq.Value(j1);
+ Add(edge, face, gFace, C, theAncestors, defedge, aFSeq.Value(j1), aLSeq.Value(j1));
}
- }
-
-
- for( j1 = 1; j1 <= aShSeq.Length(); j1++)
- {
- const TopoDS_Edge& edge = TopoDS::Edge(aShSeq.Value(j1));
- defedge = myMapdefle(edge) / 3.;
- defedge = Max(defedge, eps);
- myMapdefle.Bind(edge, defedge);
- const Handle(Geom2d_Curve)& C = aCSeq.Value(j1);
- Add(edge, face, gFace, C, theAncestors, defedge, aFSeq.Value(j1), aLSeq.Value(j1));
- }
-
- classifier.Nullify();
-
- classifier = new BRepMesh_Classifier(face, tolclass, myInternaledges, myVemap,
- myStructure, myumin, myumax, myvmin, myvmax);
- if (classifier->State() == BRepMesh_NoError)
- {
- myFacestate = BRepMesh_ReMesh;
+ aDFaceChecker.ReCompute(classifier);
+ if (aDFaceChecker.Status() == BRepMesh_NoError)
+ {
+ myFacestate = BRepMesh_ReMesh;
+ }
+ nbVertices = myVemap.Extent();
}
- nbVertices = myVemap.Extent();
}
}
#include <BRepMesh_DataMapIteratorOfDataMapOfShapePairOfPolygon.hxx>
#include <BRep_ListIteratorOfListOfPointRepresentation.hxx>
#include <BRepMesh_ClassifierPtr.hxx>
+#include <BRepMesh_Classifier.hxx>
#include <BRep_Builder.hxx>
#include <BRep_PointRepresentation.hxx>
#include <BRep_TVertex.hxx>
//function : BRepMesh_IncrementalMesh
//purpose :
//=======================================================================
-BRepMesh_IncrementalMesh::BRepMesh_IncrementalMesh (const TopoDS_Shape& theShape,
- const Standard_Real theDeflection,
+BRepMesh_IncrementalMesh::BRepMesh_IncrementalMesh (const TopoDS_Shape& theShape,
+ const Standard_Real theDeflection,
const Standard_Boolean theRelative,
- const Standard_Real theAngle,
+ const Standard_Real theAngle,
const Standard_Boolean theInParallel)
: myRelative (theRelative),
myInParallel (theInParallel)
}
//
myMesh = new BRepMesh_FastDiscret(myDeflection,
- myAngle,
- aBox,
- Standard_True,
- Standard_True,
- myRelative,
- Standard_True);
+ myAngle,
+ aBox,
+ Standard_True,
+ Standard_True,
+ myRelative,
+ Standard_True,
+ myInParallel);
//
Update(myShape);
}
TopoDS_Face F2 = TopoDS::Face(it.Value());
if (!MShape.Contains(F2)) {
MShape.Add(F2);
- T = BRep_Tool::Triangulation(F2, l);
+ T = BRep_Tool::Triangulation(F2, l);
if (!T.IsNull()) {
#ifdef DEB_MESH
cout <<"triangulation a refaire" <<endl;
--- /dev/null
+// Created on: 2014-06-03
+// Created by: Oleg AGASHIN
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <BRepMesh_WireChecker.hxx>
+
+#include <Precision.hxx>
+#include <TColStd_Array1OfInteger.hxx>
+#include <gp_Pnt2d.hxx>
+#include <BRepTools_WireExplorer.hxx>
+#include <TopAbs_Orientation.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Iterator.hxx>
+#include <Poly_PolygonOnTriangulation.hxx>
+#include <BRepMesh_PairOfPolygon.hxx>
+#include <BRepMesh_DataMapOfShapePairOfPolygon.hxx>
+#include <TColStd_SequenceOfInteger.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
+#include <BRepMesh_DataStructureOfDelaun.hxx>
+#include <BRepMesh_Classifier.hxx>
+#include <BRepMesh_WireInterferenceChecker.hxx>
+
+#ifdef HAVE_TBB
+ // paralleling using Intel TBB
+ #include <tbb/parallel_for.h>
+ #include <tbb/blocked_range.h>
+#endif
+
+//=======================================================================
+//function : Selector::Constructor
+//purpose :
+//=======================================================================
+BRepMesh_WireChecker::BndBox2dTreeSelector::BndBox2dTreeSelector(
+ const Standard_Integer theReservedSize)
+ : mySkippedIndex(-1),
+ myIndices(0, theReservedSize - 1),
+ myIndicesNb(0)
+{
+}
+
+//=======================================================================
+//function : Reject
+//purpose :
+//=======================================================================
+Standard_Boolean BRepMesh_WireChecker::BndBox2dTreeSelector::Reject(
+ const Bnd_Box2d& theBox2D) const
+{
+ return myBox2D.IsOut(theBox2D);
+}
+
+//=======================================================================
+//function : Accept
+//purpose :
+//=======================================================================
+Standard_Boolean BRepMesh_WireChecker::BndBox2dTreeSelector::Accept(
+ const Standard_Integer& theIndex)
+{
+ if (theIndex <= mySkippedIndex)
+ return Standard_False;
+
+ myIndices(myIndicesNb++) = theIndex;
+ return Standard_True;
+}
+
+//=======================================================================
+//function : Clear
+//purpose :
+//=======================================================================
+void BRepMesh_WireChecker::BndBox2dTreeSelector::Clear()
+{
+ mySkippedIndex = -1;
+ myIndicesNb = 0;
+}
+
+//=======================================================================
+//function : SetBox
+//purpose :
+//=======================================================================
+void BRepMesh_WireChecker::BndBox2dTreeSelector::SetBox(
+ const Bnd_Box2d& theBox2D)
+{
+ myBox2D = theBox2D;
+}
+
+//=======================================================================
+//function : Clear
+//purpose :
+//=======================================================================
+void BRepMesh_WireChecker::BndBox2dTreeSelector::SetSkippedIndex(
+ const Standard_Integer theIndex)
+{
+ mySkippedIndex = theIndex;
+}
+
+//=======================================================================
+//function : Indices
+//purpose :
+//=======================================================================
+const BRepMesh_WireChecker::ArrayOfInteger&
+ BRepMesh_WireChecker::BndBox2dTreeSelector::Indices() const
+{
+ return myIndices;
+}
+
+//=======================================================================
+//function : IndicesNb
+//purpose :
+//=======================================================================
+Standard_Integer BRepMesh_WireChecker::BndBox2dTreeSelector::IndicesNb() const
+{
+ return myIndicesNb;
+}
+
+//=======================================================================
+//function : Constructor
+//purpose :
+//=======================================================================
+BRepMesh_WireChecker::BRepMesh_WireChecker(
+ const TopoDS_Face& theFace,
+ const Standard_Real theTolUV,
+ const BRepMesh_DataMapOfShapePairOfPolygon& theEdges,
+ const TColStd_IndexedMapOfInteger& theVertexMap,
+ const Handle(BRepMesh_DataStructureOfDelaun)& theStructure,
+ const Standard_Real theUmin,
+ const Standard_Real theUmax,
+ const Standard_Real theVmin,
+ const Standard_Real theVmax,
+ const Standard_Boolean isInParallel)
+ : myTolUV(theTolUV),
+ myEdges(theEdges),
+ myVertexMap(theVertexMap),
+ myStructure(theStructure),
+ myUmin(theUmin),
+ myUmax(theUmax),
+ myVmin(theVmin),
+ myVmax(theVmax),
+ myStatus(BRepMesh_NoError),
+ myIsInParallel(isInParallel)
+{
+ TopoDS_Face aFace = theFace;
+ aFace.Orientation(TopAbs_FORWARD);
+
+ TopoDS_Iterator aFaceExplorer(aFace);
+ for (; aFaceExplorer.More(); aFaceExplorer.Next())
+ {
+ const TopoDS_Shape& aWire = aFaceExplorer.Value();
+ if (aWire.ShapeType() != TopAbs_WIRE)
+ continue;
+
+ myWiresEdges.push_back(ListOfEdges());
+ ListOfEdges& aEdges = myWiresEdges.back();
+
+ // Start traversing the wires
+ BRepTools_WireExplorer aWireExplorer(TopoDS::Wire(aWire), aFace);
+ for (; aWireExplorer.More(); aWireExplorer.Next())
+ {
+ const TopoDS_Edge& aEdge = aWireExplorer.Current();
+ TopAbs_Orientation aOrient = aEdge.Orientation();
+ if (aOrient != TopAbs_FORWARD && aOrient != TopAbs_REVERSED)
+ continue;
+
+ aEdges.Append(aEdge);
+ }
+
+ if (aEdges.IsEmpty())
+ myWiresEdges.pop_back();
+ }
+}
+
+//=======================================================================
+//function : ReCompute
+//purpose :
+//=======================================================================
+void BRepMesh_WireChecker::ReCompute(BRepMesh_ClassifierPtr& theClassifier)
+{
+ if (theClassifier.IsNull())
+ return;
+
+ theClassifier->Destroy();
+ myStatus = BRepMesh_NoError;
+
+ SeqOfDWires aDWires;
+ if (!collectDiscretizedWires(aDWires))
+ return;
+
+ const Standard_Integer aNbWires = aDWires.size();
+
+ std::vector<SegmentsTree> aWiresBiPoints(aNbWires);
+ fillSegmentsTree(aDWires, aWiresBiPoints);
+
+#ifdef HAVE_TBB
+ Standard_Mutex aWireMutex;
+ BRepMesh_WireInterferenceChecker aIntChecker(aWiresBiPoints,
+ &myStatus, &aWireMutex);
+
+ if (myIsInParallel && aNbWires > 1)
+ {
+ // check wires in parallel threads using TBB
+ tbb::parallel_for(tbb::blocked_range<Standard_Integer>(0, aNbWires),
+ aIntChecker);
+ }
+ else
+ {
+#else
+ BRepMesh_WireInterferenceChecker aIntChecker(aWiresBiPoints, &myStatus);
+#endif
+ for (Standard_Integer i = 0; i < aNbWires; ++i)
+ aIntChecker(i);
+#ifdef HAVE_TBB
+ }
+#endif
+
+ if (myStatus == BRepMesh_SelfIntersectingWire)
+ return;
+
+ // Find holes
+ SeqOfDWires::iterator aDWiresIt = aDWires.begin();
+ for (; aDWiresIt != aDWires.end(); ++aDWiresIt)
+ {
+ const SeqOfPnt2d& aDWire = *aDWiresIt;
+ theClassifier->RegisterWire(aDWire, myTolUV, myUmin, myUmax, myVmin, myVmax);
+ }
+}
+
+//=======================================================================
+//function : collectDiscretizedWires
+//purpose :
+//=======================================================================
+Standard_Boolean BRepMesh_WireChecker::collectDiscretizedWires(
+ SeqOfDWires& theDWires)
+{
+ // TODO: Collect disretized wires in parallel
+ SeqOfWireEdges::iterator aWireIt = myWiresEdges.begin();
+ for(; aWireIt != myWiresEdges.end(); ++aWireIt)
+ {
+ const ListOfEdges& aEdges = *aWireIt;
+ // For each wire we create a data map, linking vertices (only
+ // the ends of edges) with their positions in the sequence of
+ // all 2d points from this wire.
+ // When we meet some vertex for the second time - the piece
+ // of sequence is treated for a HOLE and quits the sequence.
+ // Actually, we must unbind the vertices belonging to the
+ // loop from the map, but since they can't appear twice on the
+ // valid wire, leave them for a little speed up.
+
+ SeqOfPnt2d aSeqPnt2d;
+ DataMapIntInt aNodeInSeq;
+ Standard_Integer aFirstIndex = 0, aLastIndex = 0;
+
+ // Start traversing the wire
+ ListOfEdges::Iterator aEdgeIt(aEdges);
+ for (; aEdgeIt.More(); aEdgeIt.Next())
+ {
+ const TopoDS_Edge& aEdge = aEdgeIt.Value();
+ TopAbs_Orientation aOrient = aEdge.Orientation();
+ if (!myEdges.IsBound(aEdge))
+ continue;
+
+ // Retrieve polygon
+ // Define the direction for adding points to aSeqPnt2d
+ Standard_Integer aStartId, aEndId, aIncrement;
+ const BRepMesh_PairOfPolygon& aPair = myEdges.Find(aEdge);
+ Handle(Poly_PolygonOnTriangulation) aNOD;
+ if (aOrient == TopAbs_FORWARD)
+ {
+ aNOD = aPair.First();
+ aStartId = 1;
+ aEndId = aNOD->NbNodes();
+ aIncrement = 1;
+ }
+ else
+ {
+ aNOD = aPair.Last();
+ aStartId = aNOD->NbNodes();
+ aEndId = 1;
+ aIncrement = -1;
+ }
+
+ const TColStd_Array1OfInteger& aIndices = aNOD->Nodes();
+ const Standard_Integer aFirstVertexId = myVertexMap.FindKey(aIndices(aStartId));
+ const Standard_Integer aLastVertexId = myVertexMap.FindKey(aIndices(aEndId) );
+
+ if (aFirstVertexId == aLastVertexId && (aEndId - aStartId) == aIncrement)
+ {
+ // case of continuous set of degenerated edges
+ aLastIndex = aLastVertexId;
+ continue;
+ }
+
+ if (aFirstIndex != 0)
+ {
+ if (aFirstVertexId != aLastIndex)
+ {
+ // there's a gap between edges
+ myStatus = BRepMesh_OpenWire;
+ return Standard_False;
+ }
+ }
+ else
+ aFirstIndex = aFirstVertexId;
+
+ aLastIndex = aLastVertexId;
+
+ // Record first vertex (to detect loops)
+ aNodeInSeq.Bind(aFirstVertexId, (aSeqPnt2d.Length() + 1));
+
+ // Add vertices in sequence
+ for (Standard_Integer i = aStartId; i != aEndId; i += aIncrement)
+ {
+ Standard_Integer aIndex = ((i == aStartId) ?
+ aFirstVertexId :
+ myVertexMap.FindKey(aIndices(i)));
+
+ aSeqPnt2d.Append(gp_Pnt2d(myStructure->GetNode(aIndex).Coord()));
+ }
+
+ // Now, is there a loop?
+ if (aNodeInSeq.IsBound(aLastVertexId))
+ {
+ // Yes, treat it separately as a hole
+ // Divide points into main wire and a loop
+ const Standard_Integer aIdxWireStart = aNodeInSeq(aLastVertexId);
+ if(aIdxWireStart < aSeqPnt2d.Length())
+ {
+ theDWires.push_back(SeqOfPnt2d());
+ SeqOfPnt2d& aWire = theDWires.back();
+ aSeqPnt2d.Split(aIdxWireStart, aWire);
+ }
+ }
+ }
+
+ if (aFirstIndex == 0)
+ continue;
+
+ // Isn't wire open?
+ if (aFirstIndex != aLastIndex || aSeqPnt2d.Length() > 1)
+ {
+ myStatus = BRepMesh_OpenWire;
+ return Standard_False;
+ }
+ }
+
+ return Standard_True;
+}
+
+//=======================================================================
+//function : fillSegmentsTree
+//purpose :
+//=======================================================================
+void BRepMesh_WireChecker::fillSegmentsTree(
+ const SeqOfDWires& theDWires,
+ std::vector<SegmentsTree>& theWiresSegmentsTree)
+{
+ const Standard_Integer aNbWires = theDWires.size();
+ for (Standard_Integer aWireIt = 0; aWireIt < aNbWires; ++aWireIt)
+ {
+ const SeqOfPnt2d& aWire = theDWires[aWireIt];
+ const Standard_Integer aWireLen = aWire.Size();
+
+ HArrayOfSegments aWireSegments = new ArrayOfSegments(aWireLen);
+ HBndBox2dTree aBndBoxTree = new BndBox2dTree;
+ BndBox2dTreeFiller aBndBoxTreeFiller(*aBndBoxTree);
+
+ Standard_Real x1 = 0., y1 = 0., aXstart = 0., aYstart = 0.;
+ for (Standard_Integer aPntIt = 0; aPntIt <= aWireLen; ++aPntIt)
+ {
+ Standard_Real x2, y2;
+ // Obtain last point of the segment
+ if (aPntIt == aWireLen)
+ {
+ x2 = aXstart;
+ y2 = aYstart;
+ }
+ else
+ {
+ const gp_Pnt2d& aPnt = aWire(aPntIt + 1);
+ x2 = aPnt.X();
+ y2 = aPnt.Y();
+ }
+
+ // Build segment (bi-point)
+ if (aPntIt == 0)
+ {
+ aXstart = x2;
+ aYstart = y2;
+ }
+ else
+ {
+ gp_Pnt2d aStartPnt(x1, y1);
+ gp_Pnt2d aEndPnt(x2, y2);
+
+ const Standard_Integer aPointId = aPntIt - 1;
+ Segment& aSegment = aWireSegments->at(aPointId);
+ aSegment.StartPnt = aStartPnt.XY();
+ aSegment.EndPnt = aEndPnt.XY();
+
+ Bnd_Box2d aBox;
+ aBox.Add(aStartPnt);
+ aBox.Add( aEndPnt);
+ aBndBoxTreeFiller.Add(aPointId, aBox);
+ }
+ x1 = x2;
+ y1 = y2;
+ }
+ aBndBoxTreeFiller.Fill();
+
+ SegmentsTree& aSegmentsTree = theWiresSegmentsTree[aWireIt];
+ aSegmentsTree.first = aWireSegments;
+ aSegmentsTree.second = aBndBoxTree;
+ }
+}
--- /dev/null
+// Created on: 2014-06-03
+// Created by: Oleg AGASHIN
+// Copyright (c) 1997-1999 Matra Datavision
+// Copyright (c) 1999-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _BRepMesh_WireChecker_HeaderFile
+#define _BRepMesh_WireChecker_HeaderFile
+
+#include <Standard.hxx>
+#include <TopoDS_Face.hxx>
+#include <BRepMesh_Status.hxx>
+#include <Handle_BRepMesh_DataStructureOfDelaun.hxx>
+#include <BRepMesh_ClassifierPtr.hxx>
+#include <NCollection_Sequence.hxx>
+#include <NCollection_List.hxx>
+#include <NCollection_DataMap.hxx>
+#include <NCollection_EBTree.hxx>
+#include <NCollection_UBTreeFiller.hxx>
+#include <NCollection_Handle.hxx>
+#include <NCollection_Array1.hxx>
+#include <TopoDS_Edge.hxx>
+#include <Bnd_Box2d.hxx>
+#include <gp_Pnt2d.hxx>
+#include <gp_XY.hxx>
+
+#include <vector>
+
+class BRepMesh_DataMapOfShapePairOfPolygon;
+class TColStd_IndexedMapOfInteger;
+class BRepMesh_DataStructureOfDelaun;
+
+//! Auxilary class intended to check correctness of discretized face.
+//! In particular, checks boundaries of discretized face for self
+//! intersections and gaps.
+class BRepMesh_WireChecker
+{
+public:
+
+ //! Structure keeping parameters of segment.
+ struct Segment
+ {
+ gp_XY StartPnt;
+ gp_XY EndPnt;
+ };
+
+ typedef NCollection_EBTree<Standard_Integer, Bnd_Box2d> BndBox2dTree;
+ typedef NCollection_UBTreeFiller<Standard_Integer, Bnd_Box2d> BndBox2dTreeFiller;
+ typedef NCollection_Array1<Standard_Integer> ArrayOfInteger;
+ typedef std::vector<Segment> ArrayOfSegments;
+ typedef NCollection_Handle<ArrayOfSegments> HArrayOfSegments;
+ typedef NCollection_Handle<BndBox2dTree> HBndBox2dTree;
+ typedef std::pair<HArrayOfSegments, HBndBox2dTree> SegmentsTree;
+
+ //! Selector.
+ //! Used to identify segments with overlapped bounding boxes.
+ //! Note that instance of selector can be used only once due to
+ //! unextentable array of indices.
+ class BndBox2dTreeSelector : public BndBox2dTree::Selector
+ {
+ public:
+ Standard_EXPORT BndBox2dTreeSelector(const Standard_Integer theReservedSize);
+ Standard_EXPORT virtual Standard_Boolean Reject(const Bnd_Box2d& theBox2D) const;
+ Standard_EXPORT virtual Standard_Boolean Accept(const Standard_Integer& theIndex);
+
+ Standard_EXPORT void Clear();
+ Standard_EXPORT void SetBox(const Bnd_Box2d& theBox2D);
+ Standard_EXPORT void SetSkippedIndex(const Standard_Integer theIndex);
+ Standard_EXPORT const ArrayOfInteger& Indices() const;
+ Standard_EXPORT Standard_Integer IndicesNb() const;
+
+ protected:
+ Bnd_Box2d myBox2D;
+ Standard_Integer mySkippedIndex;
+ ArrayOfInteger myIndices;
+ Standard_Integer myIndicesNb;
+ };
+
+private:
+
+ typedef NCollection_List<TopoDS_Edge> ListOfEdges;
+ typedef std::vector<ListOfEdges> SeqOfWireEdges;
+ typedef NCollection_Sequence<gp_Pnt2d> SeqOfPnt2d;
+ typedef std::vector<SeqOfPnt2d> SeqOfDWires;
+ typedef NCollection_DataMap<Standard_Integer, Standard_Integer> DataMapIntInt;
+ typedef std::pair<Standard_Integer, gp_XY> PairIntPnt;
+
+public:
+
+ //! Constructor.
+ //! \param theFace Face to be checked.
+ //! \param theTolUV Tolerance to be used for calculations in parametric space.
+ //! \param theEdges Map of edges with associated polygon on triangulation.
+ //! \param theVertexMap Map of face vertices.
+ //! \param theStructure Discretized representation of face in parametric space.
+ //! \param theUmin Lower U boundary of the face in parametric space.
+ //! \param theUmax Upper U boundary of the face in parametric space.
+ //! \param theVmin Lower V boundary of the face in parametric space.
+ //! \param theVmax Upper V boundary of the face in parametric space.
+ Standard_EXPORT BRepMesh_WireChecker(
+ const TopoDS_Face& theFace,
+ const Standard_Real theTolUV,
+ const BRepMesh_DataMapOfShapePairOfPolygon& theEdges,
+ const TColStd_IndexedMapOfInteger& theVertexMap,
+ const Handle(BRepMesh_DataStructureOfDelaun)& theStructure,
+ const Standard_Real theUmin,
+ const Standard_Real theUmax,
+ const Standard_Real theVmin,
+ const Standard_Real theVmax,
+ const Standard_Boolean isInParallel);
+
+ //! Recompute data using parameters passed in constructor.
+ //! \param[out] theClassifier Classifier to be updated using calculated data.
+ Standard_EXPORT void ReCompute(BRepMesh_ClassifierPtr& theClassifier);
+
+ //! Returns status of the check.
+ inline BRepMesh_Status Status() const
+ {
+ return myStatus;
+ }
+
+private:
+
+ //! Collects disñrete wires.
+ //! \param[out] theDWires sequence of discretized wires to be filled.
+ //! \return TRUE on success, FALSE in case of open wire.
+ Standard_Boolean collectDiscretizedWires(SeqOfDWires& theDWires);
+
+ //! Fills array of BiPoints for corresponding wire.
+ //! \param theDWires Sequence of wires to be processed.
+ //! \param theWiresSegmentsTree Array of segments with corresponding
+ //! bounding boxes trees to be filled.
+ void fillSegmentsTree(
+ const SeqOfDWires& theDWires,
+ std::vector<SegmentsTree>& theWiresSegmentsTree);
+
+ //! Assignment operator.
+ void operator =(BRepMesh_WireChecker& /*theOther*/)
+ {
+ }
+
+private:
+
+ const Standard_Real myTolUV;
+ const BRepMesh_DataMapOfShapePairOfPolygon& myEdges;
+ const TColStd_IndexedMapOfInteger& myVertexMap;
+ const Handle(BRepMesh_DataStructureOfDelaun)& myStructure;
+ const Standard_Real myUmin;
+ const Standard_Real myUmax;
+ const Standard_Real myVmin;
+ const Standard_Real myVmax;
+ BRepMesh_Status myStatus;
+ SeqOfWireEdges myWiresEdges;
+ Standard_Boolean myIsInParallel;
+};
+
+#endif
--- /dev/null
+// Created on: 2014-06-18
+// Created by: Oleg AGASHIN
+// Copyright (c) 2011-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <BRepMesh_WireInterferenceChecker.hxx>
+#include <Precision.hxx>
+
+// TODO: remove this variable after implementation of LoopChecker2d.
+static const Standard_Real MIN_LOOP_S = 2 * M_PI * 2.E-5;
+
+#ifdef HAVE_TBB
+//=======================================================================
+//function : Constructor
+//purpose :
+//=======================================================================
+BRepMesh_WireInterferenceChecker::BRepMesh_WireInterferenceChecker(
+ const std::vector<BRepMesh_WireChecker::SegmentsTree>& theWires,
+ BRepMesh_Status* theStatus,
+ Standard_Mutex* theMutex)
+ : myWires(&theWires.front()),
+ myWiresNb(theWires.size()),
+ myStatus(theStatus),
+ myMutex(theMutex)
+{
+}
+
+//=======================================================================
+//function : Checker's body
+//purpose :
+//=======================================================================
+void BRepMesh_WireInterferenceChecker::operator ()(
+ const tbb::blocked_range<Standard_Integer>& theWireRange) const
+{
+ for (Standard_Integer i = theWireRange.begin(); i != theWireRange.end(); ++i)
+ this->operator ()(i);
+}
+#else
+//=======================================================================
+//function : Constructor
+//purpose :
+//=======================================================================
+BRepMesh_WireInterferenceChecker::BRepMesh_WireInterferenceChecker(
+ const std::vector<BRepMesh_WireChecker::SegmentsTree>& theWires,
+ BRepMesh_Status* theStatus)
+ : myWires(&theWires.front()),
+ myWiresNb(theWires.size()),
+ myStatus(theStatus)
+{
+}
+#endif
+
+//=======================================================================
+//function : Checker's body
+//purpose :
+//=======================================================================
+void BRepMesh_WireInterferenceChecker::operator ()(
+ const Standard_Integer& theWireId) const
+{
+ if (*myStatus == BRepMesh_SelfIntersectingWire)
+ return;
+
+ const BRepMesh_WireChecker::SegmentsTree& aWireSegTree1 = myWires[theWireId];
+ const BRepMesh_WireChecker::Segment* aWireSegments1 = &aWireSegTree1.first->front();
+ const BRepMesh_WireChecker::HBndBox2dTree& aWireBoxTree1 = aWireSegTree1.second;
+ const Standard_Integer aWireLen1 = aWireSegTree1.first->size();
+
+ for (Standard_Integer aWireIt = theWireId; aWireIt < myWiresNb; ++aWireIt)
+ {
+#ifdef HAVE_TBB
+ // Break execution in case if flag was raised by another thread
+ if (*myStatus == BRepMesh_SelfIntersectingWire)
+ return;
+#endif
+
+ const Standard_Boolean isSelfIntCheck = (aWireIt == theWireId);
+ const BRepMesh_WireChecker::SegmentsTree& aWireSegTree2 =
+ isSelfIntCheck ? aWireSegTree1 : myWires[aWireIt];
+
+ const BRepMesh_WireChecker::Segment* aWireSegments2 = &aWireSegTree2.first->front();
+ const BRepMesh_WireChecker::HBndBox2dTree& aWireBoxTree2 = aWireSegTree2.second;
+
+ BRepMesh_WireChecker::BndBox2dTreeSelector aSelector(aWireSegTree2.first->size());
+ for (Standard_Integer aSegmentId1 = 0; aSegmentId1 < aWireLen1; ++aSegmentId1)
+ {
+#ifdef HAVE_TBB
+ // Break execution in case if flag was raised by another thread
+ if (*myStatus == BRepMesh_SelfIntersectingWire)
+ return;
+#endif
+
+ aSelector.Clear();
+ aSelector.SetBox(aWireBoxTree1->FindNode(aSegmentId1).Bnd());
+ if (isSelfIntCheck)
+ aSelector.SetSkippedIndex(aSegmentId1);
+
+ if (aWireBoxTree2->Select(aSelector) == 0)
+ continue;
+
+ const BRepMesh_WireChecker::Segment& aSegment1 = aWireSegments1[aSegmentId1];
+ const BRepMesh_WireChecker::ArrayOfInteger& aSelected = aSelector.Indices();
+ const Standard_Integer aSelectedNb = aSelector.IndicesNb();
+ for (Standard_Integer aBndIt = 0; aBndIt < aSelectedNb; ++aBndIt)
+ {
+#ifdef HAVE_TBB
+ // Break execution in case if flag was raised by another thread
+ if (*myStatus == BRepMesh_SelfIntersectingWire)
+ return;
+#endif
+
+ const Standard_Integer aSegmentId2 = aSelected(aBndIt);
+ const BRepMesh_WireChecker::Segment& aSegment2 = aWireSegments2[aSegmentId2];
+
+ gp_Pnt2d aIntPnt;
+ BRepMesh_WireInterferenceChecker::IntFlag aIntStatus = Intersect(
+ aSegment1.StartPnt, aSegment1.EndPnt,
+ aSegment2.StartPnt, aSegment2.EndPnt,
+ Standard_False, Standard_False,
+ aIntPnt);
+
+ if (aIntStatus == Cross)
+ {
+ // TODO: remove this block after implementation of LoopChecker2d.
+ if (isSelfIntCheck)
+ {
+ gp_XY aPrevVec;
+ Standard_Real aSumS = 0.;
+ const gp_XY& aRefPnt = aIntPnt.Coord();
+ for (Standard_Integer i = aSegmentId1; i < aSegmentId2; ++i)
+ {
+ const BRepMesh_WireChecker::Segment& aSeg = aWireSegments1[i];
+ gp_XY aCurVec = aSeg.EndPnt - aRefPnt;
+
+ if (aCurVec.SquareModulus() < gp::Resolution())
+ continue;
+
+ if (aPrevVec.SquareModulus() > gp::Resolution())
+ aSumS += aPrevVec ^ aCurVec;
+
+ aPrevVec = aCurVec;
+ }
+
+ if (Abs(aSumS / 2.) < MIN_LOOP_S)
+ continue;
+ }
+
+#ifdef HAVE_TBB
+ Standard_Mutex::Sentry aSentry(myMutex);
+#endif
+ *myStatus = BRepMesh_SelfIntersectingWire;
+ return;
+ }
+ }
+ }
+ }
+}
+
+//=============================================================================
+//function : Intersect
+//purpose :
+//=============================================================================
+BRepMesh_WireInterferenceChecker::IntFlag
+ BRepMesh_WireInterferenceChecker::Intersect(
+ const gp_XY& theStartPnt1,
+ const gp_XY& theEndPnt1,
+ const gp_XY& theStartPnt2,
+ const gp_XY& theEndPnt2,
+ const Standard_Boolean isConsiderEndPointTouch,
+ const Standard_Boolean isConsiderPointOnSegment,
+ gp_Pnt2d& theIntPnt)
+{
+ Standard_Integer aPointHash[] = {
+ classifyPoint(theStartPnt1, theEndPnt1, theStartPnt2),
+ classifyPoint(theStartPnt1, theEndPnt1, theEndPnt2 ),
+ classifyPoint(theStartPnt2, theEndPnt2, theStartPnt1),
+ classifyPoint(theStartPnt2, theEndPnt2, theEndPnt1 )
+ };
+
+ // Consider case when edges have shared vertex
+ if ( isConsiderEndPointTouch )
+ {
+ if ( aPointHash[0] < 0 || aPointHash[1] < 0 )
+ return BRepMesh_WireInterferenceChecker::EndPointTouch;
+ }
+
+ Standard_Integer aPosHash =
+ aPointHash[0] + aPointHash[1] + aPointHash[2] + aPointHash[3];
+
+ /*=========================================*/
+ /* 1) hash code == 1:
+
+ 0+
+ /
+ 0 1/ 0
+ +======+==========+
+
+ 2) hash code == 2:
+
+ 0 1 1 0
+ a) +----+========+---+
+
+ 0 1 1 0
+ b) +-------+===+=====+
+
+ */
+ /*=========================================*/
+ if ( aPosHash == 1 )
+ {
+ if (isConsiderPointOnSegment)
+ {
+ if (aPointHash[0] == 1)
+ theIntPnt = theStartPnt1;
+ else if (aPointHash[1] == 1)
+ theIntPnt = theEndPnt1;
+ else if (aPointHash[2] == 1)
+ theIntPnt = theStartPnt2;
+ else
+ theIntPnt = theEndPnt2;
+
+ return BRepMesh_WireInterferenceChecker::PointOnSegment;
+ }
+
+ return BRepMesh_WireInterferenceChecker::NoIntersection;
+ }
+ else if ( aPosHash == 2 )
+ return BRepMesh_WireInterferenceChecker::Glued;
+
+ gp_XY aVec1 = theEndPnt1 - theStartPnt1;
+ gp_XY aVec2 = theEndPnt2 - theStartPnt2;
+ gp_XY aVecStartPoints = theStartPnt2 - theStartPnt1;
+
+ Standard_Real aCrossD1D2 = aVec1 ^ aVec2;
+ Standard_Real aCrossD1D3 = aVecStartPoints ^ aVec2;
+
+ const Standard_Real aPrec = Precision::PConfusion();
+ // Are edgegs codirectional
+ if ( Abs( aCrossD1D2 ) < aPrec )
+ {
+ // Just a parallel case?
+ if( Abs( aCrossD1D3 ) < aPrec )
+ {
+ /*=========================================*/
+ /* Here the following cases are possible:
+ 1) hash code == -4:
+
+ -1 -1
+ +=================+
+ -1 -1
+
+ 2) hash code == -2:
+
+ 0 -1 0
+ +--------+========+
+ -1
+
+ 3) hash code == -1:
+
+ 0 1 -1
+ +--------+========+
+ -1
+
+ 4) hash code == 0:
+
+ 0 0 0 0
+ +------+ +=======+
+ 0 0 0 0
+ */
+ /*=========================================*/
+
+ if ( aPosHash < -2 )
+ return BRepMesh_WireInterferenceChecker::Same;
+ else if ( aPosHash == -1 )
+ return BRepMesh_WireInterferenceChecker::Glued;
+
+ return BRepMesh_WireInterferenceChecker::NoIntersection;
+ }
+ else
+ return BRepMesh_WireInterferenceChecker::NoIntersection;
+ }
+
+ Standard_Real aPar = aCrossD1D3 / aCrossD1D2;
+ const Standard_Real aEndPrec = 1 - aPrec;
+
+ // Intersection is out of first segment range
+ if( aPar < aPrec || aPar > aEndPrec )
+ return BRepMesh_WireInterferenceChecker::NoIntersection;
+
+ Standard_Real aCrossD2D3 = aVecStartPoints.Reversed() ^ aVec1;
+ aPar = aCrossD2D3 / -aCrossD1D2;
+
+ // Intersection is out of second segment range
+ if( aPar < aPrec || aPar > aEndPrec )
+ return BRepMesh_WireInterferenceChecker::NoIntersection;
+
+ theIntPnt = theStartPnt2 + aPar * aVec2;
+ return BRepMesh_WireInterferenceChecker::Cross;
+}
+
+//=============================================================================
+//function : classifyPoint
+//purpose :
+//=============================================================================
+Standard_Integer BRepMesh_WireInterferenceChecker::classifyPoint(
+ const gp_XY& thePoint1,
+ const gp_XY& thePoint2,
+ const gp_XY& thePointToCheck)
+{
+ gp_XY aP1 = thePoint2 - thePoint1;
+ gp_XY aP2 = thePointToCheck - thePoint1;
+
+ const Standard_Real aPrec = Precision::PConfusion();
+ const Standard_Real aSqPrec = aPrec * aPrec;
+ Standard_Real aDist = Abs(aP1 ^ aP2);
+ if (aDist > aPrec)
+ {
+ aDist = (aDist * aDist) / aP1.SquareModulus();
+ if (aDist > aSqPrec)
+ return 0; //out
+ }
+
+ gp_XY aMult = aP1.Multiplied(aP2);
+ if ( aMult.X() < 0.0 || aMult.Y() < 0.0 )
+ return 0; //out
+
+ if (aP1.SquareModulus() < aP2.SquareModulus())
+ return 0; //out
+
+ if (thePointToCheck.IsEqual(thePoint1, aPrec) ||
+ thePointToCheck.IsEqual(thePoint2, aPrec))
+ {
+ return -1; //coinsides with an end point
+ }
+
+ return 1;
+}
--- /dev/null
+// Created on: 2014-06-18
+// Created by: Oleg AGASHIN
+// Copyright (c) 2011-2014 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _BRepMesh_WireInterferenceChecker_HeaderFile
+#define _BRepMesh_WireInterferenceChecker_HeaderFile
+
+#include <Standard.hxx>
+#include <Standard_Mutex.hxx>
+#include <BRepMesh_WireChecker.hxx>
+#include <BRepMesh_Status.hxx>
+
+#ifdef HAVE_TBB
+ // paralleling using Intel TBB
+ #include <tbb/blocked_range.h>
+#endif
+
+//! Auxilary class implementing functionality for
+//! checking interference between two discretized wires.
+class BRepMesh_WireInterferenceChecker
+{
+public:
+
+ //! Enumerates states of segments intersection check.
+ enum IntFlag
+ {
+ NoIntersection,
+ Cross,
+ EndPointTouch,
+ PointOnSegment,
+ Glued,
+ Same
+ };
+
+#ifdef HAVE_TBB
+ //! Constructor
+ //! \param theWires wires that should be checked.
+ //! \param theStatus shared flag to set status of the check.
+ //! \param theMutex shared mutex for parallel processing.
+ BRepMesh_WireInterferenceChecker(
+ const std::vector<BRepMesh_WireChecker::SegmentsTree>& theWires,
+ BRepMesh_Status* theStatus,
+ Standard_Mutex* theMutex);
+
+ //! Checker's body.
+ //! \param theWireRange range of wires to be checked.
+ void operator ()(const tbb::blocked_range<Standard_Integer>& theWireRange) const;
+#else
+ //! Constructor
+ //! \param theWires wires that should be checked.
+ //! \param theStatus shared flag to set status of the check.
+ BRepMesh_WireInterferenceChecker(
+ const std::vector<BRepMesh_WireChecker::SegmentsTree>& theWires,
+ BRepMesh_Status* theStatus);
+#endif
+
+ //! Checker's body.
+ //! \param theWireId Id of discretized wire to be checked.
+ void operator ()(const Standard_Integer& theWireId) const;
+
+ //! Checks intersection between the two segments.
+ //! \param theStartPnt1 start point of first segment.
+ //! \param theEndPnt1 end point of first segment.
+ //! \param theStartPnt2 start point of second segment.
+ //! \param theEndPnt2 end point of second segment.
+ //! \param isConsiderEndPointTouch if TRUE EndPointTouch status will be
+ //! returned in case if segments are touching by end points, if FALSE
+ //! returns NoIntersection flag.
+ //! \param isConsiderPointOnSegment if TRUE PointOnSegment status will be
+ //! returned in case if end point of one segment lies onto another one,
+ //! if FALSE returns NoIntersection flag.
+ //! \param[out] theIntPnt point of intersection.
+ //! \return status of intersection check.
+ static IntFlag Intersect(const gp_XY& theStartPnt1,
+ const gp_XY& theEndPnt1,
+ const gp_XY& theStartPnt2,
+ const gp_XY& theEndPnt2,
+ const Standard_Boolean isConsiderEndPointTouch,
+ const Standard_Boolean isConsiderPointOnSegment,
+ gp_Pnt2d& theIntPnt);
+
+private:
+
+ //! Classifies the point in case of coincidence of two vectors.
+ //! \param thePoint1 the start point of a segment (base point).
+ //! \param thePoint2 the end point of a segment.
+ //! \param thePointToCheck the point to classify.
+ //! \return zero value if point is out of segment and non zero value
+ //! if point is between the first and the second point of segment.
+ static Standard_Integer classifyPoint (const gp_XY& thePoint1,
+ const gp_XY& thePoint2,
+ const gp_XY& thePointToCheck);
+private:
+ const BRepMesh_WireChecker::SegmentsTree* myWires;
+ Standard_Integer myWiresNb;
+ BRepMesh_Status* myStatus;
+
+#ifdef HAVE_TBB
+ Standard_Mutex* myMutex;
+#endif
+};
+
+#endif
BRepMesh_PluginMacro.hxx
BRepMesh_Triangle.hxx
BRepMesh_Triangle.cxx
+BRepMesh_Classifier.hxx
+BRepMesh_Classifier.cxx
BRepMesh_ClassifierPtr.hxx
+BRepMesh_WireInterferenceChecker.hxx
+BRepMesh_WireInterferenceChecker.cxx
+BRepMesh_WireChecker.hxx
+BRepMesh_WireChecker.cxx
BRepMesh_CellFilter.hxx
BRepMesh_Delaun.hxx
BRepMesh_Delaun.cxx
UBTree::Add (theObj, theBnd);
// Update the map
- TreeNode& aNewNode = ChangeLastNode();
+ TreeNode& aNewNode = this->ChangeLastNode();
myObjNodeMap.Bind (theObj, &aNewNode);
// If the new node is not the root (has a parent) check the neighbour node
if (!aNewNode.IsRoot()) {
--- /dev/null
+puts "=========="
+puts "OCC24968"
+puts "=========="
+puts ""
+#####################################
+# Impove BRepMesh_Classifier to cope with intersection of huge number of wires
+#####################################
+
+restore [locate_data_file bug24968_Shape_1.brep] result
+
+tclean result
+dchrono h reset
+dchrono h start
+incmesh result 0.1 0
+dchrono h stop
+
+set info [dchrono h show]
+regexp {CPU user time: ([-0-9.+eE]+) seconds} ${info} full cpu_time
+
+if { [regexp {Debug mode} [dversion]] } {
+ if { [regexp {Windows} [dversion]] } {
+ set max_time 100
+ } else {
+ set max_time 250
+ }
+} else {
+ if { [regexp {Windows} [dversion]] } {
+ set max_time 100
+ } else {
+ set max_time 250
+ }
+}
+
+if { ${cpu_time} > ${max_time} } {
+ puts "Error : meshing is slow"
+} else {
+ puts "OK: meshing is quite fast"
+}
+
+vinit
+vdisplay result
+vfit
+vsetdispmode 1
+
+set only_screen 1
--- /dev/null
+puts "=========="
+puts "OCC24968"
+puts "=========="
+puts ""
+#####################################
+# Impove BRepMesh_Classifier to cope with intersection of huge number of wires
+#####################################
+
+restore [locate_data_file bug24968_Shape_1.brep] result
+
+tclean result
+dchrono h reset
+dchrono h start
+incmesh result 0.1 1
+dchrono h stop
+
+set info [dchrono h show]
+regexp {CPU user time: ([-0-9.+eE]+) seconds} ${info} full cpu_time
+
+if { [regexp {Debug mode} [dversion]] } {
+ if { [regexp {Windows} [dversion]] } {
+ set max_time 100
+ } else {
+ set max_time 250
+ }
+} else {
+ if { [regexp {Windows} [dversion]] } {
+ set max_time 100
+ } else {
+ set max_time 250
+ }
+}
+
+if { ${cpu_time} > ${max_time} } {
+ puts "Error : meshing is slow"
+} else {
+ puts "OK: meshing is quite fast"
+}
+
+vinit
+vdisplay result
+vfit
+vsetdispmode 1
+
+set only_screen 1
+++ /dev/null
-DBRep_DrawableShape
-
-CASCADE Topology V1, (c) Matra-Datavision
-Locations 0
-Curve2ds 120
-7 0 0 4 5 2 1.81577498991914 -0.23794112483270391 1.8118534212982407 -0.23816569484964639 1.8079216001928708 -0.23838612248773772 1.8039797879920916 -0.23860233090074806 1.8000282600745126 -0.23881424610428864
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.8000282600687112 -0.23881424610925572 1.7960767321525317 -0.23902616131285664 1.7921154884808783 -0.23923378334010198 1.7881448044420656 -0.23943703820702089 1.7841649689498851 -0.23963585518914268
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7841649689429651 -0.23963585519403721 1.780185133452181 -0.23983467217628002 1.7761961464618938 -0.24002905130635538 1.772198296895579 -0.24021892186063198 1.7681918866485169 -0.24040421676683632
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7681918866404869 -0.24040421677160909 1.7641854763948035 -0.24058951167799669 1.7601705054148389 -0.24077023096813133 1.7561472756054308 -0.2409463075710101 1.7521161012006774 -0.24111767844911861
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7521161011915596 -0.24111767845371976 1.7480849267881486 -0.24128904933207437 1.7440458077286061 -0.24145571451633255 1.7399990582563363 -0.24161761097068596 1.7359450042143509 -0.241774680061209
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7359450042041802 -0.24177468006558855 1.7318909501634829 -0.24193174915641999 1.7278295914852684 -0.24208399091261776 1.7237612540214808 -0.24223134670239493 1.7196862744097368 -0.24237376264650845
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 1.719686274398563 -0.242373762650617 1.7156112947880382 -0.2425161785950995 1.7115296729550631 -0.24265365472130923 1.7074417455457069 -0.24278613715256242 1.7033478590974016 -0.24291357709370032
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7033478590852866 -0.24291357709749056 1.6992539726381148 -0.2430410170390557 1.6951541270712269 -0.24316341451577381 1.6910486689299178 -0.24328072073544854 1.6869379536811711 -0.24339289229090119
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6869379536681901 -0.24339289229432795 1.6828272384204765 -0.24350506385026205 1.6787112659787879 -0.2436121007648199 1.6745903918172682 -0.24371395963416065 1.6704649792927553 -0.24381060271386032
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6704649792789965 -0.24381060271688201 1.6663395667553975 -0.24390724579711259 1.6622096157770814 -0.24399867310784651 1.6580754897072276 -0.24408484690834098 1.6539375586904002 -0.24416573535923247
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6539375586759619 -0.2441657353618116 1.6497996276599192 -0.24424662381327827 1.6456578916006481 -0.24432222693233607 1.6415127206481526 -0.24439251288360941 1.6373644905780964 -0.24445745593963256
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.637364490563088 -0.24445745594173676 1.6332162604936735 -0.24452239899837239 1.6290649712066447 -0.24458199917378598 1.6249109984821148 -0.24463623074475932 1.6207547225244721 -0.24468507426448502
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 1.6207547225090106 -0.24468507426608746 1.6165984465518586 -0.24473391778645551 1.6124398672585123 -0.24477737326625917 1.6082793648367626 -0.24481542126314509 1.6041173226809726 -0.24484804873949195
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6041173226651826 -0.24484804874057189 1.5999552805097248 -0.24488067621758253 1.5957916985149641 -0.24490788318125464 1.5916269600775679 -0.24492965659856963 1.5874614505167985 -0.24494598992772743
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5874614505008091 -0.24494598992827096 1.5832959409402068 -0.24496232325810585 1.5791296601496394 -0.24497321650340687 1.57496299344952 -0.24497866312706879 1.5707963268029244 -0.24497866312672784
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5707963267868685 -0.24497866312672781 1.5666296601402723 -0.24497866312706865 1.562462993440155 -0.24497321650340687 1.5582967126495861 -0.24496232325810591 1.554131203088984 -0.24494598992827096
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5541312030729943 -0.24494598992772743 1.549965693512225 -0.24492965659856955 1.5458009550748295 -0.24490788318125456 1.5416373730800674 -0.24488067621758275 1.5374753309246103 -0.24484804874057189
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5374753309088207 -0.24484804873949192 1.5333132887530312 -0.24481542126314496 1.5291527863312806 -0.24477737326625934 1.5249942070379354 -0.24473391778645537 1.5208379310807827 -0.24468507426608743
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5208379310653213 -0.24468507426448505 1.5166816551076774 -0.24463623074475904 1.5125276823831499 -0.24458199917378645 1.5083763930961192 -0.24452239899837225 1.5042281630267054 -0.24445745594173682
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5042281630116969 -0.24445745593963261 1.5000799329416414 -0.24439251288360936 1.4959347619891448 -0.24432222693233616 1.4917930259298742 -0.24424662381327839 1.4876550949138312 -0.24416573536181169
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.487655094899393 -0.24416573535923244 1.4835171638825659 -0.2440848469083409 1.479383037812712 -0.24399867310784651 1.4752530868343956 -0.24390724579711276 1.4711276743107971 -0.24381060271688204
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4711276742970378 -0.24381060271386029 1.4670022617725245 -0.24371395963416076 1.4628813876110061 -0.24361210076481957 1.458765415169317 -0.24350506385026227 1.4546546999216028 -0.24339289229432795
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4546546999086221 -0.24339289229090122 1.4505439846598769 -0.24328072073544846 1.4464385265185651 -0.24316341451577395 1.4423386809516785 -0.24304101703905573 1.4382447945045067 -0.24291357709749059
- 0 5 0.033333333333333437 5
-7 0 0 4 5 2 1.4382447944923915 -0.24291357709370037 1.4341509080440857 -0.24278613715256236 1.4300629806347314 -0.24265365472130945 1.4259813588017538 -0.2425161785950995 1.4219063791912301 -0.24237376265061705
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4219063791800564 -0.24237376264650842 1.4178313995683129 -0.24223134670239488 1.4137630621045243 -0.2420839909126179 1.40970170342631 -0.24193174915641991 1.4056476493856129 -0.24177468006558853
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4056476493754422 -0.24177468006120903 1.4015935953334566 -0.24161761097068585 1.3975468458611875 -0.24145571451633271 1.3935077268016449 -0.24128904933207429 1.3894765523982335 -0.24111767845371973
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3894765523891155 -0.24111767844911863 1.3854453779843616 -0.24094630757101004 1.3814221481749545 -0.2407702309681313 1.3774071771949901 -0.2405895116779968 1.3734007669493065 -0.24040421677160911
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3734007669412764 -0.24040421676683629 1.3693943566942153 -0.24021892186063176 1.3653965071278991 -0.24002905130635549 1.3614075201376123 -0.23983467217628007 1.3574276846468283 -0.23963585519403718
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.357427684639908 -0.23963585518914271 1.3534478491477273 -0.23943703820702092 1.3494771651089148 -0.23923378334010201 1.3455159214372614 -0.2390261613128567 1.3415643935210821 -0.23881424610925575
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3415643935152808 -0.23881424610428864 1.3376128655977011 -0.23860233090074812 1.3336710533969229 -0.23838612248773772 1.3297392322915524 -0.23816569484964667 1.3258176636706529 -0.23794112483270399
- 0 5 0.033333333333333326 5
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.23794112483020824 1.3258176636680326 -0.22261479476943236
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.22261479476943233 1.3258176636680326 -0.2071813847642745
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.2071813847642745 1.3258176636680326 -0.19164719497541646
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.19164719497541644 1.3258176636680326 -0.17601880249915638
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.17601880249915641 1.3258176636680326 -0.16030304835031667
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333381
-7 0 0 1 2 2 1.3258176636680326 -0.16030304835031667 1.3258176636680326 -0.14450702269845903
- 0 2 0.033333333333333381 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.14450702269845905 1.3258176636680326 -0.12863804840920093
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.1286380484092009 1.3258176636680326 -0.11270366296281543
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.11270366296281543 1.3258176636680326 -0.096711598842529223
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.096711598842529223 1.3258176636680326 -0.0806697625046148
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.0806697625046148 1.3258176636680326 -0.064586212061125553
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333381
-7 0 0 1 2 2 1.3258176636680326 -0.064586212061125553 1.3258176636680326 -0.048469133823546194
- 0 2 0.033333333333333381 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.048469133823546194 1.3258176636680326 -0.032326817871364613
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.032326817871364613 1.3258176636680326 -0.016167632823265565
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 -0.016167632823265561 1.3258176636680326 0
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0 1.3258176636680326 0.016167632823265565
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.016167632823265561 1.3258176636680326 0.032326817871364613
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.032326817871364613 1.3258176636680326 0.048469133823546194
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.048469133823546194 1.3258176636680326 0.064586212061125525
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.064586212061125525 1.3258176636680326 0.080669762504614773
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.080669762504614773 1.3258176636680326 0.096711598842529195
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.096711598842529195 1.3258176636680326 0.11270366296281541
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333437
-7 0 0 1 2 2 1.3258176636680326 0.11270366296281541 1.3258176636680326 0.12863804840920093
- 0 2 0.033333333333333437 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.12863804840920093 1.3258176636680326 0.14450702269845908
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.14450702269845905 1.3258176636680326 0.16030304835031667
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.16030304835031667 1.3258176636680326 0.17601880249915638
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.17601880249915641 1.3258176636680326 0.19164719497541646
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.19164719497541644 1.3258176636680326 0.2071813847642745
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.2071813847642745 1.3258176636680326 0.22261479476943236
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.3258176636680326 0.22261479476943233 1.3258176636680326 0.23794112483020827
- 0 2 0.033333333333333326 2
-7 0 0 4 5 2 1.3258176636706533 0.23794112483270391 1.329739232291552 0.23816569484964639 1.3336710533969238 0.23838612248773772 1.3376128655977015 0.23860233090074806 1.3415643935152808 0.23881424610428864
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3415643935210824 0.23881424610925572 1.345515921437261 0.23902616131285664 1.3494771651089155 0.23923378334010198 1.3534478491477273 0.23943703820702089 1.3574276846399083 0.23963585518914268
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3574276846468283 0.23963585519403721 1.3614075201376128 0.23983467217628002 1.3653965071278982 0.24002905130635538 1.3693943566942162 0.24021892186063198 1.3734007669412764 0.24040421676683632
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3734007669493065 0.24040421677160906 1.3774071771949898 0.24058951167799683 1.3814221481749545 0.2407702309681311 1.3854453779843627 0.2409463075710101 1.3894765523891159 0.24111767844911858
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.3894765523982338 0.24111767845371976 1.3935077268016443 0.24128904933207437 1.3975468458611886 0.24145571451633255 1.4015935953334568 0.24161761097068596 1.4056476493754424 0.241774680061209
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4056476493856132 0.24177468006558855 1.4097017034263091 0.24193174915641999 1.4137630621045258 0.24208399091261776 1.4178313995683123 0.24223134670239493 1.4219063791800566 0.24237376264650845
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 1.4219063791912303 0.242373762650617 1.4259813588017545 0.2425161785950995 1.4300629806347303 0.24265365472130923 1.4341509080440868 0.24278613715256242 1.4382447944923917 0.24291357709370032
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4382447945045069 0.24291357709749056 1.4423386809516785 0.2430410170390557 1.446438526518566 0.24316341451577381 1.4505439846598767 0.24328072073544854 1.4546546999086223 0.24339289229090119
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.454654699921603 0.24339289229432795 1.4587654151693166 0.24350506385026205 1.4628813876110058 0.2436121007648199 1.4670022617725247 0.24371395963416065 1.4711276742970378 0.24381060271386032
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4711276743107971 0.24381060271688201 1.4752530868343947 0.24390724579711259 1.4793830378127131 0.24399867310784651 1.483517163882565 0.24408484690834098 1.487655094899393 0.24416573535923247
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.4876550949138312 0.2441657353618116 1.4917930259298748 0.24424662381327827 1.4959347619891437 0.24432222693233607 1.5000799329416421 0.24439251288360941 1.5042281630116969 0.24445745593963256
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5042281630267056 0.24445745594173676 1.5083763930961192 0.24452239899837239 1.5125276823831504 0.24458199917378598 1.5166816551076781 0.24463623074475932 1.5208379310653215 0.24468507426448502
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 1.5208379310807825 0.24468507426608746 1.5249942070379356 0.24473391778645551 1.529152786331279 0.24477737326625917 1.5333132887530316 0.24481542126314509 1.5374753309088205 0.24484804873949195
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5374753309246108 0.24484804874057189 1.5416373730800679 0.24488067621758253 1.5458009550748295 0.24490788318125464 1.5499656935122264 0.24492965659856963 1.5541312030729948 0.24494598992772743
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.554131203088984 0.24494598992827096 1.5582967126495866 0.24496232325810585 1.5624629934401539 0.24497321650340687 1.5666296601402729 0.24497866312706879 1.5707963267868685 0.24497866312672784
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5707963268029246 0.24497866312672784 1.5749629934495208 0.2449786631270687 1.5791296601496381 0.24497321650340689 1.5832959409402076 0.24496232325810602 1.5874614505008093 0.24494598992827099
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.5874614505167988 0.24494598992772743 1.5916269600775685 0.24492965659856955 1.5957916985149634 0.24490788318125456 1.5999552805097255 0.24488067621758275 1.6041173226651828 0.24484804874057189
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6041173226809724 0.24484804873949192 1.6082793648367619 0.24481542126314496 1.6124398672585127 0.24477737326625934 1.6165984465518581 0.24473391778645537 1.6207547225090104 0.24468507426608743
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6207547225244718 0.24468507426448505 1.624910998482116 0.24463623074475904 1.629064971206643 0.24458199917378645 1.6332162604936744 0.24452239899837225 1.6373644905630877 0.24445745594173682
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6373644905780962 0.24445745593963261 1.6415127206481515 0.24439251288360936 1.6456578916006486 0.24432222693233616 1.6497996276599189 0.24424662381327839 1.6539375586759619 0.24416573536181169
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6539375586903999 0.24416573535923244 1.6580754897072278 0.2440848469083409 1.6622096157770803 0.24399867310784651 1.6663395667553982 0.24390724579711276 1.6704649792789963 0.24381060271688204
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6704649792927553 0.24381060271386029 1.6745903918172682 0.24371395963416076 1.6787112659787877 0.24361210076481957 1.6828272384204759 0.24350506385026227 1.6869379536681901 0.24339289229432795
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.6869379536811711 0.24339289229090122 1.6910486689299167 0.24328072073544846 1.6951541270712287 0.24316341451577395 1.6992539726381146 0.24304101703905573 1.7033478590852866 0.24291357709749059
- 0 5 0.033333333333333437 5
-7 0 0 4 5 2 1.7033478590974018 0.24291357709370037 1.7074417455457072 0.24278613715256236 1.7115296729550626 0.24265365472130945 1.7156112947880395 0.2425161785950995 1.7196862743985633 0.24237376265061705
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.719686274409737 0.24237376264650842 1.7237612540214819 0.24223134670239488 1.7278295914852673 0.2420839909126179 1.7318909501634845 0.24193174915641991 1.7359450042041804 0.24177468006558853
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7359450042143509 0.24177468006120903 1.7399990582563369 0.24161761097068585 1.7440458077286052 0.24145571451633271 1.7480849267881486 0.24128904933207429 1.7521161011915596 0.24111767845371973
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7521161012006774 0.24111767844911866 1.7561472756054295 0.24094630757101004 1.7601705054148402 0.2407702309681313 1.7641854763948031 0.2405895116779968 1.7681918866404869 0.24040421677160911
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7681918866485167 0.24040421676683629 1.7721982968955776 0.24021892186063176 1.7761961464618941 0.24002905130635549 1.7801851334521808 0.23983467217628007 1.7841649689429648 0.23963585519403718
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.7841649689498851 0.23963585518914271 1.7881448044420654 0.23943703820702092 1.792115488480879 0.23923378334010201 1.7960767321525317 0.2390261613128567 1.8000282600687112 0.23881424610925575
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.8000282600745128 0.23881424610428864 1.8039797879920916 0.23860233090074812 1.8079216001928717 0.23838612248773772 1.8118534212982407 0.23816569484964667 1.8157749899191402 0.23794112483270399
- 0 5 0.033333333333333326 5
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.23794112483020824 1.8157749899217608 0.22261479476943236
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.22261479476943233 1.8157749899217608 0.2071813847642745
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.2071813847642745 1.8157749899217608 0.19164719497541646
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.19164719497541644 1.8157749899217608 0.17601880249915638
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.17601880249915638 1.8157749899217608 0.16030304835031667
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333381
-7 0 0 1 2 2 1.8157749899217608 0.16030304835031667 1.8157749899217608 0.14450702269845903
- 0 2 0.033333333333333381 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.14450702269845905 1.8157749899217608 0.12863804840920093
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.1286380484092009 1.8157749899217608 0.11270366296281543
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.11270366296281543 1.8157749899217608 0.096711598842529223
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.096711598842529223 1.8157749899217608 0.0806697625046148
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.0806697625046148 1.8157749899217608 0.064586212061125553
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333381
-7 0 0 1 2 2 1.8157749899217608 0.064586212061125553 1.8157749899217608 0.048469133823546194
- 0 2 0.033333333333333381 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.048469133823546194 1.8157749899217608 0.032326817871364613
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.032326817871364613 1.8157749899217608 0.016167632823265565
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0.016167632823265561 1.8157749899217608 0
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 0 1.8157749899217608 -0.016167632823265565
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.016167632823265561 1.8157749899217608 -0.032326817871364613
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.032326817871364613 1.8157749899217608 -0.048469133823546194
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.048469133823546194 1.8157749899217608 -0.064586212061125525
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.064586212061125525 1.8157749899217608 -0.080669762504614773
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.080669762504614773 1.8157749899217608 -0.096711598842529195
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.096711598842529195 1.8157749899217608 -0.11270366296281541
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333437
-7 0 0 1 2 2 1.8157749899217608 -0.11270366296281541 1.8157749899217608 -0.12863804840920093
- 0 2 0.033333333333333437 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.12863804840920093 1.8157749899217608 -0.14450702269845908
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.14450702269845905 1.8157749899217608 -0.16030304835031667
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.16030304835031667 1.8157749899217608 -0.17601880249915638
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.17601880249915638 1.8157749899217608 -0.19164719497541646
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.19164719497541644 1.8157749899217608 -0.2071813847642745
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.2071813847642745 1.8157749899217608 -0.22261479476943236
- 0 2 0.033333333333333326 2
-8 0 0.033333333333333326
-7 0 0 1 2 2 1.8157749899217608 -0.22261479476943233 1.8157749899217608 -0.23794112483020827
- 0 2 0.033333333333333326 2
-Curves 120
-7 0 0 4 5 2 -0.23570226039199793 0.94280904159144452 -0.23570226039786107 -0.23199213222790052 0.94368201290279008 -0.23592050322569741 -0.22826826282489454 0.94453881814084573 -0.23613470453521168 -0.22453098305911048 0.94537916373249353 -0.23634479093312322 -0.22078064568849953 0.94620276721196817 -0.23655069180299201
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.22078064568050595 0.94620276723062735 -0.23655069180765684 -0.21703030831228917 0.94702637071036033 -0.23675659267759008 -0.21326691328595593 0.94783323220231785 -0.23695830805057946 -0.20949081337605785 0.94862306924252615 -0.23715576731063154 -0.20570238259959264 0.94939561196818578 -0.23734890299204645
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.20570238258968104 0.94939561198654909 -0.23734890299663727 -0.20191395181561683 0.95016815471269078 -0.23754203867817289 -0.19811319010890827 0.95092340324670632 -0.23773085081167639 -0.19430047150320184 0.95166108772913716 -0.23791527193228446 -0.19047619048162659 0.95238095237186715 -0.23809523809296684
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.19047619046980269 0.95238095238975295 -0.23809523809743824 -0.18665190945060692 0.95310081703319449 -0.23827520425829862 -0.18281606593671623 0.95380286195617348 -0.23845071548904337 -0.17896905442775785 0.9544868313755055 -0.23862170784387637 -0.17511128892674621 0.95515248501133576 -0.23878812125283394
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.17511128891303954 0.95515248502855987 -0.23878812125714 -0.17125352341435501 0.95581813866533283 -0.23895453466633323 -0.16738500383223967 0.95646547663343284 -0.23911636915835829 -0.16350614418584389 0.95709425865953923 -0.2392735646648847 -0.15961737690084321 0.95770426135272291 -0.23942606533818073
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.15961737688530808 0.95770426136910158 -0.2394260653422754 -0.15572860960255142 0.9583142640634571 -0.23957856601586427 -0.15182993457762176 0.95890548753407945 -0.23972637188351986 -0.14792178425175465 0.95947770839816449 -0.23986942709954112 -0.14400460822941222 0.96003072146668367 -0.24000768036667092
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 -0.1440046082121276 0.96003072148203583 -0.24000768037050893 -0.14008743219191483 0.9605837345519499 -0.24014593363798742 -0.13616123035999661 0.96111753992864746 -0.24027938498216186 -0.13222645233560185 0.96163193243277112 -0.24040798310819278 -0.12828356351778611 0.96212672630798657 -0.24053168157699661
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.12828356349885583 0.96212672632213792 -0.24053168158053448 -0.1243406746830247 0.96262152019896063 -0.24065538004974016 -0.12038967494757033 0.96309671554121645 -0.24077417888530411 -0.11643102970530898 0.96355212660371614 -0.24088803165092904 -0.11246521863368032 0.96398758819740293 -0.24099689704935073
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.11246521861323211 0.9639875882101886 -0.24099689705254715 -0.10849940754341351 0.96442304980568239 -0.2411057624514206 -0.10452643050790618 0.96483856201759999 -0.2412096405044 -0.10054676719670153 0.96523395966941572 -0.24130848991735393 -0.096560909927639618 0.96560909916450388 -0.24140227479112597
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.096560909905824013 0.9656090991757712 -0.2414022747939428 -0.092575052638370542 0.96598423867284822 -0.24149605966821205 -0.088583001267622613 0.96633912008831657 -0.24158478002207912 -0.084585248122573065 0.9666735998393392 -0.24166839995983497 -0.080582296413767462 0.96698755682522031 -0.24174688920630513
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.080582296390755911 0.96698755683483306 -0.24174688920870824 -0.076579344683331815 0.96730151382286322 -0.24182537845571581 -0.072571194258741117 0.96759494810983226 -0.24189873702745807 -0.068558348337109234 0.96786773860994657 -0.24196693465248664 -0.064541319178025011 0.96811978748926597 -0.24202994687231649
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.064541319154007598 0.96811978749710503 -0.24202994687427626 -0.060524289996056524 0.96837183637870972 -0.24209295909467743 -0.056503077440536974 0.96860314369178291 -0.24215078592294573 -0.052478193754894688 0.96881361161823132 -0.24220340290455783 -0.048450158323386158 0.96900316621955584 -0.24225079155488896
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 -0.048450158298569024 0.96900316622552352 -0.24225079155638091 -0.044422122867926642 0.96919272082924146 -0.24229818020731042 -0.04039093552597052 0.96936136214762114 -0.24234034053690523 -0.036357115662963665 0.96950901625875785 -0.24237725406468941 -0.032321187799272753 0.96963563359822491 -0.2424089083995562
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.032321187773874972 0.96963563360224614 -0.24240890840056153 -0.028285259910769581 0.96976225094418622 -0.24244056273604653 -0.024247223877661605 0.96986783154126421 -0.24246695788531594 -0.02020760419897772 0.96995232584619973 -0.24248808146154999 -0.016166928496027806 0.97001570899119371 -0.24250392724779846
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.016166928470277744 0.97001570899321721 -0.2425039272483043 -0.012126252767623032 0.97007909214073229 -0.24251977303518316 -0.0080845208690352305 0.97012136414179695 -0.24253034103544904 -0.0040422603978710493 0.97014250014609282 -0.24253562503652343 -1.2934013235432751e-11 0.97014250014482439 -0.2425356250362061
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 1.293409129798917e-11 0.97014250014482439 -0.2425356250362061 0.0040422603978712305 0.97014250014609271 -0.24253562503652318 0.0080845208690352305 0.97012136414179717 -0.24253034103544929 0.012126252767622886 0.97007909214073251 -0.24251977303518313 0.016166928470277689 0.97001570899321721 -0.2425039272483043
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.016166928496027758 0.97001570899119371 -0.24250392724779843 0.020207604198977568 0.96995232584619961 -0.24248808146154993 0.024247223877661622 0.96986783154126421 -0.24246695788531603 0.028285259910769772 0.96976225094418611 -0.24244056273604658 0.032321187773875049 0.96963563360224603 -0.24240890840056153
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.032321187799272871 0.96963563359822502 -0.2424089083995562 0.036357115662963763 0.96950901625875774 -0.24237725406468946 0.040390935525970631 0.96936136214762136 -0.24234034053690512 0.044422122867926794 0.96919272082924146 -0.24229818020731048 0.048450158298569149 0.96900316622552363 -0.24225079155638091
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.048450158323386248 0.96900316621955584 -0.24225079155488896 0.05247819375489484 0.96881361161823176 -0.24220340290455772 0.056503077440537001 0.96860314369178191 -0.24215078592294581 0.060524289996056357 0.96837183637871016 -0.24209295909467743 0.064541319154007543 0.96811978749710503 -0.24202994687427626
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.064541319178024956 0.96811978748926575 -0.24202994687231649 0.068558348337109026 0.96786773860994546 -0.24196693465248656 0.072571194258741284 0.96759494810983315 -0.2418987370274582 0.076579344683331885 0.96730151382286245 -0.24182537845571583 0.080582296390755981 0.96698755683483273 -0.24174688920870829
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.080582296413767546 0.96698755682522031 -0.24174688920630508 0.084585248122573259 0.96667359983933898 -0.24166839995983475 0.088583001267622599 0.96633912008831668 -0.24158478002207917 0.092575052638370431 0.96598423867284811 -0.24149605966821203 0.096560909905823958 0.9656090991757712 -0.2414022747939428
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.096560909927639563 0.96560909916450377 -0.24140227479112594 0.10054676719670133 0.96523395966941516 -0.24130848991735362 0.10452643050790621 0.96483856201760032 -0.24120964050440027 0.10849940754341374 0.9644230498056825 -0.24110576245142051 0.11246521861323219 0.96398758821018848 -0.24099689705254712
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.11246521863368041 0.96398758819740282 -0.24099689704935071 0.11643102970530919 0.96355212660371625 -0.24088803165092906 0.12038967494757037 0.96309671554121568 -0.24077417888530392 0.12434067468302451 0.96262152019896097 -0.24065538004974024 0.12828356349885578 0.9621267263221378 -0.24053168158053445
- 0 5 0.033333333333333437 5
-7 0 0 4 5 2 0.128283563517786 0.96212672630798668 -0.2405316815769967 0.13222645233560185 0.96163193243277123 -0.24040798310819284 0.13616123035999633 0.9611175399286479 -0.24027938498216186 0.14008743219191483 0.9605837345519499 -0.24014593363798747 0.14400460821212752 0.96003072148203594 -0.24000768037050899
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.14400460822941216 0.96003072146668367 -0.24000768036667092 0.1479217842517544 0.95947770839816338 -0.23986942709954087 0.15182993457762187 0.95890548753408134 -0.23972637188352025 0.15572860960255139 0.9583142640634561 -0.23957856601586414 0.159617376885308 0.95770426136910158 -0.2394260653422754
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.15961737690084321 0.95770426135272302 -0.23942606533818075 0.16350614418584383 0.95709425865953945 -0.23927356466488486 0.16738500383223948 0.95646547663343262 -0.23911636915835816 0.17125352341435546 0.95581813866533349 -0.23895453466633337 0.17511128891303965 0.95515248502855998 -0.23878812125714
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.17511128892674629 0.95515248501133565 -0.23878812125283394 0.17896905442775807 0.95448683137550538 -0.23862170784387646 0.18281606593671601 0.95380286195617259 -0.23845071548904306 0.18665190945060689 0.95310081703319471 -0.23827520425829879 0.1904761904698026 0.95238095238975284 -0.23809523809743824
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.19047619048162651 0.95238095237186715 -0.23809523809296679 0.19430047150320165 0.95166108772913682 -0.23791527193228421 0.19811319010890818 0.95092340324670688 -0.23773085081167672 0.20191395181561717 0.95016815471269078 -0.2375420386781727 0.2057023825896811 0.94939561198654909 -0.23734890299663727
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.20570238259959275 0.94939561196818578 -0.23734890299204642 0.20949081337605818 0.94862306924252571 -0.23715576731063143 0.21326691328595571 0.94783323220231763 -0.23695830805057944 0.21703030831228914 0.947026370710361 -0.23675659267759008 0.2207806456805059 0.94620276723062735 -0.23655069180765681
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.22078064568849942 0.94620276721196817 -0.23655069180299201 0.22453098305911018 0.94537916373249242 -0.23634479093312308 0.2282682628248946 0.94453881814084684 -0.23613470453521165 0.23199213222790066 0.94368201290278986 -0.23592050322569752 0.23570226039199796 0.94280904159144452 -0.23570226039786116
- 0 5 0.033333333333333326 5
-7 0 0 3 4 2 0.23570226036159853 0.94280904144639444 -0.23570226036250502 0.23599430977657521 0.94397723910630105 -0.23073742193351526 0.23627713131847589 0.94510852527390399 -0.22576335563749239 0.23655069177139562 0.94620276708558282 -0.22078064565239955
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23655069177033974 0.94620276708135931 -0.22078064565325228 0.23682616368316009 0.94730465473264058 -0.21576312331137359 0.23709224464215772 0.94836897856863134 -0.21073683608549493 0.2373489029593448 0.94939561183737953 -0.20570238256383352
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23734890295832736 0.94939561183330978 -0.20570238256484663 0.23760723743804801 0.9504289497521925 -0.20063505435152545 0.23785602581059367 0.95142410324237481 -0.19555945285173787 0.23809523805917684 0.95238095223670771 -0.19047619044638175
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23809523805820471 0.95238095223281916 -0.1904761904475531 0.23833590113711439 0.9533436045484579 -0.18536210219564769 0.23856687159237894 0.95426748636951619 -0.18024025985142134 0.23878812121797918 0.95515248487191706 -0.1751112888921984
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23878812121705911 0.95515248486823678 -0.1751112888935244 0.23901060781395611 0.95604243125582467 -0.16995364747547115 0.23922326459593329 0.95689305838373373 -0.16478879753323863 0.23942606530229138 0.95770426120916585 -0.15961737686718275
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23942606530143004 0.9577042612057205 -0.15961737686865779 0.23962990206028997 0.95851960824116023 -0.15441954222628895 0.23982378179878874 0.95929512719515553 -0.14921506957726366 0.24000768032978417 0.96003072131913703 -0.14400460819683536
- 0 4 0.033333333333333381 4
-7 0 0 3 4 2 0.24000768032898798 0.96003072131595224 -0.14400460819845218 0.24019242834350127 0.96076971337400541 -0.13877008417863843 0.2403671027445381 0.96146841097815272 -0.13352951599780069 0.24053168153915694 0.96212672615662809 -0.12828356348649347
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24053168153843213 0.96212672615372885 -0.12828356348824277 0.24069693893305713 0.96278775573222874 -0.12301598752434852 0.24085201731942846 0.96340806927771427 -0.11774298276324539 0.24099689701060983 0.96398758804243967 -0.1124652186038744
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24099689700996191 0.96398758803984796 -0.11246521860574543 0.24114230134880368 0.96456920539521496 -0.10716835030079026 0.24127743302238003 0.96510973208952033 -0.10186668809268801 0.24140227475154261 0.96560909900617076 -0.096560909899522415
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24140227475097695 0.96560909900390812 -0.096560909901502623 0.24152750524696495 0.96611002098786003 -0.091238618584592326 0.24164238164552126 0.9665695265820855 -0.085912185636121449 0.24174688916594533 0.96698755666378167 -0.080582296387538277
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24174688916546649 0.96698755666186631 -0.080582296389613589 0.24185166866397351 0.96740667465589425 -0.07523854773230175 0.24194602528714199 0.96778410114856839 -0.069891324790708656 0.24202994683125312 0.9681197873250128 -0.064541319153877452
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24202994683086507 0.9681197873234606 -0.064541319156032562 0.24211404354406568 0.96845617417626317 -0.059180160949461776 0.24218766162524902 0.96875064650099652 -0.053816208448587546 0.24225079151320134 0.96900316605280568 -0.048450158301506147
- 0 4 0.033333333333333381 4
-7 0 0 3 4 2 0.24225079151290738 0.96900316605162984 -0.048450158303724539 0.24231402048379239 0.96925608193516988 -0.043075705510345355 0.24236672838758019 0.96946691355032111 -0.037699148511167117 0.2424089083573297 0.96963563342931913 -0.03232118777983501
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24240890835713233 0.96963563342852965 -0.032321187782099262 0.24245113263512649 0.9698045305405063 -0.026937606987166528 0.24248280696287505 0.96993122785150065 -0.021552619539856252 0.24250392720512387 0.97001570882049581 -0.016166928479193765
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24250392720502476 0.97001570882009935 -0.016166928481485814 0.24252505871855751 0.97010023487423036 -0.010778421879108524 0.24253562510825621 0.97014250043302508 -0.0053892109428145523 0.24253562499317913 0.97014249997271684 1.1506802455318876e-12
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.2425356249931791 0.97014249997271673 -1.1506802455318876e-12 0.2425356251082561 0.97014250043302452 0.0053892109428145523 0.24252505871855762 0.9701002348742308 0.010778421879108522 0.24250392720502473 0.97001570882009924 0.016166928481485821
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24250392720512384 0.9700157088204957 0.016166928479193758 0.24248280696287489 0.9699312278515001 0.021552619539856249 0.24245113263512658 0.96980453054050675 0.026937606987166525 0.2424089083571323 0.96963563342852954 0.032321187782099262
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24240890835732973 0.96963563342931924 0.032321187779834996 0.24236672838758005 0.96946691355032077 0.037699148511167069 0.24231402048379258 0.96925608193517032 0.043075705510345369 0.2422507915129074 0.96900316605162995 0.048450158303724525
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24225079151320134 0.96900316605280568 0.048450158301506133 0.24218766162524899 0.9687506465009964 0.053816208448587519 0.24211404354406579 0.96845617417626351 0.059180160949461748 0.24202994683086507 0.9681197873234606 0.064541319156032534
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24202994683125312 0.9681197873250128 0.064541319153877438 0.24194602528714193 0.96778410114856817 0.069891324790708587 0.24185166866397356 0.96740667465589447 0.075238547732301791 0.24174688916546649 0.96698755666186631 0.080582296389613575
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24174688916594533 0.96698755666378167 0.080582296387538235 0.24164238164552113 0.96656952658208495 0.085912185636121338 0.24152750524696504 0.96611002098786058 0.091238618584592368 0.24140227475097695 0.96560909900390812 0.096560909901502567
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24140227475154263 0.96560909900617087 0.096560909899522374 0.24127743302237992 0.96510973208952022 0.1018666880926879 0.24114230134880377 0.96456920539521529 0.1071683503007903 0.24099689700996194 0.96398758803984808 0.11246521860574539
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24099689701060981 0.96398758804243956 0.11246521860387437 0.2408520173194284 0.96340806927771372 0.11774298276324528 0.24069693893305721 0.96278775573222919 0.12301598752434863 0.2405316815384321 0.96212672615372874 0.1282835634882428
- 0 4 0.033333333333333437 4
-7 0 0 3 4 2 0.24053168153915697 0.9621267261566282 0.1282835634864935 0.24036710274453799 0.96146841097815217 0.13352951599780064 0.24019242834350141 0.96076971337400607 0.13877008417863851 0.240007680328988 0.96003072131595235 0.14400460819845221
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.24000768032978417 0.96003072131913703 0.14400460819683542 0.23982378179878866 0.95929512719515508 0.1492150695772636 0.23962990206029011 0.95851960824116078 0.15441954222628904 0.23942606530143004 0.9577042612057205 0.15961737686865782
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23942606530229135 0.95770426120916574 0.15961737686718278 0.23922326459593321 0.95689305838373317 0.16478879753323855 0.23901060781395614 0.95604243125582489 0.16995364747547115 0.23878812121705908 0.95515248486823667 0.1751112888935244
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23878812121797915 0.95515248487191695 0.1751112888921984 0.2385668715923788 0.95426748636951553 0.18024025985142123 0.23833590113711448 0.95334360454845801 0.18536210219564775 0.23809523805820468 0.95238095223281904 0.1904761904475531
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23809523805917684 0.95238095223670771 0.19047619044638173 0.23785602581059354 0.95142410324237447 0.19555945285173781 0.23760723743804818 0.95042894975219305 0.20063505435152548 0.23734890295832736 0.94939561183330978 0.20570238256484663
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23734890295934483 0.94939561183737964 0.20570238256383355 0.2370922446421577 0.948368978568631 0.21073683608549493 0.23682616368316017 0.94730465473264114 0.21576312331137373 0.23655069177033977 0.94620276708135942 0.22078064565325237
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 0.23655069177139559 0.94620276708558271 0.22078064565239949 0.23627713131847569 0.94510852527390354 0.22576335563749225 0.23599430977657532 0.94397723910630127 0.23073742193351529 0.2357022603615985 0.94280904144639432 0.23570226036250502
- 0 4 0.033333333333333326 4
-7 0 0 4 5 2 0.23570226039199782 0.94280904159144452 0.23570226039786107 0.23199213222790033 0.94368201290279008 0.23592050322569741 0.22826826282489454 0.94453881814084573 0.23613470453521168 0.22453098305911026 0.94537916373249353 0.23634479093312322 0.22078064568849942 0.94620276721196817 0.23655069180299201
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.2207806456805059 0.94620276723062735 0.23655069180765684 0.21703030831228912 0.94702637071036033 0.23675659267759008 0.21326691328595573 0.94783323220231785 0.23695830805057946 0.20949081337605824 0.94862306924252615 0.23715576731063154 0.20570238259959275 0.94939561196818578 0.23734890299204645
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.20570238258968115 0.94939561198654909 0.23734890299663727 0.20191395181561736 0.95016815471269078 0.23754203867817289 0.19811319010890802 0.95092340324670632 0.23773085081167639 0.19430047150320182 0.95166108772913716 0.23791527193228446 0.19047619048162656 0.95238095237186715 0.23809523809296684
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.19047619046980258 0.95238095238975295 0.23809523809743821 0.18665190945060695 0.95310081703319449 0.23827520425829857 0.18281606593671601 0.95380286195617348 0.23845071548904329 0.17896905442775779 0.9544868313755055 0.23862170784387632 0.17511128892674616 0.95515248501133576 0.23878812125283391
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.17511128891303959 0.95515248502855987 0.23878812125714 0.17125352341435532 0.95581813866533283 0.23895453466633323 0.16738500383223948 0.95646547663343284 0.23911636915835829 0.16350614418584383 0.95709425865953923 0.2392735646648847 0.15961737690084316 0.95770426135272291 0.23942606533818073
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.159617376885308 0.95770426136910158 0.2394260653422754 0.15572860960255139 0.9583142640634571 0.23957856601586427 0.15182993457762153 0.95890548753407945 0.23972637188351986 0.14792178425175465 0.95947770839816449 0.23986942709954112 0.14400460822941213 0.96003072146668367 0.24000768036667092
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 0.14400460821212752 0.96003072148203583 0.24000768037050893 0.14008743219191483 0.9605837345519499 0.24014593363798742 0.13616123035999633 0.96111753992864746 0.24027938498216186 0.13222645233560185 0.96163193243277112 0.24040798310819278 0.128283563517786 0.96212672630798657 0.24053168157699661
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.12828356349885578 0.96212672632213792 0.24053168158053448 0.12434067468302444 0.96262152019896063 0.24065538004974016 0.1203896749475704 0.96309671554121645 0.24077417888530411 0.11643102970530912 0.96355212660371614 0.24088803165092904 0.11246521863368039 0.96398758819740293 0.24099689704935073
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.11246521861323225 0.9639875882101886 0.24099689705254715 0.10849940754341367 0.96442304980568239 0.2411057624514206 0.10452643050790632 0.96483856201759999 0.2412096405044 0.10054676719670165 0.96523395966941572 0.24130848991735393 0.096560909927639757 0.96560909916450388 0.24140227479112597
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.096560909905823972 0.9656090991757712 0.2414022747939428 0.092575052638370375 0.96598423867284822 0.24149605966821205 0.088583001267622641 0.96633912008831657 0.24158478002207912 0.084585248122573259 0.9666735998393392 0.24166839995983497 0.080582296413767546 0.96698755682522031 0.24174688920630513
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.080582296390755981 0.96698755683483295 0.24174688920870824 0.076579344683331912 0.96730151382286322 0.24182537845571581 0.072571194258741145 0.96759494810983226 0.24189873702745807 0.068558348337109096 0.96786773860994657 0.24196693465248664 0.064541319178024942 0.96811978748926597 0.24202994687231649
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.064541319154007543 0.96811978749710503 0.24202994687427626 0.060524289996056337 0.96837183637870972 0.24209295909467743 0.056503077440537036 0.96860314369178291 0.24215078592294573 0.052478193754894847 0.96881361161823132 0.24220340290455783 0.048450158323386242 0.96900316621955584 0.24225079155488896
- 0 5 0.033333333333333381 5
-7 0 0 4 5 2 0.048450158298569156 0.96900316622552352 0.24225079155638091 0.044422122867926753 0.96919272082924146 0.24229818020731042 0.040390935525970707 0.96936136214762114 0.24234034053690523 0.036357115662963735 0.96950901625875785 0.24237725406468941 0.032321187799272871 0.96963563359822491 0.2424089083995562
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.032321187773875049 0.96963563360224614 0.24240890840056153 0.028285259910769762 0.96976225094418622 0.24244056273604653 0.024247223877661619 0.96986783154126421 0.24246695788531594 0.020207604198977564 0.96995232584619973 0.24248808146154999 0.016166928496027751 0.97001570899119371 0.24250392724779846
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 0.016166928470277689 0.97001570899321721 0.2425039272483043 0.012126252767622877 0.97007909214073229 0.24251977303518316 0.0080845208690352409 0.97012136414179695 0.24253034103544904 0.0040422603978712262 0.97014250014609282 0.24253562503652343 1.293409129798917e-11 0.97014250014482439 0.2425356250362061
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -1.2934013235432751e-11 0.97014250014482439 0.2425356250362061 -0.0040422603978710475 0.97014250014609271 0.24253562503652318 -0.0080845208690352305 0.97012136414179717 0.24253034103544929 -0.012126252767623035 0.97007909214073251 0.24251977303518313 -0.016166928470277744 0.97001570899321721 0.2425039272483043
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.016166928496027806 0.97001570899119371 0.24250392724779843 -0.020207604198977717 0.96995232584619961 0.24248808146154993 -0.024247223877661608 0.96986783154126421 0.24246695788531603 -0.028285259910769592 0.96976225094418611 0.24244056273604658 -0.032321187773874972 0.96963563360224603 0.24240890840056153
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.03232118779927276 0.96963563359822502 0.2424089083995562 -0.036357115662963659 0.96950901625875774 0.24237725406468946 -0.040390935525970548 0.96936136214762136 0.24234034053690512 -0.044422122867926656 0.96919272082924146 0.24229818020731048 -0.048450158298569031 0.96900316622552363 0.24225079155638091
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.048450158323386124 0.96900316621955584 0.24225079155488896 -0.05247819375489475 0.96881361161823176 0.24220340290455772 -0.056503077440536828 0.96860314369178191 0.24215078592294581 -0.060524289996056274 0.96837183637871016 0.24209295909467743 -0.064541319154007418 0.96811978749710503 0.24202994687427626
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.064541319178024831 0.96811978748926575 0.24202994687231649 -0.068558348337108957 0.96786773860994568 0.24196693465248656 -0.072571194258741034 0.96759494810983271 0.2418987370274582 -0.076579344683331829 0.96730151382286289 0.24182537845571583 -0.08058229639075587 0.96698755683483273 0.24174688920870829
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.08058229641376749 0.96698755682522042 0.24174688920630508 -0.084585248122573078 0.96667359983933931 0.24166839995983475 -0.088583001267622599 0.96633912008831668 0.24158478002207917 -0.092575052638370611 0.96598423867284811 0.24149605966821203 -0.096560909905824027 0.9656090991757712 0.2414022747939428
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.096560909927639618 0.96560909916450377 0.24140227479112594 -0.1005467671967015 0.96523395966941516 0.24130848991735362 -0.10452643050790621 0.96483856201760032 0.24120964050440027 -0.10849940754341351 0.9644230498056825 0.24110576245142051 -0.11246521861323211 0.96398758821018848 0.24099689705254712
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.11246521863368029 0.96398758819740282 0.24099689704935071 -0.11643102970530902 0.96355212660371625 0.24088803165092906 -0.12038967494757025 0.96309671554121568 0.24077417888530392 -0.12434067468302468 0.96262152019896097 0.24065538004974024 -0.12828356349885583 0.9621267263221378 0.24053168158053445
- 0 5 0.033333333333333437 5
-7 0 0 4 5 2 -0.12828356351778611 0.96212672630798668 0.2405316815769967 -0.1322264523356019 0.96163193243277123 0.24040798310819284 -0.13616123035999655 0.9611175399286479 0.24027938498216186 -0.14008743219191491 0.9605837345519499 0.24014593363798747 -0.1440046082121276 0.96003072148203594 0.24000768037050899
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.14400460822941225 0.96003072146668367 0.24000768036667092 -0.14792178425175467 0.95947770839816338 0.23986942709954087 -0.15182993457762167 0.95890548753408134 0.23972637188352025 -0.15572860960255155 0.9583142640634561 0.23957856601586414 -0.15961737688530808 0.95770426136910158 0.2394260653422754
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.15961737690084321 0.95770426135272302 0.23942606533818075 -0.16350614418584397 0.95709425865953945 0.23927356466488486 -0.1673850038322395 0.95646547663343262 0.23911636915835816 -0.17125352341435518 0.95581813866533349 0.23895453466633337 -0.17511128891303954 0.95515248502855998 0.23878812125714
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.17511128892674618 0.95515248501133565 0.23878812125283397 -0.17896905442775782 0.95448683137550538 0.23862170784387646 -0.18281606593671604 0.95380286195617259 0.23845071548904315 -0.186651909450607 0.95310081703319471 0.23827520425829868 -0.19047619046980266 0.95238095238975284 0.23809523809743824
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.19047619048162662 0.95238095237186715 0.23809523809296679 -0.19430047150320204 0.95166108772913682 0.23791527193228421 -0.19811319010890796 0.95092340324670688 0.23773085081167672 -0.20191395181561708 0.95016815471269078 0.2375420386781727 -0.20570238258968107 0.94939561198654909 0.23734890299663727
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.20570238259959267 0.94939561196818578 0.23734890299204642 -0.20949081337605785 0.94862306924252571 0.23715576731063143 -0.21326691328595596 0.94783323220231763 0.23695830805057944 -0.2170303083122892 0.947026370710361 0.23675659267759008 -0.22078064568050598 0.94620276723062735 0.23655069180765681
- 0 5 0.033333333333333326 5
-7 0 0 4 5 2 -0.22078064568849953 0.94620276721196817 0.23655069180299201 -0.22453098305911032 0.94537916373249242 0.23634479093312308 -0.22826826282489474 0.94453881814084684 0.23613470453521165 -0.23199213222790049 0.94368201290278986 0.23592050322569752 -0.23570226039199793 0.94280904159144452 0.23570226039786116
- 0 5 0.033333333333333326 5
-7 0 0 3 4 2 -0.23570226036159864 0.94280904144639444 0.23570226036250502 -0.23599430977657521 0.94397723910630105 0.23073742193351526 -0.23627713131847605 0.94510852527390399 0.22576335563749239 -0.23655069177139573 0.94620276708558282 0.22078064565239955
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23655069177033985 0.94620276708135931 0.22078064565325228 -0.23682616368316015 0.94730465473264058 0.21576312331137359 -0.23709224464215789 0.94836897856863134 0.21073683608549493 -0.23734890295934491 0.94939561183737953 0.20570238256383352
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23734890295832747 0.94939561183330978 0.20570238256484663 -0.23760723743804812 0.9504289497521925 0.20063505435152545 -0.23785602581059384 0.95142410324237481 0.19555945285173787 -0.23809523805917696 0.95238095223670771 0.19047619044638175
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23809523805820482 0.95238095223281916 0.1904761904475531 -0.23833590113711445 0.9533436045484579 0.18536210219564769 -0.2385668715923791 0.95426748636951619 0.18024025985142134 -0.23878812121797929 0.95515248487191706 0.1751112888921984
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23878812121705922 0.95515248486823678 0.17511128889352437 -0.23901060781395625 0.95604243125582467 0.16995364747547115 -0.2392232645959334 0.95689305838373373 0.16478879753323858 -0.23942606530229149 0.95770426120916585 0.15961737686718275
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23942606530143015 0.9577042612057205 0.15961737686865779 -0.2396299020602902 0.95851960824116023 0.15441954222628895 -0.23982378179878883 0.95929512719515553 0.14921506957726366 -0.24000768032978428 0.96003072131913703 0.14400460819683536
- 0 4 0.033333333333333381 4
-7 0 0 3 4 2 -0.24000768032898809 0.96003072131595224 0.14400460819845218 -0.24019242834350141 0.96076971337400541 0.13877008417863843 -0.24036710274453818 0.96146841097815272 0.13352951599780069 -0.24053168153915705 0.96212672615662809 0.12828356348649347
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24053168153843224 0.96212672615372885 0.12828356348824277 -0.2406969389330573 0.96278775573222874 0.12301598752434852 -0.24085201731942854 0.96340806927771427 0.11774298276324539 -0.24099689701060995 0.96398758804243967 0.1124652186038744
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24099689700996199 0.96398758803984796 0.11246521860574543 -0.24114230134880374 0.96456920539521496 0.10716835030079026 -0.24127743302238008 0.96510973208952033 0.10186668809268801 -0.24140227475154269 0.96560909900617076 0.096560909899522415
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.241402274750977 0.96560909900390812 0.096560909901502623 -0.24152750524696498 0.96611002098786003 0.091238618584592326 -0.24164238164552143 0.9665695265820855 0.085912185636121449 -0.24174688916594544 0.96698755666378167 0.080582296387538277
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24174688916546661 0.96698755666186631 0.080582296389613589 -0.24185166866397356 0.96740667465589425 0.07523854773230175 -0.24194602528714215 0.96778410114856839 0.069891324790708656 -0.24202994683125323 0.9681197873250128 0.064541319153877452
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24202994683086518 0.9681197873234606 0.064541319156032562 -0.24211404354406582 0.96845617417626317 0.059180160949461776 -0.24218766162524916 0.96875064650099652 0.053816208448587546 -0.24225079151320145 0.96900316605280568 0.048450158301506147
- 0 4 0.033333333333333381 4
-7 0 0 3 4 2 -0.24225079151290749 0.96900316605162984 0.048450158303724539 -0.24231402048379247 0.96925608193516988 0.043075705510345355 -0.24236672838758033 0.96946691355032111 0.037699148511167117 -0.24240890835732981 0.96963563342931913 0.03232118777983501
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24240890835713244 0.96963563342852965 0.032321187782099262 -0.24245113263512663 0.9698045305405063 0.026937606987166528 -0.24248280696287516 0.96993122785150065 0.021552619539856252 -0.24250392720512398 0.97001570882049581 0.016166928479193765
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24250392720502487 0.97001570882009935 0.016166928481485814 -0.24252505871855767 0.97010023487423036 0.010778421879108524 -0.24253562510825627 0.97014250043302508 0.0053892109428145523 -0.24253562499317924 0.97014249997271684 -1.1506802455318876e-12
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24253562499317921 0.97014249997271673 1.1506802455318876e-12 -0.2425356251082561 0.97014250043302452 -0.0053892109428145523 -0.24252505871855773 0.9701002348742308 -0.010778421879108522 -0.24250392720502484 0.97001570882009924 -0.016166928481485821
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24250392720512395 0.9700157088204957 -0.016166928479193758 -0.24248280696287502 0.9699312278515001 -0.021552619539856249 -0.24245113263512671 0.96980453054050675 -0.026937606987166525 -0.24240890835713241 0.96963563342852954 -0.032321187782099262
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24240890835732984 0.96963563342931924 -0.032321187779834996 -0.24236672838758022 0.96946691355032077 -0.037699148511167069 -0.24231402048379266 0.96925608193517032 -0.043075705510345369 -0.24225079151290752 0.96900316605162995 -0.048450158303724525
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24225079151320145 0.96900316605280568 -0.048450158301506133 -0.24218766162524905 0.9687506465009964 -0.053816208448587519 -0.2421140435440659 0.96845617417626351 -0.059180160949461748 -0.24202994683086518 0.9681197873234606 -0.064541319156032534
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24202994683125323 0.9681197873250128 -0.064541319153877438 -0.24194602528714204 0.96778410114856817 -0.069891324790708587 -0.24185166866397362 0.96740667465589447 -0.075238547732301791 -0.24174688916546661 0.96698755666186631 -0.080582296389613575
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24174688916594547 0.96698755666378167 -0.080582296387538235 -0.24164238164552129 0.96656952658208495 -0.085912185636121338 -0.24152750524696515 0.96611002098786058 -0.091238618584592368 -0.24140227475097703 0.96560909900390812 -0.096560909901502567
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24140227475154274 0.96560909900617087 -0.096560909899522374 -0.24127743302238003 0.96510973208952022 -0.1018666880926879 -0.24114230134880399 0.96456920539521529 -0.1071683503007903 -0.24099689700996205 0.96398758803984808 -0.11246521860574539
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24099689701060992 0.96398758804243956 -0.11246521860387437 -0.24085201731942849 0.96340806927771372 -0.11774298276324528 -0.2406969389330573 0.96278775573222919 -0.12301598752434863 -0.24053168153843221 0.96212672615372874 -0.1282835634882428
- 0 4 0.033333333333333437 4
-7 0 0 3 4 2 -0.24053168153915708 0.9621267261566282 -0.1282835634864935 -0.24036710274453821 0.96146841097815217 -0.13352951599780064 -0.24019242834350149 0.96076971337400607 -0.13877008417863851 -0.24000768032898812 0.96003072131595235 -0.14400460819845221
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.24000768032978428 0.96003072131913703 -0.14400460819683542 -0.23982378179878869 0.95929512719515508 -0.1492150695772636 -0.23962990206029028 0.95851960824116078 -0.15441954222628904 -0.23942606530143015 0.9577042612057205 -0.15961737686865782
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23942606530229146 0.95770426120916574 -0.15961737686718278 -0.23922326459593332 0.95689305838373317 -0.16478879753323855 -0.23901060781395631 0.95604243125582489 -0.16995364747547115 -0.2387881212170592 0.95515248486823667 -0.1751112888935244
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23878812121797927 0.95515248487191695 -0.17511128889219837 -0.23856687159237905 0.95426748636951553 -0.1802402598514212 -0.23833590113711448 0.95334360454845801 -0.1853621021956478 -0.23809523805820479 0.95238095223281904 -0.19047619044755312
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23809523805917696 0.95238095223670771 -0.19047619044638173 -0.23785602581059365 0.95142410324237447 -0.19555945285173781 -0.23760723743804835 0.95042894975219305 -0.20063505435152548 -0.23734890295832747 0.94939561183330978 -0.20570238256484663
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.23734890295934494 0.94939561183737964 -0.20570238256383355 -0.23709224464215775 0.948368978568631 -0.21073683608549493 -0.23682616368316034 0.94730465473264114 -0.21576312331137373 -0.23655069177033988 0.94620276708135942 -0.22078064565325237
- 0 4 0.033333333333333326 4
-7 0 0 3 4 2 -0.2365506917713957 0.94620276708558271 -0.22078064565239949 -0.23627713131847586 0.94510852527390354 -0.22576335563749225 -0.23599430977657543 0.94397723910630127 -0.23073742193351529 -0.23570226036159861 0.94280904144639432 -0.23570226036250502
- 0 4 0.033333333333333326 4
-Polygon3D 0
-PolygonOnTriangulations 0
-Surfaces 1
-4 0 0 0 0 0 1 1 0 -0 -0 1 0 1
-Triangulations 0
-
-TShapes 242
-Ve
-1.00076180259827e-07
--0.235702260376798 0.942809041518919 -0.235702260380183
-0 0
-
-0101101
-*
-Ve
-1.0001041420988e-07
--0.220780645684503 0.946202767221298 -0.236550691805324
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 1 0 0 0.0333333333333333
-2 1 1 0 0 0.0333333333333333
-0
-
-0101000
-+242 0 -241 0 *
-Ve
-1.0001068324256e-07
--0.205702382594637 0.949395611977367 -0.237348902994342
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 2 0 0 0.0333333333333333
-2 2 1 0 0 0.0333333333333333
-0
-
-0101000
-+241 0 -239 0 *
-Ve
-1.00010951027826e-07
--0.190476190475715 0.95238095238081 -0.238095238095203
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 3 0 0 0.0333333333333333
-2 3 1 0 0 0.0333333333333333
-0
-
-0101000
-+239 0 -237 0 *
-Ve
-1.00011214778705e-07
--0.175111288919893 0.955152485019948 -0.238788121254987
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 4 0 0 0.0333333333333333
-2 4 1 0 0 0.0333333333333333
-0
-
-0101000
-+237 0 -235 0 *
-Ve
-1.00011471350982e-07
--0.159617376893076 0.957704261360912 -0.239426065340228
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 5 0 0 0.0333333333333333
-2 5 1 0 0 0.0333333333333333
-0
-
-0101000
-+235 0 -233 0 *
-Ve
-1.00011717266216e-07
--0.14400460822077 0.96003072147436 -0.24000768036859
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 6 0 0 0.0333333333333334
-2 6 1 0 0 0.0333333333333334
-0
-
-0101000
-+233 0 -231 0 *
-Ve
-1.00011949187988e-07
--0.128283563508321 0.962126726315062 -0.240531681578766
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 7 0 0 0.0333333333333333
-2 7 1 0 0 0.0333333333333333
-0
-
-0101000
-+231 0 -229 0 *
-Ve
-1.00012163671385e-07
--0.112465218623456 0.963987588203796 -0.240996897050949
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 8 0 0 0.0333333333333333
-2 8 1 0 0 0.0333333333333333
-0
-
-0101000
-+229 0 -227 0 *
-Ve
-1.00012357261602e-07
--0.0965609099167318 0.965609099170137 -0.241402274792534
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 9 0 0 0.0333333333333333
-2 9 1 0 0 0.0333333333333333
-0
-
-0101000
-+227 0 -225 0 *
-Ve
-1.00012527085203e-07
--0.0805822964022617 0.966987556830027 -0.241746889207507
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 10 0 0 0.0333333333333333
-2 10 1 0 0 0.0333333333333333
-0
-
-0101000
-+225 0 -223 0 *
-Ve
-1.00012670119534e-07
--0.0645413191660163 0.968119787493186 -0.242029946873296
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 11 0 0 0.0333333333333333
-2 11 1 0 0 0.0333333333333333
-0
-
-0101000
-+223 0 -221 0 *
-Ve
-1.00012784063896e-07
--0.0484501583109776 0.96900316622254 -0.242250791555635
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 12 0 0 0.0333333333333334
-2 12 1 0 0 0.0333333333333334
-0
-
-0101000
-+221 0 -219 0 *
-Ve
-1.00012866897991e-07
--0.0323211877865739 0.969635633600236 -0.242408908400059
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 13 0 0 0.0333333333333333
-2 13 1 0 0 0.0333333333333333
-0
-
-0101000
-+219 0 -217 0 *
-Ve
-1.00012917198655e-07
--0.0161669284831528 0.970015708992205 -0.242503927248051
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 14 0 0 0.0333333333333333
-2 14 1 0 0 0.0333333333333333
-0
-
-0101000
-+217 0 -215 0 *
-Ve
-1.00012934052267e-07
-3.90312782094782e-17 0.970142500144824 -0.242535625036206
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 15 0 0 0.0333333333333333
-2 15 1 0 0 0.0333333333333333
-0
-
-0101000
-+215 0 -213 0 *
-Ve
-1.00012917202384e-07
-0.0161669284831527 0.970015708992205 -0.242503927248051
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 16 0 0 0.0333333333333333
-2 16 1 0 0 0.0333333333333333
-0
-
-0101000
-+213 0 -211 0 *
-Ve
-1.00012866901188e-07
-0.032321187786574 0.969635633600235 -0.242408908400059
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 17 0 0 0.0333333333333333
-2 17 1 0 0 0.0333333333333333
-0
-
-0101000
-+211 0 -209 0 *
-Ve
-1.00012784060015e-07
-0.0484501583109777 0.96900316622254 -0.242250791555635
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 18 0 0 0.0333333333333333
-2 18 1 0 0 0.0333333333333333
-0
-
-0101000
-+209 0 -207 0 *
-Ve
-1.0001267015388e-07
-0.0645413191660162 0.968119787493185 -0.242029946873296
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 19 0 0 0.0333333333333333
-2 19 1 0 0 0.0333333333333333
-0
-
-0101000
-+207 0 -205 0 *
-Ve
-1.00012527033006e-07
-0.0805822964022618 0.966987556830027 -0.241746889207507
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 20 0 0 0.0333333333333333
-2 20 1 0 0 0.0333333333333333
-0
-
-0101000
-+205 0 -203 0 *
-Ve
-1.00012357288492e-07
-0.0965609099167318 0.965609099170138 -0.241402274792534
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 21 0 0 0.0333333333333333
-2 21 1 0 0 0.0333333333333333
-0
-
-0101000
-+203 0 -201 0 *
-Ve
-1.00012163671385e-07
-0.112465218623456 0.963987588203796 -0.240996897050949
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 22 0 0 0.0333333333333333
-2 22 1 0 0 0.0333333333333333
-0
-
-0101000
-+201 0 -199 0 *
-Ve
-1.00011949092043e-07
-0.128283563508321 0.962126726315062 -0.240531681578766
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 23 0 0 0.0333333333333334
-2 23 1 0 0 0.0333333333333334
-0
-
-0101000
-+199 0 -197 0 *
-Ve
-1.00011717317363e-07
-0.14400460822077 0.96003072147436 -0.24000768036859
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 24 0 0 0.0333333333333333
-2 24 1 0 0 0.0333333333333333
-0
-
-0101000
-+197 0 -195 0 *
-Ve
-1.00011471337067e-07
-0.159617376893076 0.957704261360912 -0.239426065340228
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 25 0 0 0.0333333333333333
-2 25 1 0 0 0.0333333333333333
-0
-
-0101000
-+195 0 -193 0 *
-Ve
-1.00011214855481e-07
-0.175111288919893 0.955152485019948 -0.238788121254987
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 26 0 0 0.0333333333333333
-2 26 1 0 0 0.0333333333333333
-0
-
-0101000
-+193 0 -191 0 *
-Ve
-1.00010950988161e-07
-0.190476190475715 0.95238095238081 -0.238095238095202
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 27 0 0 0.0333333333333333
-2 27 1 0 0 0.0333333333333333
-0
-
-0101000
-+191 0 -189 0 *
-Ve
-1.00010683258417e-07
-0.205702382594637 0.949395611977367 -0.237348902994342
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 28 0 0 0.0333333333333333
-2 28 1 0 0 0.0333333333333333
-0
-
-0101000
-+189 0 -187 0 *
-Ve
-1.00010414196119e-07
-0.220780645684503 0.946202767221298 -0.236550691805324
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 29 0 0 0.0333333333333333
-2 29 1 0 0 0.0333333333333333
-0
-
-0101000
-+187 0 -185 0 *
-Ve
-1.00076180227716e-07
-0.235702260376798 0.942809041518919 -0.235702260380183
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 30 0 0 0.0333333333333333
-2 30 1 0 0 0.0333333333333333
-0
-
-0101000
-+185 0 -183 0 *
-Ve
-1.00002218111477e-07
-0.236550691770868 0.946202767083471 -0.220780645652826
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 31 0 0 0.0333333333333333
-2 31 1 0 0 0.0333333333333333
-0
-
-0101000
-+183 0 -181 0 *
-Ve
-1.00002157798718e-07
-0.237348902958836 0.949395611835345 -0.20570238256434
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 32 0 0 0.0333333333333333
-2 32 1 0 0 0.0333333333333333
-0
-
-0101000
-+181 0 -179 0 *
-Ve
-1.00002087939323e-07
-0.238095238058691 0.952380952234763 -0.190476190446967
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 33 0 0 0.0333333333333333
-2 33 1 0 0 0.0333333333333333
-0
-
-0101000
-+179 0 -177 0 *
-Ve
-1.00002009305777e-07
-0.238788121217519 0.955152484870077 -0.175111288892861
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 34 0 0 0.0333333333333333
-2 34 1 0 0 0.0333333333333333
-0
-
-0101000
-+177 0 -175 0 *
-Ve
-1.00001922766637e-07
-0.239426065301861 0.957704261207443 -0.15961737686792
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 35 0 0 0.0333333333333333
-2 35 1 0 0 0.0333333333333333
-0
-
-0101000
-+175 0 -173 0 *
-Ve
-1.00001829678178e-07
-0.240007680329386 0.960030721317545 -0.144004608197644
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 36 0 0 0.0333333333333334
-2 36 1 0 0 0.0333333333333334
-0
-
-0101000
-+173 0 -171 0 *
-Ve
-1.0000173139781e-07
-0.240531681538795 0.962126726155178 -0.128283563487368
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 37 0 0 0.0333333333333333
-2 37 1 0 0 0.0333333333333333
-0
-
-0101000
-+171 0 -169 0 *
-Ve
-1.00001630758918e-07
-0.240996897010286 0.963987588041144 -0.11246521860481
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 38 0 0 0.0333333333333333
-2 38 1 0 0 0.0333333333333333
-0
-
-0101000
-+169 0 -167 0 *
-Ve
-1.00001529763631e-07
-0.24140227475126 0.965609099005039 -0.0965609099005125
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 39 0 0 0.0333333333333333
-2 39 1 0 0 0.0333333333333333
-0
-
-0101000
-+167 0 -165 0 *
-Ve
-1.00001432201015e-07
-0.241746889165706 0.966987556662824 -0.0805822963885759
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 40 0 0 0.0333333333333333
-2 40 1 0 0 0.0333333333333333
-0
-
-0101000
-+165 0 -163 0 *
-Ve
-1.00001342051931e-07
-0.242029946831059 0.968119787324237 -0.064541319154955
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 41 0 0 0.0333333333333333
-2 41 1 0 0 0.0333333333333333
-0
-
-0101000
-+163 0 -161 0 *
-Ve
-1.00001263949057e-07
-0.242250791513054 0.969003166052218 -0.0484501583026153
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 42 0 0 0.0333333333333334
-2 42 1 0 0 0.0333333333333334
-0
-
-0101000
-+161 0 -159 0 *
-Ve
-1.00001203023981e-07
-0.242408908357231 0.969635633428924 -0.0323211877809671
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 43 0 0 0.0333333333333333
-2 43 1 0 0 0.0333333333333333
-0
-
-0101000
-+159 0 -157 0 *
-Ve
-1.00001164097414e-07
-0.242503927205074 0.970015708820298 -0.0161669284803398
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 44 0 0 0.0333333333333333
-2 44 1 0 0 0.0333333333333333
-0
-
-0101000
-+157 0 -155 0 *
-Ve
-1.00001150680247e-07
-0.242535624993179 0.970142499972717 -6.53878600184282e-24
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 45 0 0 0.0333333333333333
-2 45 1 0 0 0.0333333333333333
-0
-
-0101000
-+155 0 -153 0 *
-Ve
-1.00001164104246e-07
-0.242503927205074 0.970015708820297 0.0161669284803398
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 46 0 0 0.0333333333333333
-2 46 1 0 0 0.0333333333333333
-0
-
-0101000
-+153 0 -151 0 *
-Ve
-1.00001203069221e-07
-0.242408908357231 0.969635633428924 0.0323211877809671
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 47 0 0 0.0333333333333333
-2 47 1 0 0 0.0333333333333333
-0
-
-0101000
-+151 0 -149 0 *
-Ve
-1.00001263921624e-07
-0.242250791513054 0.969003166052218 0.0484501583026153
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 48 0 0 0.0333333333333333
-2 48 1 0 0 0.0333333333333333
-0
-
-0101000
-+149 0 -147 0 *
-Ve
-1.0000134204636e-07
-0.242029946831059 0.968119787324237 0.064541319154955
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 49 0 0 0.0333333333333333
-2 49 1 0 0 0.0333333333333333
-0
-
-0101000
-+147 0 -145 0 *
-Ve
-1.0000143221107e-07
-0.241746889165706 0.966987556662824 0.0805822963885759
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 50 0 0 0.0333333333333333
-2 50 1 0 0 0.0333333333333333
-0
-
-0101000
-+145 0 -143 0 *
-Ve
-1.00001529802759e-07
-0.24140227475126 0.965609099005039 0.0965609099005125
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 51 0 0 0.0333333333333333
-2 51 1 0 0 0.0333333333333333
-0
-
-0101000
-+143 0 -141 0 *
-Ve
-1.00001630661203e-07
-0.240996897010286 0.963987588041144 0.11246521860481
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 52 0 0 0.0333333333333333
-2 52 1 0 0 0.0333333333333333
-0
-
-0101000
-+141 0 -139 0 *
-Ve
-1.00001731496574e-07
-0.240531681538795 0.962126726155178 0.128283563487368
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 53 0 0 0.0333333333333334
-2 53 1 0 0 0.0333333333333334
-0
-
-0101000
-+139 0 -137 0 *
-Ve
-1.00001829620714e-07
-0.240007680329386 0.960030721317545 0.144004608197644
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 54 0 0 0.0333333333333333
-2 54 1 0 0 0.0333333333333333
-0
-
-0101000
-+137 0 -135 0 *
-Ve
-1.00001922713794e-07
-0.239426065301861 0.957704261207443 0.15961737686792
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 55 0 0 0.0333333333333333
-2 55 1 0 0 0.0333333333333333
-0
-
-0101000
-+135 0 -133 0 *
-Ve
-1.00002009305777e-07
-0.238788121217519 0.955152484870077 0.175111288892861
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 56 0 0 0.0333333333333333
-2 56 1 0 0 0.0333333333333333
-0
-
-0101000
-+133 0 -131 0 *
-Ve
-1.00002087998138e-07
-0.238095238058691 0.952380952234763 0.190476190446967
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 57 0 0 0.0333333333333333
-2 57 1 0 0 0.0333333333333333
-0
-
-0101000
-+131 0 -129 0 *
-Ve
-1.00002157851081e-07
-0.237348902958836 0.949395611835345 0.20570238256434
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 58 0 0 0.0333333333333333
-2 58 1 0 0 0.0333333333333333
-0
-
-0101000
-+129 0 -127 0 *
-Ve
-1.00002218012511e-07
-0.236550691770868 0.946202767083471 0.220780645652826
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 59 0 0 0.0333333333333333
-2 59 1 0 0 0.0333333333333333
-0
-
-0101000
-+127 0 -125 0 *
-Ve
-1.00076180259827e-07
-0.235702260376798 0.942809041518919 0.235702260380183
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 60 0 0 0.0333333333333333
-2 60 1 0 0 0.0333333333333333
-0
-
-0101000
-+125 0 -123 0 *
-Ve
-1.00010414199228e-07
-0.220780645684503 0.946202767221298 0.236550691805324
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 61 0 0 0.0333333333333333
-2 61 1 0 0 0.0333333333333333
-0
-
-0101000
-+123 0 -121 0 *
-Ve
-1.0001068324256e-07
-0.205702382594637 0.949395611977367 0.237348902994342
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 62 0 0 0.0333333333333333
-2 62 1 0 0 0.0333333333333333
-0
-
-0101000
-+121 0 -119 0 *
-Ve
-1.00010951047469e-07
-0.190476190475715 0.95238095238081 0.238095238095203
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 63 0 0 0.0333333333333333
-2 63 1 0 0 0.0333333333333333
-0
-
-0101000
-+119 0 -117 0 *
-Ve
-1.00011214747447e-07
-0.175111288919893 0.955152485019948 0.238788121254987
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 64 0 0 0.0333333333333333
-2 64 1 0 0 0.0333333333333333
-0
-
-0101000
-+117 0 -115 0 *
-Ve
-1.00011471360379e-07
-0.159617376893076 0.957704261360912 0.239426065340228
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 65 0 0 0.0333333333333333
-2 65 1 0 0 0.0333333333333333
-0
-
-0101000
-+115 0 -113 0 *
-Ve
-1.00011717266216e-07
-0.14400460822077 0.96003072147436 0.24000768036859
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 66 0 0 0.0333333333333334
-2 66 1 0 0 0.0333333333333334
-0
-
-0101000
-+113 0 -111 0 *
-Ve
-1.00011949166002e-07
-0.128283563508321 0.962126726315062 0.240531681578766
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 67 0 0 0.0333333333333333
-2 67 1 0 0 0.0333333333333333
-0
-
-0101000
-+111 0 -109 0 *
-Ve
-1.00012163642223e-07
-0.112465218623456 0.963987588203796 0.240996897050949
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 68 0 0 0.0333333333333333
-2 68 1 0 0 0.0333333333333333
-0
-
-0101000
-+109 0 -107 0 *
-Ve
-1.00012357341227e-07
-0.0965609099167319 0.965609099170138 0.241402274792534
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 69 0 0 0.0333333333333333
-2 69 1 0 0 0.0333333333333333
-0
-
-0101000
-+107 0 -105 0 *
-Ve
-1.00012527070278e-07
-0.0805822964022618 0.966987556830027 0.241746889207507
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 70 0 0 0.0333333333333333
-2 70 1 0 0 0.0333333333333333
-0
-
-0101000
-+105 0 -103 0 *
-Ve
-1.00012670112958e-07
-0.0645413191660162 0.968119787493186 0.242029946873296
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 71 0 0 0.0333333333333333
-2 71 1 0 0 0.0333333333333333
-0
-
-0101000
-+103 0 -101 0 *
-Ve
-1.00012784040323e-07
-0.0484501583109777 0.96900316622254 0.242250791555635
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 72 0 0 0.0333333333333334
-2 72 1 0 0 0.0333333333333334
-0
-
-0101000
-+101 0 -99 0 *
-Ve
-1.00012866918536e-07
-0.032321187786574 0.969635633600236 0.242408908400059
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 73 0 0 0.0333333333333333
-2 73 1 0 0 0.0333333333333333
-0
-
-0101000
-+99 0 -97 0 *
-Ve
-1.00012917198655e-07
-0.0161669284831527 0.970015708992205 0.242503927248051
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 74 0 0 0.0333333333333333
-2 74 1 0 0 0.0333333333333333
-0
-
-0101000
-+97 0 -95 0 *
-Ve
-1.00012934052267e-07
-3.90312782094782e-17 0.970142500144824 0.242535625036206
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 75 0 0 0.0333333333333333
-2 75 1 0 0 0.0333333333333333
-0
-
-0101000
-+95 0 -93 0 *
-Ve
-1.00012917198926e-07
--0.0161669284831528 0.970015708992205 0.242503927248051
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 76 0 0 0.0333333333333333
-2 76 1 0 0 0.0333333333333333
-0
-
-0101000
-+93 0 -91 0 *
-Ve
-1.00012866884067e-07
--0.0323211877865739 0.969635633600236 0.242408908400059
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 77 0 0 0.0333333333333333
-2 77 1 0 0 0.0333333333333333
-0
-
-0101000
-+91 0 -89 0 *
-Ve
-1.00012784056647e-07
--0.0484501583109776 0.96900316622254 0.242250791555635
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 78 0 0 0.0333333333333333
-2 78 1 0 0 0.0333333333333333
-0
-
-0101000
-+89 0 -87 0 *
-Ve
-1.0001267015388e-07
--0.0645413191660161 0.968119787493185 0.242029946873296
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 79 0 0 0.0333333333333333
-2 79 1 0 0 0.0333333333333333
-0
-
-0101000
-+87 0 -85 0 *
-Ve
-1.00012527037202e-07
--0.0805822964022617 0.966987556830027 0.241746889207507
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 80 0 0 0.0333333333333333
-2 80 1 0 0 0.0333333333333333
-0
-
-0101000
-+85 0 -83 0 *
-Ve
-1.00012357282367e-07
--0.0965609099167318 0.965609099170137 0.241402274792534
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 81 0 0 0.0333333333333333
-2 81 1 0 0 0.0333333333333333
-0
-
-0101000
-+83 0 -81 0 *
-Ve
-1.0001216365972e-07
--0.112465218623456 0.963987588203796 0.240996897050949
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 82 0 0 0.0333333333333333
-2 82 1 0 0 0.0333333333333333
-0
-
-0101000
-+81 0 -79 0 *
-Ve
-1.00011949114029e-07
--0.128283563508321 0.962126726315062 0.240531681578766
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 83 0 0 0.0333333333333334
-2 83 1 0 0 0.0333333333333334
-0
-
-0101000
-+79 0 -77 0 *
-Ve
-1.00011717317363e-07
--0.14400460822077 0.96003072147436 0.24000768036859
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 84 0 0 0.0333333333333333
-2 84 1 0 0 0.0333333333333333
-0
-
-0101000
-+77 0 -75 0 *
-Ve
-1.00011471308876e-07
--0.159617376893076 0.957704261360912 0.239426065340228
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 85 0 0 0.0333333333333333
-2 85 1 0 0 0.0333333333333333
-0
-
-0101000
-+75 0 -73 0 *
-Ve
-1.00011214852817e-07
--0.175111288919893 0.955152485019948 0.238788121254987
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 86 0 0 0.0333333333333333
-2 86 1 0 0 0.0333333333333333
-0
-
-0101000
-+73 0 -71 0 *
-Ve
-1.00010951003145e-07
--0.190476190475715 0.95238095238081 0.238095238095202
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 87 0 0 0.0333333333333333
-2 87 1 0 0 0.0333333333333333
-0
-
-0101000
-+71 0 -69 0 *
-Ve
-1.00010683245542e-07
--0.205702382594637 0.949395611977367 0.237348902994342
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 88 0 0 0.0333333333333333
-2 88 1 0 0 0.0333333333333333
-0
-
-0101000
-+69 0 -67 0 *
-Ve
-1.00010414201445e-07
--0.220780645684503 0.946202767221298 0.236550691805324
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 89 0 0 0.0333333333333333
-2 89 1 0 0 0.0333333333333333
-0
-
-0101000
-+67 0 -65 0 *
-Ve
-1.00076180213871e-07
--0.235702260376798 0.94280904151892 0.235702260380183
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 90 0 0 0.0333333333333333
-2 90 1 0 0 0.0333333333333333
-0
-
-0101000
-+65 0 -63 0 *
-Ve
-1.00002218111477e-07
--0.236550691770868 0.946202767083471 0.220780645652826
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 91 0 0 0.0333333333333333
-2 91 1 0 0 0.0333333333333333
-0
-
-0101000
-+63 0 -61 0 *
-Ve
-1.00002157798718e-07
--0.237348902958836 0.949395611835345 0.20570238256434
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 92 0 0 0.0333333333333333
-2 92 1 0 0 0.0333333333333333
-0
-
-0101000
-+61 0 -59 0 *
-Ve
-1.00002087939323e-07
--0.238095238058691 0.952380952234763 0.190476190446967
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 93 0 0 0.0333333333333333
-2 93 1 0 0 0.0333333333333333
-0
-
-0101000
-+59 0 -57 0 *
-Ve
-1.00002009301198e-07
--0.238788121217519 0.955152484870077 0.175111288892861
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 94 0 0 0.0333333333333333
-2 94 1 0 0 0.0333333333333333
-0
-
-0101000
-+57 0 -55 0 *
-Ve
-1.00001922766637e-07
--0.239426065301861 0.957704261207443 0.15961737686792
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 95 0 0 0.0333333333333333
-2 95 1 0 0 0.0333333333333333
-0
-
-0101000
-+55 0 -53 0 *
-Ve
-1.00001829678178e-07
--0.240007680329386 0.960030721317545 0.144004608197644
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 96 0 0 0.0333333333333334
-2 96 1 0 0 0.0333333333333334
-0
-
-0101000
-+53 0 -51 0 *
-Ve
-1.0000173139781e-07
--0.240531681538795 0.962126726155178 0.128283563487368
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 97 0 0 0.0333333333333333
-2 97 1 0 0 0.0333333333333333
-0
-
-0101000
-+51 0 -49 0 *
-Ve
-1.00001630761675e-07
--0.240996897010286 0.963987588041144 0.11246521860481
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 98 0 0 0.0333333333333333
-2 98 1 0 0 0.0333333333333333
-0
-
-0101000
-+49 0 -47 0 *
-Ve
-1.00001529766197e-07
--0.24140227475126 0.965609099005039 0.0965609099005125
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 99 0 0 0.0333333333333333
-2 99 1 0 0 0.0333333333333333
-0
-
-0101000
-+47 0 -45 0 *
-Ve
-1.00001432201015e-07
--0.241746889165706 0.966987556662824 0.0805822963885759
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 100 0 0 0.0333333333333333
-2 100 1 0 0 0.0333333333333333
-0
-
-0101000
-+45 0 -43 0 *
-Ve
-1.00001342051931e-07
--0.242029946831059 0.968119787324237 0.064541319154955
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 101 0 0 0.0333333333333333
-2 101 1 0 0 0.0333333333333333
-0
-
-0101000
-+43 0 -41 0 *
-Ve
-1.00001263949057e-07
--0.242250791513054 0.969003166052218 0.0484501583026153
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 102 0 0 0.0333333333333334
-2 102 1 0 0 0.0333333333333334
-0
-
-0101000
-+41 0 -39 0 *
-Ve
-1.00001203023981e-07
--0.242408908357231 0.969635633428924 0.0323211877809671
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 103 0 0 0.0333333333333333
-2 103 1 0 0 0.0333333333333333
-0
-
-0101000
-+39 0 -37 0 *
-Ve
-1.00001164097414e-07
--0.242503927205074 0.970015708820298 0.0161669284803398
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 104 0 0 0.0333333333333333
-2 104 1 0 0 0.0333333333333333
-0
-
-0101000
-+37 0 -35 0 *
-Ve
-1.00001150680247e-07
--0.242535624993179 0.970142499972717 6.53878600184282e-24
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 105 0 0 0.0333333333333333
-2 105 1 0 0 0.0333333333333333
-0
-
-0101000
-+35 0 -33 0 *
-Ve
-1.00001164104246e-07
--0.242503927205074 0.970015708820297 -0.0161669284803398
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 106 0 0 0.0333333333333333
-2 106 1 0 0 0.0333333333333333
-0
-
-0101000
-+33 0 -31 0 *
-Ve
-1.00001203069221e-07
--0.242408908357231 0.969635633428924 -0.0323211877809671
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 107 0 0 0.0333333333333333
-2 107 1 0 0 0.0333333333333333
-0
-
-0101000
-+31 0 -29 0 *
-Ve
-1.00001263921624e-07
--0.242250791513054 0.969003166052218 -0.0484501583026153
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 108 0 0 0.0333333333333333
-2 108 1 0 0 0.0333333333333333
-0
-
-0101000
-+29 0 -27 0 *
-Ve
-1.0000134204636e-07
--0.242029946831059 0.968119787324237 -0.064541319154955
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 109 0 0 0.0333333333333333
-2 109 1 0 0 0.0333333333333333
-0
-
-0101000
-+27 0 -25 0 *
-Ve
-1.0000143221339e-07
--0.241746889165706 0.966987556662824 -0.0805822963885759
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 110 0 0 0.0333333333333333
-2 110 1 0 0 0.0333333333333333
-0
-
-0101000
-+25 0 -23 0 *
-Ve
-1.00001529805325e-07
--0.24140227475126 0.965609099005039 -0.0965609099005125
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 111 0 0 0.0333333333333333
-2 111 1 0 0 0.0333333333333333
-0
-
-0101000
-+23 0 -21 0 *
-Ve
-1.00001630661203e-07
--0.240996897010286 0.963987588041144 -0.11246521860481
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 112 0 0 0.0333333333333333
-2 112 1 0 0 0.0333333333333333
-0
-
-0101000
-+21 0 -19 0 *
-Ve
-1.00001731496574e-07
--0.240531681538795 0.962126726155178 -0.128283563487368
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 113 0 0 0.0333333333333334
-2 113 1 0 0 0.0333333333333334
-0
-
-0101000
-+19 0 -17 0 *
-Ve
-1.00001829620714e-07
--0.240007680329386 0.960030721317545 -0.144004608197644
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 114 0 0 0.0333333333333333
-2 114 1 0 0 0.0333333333333333
-0
-
-0101000
-+17 0 -15 0 *
-Ve
-1.00001922713794e-07
--0.239426065301861 0.957704261207443 -0.15961737686792
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 115 0 0 0.0333333333333333
-2 115 1 0 0 0.0333333333333333
-0
-
-0101000
-+15 0 -13 0 *
-Ve
-1.00002009310356e-07
--0.238788121217519 0.955152484870077 -0.175111288892861
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 116 0 0 0.0333333333333333
-2 116 1 0 0 0.0333333333333333
-0
-
-0101000
-+13 0 -11 0 *
-Ve
-1.00002088002031e-07
--0.238095238058691 0.952380952234763 -0.190476190446967
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 117 0 0 0.0333333333333333
-2 117 1 0 0 0.0333333333333333
-0
-
-0101000
-+11 0 -9 0 *
-Ve
-1.00002157851081e-07
--0.237348902958836 0.949395611835345 -0.20570238256434
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 118 0 0 0.0333333333333333
-2 118 1 0 0 0.0333333333333333
-0
-
-0101000
-+9 0 -7 0 *
-Ve
-1.00002218012511e-07
--0.236550691770868 0.946202767083471 -0.220780645652826
-0 0
-
-0101101
-*
-Ed
- 1e-07 1 1 0
-1 119 0 0 0.0333333333333333
-2 119 1 0 0 0.0333333333333333
-0
-
-0101000
-+7 0 -5 0 *
-Ed
- 1e-07 1 1 0
-1 120 0 0 0.0333333333333333
-2 120 1 0 0 0.0333333333333333
-0
-
-0101000
-+5 0 -242 0 *
-Wi
-
-0101100
-+240 0 +238 0 +236 0 +234 0 +232 0 +230 0 +228 0 +226 0 +224 0 +222 0
-+220 0 +218 0 +216 0 +214 0 +212 0 +210 0 +208 0 +206 0 +204 0 +202 0
-+200 0 +198 0 +196 0 +194 0 +192 0 +190 0 +188 0 +186 0 +184 0 +182 0
-+180 0 +178 0 +176 0 +174 0 +172 0 +170 0 +168 0 +166 0 +164 0 +162 0
-+160 0 +158 0 +156 0 +154 0 +152 0 +150 0 +148 0 +146 0 +144 0 +142 0
-+140 0 +138 0 +136 0 +134 0 +132 0 +130 0 +128 0 +126 0 +124 0 +122 0
-+120 0 +118 0 +116 0 +114 0 +112 0 +110 0 +108 0 +106 0 +104 0 +102 0
-+100 0 +98 0 +96 0 +94 0 +92 0 +90 0 +88 0 +86 0 +84 0 +82 0
-+80 0 +78 0 +76 0 +74 0 +72 0 +70 0 +68 0 +66 0 +64 0 +62 0
-+60 0 +58 0 +56 0 +54 0 +52 0 +50 0 +48 0 +46 0 +44 0 +42 0
-+40 0 +38 0 +36 0 +34 0 +32 0 +30 0 +28 0 +26 0 +24 0 +22 0
-+20 0 +18 0 +16 0 +14 0 +12 0 +10 0 +8 0 +6 0 +4 0 +3 0
-*
-Fa
-0 1e-07 1 0
-
-1101000
--2 0 *
-
-+1 0
\ No newline at end of file
set TheFileName shading_014.brep
-if { [string compare $command "shading"] == 0 } {
- set bug_freenodes "OCC22687"
- set nbfreenodes(All) 1
-}
+###if { [string compare $command "shading"] == 0 } {
+### set bug_freenodes "OCC22687"
+### set nbfreenodes(All) 1
+###}
set nbfreenodes(All) 1
} else {
set bug_freelinks "OCC23105"
- set nbfree(ALL) 4
+### set nbfree(ALL) 4
+ if { [string compare $command "mesh"] == 0 } {
+ set nbfree(ALL) 8
+ } else {
+ set nbfree(ALL) 2
+ }
set nbfreenodes(All) 4
}
set os $env(os_type)
}
if { [string compare $command "shading"] == 0 } {
- set nbt 14
+### set nbt 14
+ set nbt 9
set nbn 83
if {
[string compare $os "Mandriva2008"] == 0
- || [string compare $os "Debian40"] == 0
+ || [string compare $os "Debian60-64"] == 0
} {
- set nbl 19
- set nbfree($os) $nbl
+### set nbl 19
+### set nbfree($os) $nbl
## else
## set nbl 17
}
set nbfreenodes($os) $nbn
} else {
set bug_withouttri "OCC23105"
- set nbt 14
+### set nbt 14
+ set nbt 8
set nbn 60
-## set nbl 2
+ set nbl 3
set nbwithouttri($os) $nbt
-## set nbfree($os) $nbl
+ set nbfree($os) $nbl
set nbfreenodes($os) $nbn
}
}
set rel_tol 1.3
set nbwithouttri(ALL) 6
set nbfreenodes(ALL) 1
- set bug_freelinks "OCC22687"
- set nbfree(ALL) 2
+### set bug_freelinks "OCC22687"
+### set nbfree(ALL) 2
} else {
set nbfreenodes(ALL) 2
set nbwithouttri(ALL) 5
}
set nbfree($os) $nb
}
-if { [string compare $command "shading"] == 0 } {
- set bug_freelinks "OCC22687"
- set nbfree(ALL) 2
-}
+###if { [string compare $command "shading"] == 0 } {
+### set bug_freelinks "OCC22687"
+### set nbfree(ALL) 2
+###}
set TheFileName shading_wrongshape_029.brep
-set bug_withouttri "OCC22687"
-set nbwithouttri(All) 1
-set bug_freelinks "OCC22687"
-if { [string compare $command "shading"] == 0 } {
- set bug_freenodes "OCC23105"
- set nbfreenodes(ALL) 2
- set nbfree(ALL) 12
-} else {
- set bug_freenodes "OCC23105"
- set nbfreenodes(ALL) 2
- set nbfree(ALL) 8
-}
+###set bug_withouttri "OCC22687"
+###set nbwithouttri(All) 1
+###set bug_freelinks "OCC22687"
+###if { [string compare $command "shading"] == 0 } {
+### set bug_freenodes "OCC23105"
+### set nbfreenodes(ALL) 2
+### set nbfree(ALL) 12
+###} else {
+### set bug_freenodes "OCC23105"
+### set nbfreenodes(ALL) 2
+### set nbfree(ALL) 8
+###}