mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0033326: Data Exchange, IGES Import - Ignoring unit value for validating geometry
Updated IGESToBRep_BasicCurve and Surface to work with geometry as is not scaled yet. Updated IGESControl_IGESBoundary to check existence of fields w/o number of iteration. Scaling appends only after creating geometry, that is why we need to compare with no scaled value
This commit is contained in:
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
17
tests/bugs/iges/bug33326
Normal file
17
tests/bugs/iges/bug33326
Normal file
@@ -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
|
Reference in New Issue
Block a user