diff --git a/src/STEPCAFControl/STEPCAFControl_Reader.cxx b/src/STEPCAFControl/STEPCAFControl_Reader.cxx index 37fc818dda..eb88fd3f55 100644 --- a/src/STEPCAFControl/STEPCAFControl_Reader.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Reader.cxx @@ -2400,7 +2400,10 @@ Standard_Boolean STEPCAFControl_Reader::setDatumToXCAF(const Handle(StepDimTol_D Handle(XCAFDimTolObjects_DatumObject) aDatTargetObj = new XCAFDimTolObjects_DatumObject(); XCAFDimTolObjects_DatumTargetType aType; if (!STEPCAFControl_GDTProperty::GetDatumTargetType(aDT->Description(), aType)) + { + aTP->AddWarning(aDT, "Unknown datum target type"); continue; + } aDatTargetObj->SetDatumTargetType(aType); Standard_Boolean isValidDT = Standard_False; @@ -2446,13 +2449,16 @@ Standard_Boolean STEPCAFControl_Reader::setDatumToXCAF(const Handle(StepDimTol_D if (aType == XCAFDimTolObjects_DatumTargetType_Area) { // Area datum target - Interface_EntityIterator anIterDTF = aGraph.Shareds(aDT); + if (aRelationship.IsNull()) + continue; + Handle(StepRepr_ShapeAspect) aSA = aRelationship->RelatingShapeAspect(); + Interface_EntityIterator aSAIter = aGraph.Sharings(aSA); Handle(StepAP242_GeometricItemSpecificUsage) aGISU; - for (; anIterDTF.More() && aGISU.IsNull(); anIterDTF.Next()) { - aGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIterDTF.Value()); + for (; aSAIter.More() && aGISU.IsNull(); aSAIter.Next()) { + aGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(aSAIter.Value()); } Handle(StepRepr_RepresentationItem) anItem; - if (aGISU->NbIdentifiedItem() > 0) + if (!aGISU.IsNull() && aGISU->NbIdentifiedItem() > 0) anItem = aGISU->IdentifiedItemValue(1); if (anItem.IsNull()) continue; diff --git a/tests/bugs/step/bug31685_1 b/tests/bugs/step/bug31685_1 new file mode 100644 index 0000000000..0b789b5804 --- /dev/null +++ b/tests/bugs/step/bug31685_1 @@ -0,0 +1,44 @@ +puts "===================================================" +puts " 0031685: Data Exchange, STEPCAFControl_Reader - NULL dereference on translating PLACED_DATUM_TARGET_FEATURE " +puts "===================================================" +puts "" + +pload DCAF + +# Read file +ReadStep D [locate_data_file bug31685_1.stp] +XGetOneShape res D + +# Checking +checkshape res f +set dump [XDumpNbDGTs D f] +set info " + + NbOfDimensions : 14 + NbOfDimensionalSize : 7 + NbOfDimensionalLocation: 0 + NbOfAngular : 0 + NbOfWithPath : 0 + NbOfCommonLabels : 0 + NbOfTolerances : 22 + NbOfGTWithModifiers : 4 + NbOfGTWithMaxTolerance : 0 + NbOfGTWithDatums : 20 + NbOfDatumFeature : 13 + NbOfAttachedDatum : 70 + NbOfDatumTarget : 57 +" +set isOK 1; +set nb_ref [llength $dump] +for { set i 0 } { $i < $nb_ref } { incr i } { + set refstr [lindex $info $i] + set curstr [lindex $dump $i] + if {[string equal $refstr $curstr] == 0} { + set isOK 0 + } +} +if {$isOK == 0} { + puts "Error: wrong translate DGT" +} + +Close D \ No newline at end of file diff --git a/tests/bugs/step/bug31685_2 b/tests/bugs/step/bug31685_2 new file mode 100644 index 0000000000..a36efa93c1 --- /dev/null +++ b/tests/bugs/step/bug31685_2 @@ -0,0 +1,44 @@ +puts "===================================================" +puts " 0031685: Data Exchange, STEPCAFControl_Reader - NULL dereference on translating PLACED_DATUM_TARGET_FEATURE " +puts "===================================================" +puts "" + +pload DCAF + +# Read file +ReadStep D [locate_data_file bug31685_2.stp] +XGetOneShape res D + +# Checking +checkshape res f +set dump [XDumpNbDGTs D f] +set info " + + NbOfDimensions : 52 + NbOfDimensionalSize : 17 + NbOfDimensionalLocation: 4 + NbOfAngular : 0 + NbOfWithPath : 0 + NbOfCommonLabels : 1 + NbOfTolerances : 26 + NbOfGTWithModifiers : 3 + NbOfGTWithMaxTolerance : 0 + NbOfGTWithDatums : 23 + NbOfDatumFeature : 16 + NbOfAttachedDatum : 72 + NbOfDatumTarget : 1 +" +set isOK 1; +set nb_ref [llength $dump] +for { set i 0 } { $i < $nb_ref } { incr i } { + set refstr [lindex $info $i] + set curstr [lindex $dump $i] + if {[string equal $refstr $curstr] == 0} { + set isOK 0 + } +} +if {$isOK == 0} { + puts "Error: wrong translate DGT" +} + +Close D \ No newline at end of file diff --git a/tests/bugs/step/bug31685_3 b/tests/bugs/step/bug31685_3 new file mode 100644 index 0000000000..97ed381c8f --- /dev/null +++ b/tests/bugs/step/bug31685_3 @@ -0,0 +1,44 @@ +puts "===================================================" +puts " 0031685: Data Exchange, STEPCAFControl_Reader - NULL dereference on translating PLACED_DATUM_TARGET_FEATURE " +puts "===================================================" +puts "" + +pload DCAF + +# Read file +ReadStep D [locate_data_file bug31685_3.stp] +XGetOneShape res D + +# Checking +checkshape res f +set dump [XDumpNbDGTs D f] +set info " + + NbOfDimensions : 60 + NbOfDimensionalSize : 20 + NbOfDimensionalLocation: 2 + NbOfAngular : 0 + NbOfWithPath : 0 + NbOfCommonLabels : 1 + NbOfTolerances : 38 + NbOfGTWithModifiers : 3 + NbOfGTWithMaxTolerance : 0 + NbOfGTWithDatums : 35 + NbOfDatumFeature : 15 + NbOfAttachedDatum : 109 + NbOfDatumTarget : 4 +" +set isOK 1; +set nb_ref [llength $dump] +for { set i 0 } { $i < $nb_ref } { incr i } { + set refstr [lindex $info $i] + set curstr [lindex $dump $i] + if {[string equal $refstr $curstr] == 0} { + set isOK 0 + } +} +if {$isOK == 0} { + puts "Error: wrong translate DGT" +} + +Close D \ No newline at end of file