From 044f762f4c48950382c7011a57b43718ee405188 Mon Sep 17 00:00:00 2001 From: dpasukhi Date: Mon, 27 Mar 2023 15:01:29 +0100 Subject: [PATCH] 0033095: Data Exchange, Step Import - Wrong PMI values when loading a *.stp file in m Fixed problem with dimension tolerance values (main) - Update supported type for tolerance measure unit, now we can handle base class --- src/STEPCAFControl/STEPCAFControl_Reader.cxx | 29 ++++++++++---------- tests/bugs/step/bug33095 | 6 ++++ 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/STEPCAFControl/STEPCAFControl_Reader.cxx b/src/STEPCAFControl/STEPCAFControl_Reader.cxx index 82b2d6487a..ec83c36e8d 100644 --- a/src/STEPCAFControl/STEPCAFControl_Reader.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Reader.cxx @@ -3296,14 +3296,17 @@ static void setDimObjectToXCAF(const Handle(Standard_Transient)& theEnt, Handle(StepBasic_NamedUnit) NU = anUnit.NamedUnit(); STEPConstruct_UnitContext anUnitCtx; anUnitCtx.ComputeFactors(NU); - if (aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnit))) { - aVal = aVal * anUnitCtx.LengthFactor(); - + if (aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndPlaneAngleMeasureWithUnitAndQRI)) || + aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndPlaneAngleMeasureWithUnit))) + { + convertAngleValue(anUnitCtx, aVal); + } + else if (aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnit)) || + aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnitAndQRI)) || + anUnitCtx.LengthFactor() > 0.) + { + aVal = aVal * anUnitCtx.LengthFactor(); } - else - if (aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndPlaneAngleMeasureWithUnit))) { - convertAngleValue(anUnitCtx, aVal); - } Handle(TCollection_HAsciiString) aName = aMWU->Name(); if (aName->Search("upper") > 0) // upper limit aDim2 = aVal; @@ -3403,13 +3406,11 @@ static void setDimObjectToXCAF(const Handle(Standard_Transient)& theEnt, Handle(StepBasic_NamedUnit) NU = anUnit.NamedUnit(); STEPConstruct_UnitContext anUnitCtxUpperBound; anUnitCtxUpperBound.ComputeFactors(NU); - if (aMWU->IsKind(STANDARD_TYPE(StepBasic_PlaneAngleMeasureWithUnit)) || - aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndPlaneAngleMeasureWithUnitAndQRI))) + if (aMWU->IsKind(STANDARD_TYPE(StepBasic_PlaneAngleMeasureWithUnit))) { convertAngleValue(anUnitCtxUpperBound, aVal); } - else if ((aMWU->IsKind(STANDARD_TYPE(StepBasic_MeasureWithUnit)) && anUnitCtxUpperBound.LengthFactor() > 0.) || - aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnitAndQRI))) + else if (anUnitCtxUpperBound.LengthFactor() > 0.) { aVal = aVal * anUnitCtxUpperBound.LengthFactor(); } @@ -3439,13 +3440,11 @@ static void setDimObjectToXCAF(const Handle(Standard_Transient)& theEnt, NU = anUnit.NamedUnit(); STEPConstruct_UnitContext anUnitCtxLowerBound; anUnitCtxLowerBound.ComputeFactors(NU); - if (aMWU->IsKind(STANDARD_TYPE(StepBasic_PlaneAngleMeasureWithUnit)) || - aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndPlaneAngleMeasureWithUnitAndQRI))) + if (aMWU->IsKind(STANDARD_TYPE(StepBasic_PlaneAngleMeasureWithUnit))) { convertAngleValue(anUnitCtxLowerBound, aVal); } - else if ((aMWU->IsKind(STANDARD_TYPE(StepBasic_MeasureWithUnit)) && anUnitCtxLowerBound.LengthFactor() > 0.) || - aMWU->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnitAndQRI))) + else if (anUnitCtxUpperBound.LengthFactor() > 0.) { aVal = aVal * anUnitCtxLowerBound.LengthFactor(); } diff --git a/tests/bugs/step/bug33095 b/tests/bugs/step/bug33095 index 269189c7ee..fe79485fdd 100644 --- a/tests/bugs/step/bug33095 +++ b/tests/bugs/step/bug33095 @@ -10,12 +10,14 @@ catch { Close D_m } # Read file in mm ReadStep D_mm [locate_data_file bug33095_cad_with_pmi.stp] set plusMinusTol_mm [XGetDimensionPlusMinusTol D_mm 0:1:4:77] +set dim_value_mm [XGetDimensionValue D_mm 0:1:4:77] # Read file in m XNewDoc D_m XSetLengthUnit D_m m ReadStep D_m [locate_data_file bug33095_cad_with_pmi.stp] set plusMinusTol_m [XGetDimensionPlusMinusTol D_m 0:1:4:77] +set dim_value_m [XGetDimensionValue D_m 0:1:4:77] # Checking regexp {lower +([-0-9.+eE]+) +upper +([-0-9.+eE]+)} $plusMinusTol_m full lower_m upper_m @@ -23,6 +25,7 @@ regexp {lower +([-0-9.+eE]+) +upper +([-0-9.+eE]+)} $plusMinusTol_mm full lower_ set lower_m_to_mm [expr {$lower_m * 1000}] set upper_m_to_mm [expr {$upper_m * 1000}] +set value_m_to_mm [expr {$dim_value_m * 1000}] if {[expr {abs($lower_m_to_mm - $lower_mm)}] > 1e-2} { puts "Error: incorrect scaling lower toleranse value" @@ -30,3 +33,6 @@ if {[expr {abs($lower_m_to_mm - $lower_mm)}] > 1e-2} { if {[expr {abs($upper_m_to_mm - $upper_mm)}] > 1e-2} { puts "Error: incorrect scaling upper toleranse value" } +if {[expr {abs($value_m_to_mm - $dim_value_mm)}] > 1e-2} { + puts "Error: incorrect scaling main dimension value" +}