diff --git a/src/IGESControl/IGESControl_IGESBoundary.cxx b/src/IGESControl/IGESControl_IGESBoundary.cxx index bdcae284d9..1fd082252b 100644 --- a/src/IGESControl/IGESControl_IGESBoundary.cxx +++ b/src/IGESControl/IGESControl_IGESBoundary.cxx @@ -150,6 +150,7 @@ static Standard_Boolean Connect (const Handle(ShapeAnalysis_Wire)& theSAW, const Standard_Integer number, Handle(ShapeExtend_WireData)& Gsewd) { + (void)number; Gsewd = new ShapeExtend_WireData;//local translation (for mysewd) Handle(ShapeExtend_WireData) Gsewd3d = new ShapeExtend_WireData;//local translation (for mysewd3d) Handle(ShapeExtend_WireData) Gsewd2d = new ShapeExtend_WireData;//local translation (for mysewd2d) @@ -384,17 +385,31 @@ static Standard_Boolean Connect (const Handle(ShapeAnalysis_Wire)& theSAW, } } - if (number > 1) { - okCurve = okCurve && Connect (saw, mysewd, Gsewd, (len3d > 1) || (len2d > 1), maxtol, - distmin, revsewd, revnextsewd); + if (!mysewd.IsNull()) + { + okCurve = okCurve && Connect(saw, mysewd, Gsewd, (len3d > 1) || (len2d > 1), maxtol, + distmin, revsewd, revnextsewd); + } + else + { + mysewd = Gsewd; + } + if (!mysewd3d.IsNull()) + { okCurve3d = okCurve3d && Connect (saw3d, mysewd3d, Gsewd3d, len3d > 1, maxtol, distmin, revsewd, revnextsewd); + } + else + { + mysewd3d = Gsewd3d; + } + if (!mysewd2d.IsNull()) + { okCurve2d = okCurve2d && Connect (saw2d, mysewd2d, Gsewd2d, len2d > 1, maxtol, distmin, revsewd, revnextsewd); } - else { - mysewd = Gsewd; - mysewd3d = Gsewd3d; + else + { mysewd2d = Gsewd2d; } return okCurve; diff --git a/src/IGESToBRep/IGESToBRep_BasicCurve.cxx b/src/IGESToBRep/IGESToBRep_BasicCurve.cxx index 5dd82b3e2d..3d151e60e2 100644 --- a/src/IGESToBRep/IGESToBRep_BasicCurve.cxx +++ b/src/IGESToBRep/IGESToBRep_BasicCurve.cxx @@ -1249,7 +1249,7 @@ Handle(Geom_Curve) IGESToBRep_BasicCurve::TransferLine // modif du 15/10/97 : test moins severe // beaucoup de points confondus a GetEpsGeom()*GetUnitFactor() - if (!Ps.IsEqual(Pe,Precision::Confusion())) { //:l3 abv 11 Jan 99: GetEpsGeom()*GetUnitFactor()/10.)) { + if (!Ps.IsEqual(Pe,Precision::Confusion() / GetUnitFactor())) { //:l3 abv 11 Jan 99: GetEpsGeom()*GetUnitFactor()/10.)) { gp_Lin line(Ps, gp_Dir(gp_Vec(Ps,Pe))); Standard_Real t1 = ElCLib::Parameter(line, Ps); Standard_Real t2 = ElCLib::Parameter(line, Pe); @@ -1299,7 +1299,7 @@ Handle(Geom2d_Curve) IGESToBRep_BasicCurve::Transfer2dLine start->EndPoint().Y()); } - if (!beg.IsEqual(end,Precision::PConfusion())) { //:l3 abv 11 Jan 99: GetEpsCoeff())) { + if (!beg.IsEqual(end,Precision::PConfusion() / GetUnitFactor())) { //:l3 abv 11 Jan 99: GetEpsCoeff())) { gp_Lin2d line2d(beg, gp_Dir2d(gp_Vec2d(beg,end))); Standard_Real t1 = ElCLib::Parameter(line2d, beg); Standard_Real t2 = ElCLib::Parameter(line2d, end); diff --git a/src/IGESToBRep/IGESToBRep_BasicSurface.cxx b/src/IGESToBRep/IGESToBRep_BasicSurface.cxx index 8e5b0be914..b10587eb8c 100644 --- a/src/IGESToBRep/IGESToBRep_BasicSurface.cxx +++ b/src/IGESToBRep/IGESToBRep_BasicSurface.cxx @@ -312,7 +312,7 @@ Handle(Geom_CylindricalSurface) IGESToBRep_BasicSurface::TransferRigthCylindrica // Direction Reading Error : Null IGESEntity return res; } - if (radius < Precision::Confusion()) { + if (radius < (Precision::Confusion() / GetUnitFactor())) { return res; } @@ -374,7 +374,7 @@ Handle(Geom_ConicalSurface) IGESToBRep_BasicSurface::TransferRigthConicalSurface if (radius < 0) { return res; } - if (radius < Precision::Confusion()) + if (radius < (Precision::Confusion() / GetUnitFactor())) radius = 0.; gp_Pnt Pt = Point->Value(); @@ -427,7 +427,7 @@ Handle(Geom_SphericalSurface) IGESToBRep_BasicSurface::TransferSphericalSurface // Direction Reading Error : Null IGESEntity return res; } - if (radius < Precision::Confusion()){ + if (radius < (Precision::Confusion() / GetUnitFactor())){ return res; } @@ -483,7 +483,7 @@ Handle(Geom_ToroidalSurface) IGESToBRep_BasicSurface::TransferToroidalSurface // Direction Reading Error : Null IGESEntity return res; } - if (major < Precision::Confusion()||minor < Precision::Confusion()){ + if (major < (Precision::Confusion() / GetUnitFactor()) || minor < (Precision::Confusion() / GetUnitFactor())){ return res; } diff --git a/tests/bugs/iges/bug33326 b/tests/bugs/iges/bug33326 new file mode 100644 index 0000000000..b1ddac6e5b --- /dev/null +++ b/tests/bugs/iges/bug33326 @@ -0,0 +1,17 @@ +puts "===================================================" +puts "0033326: Data Exchange, IGES Import - Ignoring unit value for validating geometry" +puts "===================================================" +puts "" + +pload DCAF + +Close D -silent + +ReadIges D [locate_data_file "bug33326.igs"] +vclear +vinit View1 +XDisplay -dispMode 1 D +vfit +vdump "$imagedir/${casename}_src.png" + +Close D