1. Unification of the polygons creation (it is regardless of arguments order).
2. Output of 2dintersect DRAW-command was changed.
3. Geom2dGcc_Circ2d2TanRadGeo.cxx:
Precise intersection point found by Extrema Curve-Curve method (dot product between every tangent vector and vector between points on two curves must be equal to zero).
4. Some comments have been translated from French to English.
Some test case have been updated.
Changes in accordance with the last remark
Test case for issue CR25593
#include <Standard_NegativeValue.hxx>
#include <Standard_OutOfRange.hxx>
+static const Standard_Integer aNbSolMAX = 16;
// circulaire tangent a deux cercles et de rayon donne
//====================================================
const Geom2dGcc_QualifiedCurve& Qualified2 ,
const Standard_Real Radius ,
const Standard_Real Tolerance ):
- cirsol(1,16) ,
- qualifier1(1,16),
- qualifier2(1,16),
- TheSame1(1,16) ,
- TheSame2(1,16) ,
- pnttg1sol(1,16),
- pnttg2sol(1,16),
- par1sol(1,16) ,
- par2sol(1,16) ,
- pararg1(1,16) ,
- pararg2(1,16)
+ cirsol(1,aNbSolMAX) ,
+ qualifier1(1,aNbSolMAX),
+ qualifier2(1,aNbSolMAX),
+ TheSame1(1,aNbSolMAX) ,
+ TheSame2(1,aNbSolMAX) ,
+ pnttg1sol(1,aNbSolMAX),
+ pnttg2sol(1,aNbSolMAX),
+ par1sol(1,aNbSolMAX) ,
+ par2sol(1,aNbSolMAX) ,
+ pararg1(1,aNbSolMAX) ,
+ pararg2(1,aNbSolMAX)
{
if (Radius < 0.) { Standard_NegativeValue::Raise(); }
else {
#include <Geom2dGcc_CurveToolGeo.hxx>
#include <Geom2dInt_GInter.hxx>
+static const Standard_Integer aNbSolMAX = 16;
+
// circulaire tant a une courbe et une droite ,de rayon donne
//==============================================================
// initialisation des champs. +
//========================================================================
-cirsol(1,16) ,
-qualifier1(1,16),
-qualifier2(1,16),
-TheSame1(1,16) ,
-TheSame2(1,16) ,
-pnttg1sol(1,16),
-pnttg2sol(1,16),
-par1sol(1,16) ,
-par2sol(1,16) ,
-pararg1(1,16) ,
-pararg2(1,16)
+cirsol(1,aNbSolMAX) ,
+qualifier1(1,aNbSolMAX),
+qualifier2(1,aNbSolMAX),
+TheSame1(1,aNbSolMAX) ,
+TheSame2(1,aNbSolMAX) ,
+pnttg1sol(1,aNbSolMAX),
+pnttg2sol(1,aNbSolMAX),
+par1sol(1,aNbSolMAX) ,
+par2sol(1,aNbSolMAX) ,
+pararg1(1,aNbSolMAX) ,
+pararg2(1,aNbSolMAX)
{
//========================================================================
// initialisation des champs. +
//========================================================================
-cirsol(1,16) ,
-qualifier1(1,16),
-qualifier2(1,16),
-TheSame1(1,16) ,
-TheSame2(1,16) ,
-pnttg1sol(1,16),
-pnttg2sol(1,16),
-par1sol(1,16) ,
-par2sol(1,16) ,
-pararg1(1,16) ,
-pararg2(1,16)
+cirsol(1,aNbSolMAX) ,
+qualifier1(1,aNbSolMAX),
+qualifier2(1,aNbSolMAX),
+TheSame1(1,aNbSolMAX) ,
+TheSame2(1,aNbSolMAX) ,
+pnttg1sol(1,aNbSolMAX),
+pnttg2sol(1,aNbSolMAX),
+par1sol(1,aNbSolMAX) ,
+par2sol(1,aNbSolMAX) ,
+pararg1(1,aNbSolMAX) ,
+pararg2(1,aNbSolMAX)
{
//========================================================================
// initialisation des champs. +
//========================================================================
-cirsol(1,16) ,
-qualifier1(1,16),
-qualifier2(1,16),
-TheSame1(1,16) ,
-TheSame2(1,16) ,
-pnttg1sol(1,16),
-pnttg2sol(1,16),
-par1sol(1,16) ,
-par2sol(1,16) ,
-pararg1(1,16) ,
-pararg2(1,16)
+cirsol(1,aNbSolMAX) ,
+qualifier1(1,aNbSolMAX),
+qualifier2(1,aNbSolMAX),
+TheSame1(1,aNbSolMAX) ,
+TheSame2(1,aNbSolMAX) ,
+pnttg1sol(1,aNbSolMAX),
+pnttg2sol(1,aNbSolMAX),
+par1sol(1,aNbSolMAX) ,
+par2sol(1,aNbSolMAX) ,
+pararg1(1,aNbSolMAX) ,
+pararg2(1,aNbSolMAX)
{
//========================================================================
}
}
+//=======================================================================
+//function : PrecRoot
+//purpose : In case, when curves has tangent zones, intersection point
+// found may be precised. This function uses precision algorithm
+// of Extrema Curve-Curve method (dot product between every
+// tangent vector and vector between points in two curves must
+// be equal to zero).
+//=======================================================================
static void PrecRoot(const Adaptor3d_OffsetCurve& theC1,
const Adaptor3d_OffsetCurve& theC2,
const Standard_Real theU0,
const Standard_Real theV0,
- const Standard_Real theUmin,
- const Standard_Real theUmax,
- const Standard_Real theVmin,
- const Standard_Real theVmax,
Standard_Real& theUfinal,
Standard_Real& theVfinal)
{
- const Standard_Real aInitStepU = (theUmax - theUmin)/2.0,
- aInitStepV = (theVmax - theVmin)/2.0;
+/*
+It is necessary for precision to solve the system
+
+ \left\{\begin{matrix}
+ (x_{1}(u)-x_{2}(v))*{x_{1}(u)}'+(y_{1}(u)-y_{2}(v))*{y_{1}(u)}'=0\\
+ (x_{1}(u)-x_{2}(v))*{x_{2}(v)}'+(y_{1}(u)-y_{2}(v))*{y_{2}(v)}'=0
+ \end{matrix}\right.
+
+Precision of any 2*2-system (two equation and two variables)
+
+ \left\{\begin{matrix}
+ S_{1}(u,v)=0\\
+ S_{2}(u,v)=0
+ \end{matrix}\right.
+
+by Newton method can be made as follows:
+
+ u=u_{0}-\left (\frac{\frac{\partial S_{2}}{\partial v}*S_{1}-
+ \frac{\partial S_{1}}{\partial v}*S_{2}}
+ {\frac{\partial S_{1}}{\partial u}*
+ \frac{\partial S_{2}}{\partial v}-
+ \frac{\partial S_{1}}{\partial v}*
+ \frac{\partial S_{2}}{\partial u}} \right )_{u_{0},v_{0}}\\
+ v=v_{0}-\left (\frac{\frac{\partial S_{1}}{\partial u}*S_{2}-
+ \frac{\partial S_{2}}{\partial u}*S_{1}}
+ {\frac{\partial S_{1}}{\partial u}*
+ \frac{\partial S_{2}}{\partial v}-
+ \frac{\partial S_{1}}{\partial v}*
+ \frac{\partial S_{2}}{\partial u}} \right )_{u_{0},v_{0}}
+ \end{matrix}\right.
+
+where u_{0} and v_{0} are initial values or values computed on previous iteration.
+*/
- Standard_Real aStepU = aInitStepU, aStepV = aInitStepV;
+ theUfinal = theU0;
+ theVfinal = theV0;
- const Standard_Real aTol = Precision::PConfusion() * Precision::PConfusion();
const Standard_Integer aNbIterMax = 100;
- gp_Pnt2d aP1, aP2;
- gp_Vec2d aD1, aD2;
+ Standard_Real aU = theU0, aV = theV0;
+ gp_Pnt2d aPu, aPv;
+ gp_Vec2d aD1u, aD1v, aD2u, aD2v;
- Geom2dGcc_CurveToolGeo::D1(theC1, theU0, aP1, aD1);
- Geom2dGcc_CurveToolGeo::D1(theC2, theV0, aP2, aD2);
+ Standard_Integer aNbIter = 0;
- gp_Vec2d vP12(aP1.XY() - aP2.XY());
+ Standard_Real aStepU = 0.0, aStepV = 0.0;
- Standard_Real aU = theU0, aV = theV0;
- theUfinal = theU0;
- theVfinal = theV0;
+ Standard_Real aSQDistPrev = RealFirst();
- Standard_Real aSQDistPrev = aP1.SquareDistance(aP2);
+ Geom2dGcc_CurveToolGeo::D2(theC1, aU, aPu, aD1u, aD2u);
+ Geom2dGcc_CurveToolGeo::D2(theC2, aV, aPv, aD1v, aD2v);
- Standard_Integer aNbIter = 1;
+ const Standard_Real aCrProd = Abs(aD1u.Crossed(aD1v));
+ if(aCrProd*aCrProd > 1.0e-6*
+ aD1u.SquareMagnitude()*aD1v.SquareMagnitude())
+ {
+ //Curves are not tangent. Therefore, we consider that
+ //2D-intersection algorithm have found good point which
+ //did not need in more precision.
+ return;
+ }
do
{
- Standard_Real aDetH = aD1.Y()*aD2.X() - aD1.X()*aD2.Y();
- if(aDetH == 0.0)
- break;
-
- aU += aStepU*(aD2.Y() * vP12.X() - aD2.X()*vP12.Y())/aDetH;
- aV += aStepV*(aD1.Y() * vP12.X() - aD1.X()*vP12.Y())/aDetH;
-
- if(Abs(aU - theUmin) > 1000.0)
- //method diverges
- return;
-
- if(Abs(aU - theUmax) > 1000.0)
- //method diverges
- return;
+ aNbIter++;
- if(Abs(aV - theVmin) > 1000.0)
- //method diverges
- return;
+ gp_Vec2d aVuv(aPv, aPu);
- if(Abs(aV - theVmax) > 1000.0)
- //method diverges
- return;
-
- Geom2dGcc_CurveToolGeo::D1(theC1, aU, aP1, aD1);
- Geom2dGcc_CurveToolGeo::D1(theC2, aV, aP2, aD2);
- const Standard_Real aSQDist = aP1.SquareDistance(aP2);
-
- if(Precision::IsInfinite(aSQDist))
- //method diverges
- return;
-
- vP12.SetXY(aP1.XY() - aP2.XY());
+ Standard_Real aSQDist = aVuv.SquareMagnitude();
+ if(IsEqual(aSQDist, 0.0))
+ break;
- if(aSQDist < aSQDistPrev)
+ if((aNbIter == 1) || (aSQDist < aSQDistPrev))
{
aSQDistPrev = aSQDist;
- aStepU = aInitStepU;
- aStepV = aInitStepV;
theUfinal = aU;
theVfinal = aV;
}
- else
- {
- aStepU /= 2.0;
- aStepV /= 2.0;
- }
- }
- while((aNbIter++ < aNbIterMax) && ((aStepU > aTol) || (aStepV > aTol)));
-
- Standard_Boolean isInBound = Standard_True;
- if(theUfinal < theUmin)
- {
- aU = theUfinal;
- aV = theVfinal;
-
- theUfinal = theUmin;
- isInBound = Standard_False;
- }
-
- if(theUfinal > theUmax)
- {
- aU = theUfinal;
- aV = theVfinal;
- theUfinal = theUmax;
- isInBound = Standard_False;
- }
- if(!isInBound)
- {
- Geom2dGcc_CurveToolGeo::D1(theC1, aU, aP1, aD1);
- Geom2dGcc_CurveToolGeo::D1(theC2, aV, aP2, aD2);
- Standard_Real aV1 = (aD2.X() == 0.0) ? aV :((theUfinal - aU)*aD1.X() + aV*aD2.X() + (aP1.X() - aP2.X()))/aD2.X();
- Standard_Real aV2 = (aD2.Y() == 0.0) ? aV :((theUfinal - aU)*aD1.Y() + aV*aD2.Y() + (aP1.Y() - aP2.Y()))/aD2.Y();
+ Standard_Real aG1 = aD1u.Magnitude();
+ Standard_Real aG2 = aD1v.Magnitude();
- if(aV1 < theVmin)
- aV1 = theVmin;
+ if(IsEqual(aG1, 0.0) || IsEqual(aG2, 0.0))
+ {//Here we do not processing singular cases.
+ break;
+ }
- if(aV1 > theVmax)
- aV1 = theVmax;
+ Standard_Real aF1 = aVuv.Dot(aD1u);
+ Standard_Real aF2 = aVuv.Dot(aD1v);
- if(aV2 < theVmin)
- aV2 = theVmin;
+ Standard_Real aFIu = aVuv.Dot(aD2u);
+ Standard_Real aFIv = aVuv.Dot(aD2v);
+ Standard_Real aPSIu = aD1u.Dot(aD2u);
+ Standard_Real aPSIv = aD1v.Dot(aD2v);
- if(aV2 > theVmax)
- aV2 = theVmax;
+ Standard_Real aTheta = aD1u*aD1v;
- aP1 = Geom2dGcc_CurveToolGeo::Value(theC1,theUfinal);
- aP2 = Geom2dGcc_CurveToolGeo::Value(theC2,aV1);
+ Standard_Real aS1 = aF1/aG1;
+ Standard_Real aS2 = aF2/aG2;
- Standard_Real aSQ1 = aP1.SquareDistance(aP2);
+ Standard_Real aDS1u = (aG1*aG1+aFIu)/aG1 - (aS1*aPSIu/(aG1*aG1));
+ Standard_Real aDS1v = -aTheta/aG1;
+ Standard_Real aDS2u = aTheta/aG2;
+ Standard_Real aDS2v = (aFIv-aG2*aG2)/aG2 - (aS2*aPSIv/(aG2*aG2));
- aP2 = Geom2dGcc_CurveToolGeo::Value(theC2,aV2);
- Standard_Real aSQ2 = aP1.SquareDistance(aP2);
+ Standard_Real aDet = aDS1u*aDS2v-aDS1v*aDS2u;
- if(aSQ1 < aSQ2)
- theVfinal = aV1;
+ if(IsEqual(aDet, 0.0))
+ {
+ if(!IsEqual(aStepV, 0.0) && !IsEqual(aDS1u, 0.0))
+ {
+ aV += aStepV;
+ aU = aU - (aDS1v*aStepV - aS1)/aDS1u;
+ }
+ else if(!IsEqual(aStepU, 0.0) && !IsEqual(aDS1v, 0.0))
+ {
+ aU += aStepU;
+ aV = aV - (aDS1u*aStepU - aS1)/aDS1v;
+ }
+ else
+ {
+ break;
+ }
+ }
else
- theVfinal = aV2;
-
- return;
- }
-
- if(theVfinal < theVmin)
- {
- aU = theUfinal;
- aV = theVfinal;
-
- theVfinal = theVmin;
- isInBound = Standard_False;
- }
+ {
+ aStepU = -(aS1*aDS2v-aS2*aDS1v)/aDet;
+ aStepV = -(aS2*aDS1u-aS1*aDS2u)/aDet;
+
+ if(Abs(aStepU) < Epsilon(Abs(aU)))
+ {
+ if(Abs(aStepV) < Epsilon(Abs(aV)))
+ {
+ break;
+ }
+ }
- if(theVfinal > theVmax)
- {
- aU = theUfinal;
- aV = theVfinal;
+ aU += aStepU;
+ aV += aStepV;
+ }
- theVfinal = theVmax;
- isInBound = Standard_False;
+ Geom2dGcc_CurveToolGeo::D2(theC1, aU, aPu, aD1u, aD2u);
+ Geom2dGcc_CurveToolGeo::D2(theC2, aV, aPv, aD1v, aD2v);
}
+ while(aNbIter <= aNbIterMax);
+}
- if(isInBound)
- return;
-
- Geom2dGcc_CurveToolGeo::D1(theC1, aU, aP1, aD1);
- Geom2dGcc_CurveToolGeo::D1(theC2, aV, aP2, aD2);
- Standard_Real aU1 = (aD1.X() == 0.0) ? aU :((theVfinal - aV)*aD2.X() + aU*aD1.X() + (aP2.X() - aP1.X()))/aD1.X();
- Standard_Real aU2 = (aD1.Y() == 0.0) ? aU :((theVfinal - aV)*aD2.Y() + aU*aD1.Y() + (aP2.Y() - aP1.Y()))/aD1.Y();
-
- if(aU1 < theUmin)
- aU1 = theUmin;
-
- if(aU1 > theUmax)
- aU1 = theUmax;
-
- if(aU2 < theUmin)
- aU2 = theUmin;
-
- if(aU2 > theUmax)
- aU2 = theUmax;
-
- aP2 = Geom2dGcc_CurveToolGeo::Value(theC2,theVfinal);
- aP1 = Geom2dGcc_CurveToolGeo::Value(theC1,aU1);
-
- Standard_Real aSQ1 = aP1.SquareDistance(aP2);
-
- aP1 = Geom2dGcc_CurveToolGeo::Value(theC1,aU2);
- Standard_Real aSQ2 = aP1.SquareDistance(aP2);
- if(aSQ1 < aSQ2)
- theUfinal = aU1;
- else
- theUfinal = aU2;
-}
// circulaire tant a deux courbes ,de rayon donne
//==================================================
// On cree la solution qu on ajoute aux solutions deja trouvees. +
// On remplit les champs. +
//========================================================================
-
Geom2dGcc_Circ2d2TanRadGeo::
Geom2dGcc_Circ2d2TanRadGeo (const Geom2dGcc_QCurve& Qualified1,
const Geom2dGcc_QCurve& Qualified2,
// initialisation des champs. +
//========================================================================
-cirsol(1,16) ,
-qualifier1(1,16),
-qualifier2(1,16),
-TheSame1(1,16) ,
-TheSame2(1,16) ,
-pnttg1sol(1,16),
-pnttg2sol(1,16),
-par1sol(1,16) ,
-par2sol(1,16) ,
-pararg1(1,16) ,
-pararg2(1,16)
+cirsol(1,aNbSolMAX) ,
+qualifier1(1,aNbSolMAX),
+qualifier2(1,aNbSolMAX),
+TheSame1(1,aNbSolMAX) ,
+TheSame2(1,aNbSolMAX) ,
+pnttg1sol(1,aNbSolMAX),
+pnttg2sol(1,aNbSolMAX),
+par1sol(1,aNbSolMAX) ,
+par2sol(1,aNbSolMAX) ,
+pararg1(1,aNbSolMAX) ,
+pararg2(1,aNbSolMAX)
{
//========================================================================
Intp.Perform(C1,C2,Tol,Tol);
if (Intp.IsDone()) {
if (!Intp.IsEmpty()) {
+ const Standard_Real aSQApproxTol = Precision::Approximation() *
+ Precision::Approximation();
for (Standard_Integer i = 1 ; i <= Intp.NbPoints() ; i++)
{
Standard_Real aU0 = Intp.Point(i).ParamOnFirst();
gp_Pnt2d P21 = Geom2dGcc_CurveToolGeo::Value(C1,aU2);
gp_Pnt2d P22 = Geom2dGcc_CurveToolGeo::Value(C2,aV2);
- Standard_Real aDist1112 = P11.Distance(P12);
- Standard_Real aDist1122 = P11.Distance(P22);
+ Standard_Real aDist1112 = P11.SquareDistance(P12);
+ Standard_Real aDist1122 = P11.SquareDistance(P22);
- Standard_Real aDist1221 = P12.Distance(P21);
- Standard_Real aDist2122 = P21.Distance(P22);
+ Standard_Real aDist1221 = P12.SquareDistance(P21);
+ Standard_Real aDist2122 = P21.SquareDistance(P22);
- if( Min(aDist1112, aDist1122) <= Precision::Approximation() &&
- Min(aDist1221, aDist2122) <= Precision::Approximation())
+ if( (Min(aDist1112, aDist1122) <= aSQApproxTol) &&
+ (Min(aDist1221, aDist2122) <= aSQApproxTol))
{
- PrecRoot(C1, C2, aU0, aV0,
- Max(Geom2dGcc_CurveToolGeo::FirstParameter(C1), aU0 - 10.0),
- Min(Geom2dGcc_CurveToolGeo::LastParameter(C1), aU0 + 10.0),
- Max(Geom2dGcc_CurveToolGeo::FirstParameter(C2), aV0 - 10.0),
- Min(Geom2dGcc_CurveToolGeo::LastParameter(C2), aV0 + 10.0),
- aU0, aV0);
+ PrecRoot(C1, C2, aU0, aV0, aU0, aV0);
}
NbrSol++;
#include <Geom2d_Circle.hxx>
#include <IntAna2d_AnaIntersection.hxx>
#include <IntAna2d_IntPoint.hxx>
+#include <IntRes2d_IntersectionPoint.hxx>
#include <stdio.h>
#ifdef WNT
return 0;
}
-
//=======================================================================
//function : intersect
//purpose :
for ( i = 1; i <= Intersector.NbPoints(); i++) {
gp_Pnt2d P = Intersector.Point(i);
+
di<<"Intersection point "<<i<<" : "<<P.X()<<" "<<P.Y()<<"\n";
+ di<<"parameter on the fist: "<<Intersector.Intersector().Point(i).ParamOnFirst();
+ di<<" parameter on the second: "<<Intersector.Intersector().Point(i).ParamOnSecond()<<"\n";
Handle(Draw_Marker2D) mark = new Draw_Marker2D( P, Draw_X, Draw_vert);
dout << mark;
}
Standard_Real TlConf=(TheTolConf < TOL_CONF_MINI)? TOL_CONF_MINI : TheTolConf;
Perform(C1,D1,C2,D2,TlConf,Tl,0,DU,DV);
//----------------------------------------------------------------------
- //-- Traitement des points en bouts
+ //-- Processing of end points
//----------------------------------------------------------------------
Standard_Boolean HeadOn1 = Standard_False;
Standard_Boolean HeadOn2 = Standard_False;
//--------------------------------------------------------------------
- //-- On ne rejette les points Head Head ... End End
- //-- si ils figurent deja dans un bout de segment
- //-- ( On ne peut pas tester les egalites sur les parametres)
- //-- ( ces points n etant pas trouves a EpsX pres )
- //-- PosSegment = 1 si Head Head
- //-- 2 si Head End
- //-- 4 si End Head
- //-- 8 si End End
+ //-- The points Head Head ... End End are not rejected if
+ //-- they are already present at the end of segment
+ //-- ( It is not possible to test the equities on the parameters)
+ //-- ( these points are not found at EpsX precision )
+ //-- PosSegment = 1 if Head Head
+ //-- 2 if Head End
+ //-- 4 if End Head
+ //-- 8 if End End
//--------------------------------------------------------------------
Standard_Integer PosSegment = 0;
Standard_Integer n=this->NbPoints();
//--------------------------------------------------------------------
- //-- On ne rejette les points Head Head ... End End
- //-- si ils figurent deja dans un bout de segment
- //-- ( On ne peut pas tester les egalites sur les parametres)
- //-- ( ces points n etant pas trouves a EpsX pres )
- //-- PosSegment = 1 si Head Head
- //-- 2 si Head End
- //-- 4 si End Head
- //-- 8 si End End
+ //-- The points Head Head ... End End are not rejected if
+ //-- they are already present at the end of segment
+ //-- ( It is not possible to test the equities on the parameters)
+ //-- ( these points are not found at EpsX precision )
+ //-- PosSegment = 1 if Head Head
+ //-- 2 if Head End
+ //-- 4 if End Head
+ //-- 8 if End End
//--------------------------------------------------------------------
Standard_Integer PosSegment = 0;
if(NbIter>3 || (NbIter>2 && nbsamples>100)) return;
- nbsamples*=2; //--- On prend systematiquement 2 fois plus de points que
- //-- sur une courbe normale.
- //-- Les courbes auto-intersectantes donne souvent des
- //-- polygones assez loin de la courbe a parametre ct.
+ nbsamples*=2; //--- We take systematically two times more points
+ //-- than on a normal curve.
+ //-- Auto-intersecting curves often produce
+ //-- polygons rather far from the curve with parameter ct.
if(NbIter>0) {
nbsamples=(3*(nbsamples*NbIter))/2;
}
//-- Poly1.Dump();
//----------------------------------------------------------------------
- //-- Si la deflection est inferieure a la Tolerance de Confusion
- //-- Alors la deflection du polygone est fixee a TolConf
- //-- (Detection des Zones de Tangence)
+ //-- If the deflection is less than the Tolerance of Confusion
+ //-- then the deflection of the polygon is set in TolConf
+ //-- (Detection of Tangency Zones)
//----------------------------------------------------------------------
if(Poly1.DeflectionOverEstimation() < TolConf) {
Poly1.SetDeflectionOverEstimation(TolConf);
Standard_Real U,V;
//----------------------------------------------------------------------
- //-- Traitement des SectionPoint
+ //-- Processing of SectionPoint
//----------------------------------------------------------------------
Standard_Integer Nbsp = InterPP.NbSectionPoints();
if(Nbsp>=1) {
//-- ---------------------------------------------------------------------
- //-- tri tri tri tri tri tri tri tri tri tri tri tri tri tri
+ //-- filtering, filtering, filtering ...
//--
Standard_Integer* TriIndex = new Standard_Integer [Nbsp+1];
Standard_Integer* PtrSegIndex1 = new Standard_Integer [Nbsp+1];
EIP.Perform(Poly1,Poly1,SegIndex1,SegIndex2,ParamOn1,ParamOn2);
if(EIP.NbRoots()==0) {
- //-- On supprime tous les segments voisins
+ //-- All neighbor segments are removed
for(Standard_Integer k=sp+1;k<=Nbsp;k++) {
Standard_Integer kk=TriIndex[k];
// --- avoid negative indicies as well as in outer done
}
else if(EIP.NbRoots()>=1) {
//--------------------------------------------------------------------
- //-- On verifie que le point trouve est bien une racine
+ //-- It is checked if the found point is a root
//--------------------------------------------------------------------
EIP.Roots(U,V);
if(Abs(U-V)<=EpsX1) {
//-----------------------------------------
- //-- Solution non valide
- //-- Les maths ont du converger vers une
- //-- solution triviale ( point U = V )
+ //-- Solution not valid
+ //-- The maths should have converged in a
+ //-- trivial solution ( point U = V )
//-----------------------------------------
Dist = TolConf+1.0;
}
//-----------------------------------------------------------------
- //-- On verifie que le point (u,v) n existe pas deja
+ //-- It is checked if the point (u,v) already exists
//--
done = Standard_True;
Standard_Integer nbp=NbPoints();
}
}
- if(Dist <= TolConf) { //-- Ou le point est deja present
+ if(Dist <= TolConf) { //-- Or the point is already present
IntRes2d_Position Pos1 = IntRes2d_Middle;
IntRes2d_Position Pos2 = IntRes2d_Middle;
IntRes2d_Transition Trans1,Trans2;
//-----------------------------------------------------------------
- //-- Calcul des Positions des Points sur la courbe
+ //-- Calculate Positions of Points on the curve
//--
if(P1.Distance(DomainOnCurve1.FirstPoint())<=DomainOnCurve1.FirstTolerance())
Pos1 = IntRes2d_Head;
}
//--------------------------------------------------------------------
- //-- On Teste si un point de bout de segment a deja ces trnasitions
- //-- Si Oui, on ne cree pas de nouveau point
+ //-- It is tested if a point at the end of segment already has its transitions
+ //-- If Yes, the new point is not created
//--
- //-- PosSegment = 1 si Head Head
- //-- 2 si Head End
- //-- 4 si End Head
- //-- 8 si End End
+ //-- PosSegment = 1 if Head Head
+ //-- 2 if Head End
+ //-- 4 if End Head
+ //-- 8 if End End
//--------------------------------------------------------------------
if(Pos1 == IntRes2d_Head) {
if((Pos2 == IntRes2d_Head)&&(PosSegment & 1)) return(Standard_False);
/////////////////////////////////////////////
- NCollection_Handle<IntCurve_ThePolygon2d> aPoly1 ,aPoly2;
- if(nbsamplesOnC2 > nbsamplesOnC1) {
- aPoly1 = new IntCurve_ThePolygon2d(C1,nbsamplesOnC1,D1,Tol);
- if(aPoly1->DeflectionOverEstimation() < TolConf) {
- aPoly2 = new IntCurve_ThePolygon2d(C2,nbsamplesOnC2,D2,Tol);
- }
- else {
- aPoly2 = new IntCurve_ThePolygon2d(C2,nbsamplesOnC2,D2,Tol,aPoly1->Bounding());
- aPoly1->SetDeflectionOverEstimation( aPoly2->DeflectionOverEstimation()
- + aPoly1->DeflectionOverEstimation());
- aPoly1->ComputeWithBox(C1,aPoly2->Bounding());
- }
- }
- else {
- aPoly2 = new IntCurve_ThePolygon2d(C2,nbsamplesOnC2,D2,Tol);
- if(aPoly2->DeflectionOverEstimation() < TolConf) {
- aPoly1 = new IntCurve_ThePolygon2d(C1,nbsamplesOnC1,D1,Tol);
- }
- else {
- aPoly1 = new IntCurve_ThePolygon2d(C1,nbsamplesOnC1,D1,Tol,aPoly2->Bounding());
- aPoly2->SetDeflectionOverEstimation( aPoly2->DeflectionOverEstimation()
- + aPoly1->DeflectionOverEstimation());
- aPoly2->ComputeWithBox(C2,aPoly1->Bounding());
- }
+ NCollection_Handle<IntCurve_ThePolygon2d>
+ aPoly1 = new IntCurve_ThePolygon2d(C1,nbsamplesOnC1,D1,Tol),
+ aPoly2 = new IntCurve_ThePolygon2d(C2,nbsamplesOnC2,D2,Tol);
+
+ if( (aPoly1->DeflectionOverEstimation() > TolConf) ||
+ (aPoly2->DeflectionOverEstimation() > TolConf))
+ {
+ const Standard_Real aDeflectionSum =
+ Max(aPoly1->DeflectionOverEstimation(), TolConf) +
+ Max(aPoly2->DeflectionOverEstimation(), TolConf);
+
+ aPoly2->SetDeflectionOverEstimation(aDeflectionSum);
+ aPoly1->SetDeflectionOverEstimation(aDeflectionSum);
+
+ const Bnd_Box2d aB1 = aPoly1->Bounding(), aB2 = aPoly2->Bounding();
+
+ aPoly1->ComputeWithBox(C1, aB2);
+ aPoly2->ComputeWithBox(C2, aB1);
}
+
//----------------------------------------------------------------------
- //-- Si la deflection est inferieure a la Tolerance de Confusion
- //-- Alors la deflection du polygone est fixee a TolConf
- //-- (Detection des Zones de Tangence)
+ //-- if the deflection less then the Tolerance of Confusion
+ //-- Then the deflection of the polygon is set in TolConf
+ //-- (Detection of Tangency Zones)
//----------------------------------------------------------------------
if(aPoly1->DeflectionOverEstimation() < TolConf) {
if(aPoly2->DeflectionOverEstimation() < TolConf) {
aPoly2->SetDeflectionOverEstimation(TolConf);
}
- //for case when a few polygon points were replaced by line
- //if exact solution was not found
- //then search of precise solution will be repeat
- //for polygon conatins all initial points
- //secondary search will be performed only for case when initial points
- //were dropped
+ // for case when a few polygon points were replaced by line
+ // if exact solution was not found
+ // then search of precise solution will be repeated
+ // for polygon contains all initial points
+ // secondary search will be performed only for case when initial points
+ // were dropped
Standard_Boolean isFullRepresentation = ( aPoly1->NbSegments() == nbsamplesOnC1 &&
aPoly2->NbSegments() == nbsamplesOnC2 );
Standard_Boolean AnErrorOccurred = Standard_False;
done = Standard_True; // To prevent exception in nbp=NbPoints();
//----------------------------------------------------------------------
- //-- Traitement des SectionPoint
+ //-- Processing of SectionPoint
//----------------------------------------------------------------------
Standard_Integer Nbsp = InterPP.NbSectionPoints();
for(Standard_Integer sp=1; sp <= Nbsp; sp++) {
}
//--------------------------------------------------------------------
- //-- On verifie que le point trouve est bien une racine
+ //-- It is checked if the found point is really a root
//--------------------------------------------------------------------
EIP.Roots(U,V);
Dist = P1.Distance(P2);
}
//-----------------------------------------------------------------
- //-- On verifie que le point (u,v) n existe pas deja
+ //-- It is checked if the point (u,v) does not exist already
//--
Standard_Integer nbp=NbPoints();
Standard_Real EpsX1 = 10.0*TheCurveTool::EpsX(C1);
}
}
- if(Dist <= TolConf) { //-- Ou le point est deja present
+ if(Dist <= TolConf) { //-- Or the point is already present
IntRes2d_Position Pos1 = IntRes2d_Middle;
IntRes2d_Position Pos2 = IntRes2d_Middle;
IntRes2d_Transition Trans1,Trans2;
//-----------------------------------------------------------------
- //-- Calcul des Positions des Points sur la courbe
+ //-- Calculate the Positions of Points on the curve
//--
if(P1.Distance(DomainOnCurve1.FirstPoint())<=DomainOnCurve1.FirstTolerance())
Pos1 = IntRes2d_Head;
else if(P2.Distance(DomainOnCurve2.LastPoint())<=DomainOnCurve2.LastTolerance())
Pos2 = IntRes2d_End;
//-----------------------------------------------------------------
- //-- Calcul des Transitions (Voir IntImpParGen.cxx)
+ //-- Calculate the Transitions (see IntImpParGen.cxx)
//--
if(IntImpParGen::DetermineTransition (Pos1, Tan1, Trans1, Pos2, Tan2, Trans2, TolConf) == Standard_False) {
TheCurveTool::D2(C1,U,P1,Tan1,Norm1);
}
//----------------------------------------------------------------------
- //-- Traitement des TangentZone
+ //-- Processing of TangentZone
//----------------------------------------------------------------------
Standard_Integer Nbtz = InterPP.NbTangentZones();
for(Standard_Integer tz=1; tz <= Nbtz; tz++) {
Standard_Integer NbPnts = InterPP.ZoneValue(tz).NumberOfPoints();
//====================================================================
- //== Recherche du premier et du dernier point dans la zone de tg.
+ //== Find the first and the last point in the tangency zone.
//====================================================================
Standard_Real ParamSupOnCurve2,ParamInfOnCurve2;
Standard_Real ParamSupOnCurve1,ParamInfOnCurve1;
for(Standard_Integer qq=1;qq<=NbPnts;qq++) {
const Intf_SectionPoint& SPnt1 = InterPP.ZoneValue(tz).GetPoint(qq);
//====================================================================
- //== On discretise sur les zones de tangence
- //== Test d arret :
- //== Compteur
- //== Deflection < Tolerance
- //== OU Echantillon < EpsX (normalement la premiere condition est
- //== plus severe)
+ //== The zones of tangency are discretized
+ //== Test of stop : Check if
+ //== (Deflection < Tolerance)
+ //== Or (Sample < EpsX) (normally the first condition is
+ //== more strict)
//====================================================================
// Standard_Real _PolyUInf,_PolyUSup,_PolyVInf,_PolyVSup;
Standard_Real _PolyUInf,_PolyVInf;
,ParamInfOnCurve2,TolConf
,TheCurveTool::Value(C2,ParamSupOnCurve2)
,ParamSupOnCurve2,TolConf);
- //-- On ne delete pas thePoly1(2) ,
- //-- ils sont detruits enfin de fct.
- //-- !! Pas de return intempestif !!
+ //-- thePoly1(2) are not deleted,
+ //-- finally they are destroyed.
+ //-- !! No untimely return !!
Perform(C1,RecursD1,C2,RecursD2,Tol,TolConf,NbIter+1,DeltaU,DeltaV);
}
else {
//-----------------------------------------------------------------
- //-- Calcul des Positions des Points sur la courbe et des
- //-- Transitions sur chaque borne du segment
+ //-- Calculate Positions of Points on the curve and
+ //-- Transitions on each limit of the segment
IntRes2d_Position Pos1 = IntRes2d_Middle;
IntRes2d_Position Pos2 = IntRes2d_Middle;
returns Polygon2dGen from IntCurve;
- Create (Curve : TheCurve;
- NbPnt : Integer from Standard;
- Domain : Domain from IntRes2d;
- Tol : Real from Standard;
- OtherBox : Box2d from Bnd)
-
- ---Purpose: Compute a polygon on the domain of the
- -- curve. parameters of the begin and
- -- end of the curve (and its polygon) are
- -- adjusted to lie in the OtherBox.
-
- returns Polygon2dGen from IntCurve;
-
-
ComputeWithBox(me : in out;
Curve : TheCurve;
OtherBox : Box2d from Bnd)
#define MAJORATION_DEFLECTION 1.5
//======================================================================
-//== On echantillonne sur le Domain de la Curve NbPts Points
-//== a parametres constants.
+//== We take samples on the Domain of the Curve NbPts Points
+//== with constant parameters.
//==
-//== On estime la fleche maximum en prenant la distance maxi entre la
-//== droite Curve.Value(X(i))-->Curve.Value(X(i+1))
-//== et le point Curve.Value(X(i+1/2))
+//== We estimate the maximum deflection taking the max distance between the
+//== right Curve.Value(X(i))-->Curve.Value(X(i+1))
+//== and the point Curve.Value(X(i+1/2))
//======================================================================
// Modified by Sergey KHROMOV - Mon Mar 24 12:02:43 2003 Begin
IntCurve_Polygon2dGen::IntCurve_Polygon2dGen(const TheCurve& C,
const Standard_Integer tNbPts,
const IntRes2d_Domain& D,
const Standard_Real Tol):
-// const Standard_Real ):
// Modified by Sergey KHROMOV - Mon Mar 24 12:02:45 2003 End
ThePnts(1,(tNbPts<3)? 6 : (tNbPts+tNbPts)),
TheParams(1,(tNbPts<3)? 6 : (tNbPts+tNbPts)),
TheMaxNbPoints = NbPts+NbPts;
NbPntIn = NbPts;
//-----------------------------------------------------
- //--- Initialisation du Brise a d_Parametre constant
+ //--- Initialization of the breaking with d_Parametre constant
//---
Binf = D.FirstParameter();
Bsup = D.LastParameter();
//-----------------------------------------------------
- //-- IntRes2d Raise si HasFirst retourne False
- //-- et Acces a First Parameter
+ //-- IntRes2d Raise if HasFirst returns False
+ //-- and accesses First Parameter
//--
Standard_Real u=Binf;
Standard_Real u1=Bsup;
//-----------------------------------------------------
- //--- Calcul d un majorant de fleche approche
+ //--- Calculate a maximal deflection
//---
// Modified by Sergey KHROMOV - Mon Mar 24 12:03:05 2003 Begin
// TheDeflection = 0.000000001;
ClosedPolygon = Standard_False;
}
//======================================================================
-// Modified by Sergey KHROMOV - Mon Mar 24 12:03:26 2003 Begin
-IntCurve_Polygon2dGen::IntCurve_Polygon2dGen(const TheCurve& C,
- const Standard_Integer tNbPts,
- const IntRes2d_Domain& D,
- const Standard_Real Tol,
- const Bnd_Box2d& BoxOtherPolygon):
-// Modified by Sergey KHROMOV - Mon Mar 24 12:03:28 2003 End
- ThePnts(1,(tNbPts<3)? 6 : (tNbPts+tNbPts)),
- TheParams(1,(tNbPts<3)? 6 : (tNbPts+tNbPts)),
- TheIndex(1,(tNbPts<3)? 6 : (tNbPts+tNbPts))
-{
- Standard_Integer NbPts = (tNbPts<3)? 3 : tNbPts;
- TheMaxNbPoints = NbPts+NbPts;
- NbPntIn = NbPts;
- //-----------------------------------------------------
- //--- Initialisation du Brise a d_Parametre constant
- //---
- Binf = D.FirstParameter();
- Bsup = D.LastParameter();
- //-----------------------------------------------------
- Standard_Real u=Binf;
- Standard_Real u1=Bsup;
- Standard_Real du=(u1-u)/(Standard_Real)(NbPts-1);
- Standard_Integer i=1;
- do {
- gp_Pnt2d P=TheCurveTool::Value(C,u);
- myBox.Add(P);
- ThePnts.SetValue(i,P);
- TheParams.SetValue(i,u);
- TheIndex.SetValue(i,i);
- u+=du;
- i++;
- }
- while(i<=NbPts);
-
-
- //-----------------------------------------------------
- //--- Calcul d un majorant de fleche approche
- //---
-// Modified by Sergey KHROMOV - Mon Mar 24 12:03:55 2003 Begin
-// TheDeflection = 0.0000001;
- TheDeflection = Min(0.0000001, Tol/100.);
-// Modified by Sergey KHROMOV - Mon Mar 24 12:03:56 2003 End
- i=1;
- u=D.FirstParameter();
- u+=du * 0.5;
-
- do {
- gp_Pnt2d Pm = TheCurveTool::Value(C,u);
- const gp_Pnt2d& P1 = ThePnts.Value(i);
- const gp_Pnt2d& P2 = ThePnts.Value(i+1);
-
- Standard_Real dx,dy;
- dx=P1.X()-P2.X(); if(dx<0) dx=-dx;
- dy=P1.Y()-P2.Y(); if(dy<0) dy=-dy;
- if(dx+dy>1e-12) {
- gp_Lin2d L(P1,gp_Dir2d(gp_Vec2d(P1,P2)));
- Standard_Real t = L.Distance(Pm);
- if(t>TheDeflection) {
- TheDeflection = t;
- }
- }
- u+=du;
- i++;
- }
- while(i<NbPts);
-
- myBox.Enlarge(TheDeflection*MAJORATION_DEFLECTION);
- ClosedPolygon = Standard_False;
- //-------------------------------------------------------
- //-- On supprime les points alignes
- //-- (Permet de diminuer le nombre total de points)
- //-- (Dans le cas ou la courbe est "droite" )
- Standard_Real DeflectionMaj = TheDeflection;
- for(i=2;i<NbPntIn && NbPntIn>3;i++) {
- Standard_Integer indexim1 = TheIndex.Value(i-1);
- Standard_Integer indexi = TheIndex.Value(i);
- Standard_Integer indexip1 = TheIndex.Value(i+1);
- const gp_Pnt2d& Pim1 = ThePnts.Value(indexim1);
- const gp_Pnt2d& Pi = ThePnts.Value(indexi);
- const gp_Pnt2d& Pip1 = ThePnts.Value(indexip1);
-
- Standard_Real dx,dy;
- dx=Pim1.X()-Pip1.X(); if(dx<0) dx=-dx;
- dy=Pim1.Y()-Pip1.Y(); if(dy<0) dy=-dy;
- Standard_Real t=0;
- if(dx+dy>1e-12) {
- gp_Lin2d L(Pim1,gp_Dir2d(gp_Vec2d(Pim1,Pip1)));
- t = L.Distance(Pi);
- }
- if(t<=DeflectionMaj) {
- //-- On supprime le point i
- for(Standard_Integer j = i; j<NbPntIn; j++) {
- TheIndex.SetValue(j,TheIndex.Value(j+1));
- }
- NbPntIn--;
- i--;
- }
- }
-
- ComputeWithBox(C,BoxOtherPolygon);
-}
-//======================================================================
void IntCurve_Polygon2dGen::ComputeWithBox(const TheCurve& C,
const Bnd_Box2d& BoxOtherPolygon) {
if(myBox.IsOut(BoxOtherPolygon)) {
const gp_Pnt2d& P2d = ThePnts.Value(TheIndex.Value(i));
Ri = CalculRegion(P2d.X(),P2d.Y(),bx0,bx1,by0,by1);
if((Ri & Rprec)==0) {
- if(nbp) {
- if(TheIndex.Value(nbp) != TheIndex.Value(i-1)) {
- nbp++;
- TheIndex.SetValue(nbp,TheIndex.Value(i-1));
- }
- }
- else {
- nbp++;
- TheIndex.SetValue(nbp,TheIndex.Value(i-1));
- }
- nbp++;
- TheIndex.SetValue(nbp,TheIndex.Value(i));
- if(TheIndex.Value(i) > MaxIndexUsed) MaxIndexUsed = TheIndex.Value(i);
+ if(nbp) {
+ if(TheIndex.Value(nbp) != TheIndex.Value(i-1)) {
+ nbp++;
+ TheIndex.SetValue(nbp,TheIndex.Value(i-1));
+ }
+ }
+ else {
+ nbp++;
+ TheIndex.SetValue(nbp,TheIndex.Value(i-1));
+ }
+ nbp++;
+ TheIndex.SetValue(nbp,TheIndex.Value(i));
+ if(TheIndex.Value(i) > MaxIndexUsed) MaxIndexUsed = TheIndex.Value(i);
- Rprec = Ri;
- }
- else {
- if((Ri & Rprec)==0) {
- nbp++;
- TheIndex.SetValue(nbp,TheIndex.Value(i));
- if(TheIndex.Value(i) > MaxIndexUsed) MaxIndexUsed = TheIndex.Value(i);
+ Rprec = Ri;
+ }//if((Ri & Rprec)==0) condition
- Rprec = Ri;
- }
- }
Rprec = Ri;
}
if(nbp==1) {
if(debug) {
Standard_Real bx0,bx1,by0,by1;
- cout<<"\n ----- Dump de IntCurve_Polygon2dGen -----"<<endl;
+ cout<<"\n ----- Dump of IntCurve_Polygon2dGen -----"<<endl;
if(myBox.IsVoid()) {
cout<<" Polygone Vide "<<endl;
return;
## After command sew in DRAW on attached shape free wires are disappeared.
####################################################
+puts "TODO OCC25593 ALL: Faulty shapes in variables faulty_1 to faulty_4"
+
restore [locate_data_file OCC714.brep] a
checkshape a
set good_YAxisX 0
set good_YAxisY 1
set good_Radius 3
- if { ${CenterX} != ${good_CenterX} } {
- puts "Faulty : Bad CenterX"
- set status 1
- }
- if { ${CenterY} != ${good_CenterY} } {
- puts "Faulty : Bad CenterY"
+
+ set SQDistCC [expr ($CenterX-$good_CenterX)*($CenterX-$good_CenterX)+($CenterY-$good_CenterY)*($CenterY-$good_CenterY)]
+
+ if { ${SQDistCC} > 1.0e-14 } {
+ puts "Faulty : Bad Center of the circle"
set status 1
}
if { ${XAxisX} != ${good_XAxisX} } {
puts "Faulty : Bad XAxisX"
- set status 1
+ set status 2
}
if { ${XAxisY} != ${good_XAxisY} } {
puts "Faulty : Bad XAxisY"
- set status 1
+ set status 3
}
if { ${YAxisX} != ${good_YAxisX} } {
puts "Faulty : Bad YAxisX"
- set status 1
+ set status 4
}
if { ${YAxisY} != ${good_YAxisY} } {
puts "Faulty : Bad YAxisY"
- set status 1
+ set status 5
}
if { ${Radius} != ${good_Radius} } {
puts "Faulty : Bad Radius"
- set status 1
+ set status 6
}
} else {
puts "Faulty : Bad solution"
- set status 1
+ set status 7
}
if { ${status} != 0 } {
- puts "Faulty : solution is wrong"
+ puts "Faulty : solution is wrong. Status = ${status}"
} else {
puts "OK : solution is correct"
}
--- /dev/null
+puts "============"
+puts "OCC25593"
+puts "============"
+puts ""
+#########################################################################
+# Number of intersection points for 2d curves depends on the order of arguments in command "2dintersect"
+#########################################################################
+
+restore [locate_data_file bug25593_face1.brep] b
+pcurve b
+
+puts "Intersection 1"
+set info1 [2dintersect b_2 b_3 1.e-10]
+regexp {Intersection point 1 : +([-0-9.+eE]+) +([-0-9.+eE]+)} $info1 full p1x p1y
+regexp {parameter on the fist: +([-0-9.+eE]+) +parameter on the second: +([-0-9.+eE]+)} $info1 full par1f par1s
+
+puts "Intersection 2"
+set info2 [2dintersect b_3 b_2 1.e-10]
+regexp {Intersection point 1 : +([-0-9.+eE]+) +([-0-9.+eE]+)} $info2 full p2x p2y
+regexp {parameter on the fist: +([-0-9.+eE]+) +parameter on the second: +([-0-9.+eE]+)} $info2 full par2f par2s
+
+set NbIP1 1
+if { [regexp "Intersection point 1" $info1] != 1 } {
+ puts "Error : Intersection 1 should have one point"
+ set NbIP1 0
+}
+if { [regexp "Intersection point 2" $info1] == 1 } {
+ puts "Error : Intersection 1 should have one point"
+ set NbIP1 2
+}
+puts "NbIP1=$NbIP1"
+
+set NbIP2 1
+if { [regexp "Intersection point 1" $info2] != 1 } {
+ puts "Error : Intersection 2 should have one point"
+ set NbIP2 0
+}
+if { [regexp "Intersection point 2" $info2] == 1 } {
+ puts "Error : Intersection 2 should have one point"
+ set NbIP2 2
+}
+puts "NbIP2=$NbIP2"
+
+if { $NbIP1 != 1 || $NbIP2 != 1 } {
+ puts "ERROR: Wrong solutions number"
+} else {
+ puts "p1x=$p1x p1y=$p1y par1f=$par1f $par1s"
+ puts "p2x=$p2x p2y=$p2y par2f=$par2f $par2s"
+ set sqd [expr ($p1x-$p2x)*($p1x-$p2x)+($p1y-$p2y)*($p1y-$p2y)]
+ if { $sqd > 1.0e-14 } {
+ puts "ERROR: Intersection points are different"
+ } else {
+ puts "OK: Intersection points are equal"
+ }
+ if { (abs($par1f - $par2s) > 1.0e-9) || (abs($par1s - $par2f) > 1.0e-9) } {
+ puts "ERROR: Parameters on intersecting curves are not coincided"
+ } else {
+ puts "OK: Parameters on intersecting curves are coincided"
+ }
+}
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 1 ) Summary = 0 ( 1 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 0 ( 2 ) Summary = 0 ( 2 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 1 ( 1 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 409 ( 409 ) Summary = 5247 ( 5247 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 409 ( 409 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 2209 ( 2209 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 409 ( 409 ) Summary = 5244 ( 5244 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 409 ( 409 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 2207 ( 2207 )
TOLERANCE : MaxTol = 0.9579389807 ( 0.9579389801 ) AvgTol = 0.05177332439 ( 0.05180172526 )
LABELS : N0Labels = 409 ( 409 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 409 ( 409 ) NameLabels = 409 ( 409 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
set ref_data {
DATA : Faulties = 0 ( 12 ) Warnings = 0 ( 1 ) Summary = 0 ( 13 )
TPSTAT : Faulties = 0 ( 28 ) Warnings = 116 ( 7 ) Summary = 116 ( 35 )
-CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 1 ) Solids = 0 ( 1 )
-NBSHAPES : Solid = 0 ( 18 ) Shell = 0 ( 18 ) Face = 1190 ( 1190 ) Summary = 15075 ( 7693 )
-STATSHAPE : Solid = 0 ( 18 ) Shell = 0 ( 18 ) Face = 1190 ( 1190 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 6284 ( 3134 )
+CHECKSHAPE : Wires = 0 ( 0 ) Faces = 1 ( 1 ) Shells = 0 ( 1 ) Solids = 0 ( 1 )
+NBSHAPES : Solid = 0 ( 19 ) Shell = 0 ( 19 ) Face = 1191 ( 1191 ) Summary = 15092 ( 7703 )
+STATSHAPE : Solid = 0 ( 19 ) Shell = 0 ( 19 ) Face = 1191 ( 1191 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 6291 ( 3138 )
TOLERANCE : MaxTol = 0.2496383637 ( 0.2496258832 ) AvgTol = 0.00219239232 ( 0.004111699336 )
LABELS : N0Labels = 27 ( 27 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 27 ( 27 ) NameLabels = 27 ( 27 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 299 ( 5226 ) Summary = 299 ( 5226 )
-CHECKSHAPE : Wires = 12 ( 18 ) Faces = 16 ( 16 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
+CHECKSHAPE : Wires = 12 ( 20 ) Faces = 16 ( 18 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 5163 ( 5163 ) Summary = 68418 ( 68418 )
STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 5163 ( 5163 ) FreeWire = 10 ( 10 ) FreeEdge = 283 ( 283 ) SharedEdge = 29071 ( 29075 )
TOLERANCE : MaxTol = 0.9874083984 ( 0.9875071265 ) AvgTol = 0.01114309412 ( 0.01115568387 )
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: CHECKSHAPE : Faulty"
-puts "TODO CR23096 ALL: NBSHAPES : Faulty"
puts "TODO CR23096 ALL: LABELS : Faulty"
+puts "TODO CR23096 ALL: TOLERANCE : Faulty"
+
set LinuxDiff 3
set filename PRO14319.igs
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 6 ( 64 ) Summary = 6 ( 64 )
-CHECKSHAPE : Wires = 20 ( 6 ) Faces = 1 ( 1 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 61 ( 61 ) Summary = 7715 ( 7802 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 61 ( 61 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 3827 ( 3865 )
-TOLERANCE : MaxTol = 0.3140268251 ( 0.3140268243 ) AvgTol = 0.0009762560334 ( 0.000488212708 )
-LABELS : N0Labels = 61 ( 61 ) N1Labels = 0 ( 1050 ) N2Labels = 0 ( 0 ) TotalLabels = 61 ( 1111 ) NameLabels = 61 ( 61 ) ColorLabels = 61 ( 1111 ) LayerLabels = 0 ( 0 )
+CHECKSHAPE : Wires = 2 ( 8 ) Faces = 1 ( 1 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 61 ( 61 ) Summary = 7927 ( 7808 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 61 ( 61 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 3991 ( 3862 )
+TOLERANCE : MaxTol = 0.3749733839 ( 0.3140268243 ) AvgTol = 0.0048689347 ( 0.0004856161076 )
+LABELS : N0Labels = 61 ( 61 ) N1Labels = 0 ( 1047 ) N2Labels = 0 ( 0 ) TotalLabels = 61 ( 1108 ) NameLabels = 61 ( 61 ) ColorLabels = 61 ( 1108 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 3 ( 3 )
COLORS : Colors = CYAN1 GREEN WHITE ( CYAN1 GREEN WHITE )
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: TPSTAT : Faulty"
puts "TODO CR23096 ALL: LABELS : Faulty"
DATA : Faulties = 0 ( 1 ) Warnings = 0 ( 0 ) Summary = 0 ( 1 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 3 ( 183 ) Summary = 3 ( 183 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 98 ( 98 ) Summary = 2688 ( 2687 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 98 ( 98 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 1243 ( 1243 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 97 ( 97 ) Summary = 2685 ( 2684 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 97 ( 97 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 1243 ( 1243 )
TOLERANCE : MaxTol = 0.009955692634 ( 0.009955692464 ) AvgTol = 0.0008509893784 ( 0.0008531522552 )
-LABELS : N0Labels = 97 ( 97 ) N1Labels = 2 ( 102 ) N2Labels = 0 ( 0 ) TotalLabels = 99 ( 199 ) NameLabels = 97 ( 97 ) ColorLabels = 98 ( 199 ) LayerLabels = 0 ( 0 )
+LABELS : N0Labels = 97 ( 97 ) N1Labels = 0 ( 91 ) N2Labels = 0 ( 0 ) TotalLabels = 97 ( 188 ) NameLabels = 97 ( 97 ) ColorLabels = 97 ( 188 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 1 ( 1 )
COLORS : Colors = BLACK ( BLACK )
DATA : Faulties = 0 ( 2 ) Warnings = 0 ( 0 ) Summary = 0 ( 2 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 144 ( 455 ) Summary = 144 ( 455 )
CHECKSHAPE : Wires = 6 ( 8 ) Faces = 6 ( 8 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 223 ( 223 ) Summary = 4688 ( 4576 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 223 ( 223 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 2156 ( 2092 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 223 ( 223 ) Summary = 4694 ( 4570 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 223 ( 223 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 2158 ( 2088 )
TOLERANCE : MaxTol = 0.991254355 ( 0.991254355 ) AvgTol = 0.0113074551 ( 0.01224298461 )
LABELS : N0Labels = 223 ( 223 ) N1Labels = 0 ( 256 ) N2Labels = 0 ( 0 ) TotalLabels = 223 ( 479 ) NameLabels = 223 ( 388 ) ColorLabels = 223 ( 479 ) LayerLabels = 223 ( 479 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
# !!!! This file is generated automatically, do not edit manually! See end script
puts "TODO CR23096 ALL: TPSTAT : Faulty"
-puts "TODO CR23096 ALL: CHECKSHAPE : Faulty"
set LinuxDiff 2
set filename ims001.igs
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 1 ) Summary = 0 ( 1 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 11 ( 2 ) Summary = 11 ( 2 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 1 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 190 ( 190 ) Summary = 2164 ( 2158 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 190 ( 190 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 891 ( 887 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 190 ( 190 ) Summary = 2158 ( 2158 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 190 ( 190 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 887 ( 887 )
TOLERANCE : MaxTol = 0.6881447912 ( 0.6881447942 ) AvgTol = 0.02957229252 ( 0.02969463719 )
LABELS : N0Labels = 190 ( 190 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 190 ( 190 ) NameLabels = 190 ( 190 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 135 ( 135 ) Summary = 2223 ( 2223 )
STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 135 ( 135 ) FreeWire = 0 ( 0 ) FreeEdge = 3 ( 3 ) SharedEdge = 974 ( 974 )
-TOLERANCE : MaxTol = 0.9794163281 ( 12.54323842 ) AvgTol = 0.02057774141 ( 0.1726497742 )
+TOLERANCE : MaxTol = 0.9794163281 ( 12.54323842 ) AvgTol = 0.02080508938 ( 0.1727731057 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 138 ( 1011 ) N2Labels = 0 ( 0 ) TotalLabels = 139 ( 1012 ) NameLabels = 139 ( 205 ) ColorLabels = 138 ( 1011 ) LayerLabels = 138 ( 1011 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 4 ( 4 )
DATA : Faulties = 0 ( 2 ) Warnings = 0 ( 0 ) Summary = 0 ( 2 )
TPSTAT : Faulties = 3 ( 59 ) Warnings = 2203 ( 4655 ) Summary = 2206 ( 4714 )
CHECKSHAPE : Wires = 7 ( 17 ) Faces = 7 ( 12 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 3349 ( 2837 ) Summary = 45816 ( 39080 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 3349 ( 3349 ) FreeWire = 6 ( 6 ) FreeEdge = 67 ( 67 ) SharedEdge = 19531 ( 16687 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 3349 ( 2837 ) Summary = 45902 ( 39187 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 3349 ( 3349 ) FreeWire = 6 ( 6 ) FreeEdge = 67 ( 67 ) SharedEdge = 19594 ( 16763 )
TOLERANCE : MaxTol = 4.854604894 ( 5.769095076 ) AvgTol = 0.01628658326 ( 0.01747356296 )
-LABELS : N0Labels = 11 ( 11 ) N1Labels = 2891 ( 6256 ) N2Labels = 0 ( 0 ) TotalLabels = 2902 ( 6267 ) NameLabels = 2900 ( 5879 ) ColorLabels = 2891 ( 6256 ) LayerLabels = 2411 ( 5261 )
+LABELS : N0Labels = 11 ( 11 ) N1Labels = 2891 ( 6318 ) N2Labels = 0 ( 0 ) TotalLabels = 2902 ( 6329 ) NameLabels = 2900 ( 5879 ) ColorLabels = 2891 ( 6318 ) LayerLabels = 2411 ( 5256 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 4 ( 4 )
COLORS : Colors = BLACK BLUE1 RED YELLOW ( BLACK BLUE1 RED YELLOW )
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: CHECKSHAPE : Faulty"
puts "TODO CR23096 ALL: LABELS : Faulty"
#puts "TODO CR23096 ALL: Error : 1 differences with reference data found :"
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 253 ( 4993 ) Summary = 253 ( 4993 )
-CHECKSHAPE : Wires = 12 ( 17 ) Faces = 12 ( 11 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
+CHECKSHAPE : Wires = 12 ( 19 ) Faces = 12 ( 13 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 4729 ( 4729 ) Summary = 63154 ( 63144 )
STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 4729 ( 4729 ) FreeWire = 18 ( 18 ) FreeEdge = 452 ( 452 ) SharedEdge = 26794 ( 26793 )
TOLERANCE : MaxTol = 0.9804479161 ( 0.9805459497 ) AvgTol = 0.01153089031 ( 0.01154870945 )
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 2 ( 0 ) Warnings = 85 ( 295 ) Summary = 87 ( 295 )
CHECKSHAPE : Wires = 8 ( 13 ) Faces = 8 ( 13 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 419 ( 419 ) Summary = 5330 ( 5351 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 419 ( 419 ) FreeWire = 4 ( 4 ) FreeEdge = 42 ( 42 ) SharedEdge = 2221 ( 2227 )
-TOLERANCE : MaxTol = 4.548096104 ( 4.543567878 ) AvgTol = 0.03300579563 ( 0.03647254811 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 419 ( 419 ) Summary = 5328 ( 5352 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 419 ( 419 ) FreeWire = 4 ( 4 ) FreeEdge = 42 ( 42 ) SharedEdge = 2221 ( 2228 )
+TOLERANCE : MaxTol = 4.547932063 ( 4.543567878 ) AvgTol = 0.03466358537 ( 0.03659099671 )
LABELS : N0Labels = 457 ( 457 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 457 ( 457 ) NameLabels = 457 ( 457 ) ColorLabels = 451 ( 455 ) LayerLabels = 453 ( 457 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 2 ( 2 )
# !!!! This file is generated automatically, do not edit manually! See end script
puts "TODO CR23096 ALL: LABELS : Faulty"
puts "TODO CR23096 ALL: COLORS : Faulty"
-puts "TODO CR23096 ALL: NBSHAPES : Faulty"
+puts "TODO CR23096 ALL: CHECKSHAPE : Faulty"
+
set filename ims016.igs
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 120 ( 402 ) Summary = 120 ( 402 )
-CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 138 ( 138 ) Summary = 10561 ( 10563 )
-STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 138 ( 138 ) FreeWire = 6 ( 6 ) FreeEdge = 353 ( 353 ) SharedEdge = 4947 ( 4949 )
-TOLERANCE : MaxTol = 0.07559058774 ( 0.07559058772 ) AvgTol = 0.0006486647078 ( 0.0006485486933 )
-LABELS : N0Labels = 503 ( 503 ) N1Labels = 0 ( 196 ) N2Labels = 0 ( 0 ) TotalLabels = 503 ( 699 ) NameLabels = 503 ( 503 ) ColorLabels = 470 ( 699 ) LayerLabels = 313 ( 344 )
+CHECKSHAPE : Wires = 4 ( 0 ) Faces = 2 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 138 ( 138 ) Summary = 10599 ( 10569 )
+STATSHAPE : Solid = 0 ( 0 ) Shell = 0 ( 0 ) Face = 138 ( 138 ) FreeWire = 6 ( 6 ) FreeEdge = 353 ( 353 ) SharedEdge = 4953 ( 4953 )
+TOLERANCE : MaxTol = 0.2092687841 ( 0.2092687804 ) AvgTol = 0.0009010196362 ( 0.0009882759183 )
+LABELS : N0Labels = 503 ( 503 ) N1Labels = 0 ( 200 ) N2Labels = 0 ( 0 ) TotalLabels = 503 ( 703 ) NameLabels = 503 ( 503 ) ColorLabels = 470 ( 703 ) LayerLabels = 313 ( 344 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 6 ( 7 )
COLORS : Colors = CYAN1 GREEN MAGENTA1 RED WHITE YELLOW ( BLACK CYAN1 GREEN MAGENTA1 RED WHITE YELLOW )
puts "TODO CR23096 ALL: LABELS : Faulty"
puts "TODO CR23096 ALL: COLORS : Faulty"
puts "TODO CR23096 ALL: LAYERS : Faulty"
-puts "TODO CR25013 ALL: Error : 3 differences with reference data found"
+puts "TODO CR25013 ALL: Error : 4 differences with reference data found"
set filename BUC40132.igs
# !!!! This file is generated automatically, do not edit manually! See end script
puts "TODO CR23096 ALL: LABELS : Faulty"
+puts "TODO CR23096 ALL: CHECKSHAPE : Faulty"
+
set filename PRO20364.stp
CHECKSHAPE : Wires = 2 ( 2 ) Faces = 2 ( 2 ) Shells = 1 ( 1 ) Solids = 1 ( 1 )
NBSHAPES : Solid = 4 ( 4 ) Shell = 4 ( 4 ) Face = 40 ( 40 ) Summary = 263 ( 263 )
STATSHAPE : Solid = 4 ( 4 ) Shell = 4 ( 4 ) Face = 40 ( 40 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 98 ( 98 )
-TOLERANCE : MaxTol = 0.7571968817 ( 0.757178949 ) AvgTol = 0.04096331122 ( 0.04096426509 )
+TOLERANCE : MaxTol = 0.7226608412 ( 0.7227160437 ) AvgTol = 0.04200651748 ( 0.04200775508 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 4 ( 4 ) N2Labels = 0 ( 0 ) TotalLabels = 5 ( 5 ) NameLabels = 1 ( 1 ) ColorLabels = 4 ( 4 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 2 ( 2 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 108 ( 108 ) Summary = 674 ( 669 )
STATSHAPE : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 108 ( 108 ) FreeWire = 0 ( 0 ) FreeEdge = 5 ( 5 ) SharedEdge = 275 ( 275 )
-TOLERANCE : MaxTol = 0.1162538812 ( 0.1162538812 ) AvgTol = 0.007800576583 ( 0.01124673982 )
+TOLERANCE : MaxTol = 0.1162538812 ( 0.1162538812 ) AvgTol = 0.007933501527 ( 0.0113796647 )
LABELS : N0Labels = 3 ( 3 ) N1Labels = 7 ( 7 ) N2Labels = 0 ( 0 ) TotalLabels = 10 ( 10 ) NameLabels = 5 ( 5 ) ColorLabels = 6 ( 6 ) LayerLabels = 6 ( 6 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 2 ( 2 )
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 39 ( 6 ) Summary = 39 ( 6 )
CHECKSHAPE : Wires = 64 ( 48 ) Faces = 64 ( 48 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 15 ( 16 ) Shell = 17 ( 17 ) Face = 367 ( 366 ) Summary = 2506 ( 2495 )
+NBSHAPES : Solid = 15 ( 16 ) Shell = 17 ( 17 ) Face = 367 ( 366 ) Summary = 2505 ( 2495 )
STATSHAPE : Solid = 71 ( 79 ) Shell = 87 ( 87 ) Face = 2740 ( 2732 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 1064 ( 1057 )
TOLERANCE : MaxTol = 4.389003466 ( 5.153790881 ) AvgTol = 0.05707355423 ( 0.06633632879 )
LABELS : N0Labels = 10 ( 10 ) N1Labels = 32 ( 32 ) N2Labels = 0 ( 0 ) TotalLabels = 42 ( 42 ) NameLabels = 22 ( 22 ) ColorLabels = 22 ( 22 ) LayerLabels = 0 ( 0 )
CHECKSHAPE : Wires = 4 ( 4 ) Faces = 4 ( 4 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 292 ( 292 ) Summary = 1707 ( 1707 )
STATSHAPE : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 292 ( 292 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 718 ( 718 )
-TOLERANCE : MaxTol = 0.1164202689 ( 0.1164219029 ) AvgTol = 0.00286119941 ( 0.01095378922 )
+TOLERANCE : MaxTol = 0.1252883206 ( 0.1252874378 ) AvgTol = 0.003079961606 ( 0.01117254297 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 19 ( 19 ) N2Labels = 0 ( 0 ) TotalLabels = 20 ( 20 ) NameLabels = 1 ( 1 ) ColorLabels = 20 ( 20 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 1 ( 1 ) Volume = 1 ( 1 ) Area = 1 ( 1 )
NCOLORS : NColors = 2 ( 2 )
CHECKSHAPE : Wires = 2 ( 2 ) Faces = 2 ( 2 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 416 ( 415 ) Summary = 2779 ( 2761 )
STATSHAPE : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 416 ( 415 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 1195 ( 1179 )
-TOLERANCE : MaxTol = 9036.639612 ( 0.9492387908 ) AvgTol = 21.72114525 ( 0.03925492632 )
+TOLERANCE : MaxTol = 9511.663612 ( 0.9492387908 ) AvgTol = 22.86226785 ( 0.0392704055 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 28 ( 28 ) N2Labels = 0 ( 0 ) TotalLabels = 29 ( 29 ) NameLabels = 1 ( 1 ) ColorLabels = 29 ( 29 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 1 ( 1 ) Volume = 1 ( 1 ) Area = 1 ( 1 )
NCOLORS : NColors = 2 ( 2 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 108 ( 108 ) Summary = 652 ( 652 )
STATSHAPE : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 108 ( 108 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 270 ( 270 )
-TOLERANCE : MaxTol = 0.135089911 ( 0.135089907 ) AvgTol = 0.01291133866 ( 0.01518557927 )
+TOLERANCE : MaxTol = 0.1381688089 ( 0.1381688071 ) AvgTol = 0.01295053427 ( 0.0152247749 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 1 ( 1 ) NameLabels = 1 ( 1 ) ColorLabels = 1 ( 1 ) LayerLabels = 1 ( 1 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 1 ( 1 )
DATA : Faulties = 0 ( 9 ) Warnings = 0 ( 0 ) Summary = 0 ( 9 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 77 ( 39 ) Summary = 77 ( 39 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 1 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 10 ( 10 ) Shell = 12 ( 12 ) Face = 269 ( 269 ) Summary = 1638 ( 1636 )
-STATSHAPE : Solid = 10 ( 10 ) Shell = 12 ( 12 ) Face = 269 ( 269 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 636 ( 636 )
+NBSHAPES : Solid = 11 ( 11 ) Shell = 13 ( 13 ) Face = 270 ( 270 ) Summary = 1653 ( 1646 )
+STATSHAPE : Solid = 11 ( 11 ) Shell = 13 ( 13 ) Face = 270 ( 270 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 642 ( 640 )
TOLERANCE : MaxTol = 0.01008857123 ( 0.01008857108 ) AvgTol = 0.0003104589496 ( 0.0003616303196 )
LABELS : N0Labels = 3 ( 3 ) N1Labels = 2 ( 3 ) N2Labels = 0 ( 1 ) TotalLabels = 5 ( 7 ) NameLabels = 5 ( 5 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
# !!!! This file is generated automatically, do not edit manually! See end script
-
+puts "TODO CR25593 ALL: CHECKSHAPE : Faulty"
set filename trj7_pm5-hc-214.stp
CHECKSHAPE : Wires = 1 ( 1 ) Faces = 1 ( 1 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 4 ( 4 ) Shell = 27 ( 27 ) Face = 183 ( 183 ) Summary = 1491 ( 1486 )
STATSHAPE : Solid = 4 ( 4 ) Shell = 27 ( 27 ) Face = 183 ( 183 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 623 ( 622 )
-TOLERANCE : MaxTol = 0.2224706003 ( 0.2224706003 ) AvgTol = 0.003966127037 ( 0.003995856355 )
+TOLERANCE : MaxTol = 0.2224706003 ( 0.2224706003 ) AvgTol = 0.004510221387 ( 0.004579916902 )
LABELS : N0Labels = 28 ( 28 ) N1Labels = 32 ( 23 ) N2Labels = 0 ( 0 ) TotalLabels = 60 ( 51 ) NameLabels = 51 ( 51 ) ColorLabels = 27 ( 22 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 2 ( 2 )
CHECKSHAPE : Wires = 1 ( 0 ) Faces = 2 ( 1 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 98 ( 98 ) Shell = 98 ( 98 ) Face = 3829 ( 3829 ) Summary = 22284 ( 22284 )
STATSHAPE : Solid = 116 ( 116 ) Shell = 116 ( 116 ) Face = 4144 ( 4144 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 8834 ( 8834 )
-TOLERANCE : MaxTol = 0.0002435409967 ( 0.06761346589 ) AvgTol = 7.737752126e-007 ( 3.401316374e-005 )
+TOLERANCE : MaxTol = 0.00815099718 ( 0.06761346589 ) AvgTol = 3.973824812e-006 ( 3.72116487e-005 )
LABELS : N0Labels = 14 ( 14 ) N1Labels = 25 ( 25 ) N2Labels = 0 ( 0 ) TotalLabels = 39 ( 39 ) NameLabels = 39 ( 39 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
NCOLORS : NColors = 0 ( 0 )
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 Debian60-64: Error : 1 differences with reference data found :"
+puts "TODO CR25593 ALL: Error : 3 differences with reference data found :"
+puts "TODO CR25593 ALL: TPSTAT : Faulty"
set LinuxDiff 1
set LinuxFaulties {CHECKSHAPE}
DATA : Faulties = 0 ( 395 ) Warnings = 0 ( 0 ) Summary = 0 ( 395 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 0 ( 2 ) Summary = 0 ( 2 )
CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 0 ( 0 ) Shell = 149 ( 149 ) Face = 149 ( 149 ) Summary = 2146 ( 2144 )
+NBSHAPES : Solid = 0 ( 0 ) Shell = 149 ( 149 ) Face = 149 ( 149 ) Summary = 2144 ( 2144 )
STATSHAPE : Solid = 0 ( 0 ) Shell = 149 ( 149 ) Face = 149 ( 149 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 846 ( 846 )
TOLERANCE : MaxTol = 0.0009108451735 ( 0.0009108451735 ) AvgTol = 3.593153987e-005 ( 3.593209779e-005 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 1 ( 1 ) NameLabels = 1 ( 1 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 Debian60-64: CHECKSHAPE : Faulty"
+puts "TODO CR25593 ALL: CHECKSHAPE : Faulty"
# No checkape error on WNT in 64-bit only (after 22598 and issue 25797 was registered for that)
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: STATSHAPE : Faulty"
+puts "TODO CR23096 ALL: NBSHAPES : Faulty"
set LinuxDiff 3
set filename 53921163S0.stp
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 17 ( 27 ) Summary = 17 ( 27 )
-CHECKSHAPE : Wires = 8 ( 10 ) Faces = 8 ( 10 ) Shells = 0 ( 0 ) Solids = 1 ( 1 )
-NBSHAPES : Solid = 1 ( 1 ) Shell = 3 ( 3 ) Face = 558 ( 556 ) Summary = 3668 ( 3661 )
-STATSHAPE : Solid = 1 ( 1 ) Shell = 3 ( 3 ) Face = 558 ( 556 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 1527 ( 1526 )
+CHECKSHAPE : Wires = 10 ( 10 ) Faces = 10 ( 10 ) Shells = 0 ( 0 ) Solids = 1 ( 1 )
+NBSHAPES : Solid = 1 ( 1 ) Shell = 3 ( 3 ) Face = 556 ( 556 ) Summary = 3658 ( 3661 )
+STATSHAPE : Solid = 1 ( 1 ) Shell = 3 ( 3 ) Face = 556 ( 556 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 1523 ( 1526 )
TOLERANCE : MaxTol = 60.79282309 ( 60.87483475 ) AvgTol = 1.272227708 ( 1.266017009 )
LABELS : N0Labels = 1 ( 1 ) N1Labels = 0 ( 0 ) N2Labels = 0 ( 0 ) TotalLabels = 1 ( 1 ) NameLabels = 1 ( 1 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 1168 ( 895 ) Summary = 1168 ( 895 )
-CHECKSHAPE : Wires = 0 ( 0 ) Faces = 0 ( 0 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
+CHECKSHAPE : Wires = 1 ( 1 ) Faces = 1 ( 1 ) Shells = 0 ( 0 ) Solids = 0 ( 0 )
NBSHAPES : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 3826 ( 3826 ) Summary = 23862 ( 23856 )
STATSHAPE : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 3826 ( 3826 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 9969 ( 9964 )
TOLERANCE : MaxTol = 0.009023403931 ( 0.009980833943 ) AvgTol = 0.0003371911058 ( 0.000825361244 )
set ref_data {
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 27 ( 108 ) Summary = 27 ( 108 )
-CHECKSHAPE : Wires = 3 ( 4 ) Faces = 3 ( 4 ) Shells = 1 ( 1 ) Solids = 1 ( 1 )
+CHECKSHAPE : Wires = 4 ( 6 ) Faces = 4 ( 6 ) Shells = 1 ( 1 ) Solids = 1 ( 1 )
NBSHAPES : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 1173 ( 1173 ) Summary = 7998 ( 8005 )
STATSHAPE : Solid = 1 ( 1 ) Shell = 1 ( 1 ) Face = 1173 ( 1173 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 3392 ( 3399 )
TOLERANCE : MaxTol = 7.063782203 ( 7.063782203 ) AvgTol = 0.002932793725 ( 0.002941805253 )
# !!!! This file is generated automatically, do not edit manually! See end script
-puts "TODO CR23096 ALL: TOLERANCE : Faulty"
-
set filename Z8INV5.stp
DATA : Faulties = 0 ( 0 ) Warnings = 0 ( 0 ) Summary = 0 ( 0 )
TPSTAT : Faulties = 0 ( 0 ) Warnings = 114 ( 619 ) Summary = 114 ( 619 )
CHECKSHAPE : Wires = 16 ( 17 ) Faces = 18 ( 19 ) Shells = 1 ( 1 ) Solids = 0 ( 0 )
-NBSHAPES : Solid = 22 ( 22 ) Shell = 24 ( 24 ) Face = 1520 ( 1520 ) Summary = 11223 ( 11206 )
-STATSHAPE : Solid = 22 ( 22 ) Shell = 24 ( 24 ) Face = 1520 ( 1520 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 4792 ( 4781 )
+NBSHAPES : Solid = 22 ( 22 ) Shell = 24 ( 24 ) Face = 1520 ( 1520 ) Summary = 11216 ( 11206 )
+STATSHAPE : Solid = 22 ( 22 ) Shell = 24 ( 24 ) Face = 1520 ( 1520 ) FreeWire = 0 ( 0 ) FreeEdge = 0 ( 0 ) SharedEdge = 4787 ( 4781 )
TOLERANCE : MaxTol = 12.54913924 ( 7.159520237 ) AvgTol = 0.04320092698 ( 0.0322263844 )
LABELS : N0Labels = 25 ( 25 ) N1Labels = 23 ( 23 ) N2Labels = 0 ( 0 ) TotalLabels = 48 ( 48 ) NameLabels = 48 ( 48 ) ColorLabels = 0 ( 0 ) LayerLabels = 0 ( 0 )
PROPS : Centroid = 0 ( 0 ) Volume = 0 ( 0 ) Area = 0 ( 0 )
+puts "TODO OCC25593 ALL: Faulty shapes in variables faulty_1 to faulty_4 "
+
restore [locate_data_file wrong_checkshape_2.brep] a