0022436: EDF 2438 GEOM: Internal

This commit is contained in:
skv 2013-12-13 11:22:44 +00:00
parent e01162a80d
commit ffe5528479
3 changed files with 29 additions and 20 deletions

View File

@ -635,12 +635,10 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
aP2=aNodes(aN2).Transformed(aTrsf); aP2=aNodes(aN2).Transformed(aTrsf);
// //
if (aType==GeomAbs_Cylinder) { if (aType==GeomAbs_Cylinder) {
Standard_Real aTolSM;
gp_Cylinder aCyl; gp_Cylinder aCyl;
// //
aTolSM=1.523e-6;//~1.-cos(0.1 deg)
aCyl=aGAS.Cylinder(); aCyl=aGAS.Cylinder();
if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, aTolSM)) { if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, myTolerance)) {
continue; continue;
} }
} }

View File

@ -881,12 +881,10 @@ if (!aNb && myNbPntsMin) {
aP2=aNodes(aN2).Transformed(aTrsf); aP2=aNodes(aN2).Transformed(aTrsf);
// //
if (aType==GeomAbs_Cylinder) { if (aType==GeomAbs_Cylinder) {
Standard_Real aTolSM;
gp_Cylinder aCyl; gp_Cylinder aCyl;
// //
aTolSM=1.523e-6;//~1.-cos(0.1 deg)
aCyl=aGAS.Cylinder(); aCyl=aGAS.Cylinder();
if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, aTolSM)) { if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, myTolerance)) {
continue; continue;
} }
} }

View File

@ -140,21 +140,34 @@ Standard_Boolean GEOMAlgo_SurfaceTools::IsCoaxial(const gp_Pnt& aP1,
const gp_Cylinder& aCyl, const gp_Cylinder& aCyl,
const Standard_Real aTol) const Standard_Real aTol)
{ {
Standard_Boolean bRet=Standard_False; const gp_XYZ &aLoc = aCyl.Location().XYZ();
Standard_Real aSM; const gp_Ax1 &aAxis = aCyl.Axis();
// const gp_XYZ &aDAxis = aAxis.Direction().XYZ();
gp_Vec aV12(aP1, aP2); gp_XYZ aDP1 = aP1.XYZ().Subtracted(aLoc);
gp_Dir aD12(aV12); gp_XYZ aDP2 = aP2.XYZ().Subtracted(aLoc);
// Standard_Real aDot1 = aDP1.Dot(aDAxis);
const gp_Ax1& aAxis=aCyl.Axis(); Standard_Real aDot2 = aDP1.Dot(aDAxis);
const gp_Dir& aDAxis=aAxis.Direction(); Standard_Real aTol2 = aTol*aTol;
//
aSM=fabs(aD12*aDAxis); // Project P1 and P2 onto a plane with location aLoc and Norm aDAxis.
if (fabs(1.-aSM) > aTol) { aDP1.Subtract(aDAxis.Multiplied(aDot1));
return bRet; aDP2.Subtract(aDAxis.Multiplied(aDot2));
Standard_Real aRadius1 = aDP1.Modulus();
Standard_Real aRadius2 = aDP2.Modulus();
Standard_Boolean isOn = Standard_False;
if (fabs(aRadius1 - aRadius2) <= aTol) {
// Check the deflection of the middle point.
gp_XYZ aMidP = 0.5*(aDP1 + aDP2);
Standard_Real aMidRadius1 = aMidP.Modulus();
if (fabs(aRadius1 - aRadius2) <= aTol) {
isOn = Standard_True;
}
} }
//
return !bRet; return isOn;
} }
//======================================================================= //=======================================================================
//function : IsAnalytic //function : IsAnalytic