From: Roman Lygin Date: Fri, 7 Dec 2012 08:47:03 +0000 (+0400) Subject: 0023597: Failed to export ellipse into STEP with units other than mm X-Git-Tag: V6_6_0_beta~189 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=72ae989503ce747a7a90ce7db895939d0b203ca5 0023597: Failed to export ellipse into STEP with units other than mm Test case for this bug --- diff --git a/src/UnitsMethods/UnitsMethods.cxx b/src/UnitsMethods/UnitsMethods.cxx index 36978f4013..3894a5bbd1 100755 --- a/src/UnitsMethods/UnitsMethods.cxx +++ b/src/UnitsMethods/UnitsMethods.cxx @@ -155,24 +155,12 @@ Handle(Geom2d_Curve) UnitsMethods::RadianToDegree } else if (theSurf->IsKind(STANDARD_TYPE(Geom_Plane))) { uFact = vFact = LengthFact; - if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Circle))) { - Handle(Geom2d_Circle) newCircle = - Handle(Geom2d_Circle)::DownCast(aCurve2d); - gp_Pnt2d Loc = newCircle->Location(); - Loc.SetX(Loc.X()*LengthFact); - Loc.SetY(Loc.Y()*LengthFact); - newCircle->SetRadius(newCircle->Radius()*LengthFact); - return newCircle; - } - else if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Ellipse))) { - Handle(Geom2d_Ellipse) newEllipse = - Handle(Geom2d_Ellipse)::DownCast(aCurve2d); - gp_Pnt2d Loc = newEllipse->Location(); - Loc.SetX(Loc.X()*LengthFact); - Loc.SetY(Loc.Y()*LengthFact); - newEllipse->SetMajorRadius(newEllipse->MajorRadius()*LengthFact); - newEllipse->SetMinorRadius(newEllipse->MinorRadius()*LengthFact); - return newEllipse; + if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Circle)) || + aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Ellipse))) { + gp_Trsf2d aT; + aT.SetScale (gp::Origin2d(), LengthFact); + aCurve2d->Transform (aT); + return aCurve2d; } } else { @@ -200,20 +188,12 @@ Handle(Geom2d_Curve) UnitsMethods::RadianToDegree return myNewLine2d; } else if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Conic))) { - if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Circle))) { - Handle(Geom2d_Circle) aCirc2d = - Handle(Geom2d_Circle)::DownCast(aCurve2d); + if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Circle)) || + aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Ellipse))) { Handle(Geom2d_BSplineCurve) aBSpline2d = - Geom2dConvert::CurveToBSplineCurve(aCirc2d); + Geom2dConvert::CurveToBSplineCurve(aCurve2d); aCurve2d = aBSpline2d; } - else if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Ellipse))) { - Handle(Geom2d_Ellipse) aHel2d = - Handle(Geom2d_Ellipse)::DownCast(aCurve2d); - Handle(Geom2d_BSplineCurve) aBSpline2d = - Geom2dConvert::CurveToBSplineCurve(aHel2d); - aCurve2d = aBSpline2d; - } else if (aCurve2d->IsKind(STANDARD_TYPE(Geom2d_Parabola))) { #ifdef DEBUG cout << "PCURVE of Parabola type in U or V Periodic Surface" << endl; @@ -304,24 +284,12 @@ Handle(Geom2d_Curve) UnitsMethods::DegreeToRadian } else if (aSurface->IsKind(STANDARD_TYPE(Geom_Plane))) { uFact = vFact = LengthFact; - if (aPcurve->IsKind(STANDARD_TYPE(Geom2d_Circle))) { - Handle(Geom2d_Circle) newCircle = - Handle(Geom2d_Circle)::DownCast(aPcurve); - gp_Pnt2d Loc = newCircle->Location(); - Loc.SetX(Loc.X()*LengthFact); - Loc.SetY(Loc.Y()*LengthFact); - newCircle->SetRadius(newCircle->Radius()*LengthFact); - return newCircle; - } - else if (aPcurve->IsKind(STANDARD_TYPE(Geom2d_Ellipse))) { - Handle(Geom2d_Ellipse) newEllipse = - Handle(Geom2d_Ellipse)::DownCast(aPcurve); - gp_Pnt2d Loc = newEllipse->Location(); - Loc.SetX(Loc.X()*LengthFact); - Loc.SetY(Loc.Y()*LengthFact); - newEllipse->SetMajorRadius(newEllipse->MajorRadius()*LengthFact); - newEllipse->SetMinorRadius(newEllipse->MinorRadius()*LengthFact); - return newEllipse; + if (aPcurve->IsKind(STANDARD_TYPE(Geom2d_Circle)) || + aPcurve->IsKind(STANDARD_TYPE(Geom2d_Ellipse))) { + gp_Trsf2d aT; + aT.SetScale (gp::Origin2d(), LengthFact); + aPcurve->Transform (aT); + return aPcurve; } } else { diff --git a/tests/bugs/xde/bug23597 b/tests/bugs/xde/bug23597 new file mode 100755 index 0000000000..aef90adef9 --- /dev/null +++ b/tests/bugs/xde/bug23597 @@ -0,0 +1,28 @@ +puts "================" +puts "OCC23597" +puts "================" +puts "" +####################################################################### +# Failed to export ellipse into STEP with units other than mm +####################################################################### + +set filedir ${imagedir} + +set TheFileName bug23597_f-ellipse +if { [file exists ${filedir}/${TheFileName}.stp] } { + puts "Error : There is old ${filedir}/${TheFileName}.stp file" +} + +xnorm STEP +restore [locate_data_file ${TheFileName}.brep] f +param write.step.unit FT +newmodel +stepwrite a f ${filedir}/${TheFileName}.stp + +if { ![file exists ${filedir}/${TheFileName}.stp] } { + puts "Error : There is not ${filedir}/${TheFileName}.stp file" +} + +catch {exec chmod 777 ${filedir}/${TheFileName}.stp } + +file delete ${filedir}/${TheFileName}.stp