0028235: Data Exchange - DG&T datum XCAF object has incomplete list of shape references
authorika <ika@opencascade.com>
Tue, 20 Dec 2016 12:12:09 +0000 (15:12 +0300)
committerapn <apn@opencascade.com>
Thu, 29 Dec 2016 11:57:05 +0000 (14:57 +0300)
Update STEP import and export of datums.
Update test cases.

41 files changed:
src/STEPCAFControl/STEPCAFControl_Reader.cxx
src/STEPCAFControl/STEPCAFControl_Writer.cxx
src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cxx
src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.hxx
src/XCAFDoc/XCAFDoc_Datum.cxx
src/XCAFDoc/XCAFDoc_DimTolTool.cxx
src/XCAFDoc/XCAFDoc_DimTolTool.hxx
src/XDEDRAW/XDEDRAW.cxx
src/XDEDRAW/XDEDRAW_GDTs.cxx
tests/gdt/export/A1
tests/gdt/export/A2
tests/gdt/export/A3
tests/gdt/export/A4
tests/gdt/export/A5
tests/gdt/export/A6
tests/gdt/export/A7
tests/gdt/export/A8
tests/gdt/export/A9
tests/gdt/export/B1
tests/gdt/export/B2
tests/gdt/export/B3
tests/gdt/export/B4
tests/gdt/export/B5
tests/gdt/import/A1
tests/gdt/import/A2
tests/gdt/import/A3
tests/gdt/import/A4
tests/gdt/import/A5
tests/gdt/presentation/A1
tests/gdt/presentation/A2
tests/gdt/presentation/A3
tests/gdt/presentation/A4
tests/gdt/presentation/A5
tests/gdt/presentation/A6
tests/gdt/presentation/A7
tests/gdt/presentation/A8
tests/gdt/presentation/A9
tests/gdt/presentation/B1
tests/gdt/presentation/B2
tests/gdt/presentation/B3
tests/gdt/presentation/B4

index 7231daa..5bbf3de 100644 (file)
@@ -15,6 +15,7 @@
 
 
 #include <BRep_Builder.hxx>
+#include <Geom_Axis2Placement.hxx>
 #include <Interface_EntityIterator.hxx>
 #include <Interface_InterfaceModel.hxx>
 #include <StepData_StepModel.hxx>
 #include <StepShape_ToleranceValue.hxx>
 #include <StepShape_ValueFormatTypeQualifier.hxx>
 #include <StepShape_Vertex.hxx>
+#include <StepToGeom.hxx>
 #include <StepVisual_AnnotationCurveOccurrence.hxx>
 #include <StepVisual_AnnotationPlane.hxx>
 #include <StepVisual_DraughtingCallout.hxx>
@@ -1961,7 +1963,7 @@ Standard_Boolean readAnnotationPlane(const Handle(StepVisual_AnnotationPlane) th
 // (Dimension, Geometric_Tolerance, Datum_Feature or Placed_Datum_Target_Feature)
 //=======================================================================
 void readAnnotation(const Handle(XSControl_TransferReader)& theTR, 
-  const Handle(Standard_Transient) theGDT,
+  const Handle(Standard_Transient)& theGDT,
   const Handle(Standard_Transient)& theDimObject)
 {
   if (theGDT.IsNull() || theDimObject.IsNull())
@@ -2259,239 +2261,306 @@ static Standard_Integer FindShapeIndexForDGT(const Handle(Standard_Transient)& t
 }
 
 //=======================================================================
+//function : collectShapeAspect
+//purpose  : 
+//=======================================================================
+static void collectShapeAspect(const Handle(StepRepr_ShapeAspect)& theSA,
+                               const Handle(XSControl_WorkSession)& theWS,
+                               NCollection_Sequence<Handle(StepRepr_ShapeAspect)>& theSAs)
+{
+  if (theSA.IsNull())
+    return;
+  Handle(XSControl_TransferReader) aTR = theWS->TransferReader();
+  Handle(Transfer_TransientProcess) aTP = aTR->TransientProcess();
+  const Interface_Graph& aGraph = aTP->Graph();
+  // Retrieve Shape_Aspect, connected to Representation_Item from Derived_Shape_Aspect
+  if (theSA->IsKind(STANDARD_TYPE(StepRepr_DerivedShapeAspect))) {
+    Interface_EntityIterator anIter = aGraph.Sharings(theSA);
+    Handle(StepRepr_ShapeAspectDerivingRelationship) aSADR = NULL;
+    for (; aSADR.IsNull() && anIter.More(); anIter.Next()) {
+      aSADR = Handle(StepRepr_ShapeAspectDerivingRelationship)::DownCast(anIter.Value());
+    }
+    if (!aSADR.IsNull())
+      collectShapeAspect(aSADR->RelatedShapeAspect(), theWS, theSAs);
+  }
+  else if (theSA->IsKind(STANDARD_TYPE(StepDimTol_DatumFeature)) ||
+    theSA->IsKind(STANDARD_TYPE(StepDimTol_DatumTarget))) {
+    theSAs.Append(theSA);
+    return;
+  }
+  else {
+    // Find all children Shape_Aspect
+    Standard_Boolean isSimple = Standard_True;
+    Interface_EntityIterator anIter = aGraph.Sharings(theSA);
+    for (; anIter.More(); anIter.Next()) {
+      if (anIter.Value()->IsKind(STANDARD_TYPE(StepRepr_ShapeAspectRelationship)) &&
+          !anIter.Value()->IsKind(STANDARD_TYPE(StepShape_DimensionalLocation))) {
+        Handle(StepRepr_ShapeAspectRelationship) aSAR =
+          Handle(StepRepr_ShapeAspectRelationship)::DownCast(anIter.Value());
+        if (aSAR->RelatingShapeAspect() == theSA && !aSAR->RelatedShapeAspect().IsNull()
+            && !aSAR->RelatedShapeAspect()->IsKind(STANDARD_TYPE(StepDimTol_Datum))) {
+          collectShapeAspect(aSAR->RelatedShapeAspect(), theWS, theSAs);
+          isSimple = Standard_False;
+        }
+      }
+    }
+    // If not Composite_Shape_Aspect (or subtype) append to sequence.
+    if (isSimple)
+      theSAs.Append(theSA);
+  }
+}
+
+//=======================================================================
+//function : getShapeLabel
+//purpose  : 
+//=======================================================================
+
+static TDF_Label getShapeLabel(const Handle(StepRepr_RepresentationItem)& theItem,
+                               const Handle(XSControl_WorkSession)& theWS,
+                               const Handle(XCAFDoc_ShapeTool)& theShapeTool)
+{
+  TDF_Label aShapeL;
+  const Handle(Transfer_TransientProcess) &aTP = theWS->TransferReader()->TransientProcess();
+  Standard_Integer index = FindShapeIndexForDGT(theItem, theWS);
+  TopoDS_Shape aShape;
+  if (index > 0) {
+    Handle(Transfer_Binder) aBinder = aTP->MapItem(index);
+    aShape = TransferBRep::ShapeResult(aBinder);
+  }
+  if (aShape.IsNull())
+    return aShapeL;
+  theShapeTool->Search(aShape, aShapeL, Standard_True, Standard_True, Standard_True);
+  return aShapeL;
+}
+
+//=======================================================================
 //function : setDatumToXCAF
 //purpose  : 
 //=======================================================================
+
 static Standard_Boolean setDatumToXCAF(const Handle(StepDimTol_Datum)& theDat,
-                                        const TDF_Label theGDTL,
-                                        const Standard_Integer thePositionCounter,
-                                        const XCAFDimTolObjects_DatumModifiersSequence& aXCAFModifiers,
-                                        const XCAFDimTolObjects_DatumModifWithValue aXCAFModifWithVal,
-                                        const Standard_Real aModifValue,
-                                        const Handle(TDocStd_Document)& theDoc,
-                                        const Handle(XSControl_WorkSession)& theWS)
+                                       const TDF_Label theGDTL,
+                                       const Standard_Integer thePositionCounter,
+                                       const XCAFDimTolObjects_DatumModifiersSequence& theXCAFModifiers,
+                                       const XCAFDimTolObjects_DatumModifWithValue theXCAFModifWithVal,
+                                       const Standard_Real theModifValue,
+                                       const Handle(TDocStd_Document)& theDoc,
+                                       const Handle(XSControl_WorkSession)& theWS)
 {
-  Handle(XCAFDoc_ShapeTool) aSTool = XCAFDoc_DocumentTool::ShapeTool( theDoc->Main() );
-  Handle(XCAFDoc_DimTolTool) aDGTTool = XCAFDoc_DocumentTool::DimTolTool( theDoc->Main() );
+  Handle(XCAFDoc_ShapeTool) aSTool = XCAFDoc_DocumentTool::ShapeTool(theDoc->Main());
+  Handle(XCAFDoc_DimTolTool) aDGTTool = XCAFDoc_DocumentTool::DimTolTool(theDoc->Main());
   const Handle(XSControl_TransferReader) &aTR = theWS->TransferReader();
   const Handle(Transfer_TransientProcess) &aTP = aTR->TransientProcess();
   const Interface_Graph& aGraph = aTP->Graph();
   Handle(XCAFDoc_Datum) aDat;
-  TDF_Label aShL;
-  Standard_Boolean aRefShapeIsFound = Standard_False;
-  Standard_Boolean aFirstStep = Standard_True;
+  TDF_LabelSequence aShapeLabels;
+  Handle(XCAFDimTolObjects_DatumObject) aDatObj = new XCAFDimTolObjects_DatumObject();
+
+  // Collect all links to shapes
+  NCollection_Sequence<Handle(StepRepr_ShapeAspect)> aSAs;
   Interface_EntityIterator anIterD = aGraph.Sharings(theDat);
-  for(anIterD.Start(); anIterD.More(); anIterD.Next()) {
-    Handle(StepRepr_ShapeAspectRelationship) aSAR = 
-      Handle(StepRepr_ShapeAspectRelationship)::DownCast(anIterD.Value());
-    if(aSAR.IsNull()) continue;
-
-    Handle(StepRepr_ShapeAspect) aSA = aSAR->RelatingShapeAspect();
-    if (aSA.IsNull()) continue;
-    Handle(StepAP242_GeometricItemSpecificUsage) aPGISU;
-    if(aSA->IsKind(STANDARD_TYPE(StepRepr_CompShAspAndDatumFeatAndShAsp)))
-    {
-      //processing for complex entity
-      Interface_EntityIterator anIterC = aGraph.Sharings(aSA);
-      for(anIterC.Start(); anIterC.More(); anIterC.Next()) {
-        Handle(StepRepr_ShapeAspectRelationship) SAR = 
-          Handle(StepRepr_ShapeAspectRelationship)::DownCast(anIterC.Value());
-        if(SAR.IsNull()) continue;
-        Handle(StepRepr_ShapeAspect) aS = SAR->RelatedShapeAspect();
-        if(aS.IsNull()) continue;
-        Interface_EntityIterator anIterSA = aGraph.Sharings(aS);
-        for(anIterSA.Start(); anIterSA.More() && aPGISU.IsNull(); anIterSA.Next()) {
-          aPGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIterSA.Value());
-        }
-        if(!aPGISU.IsNull()){
-          aSA = aS;
-          break;
-        }
+  for (anIterD.Start(); anIterD.More(); anIterD.Next()) {
+    Handle(StepRepr_ShapeAspectRelationship) aSAR = Handle(StepRepr_ShapeAspectRelationship)::DownCast(anIterD.Value());
+    if (aSAR.IsNull() || aSAR->RelatingShapeAspect().IsNull())
+      continue;
+    collectShapeAspect(aSAR->RelatingShapeAspect(), theWS, aSAs);
+    Handle(StepDimTol_DatumFeature) aDF = Handle(StepDimTol_DatumFeature)::DownCast(aSAR->RelatingShapeAspect());
+    if (!aSAR->RelatingShapeAspect()->IsKind(STANDARD_TYPE(StepDimTol_DatumTarget)))
+      readAnnotation(aTR, aSAR->RelatingShapeAspect(), aDatObj);
+  }
+
+  // Collect shape labels
+  for (Standard_Integer i = 1; i <= aSAs.Length(); i++) {
+    Handle(StepRepr_ShapeAspect) aSA = aSAs.Value(i);
+    if (aSA.IsNull())
+      continue;
+    // Skip datum targets
+    if (aSA->IsKind(STANDARD_TYPE(StepDimTol_DatumTarget)))
+      continue;
+
+    // Process all connected GISU
+    Interface_EntityIterator anIter = aGraph.Sharings(aSA);
+    for (; anIter.More(); anIter.Next()) {
+      Handle(StepAP242_GeometricItemSpecificUsage) aGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIter.Value());
+      if (aGISU.IsNull())
+        continue;
+      for (Standard_Integer i = 1; i <= aGISU->NbIdentifiedItem(); i++) {
+        TDF_Label aShapeL = getShapeLabel(aGISU->IdentifiedItemValue(i), theWS, aSTool);
+        if (!aShapeL.IsNull())
+          aShapeLabels.Append(aShapeL);
       }
     }
-    else if(aSA->IsKind(STANDARD_TYPE(StepDimTol_PlacedDatumTargetFeature)))
-    {
-      //processing for datum target
-      Interface_EntityIterator anIterDTF = aGraph.Sharings(aSA);
-      for(anIterDTF.Start(); anIterDTF.More(); anIterDTF.Next()) {
-        if(anIterDTF.Value()->IsKind(STANDARD_TYPE(StepRepr_FeatureForDatumTargetRelationship)))
-        {
-          Handle(StepRepr_FeatureForDatumTargetRelationship) aFFDTR =
-            Handle(StepRepr_FeatureForDatumTargetRelationship)::DownCast(anIterDTF.Value());
-          Handle(StepRepr_ShapeAspect) aTmpSA = aFFDTR->RelatedShapeAspect();
-          Interface_EntityIterator anIterDSWP = aGraph.Sharings(aTmpSA);
-          for(anIterDSWP.Start(); anIterDSWP.More() && aPGISU.IsNull(); anIterDSWP.Next()) {
-            aPGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIterDSWP.Value());
+  }
+
+  // Process datum targets and create objects for them
+  Standard_Boolean isExistDatumTarget = Standard_False;
+  for (Standard_Integer i = 1; i <= aSAs.Length(); i++) {
+    Handle(StepDimTol_PlacedDatumTargetFeature) aDT = Handle(StepDimTol_PlacedDatumTargetFeature)::DownCast(aSAs.Value(i));
+    if (aDT.IsNull())
+      continue;
+    Handle(XCAFDimTolObjects_DatumObject) aDatObj = new XCAFDimTolObjects_DatumObject();
+    XCAFDimTolObjects_DatumTargetType aType;
+    if (!STEPCAFControl_GDTProperty::GetDatumTargetType(aDT->Description(), aType))
+      continue;
+    aDatObj->SetDatumTargetType(aType);
+    Standard_Boolean isValidDT = Standard_False;
+
+    // Feature for datum target
+    TDF_LabelSequence aDTShapeLabels;
+    Interface_EntityIterator anIter = aGraph.Sharings(aDT);
+    Handle(StepRepr_FeatureForDatumTargetRelationship) aRelationship;
+    for (; anIter.More() && aRelationship.IsNull(); anIter.Next()) {
+      aRelationship = Handle(StepRepr_FeatureForDatumTargetRelationship)::DownCast(anIter.Value());
     }
+    if (!aRelationship.IsNull()) {
+      Handle(StepRepr_ShapeAspect) aSA = aRelationship->RelatingShapeAspect();
+      Interface_EntityIterator aSAIter = aGraph.Sharings(aSA);
+      for (; aSAIter.More(); aSAIter.Next()) {
+        Handle(StepAP242_GeometricItemSpecificUsage) aGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(aSAIter.Value());
+        if (aGISU.IsNull())
+          continue;
+        for (Standard_Integer i = 1; i <= aGISU->NbIdentifiedItem(); i++) {
+          TDF_Label aShapeL = getShapeLabel(aGISU->IdentifiedItemValue(i), theWS, aSTool);
+          if (!aShapeL.IsNull()) {
+            aDTShapeLabels.Append(aShapeL);
+            isValidDT = Standard_True;
+          }
         }
       }
     }
-    if (aSA.IsNull()) continue;
-    Interface_EntityIterator anIterDSWP = aGraph.Sharings(aSA);
-    for(anIterDSWP.Start(); anIterDSWP.More() && aPGISU.IsNull(); anIterDSWP.Next()) {
-      aPGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIterDSWP.Value());
-    }
-    if(aPGISU.IsNull()) continue;
-    // get representation item
-    Handle(StepRepr_RepresentationItem) aRI;
-    for(Standard_Integer i = 1 ; i <= aPGISU->NbIdentifiedItem() && aRI.IsNull(); i++)
-    {
-      aRI = aPGISU->IdentifiedItemValue(i);
-    }
-    if(aRI.IsNull()) continue;
-    Standard_Integer index = FindShapeIndexForDGT(aRI, theWS);
-    TopoDS_Shape aSh;
-    if(index >0) {
-      Handle(Transfer_Binder) binder = aTP->MapItem(index);
-      aSh = TransferBRep::ShapeResult(binder);
+
+    if (aType != XCAFDimTolObjects_DatumTargetType_Area && !isValidDT) {
+      // Try another way of feature connection
+      for (anIter.Start(); anIter.More(); anIter.Next()) {
+        Handle(StepAP242_GeometricItemSpecificUsage) aGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIter.Value());
+        if (aGISU.IsNull())
+          continue;
+        for (Standard_Integer i = 1; i <= aGISU->NbIdentifiedItem(); i++) {
+          TDF_Label aShapeL = getShapeLabel(aGISU->IdentifiedItemValue(i), theWS, aSTool);
+          if (!aShapeL.IsNull()) {
+            aDTShapeLabels.Append(aShapeL);
+            isValidDT = Standard_True;
+          }
+        }
+      }
     }
-    if(aSh.IsNull()) continue; 
-    if( !aSTool->Search(aSh, aShL, Standard_True, Standard_True, Standard_True) ) continue;
-    Handle(TDataStd_TreeNode) aNode;
-    if(aFirstStep && aShL.FindAttribute(XCAFDoc::DatumRefGUID(),aNode) && aNode->HasFirst() &&
-       aNode->First()->Label().FindAttribute(XCAFDoc_Datum::GetID(),aDat))
-    {
-      //if datums already attached, not need add datum target
-      aRefShapeIsFound = Standard_True;
+
+    if (aType == XCAFDimTolObjects_DatumTargetType_Area) {
+      // Area datum target
+      Interface_EntityIterator anIterDTF = aGraph.Shareds(aDT);
+      Handle(StepAP242_GeometricItemSpecificUsage) aGISU;
+      for (; anIterDTF.More() && aGISU.IsNull(); anIterDTF.Next()) {
+        aGISU = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIterDTF.Value());
+      }
+      Handle(StepRepr_RepresentationItem) anItem;
+      if (aGISU->NbIdentifiedItem() > 0)
+        anItem = aGISU->IdentifiedItemValue(1);
+      if (anItem.IsNull())
+        continue;
+      Standard_Integer anItemIndex = FindShapeIndexForDGT(anItem, theWS);
+      if (anItemIndex > 0) {
+        Handle(Transfer_Binder) aBinder = aTP->MapItem(anItemIndex);
+        TopoDS_Shape anItemShape = TransferBRep::ShapeResult(aBinder);
+        aDatObj->SetDatumTarget(anItemShape);
+        isValidDT = Standard_True;
+      }
     }
-    aFirstStep = Standard_False;
-    Handle(XCAFDimTolObjects_DatumObject) aDatObj;
-    if(aSA->IsKind(STANDARD_TYPE(StepDimTol_PlacedDatumTargetFeature)))
-    {
-      if(!aRefShapeIsFound)
-      {
-        //if datum targers not yet added
-        TDF_Label aDatL = aDGTTool->AddDatum();
-        aDat = XCAFDoc_Datum::Set(aDatL);
-        aDGTTool->SetDatum(aShL, aDatL);
-        aDatObj = aDat->GetObject();
-        aDatObj->SetName(theDat->Identification());
-        aDatObj->SetPosition (thePositionCounter);
-        if(!aXCAFModifiers.IsEmpty())
-          aDatObj->SetModifiers(aXCAFModifiers);
-        if (aXCAFModifWithVal != XCAFDimTolObjects_DatumModifWithValue_None) 
-          aDatObj->SetModifierWithValue(aXCAFModifWithVal, aModifValue);
-        aDGTTool->SetDatumToGeomTol(aDatL, theGDTL);
-        Handle(StepDimTol_PlacedDatumTargetFeature) aPDTF = Handle(StepDimTol_PlacedDatumTargetFeature)::DownCast(aSA);
-        if (aPDTF->TargetId()->IsIntegerValue())
-          aDatObj->SetDatumTargetNumber(aPDTF->TargetId()->IntegerValue());
-        else
-          aDatObj->SetDatumTargetNumber(0);
-        aDatObj->IsDatumTarget(Standard_True);
-        XCAFDimTolObjects_DatumTargetType aType;
-        if(STEPCAFControl_GDTProperty::GetDatumTargetType(aSA->Description(),aType))
-        {
-          aDatObj->SetDatumTargetType(aType);
-          if(aType == XCAFDimTolObjects_DatumTargetType_Area)
-          {
-            Interface_EntityIterator anIterDTF = aGraph.Shareds(aSA);
-            for(anIterDTF.Start(); anIterDTF.More(); anIterDTF.Next()) {
-              if(anIterDTF.Value()->IsKind(STANDARD_TYPE(StepAP242_GeometricItemSpecificUsage)))
+    else {
+      // Point/line/rectangle/circle datum targets 
+      Interface_EntityIterator anIter = aGraph.Sharings(aDT);
+      Handle(StepRepr_PropertyDefinition) aPD;
+      for (; anIter.More() && aPD.IsNull(); anIter.Next()) {
+        aPD = Handle(StepRepr_PropertyDefinition)::DownCast(anIter.Value());
+      }
+      if (!aPD.IsNull()) {
+        anIter = aGraph.Sharings(aPD);
+        Handle(StepShape_ShapeDefinitionRepresentation) aSDR;
+        for (; anIter.More() && aSDR.IsNull(); anIter.Next()) {
+          aSDR = Handle(StepShape_ShapeDefinitionRepresentation)::DownCast(anIter.Value());
+        }
+        if (!aSDR.IsNull()) {
+          Handle(StepShape_ShapeRepresentationWithParameters) aSRWP
+            = Handle(StepShape_ShapeRepresentationWithParameters)::DownCast(aSDR->UsedRepresentation());
+          if (!aSRWP.IsNull()) {
+            isValidDT = Standard_True;
+            // Collect parameters of datum target
+            for (Standard_Integer i = aSRWP->Items()->Lower(); i <= aSRWP->Items()->Upper(); i++)
+            {
+              if (aSRWP->ItemsValue(i).IsNull())
+                continue;
+              if (aSRWP->ItemsValue(i)->IsKind(STANDARD_TYPE(StepGeom_Axis2Placement3d)))
               {
-                Handle(StepAP242_GeometricItemSpecificUsage) aGISU
-                  = Handle(StepAP242_GeometricItemSpecificUsage)::DownCast(anIterDSWP.Value());
-                Handle(StepRepr_RepresentationItem) anItem;
-                if(aPGISU->NbIdentifiedItem() > 0) {
-                  anItem = aPGISU->IdentifiedItemValue(1);
-                }
-                if(anItem.IsNull()) continue;
-                Standard_Integer anItemIndex = FindShapeIndexForDGT(anItem, theWS);
-                if(anItemIndex >0) {
-                  Handle(Transfer_Binder) binder = aTP->MapItem(anItemIndex);
-                  TopoDS_Shape anItemShape = TransferBRep::ShapeResult(binder);
-                  aDatObj->SetDatumTarget(anItemShape);
-                }
+                Handle(StepGeom_Axis2Placement3d) anAx
+                  = Handle(StepGeom_Axis2Placement3d)::DownCast(aSRWP->ItemsValue(i));
+                Handle(Geom_Axis2Placement) anAxis = StepToGeom::MakeAxis2Placement(anAx);
+                aDatObj->SetDatumTargetAxis(anAxis->Ax2());
               }
-            }
-          }
-          else
-          {
-            Interface_EntityIterator anIterDTF = aGraph.Shareds(aSA);
-            for(anIterDTF.Start(); anIterDTF.More(); anIterDTF.Next()) {
-              if(anIterDTF.Value()->IsKind(STANDARD_TYPE(StepRepr_PropertyDefinition)))
+              else if (aSRWP->ItemsValue(i)->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnit)))
               {
-                Interface_EntityIterator anIterPD = aGraph.Shareds(anIterDTF.Value());
-                for(anIterPD.Start(); anIterPD.More(); anIterPD.Next()) {
-                  if(anIterPD.Value()->IsKind(STANDARD_TYPE(StepShape_ShapeDefinitionRepresentation)))
-                  {
-                    Interface_EntityIterator anIterSDR = aGraph.Sharings(anIterPD.Value());
-                    for(anIterSDR.Start(); anIterSDR.More(); anIterSDR.Next()) {
-                      if(anIterSDR.Value()->IsKind(STANDARD_TYPE(StepShape_ShapeRepresentationWithParameters)))
-                      {
-                        Handle(StepShape_ShapeRepresentationWithParameters) aSRWP
-                          = Handle(StepShape_ShapeRepresentationWithParameters)::DownCast(anIterSDR.Value());
-                        for(Standard_Integer r = aSRWP->Items()->Lower(); r <= aSRWP->Items()->Upper(); r++)
-                        {
-                          if(aSRWP->ItemsValue(r)->IsKind(STANDARD_TYPE(StepGeom_Axis2Placement3d)))
-                          {
-                            Handle(StepGeom_Axis2Placement3d) anAx
-                              = Handle(StepGeom_Axis2Placement3d)::DownCast(aSRWP->ItemsValue(r));
-                            Handle(TColStd_HArray1OfReal) aDirArr = anAx->Axis()->DirectionRatios();
-                            Handle(TColStd_HArray1OfReal) aDirRArr = anAx->RefDirection()->DirectionRatios();
-                            Handle(TColStd_HArray1OfReal) aLocArr = anAx->Location()->Coordinates();
-                            gp_Dir aDir;
-                            gp_Dir aDirR;
-                            gp_Pnt aPnt;
-                            if(!aDirArr.IsNull() && aDirArr->Length() > 2 &&
-                              !aDirRArr.IsNull() && aDirRArr->Length() > 2 && 
-                              !aLocArr.IsNull() && aLocArr->Length() > 2)
-                            {
-                              aDir.SetCoord(aDirArr->Lower(), aDirArr->Lower()+1, aDirArr->Lower()+2);
-                              aDirR.SetCoord(aDirRArr->Lower(), aDirRArr->Lower()+1, aDirRArr->Lower()+2);
-                              aPnt.SetCoord(aLocArr->Lower(), aLocArr->Lower()+1, aLocArr->Lower()+2);
-                              gp_Ax2 anA(aPnt, aDir, aDirR);
-                              aDatObj->SetDatumTargetAxis(anA);
-                            }
-                          }
-                          else if(aSRWP->ItemsValue(r)->IsKind(STANDARD_TYPE(StepRepr_ReprItemAndLengthMeasureWithUnit)))
-                          {
-                            Handle(StepRepr_ReprItemAndLengthMeasureWithUnit) aM =
-                              Handle(StepRepr_ReprItemAndLengthMeasureWithUnit)::DownCast(aSRWP->ItemsValue(r)); 
-                            Standard_Real aVal = aM->GetMeasureWithUnit()->ValueComponent();
-                            StepBasic_Unit anUnit = aM->GetMeasureWithUnit()->UnitComponent();
-                            Standard_Real aFact=1.;
-                            if(anUnit.IsNull()) continue;
-                            if( !(anUnit.CaseNum(anUnit.Value())==1) ) continue;
-                            Handle(StepBasic_NamedUnit) NU = anUnit.NamedUnit();
-                            if(GetLengthConversionFactor(NU,aFact)) aVal=aVal*aFact;
-                            if(aM->Name()->String().IsEqual("target length") ||
-                              aM->Name()->String().IsEqual("target diameter"))
-                              aDatObj->SetDatumTargetLength(aVal);
-                            else
-                              aDatObj->SetDatumTargetWidth(aVal);
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
+                Handle(StepRepr_ReprItemAndLengthMeasureWithUnit) aM =
+                  Handle(StepRepr_ReprItemAndLengthMeasureWithUnit)::DownCast(aSRWP->ItemsValue(i));
+                Standard_Real aVal = aM->GetMeasureWithUnit()->ValueComponent();
+                StepBasic_Unit anUnit = aM->GetMeasureWithUnit()->UnitComponent();
+                Standard_Real aFact = 1.;
+                if (anUnit.IsNull())
+                  continue;
+                Handle(StepBasic_NamedUnit) aNU = anUnit.NamedUnit();
+                if (aNU.IsNull())
+                  continue;
+                if (GetLengthConversionFactor(aNU, aFact))
+                  aVal = aVal * aFact;
+                if (aM->Name()->String().IsEqual("target length") ||
+                  aM->Name()->String().IsEqual("target diameter"))
+                  aDatObj->SetDatumTargetLength(aVal);
+                else
+                  aDatObj->SetDatumTargetWidth(aVal);
               }
             }
           }
         }
       }
     }
-    else
-    {
-      //processing for darum feature
+
+    // Create datum target object
+    if (isValidDT) {
       TDF_Label aDatL = aDGTTool->AddDatum();
       aDat = XCAFDoc_Datum::Set(aDatL);
-      aDGTTool->SetDatum(aShL, aDatL);
-      aDatObj = aDat->GetObject();
+      aDGTTool->SetDatum(aDTShapeLabels, aDatL);
       aDatObj->SetName(theDat->Identification());
-      aDatObj->SetPosition (thePositionCounter);
-      if(!aXCAFModifiers.IsEmpty())
-        aDatObj->SetModifiers(aXCAFModifiers);
-      if (aXCAFModifWithVal != XCAFDimTolObjects_DatumModifWithValue_None) 
-        aDatObj->SetModifierWithValue(aXCAFModifWithVal, aModifValue);
+      aDatObj->SetPosition(thePositionCounter);
+      if (!theXCAFModifiers.IsEmpty())
+        aDatObj->SetModifiers(theXCAFModifiers);
+      if (theXCAFModifWithVal != XCAFDimTolObjects_DatumModifWithValue_None)
+        aDatObj->SetModifierWithValue(theXCAFModifWithVal, theModifValue);
       aDGTTool->SetDatumToGeomTol(aDatL, theGDTL);
-    }
-    if(!aDatObj.IsNull()) {
-      readAnnotation(aTR, aSAR->RelatingShapeAspect(), aDatObj);
+      aDatObj->IsDatumTarget(Standard_True);
+      aDatObj->SetDatumTargetNumber(aDT->TargetId()->IntegerValue());
+      readAnnotation(aTR, aDT, aDatObj);
       aDat->SetObject(aDatObj);
+      isExistDatumTarget = Standard_True;
+    }
+  }
+
+  if (aShapeLabels.Length() > 0 || !isExistDatumTarget) {
+    // Create object for datum
+    TDF_Label aDatL = aDGTTool->AddDatum();
+    aDat = XCAFDoc_Datum::Set(aDatL);
+    aDGTTool->SetDatum(aShapeLabels, aDatL);
+    aDatObj->SetName(theDat->Identification());
+    aDatObj->SetPosition(thePositionCounter);
+    if (!theXCAFModifiers.IsEmpty())
+      aDatObj->SetModifiers(theXCAFModifiers);
+    if (theXCAFModifWithVal != XCAFDimTolObjects_DatumModifWithValue_None)
+      aDatObj->SetModifierWithValue(theXCAFModifWithVal, theModifValue);
+    aDGTTool->SetDatumToGeomTol(aDatL, theGDTL);
+    if (aDatObj->GetPresentation().IsNull()) {
+      // Try find annotation connected to datum entity (not right case, according recommended practices)
+      readAnnotation(aTR, theDat, aDatObj);
     }
+    aDat->SetObject(aDatObj);
   }
-  return !aDat.IsNull();
+
+  return Standard_True;
 }
 
 
@@ -2504,8 +2573,6 @@ static Standard_Boolean readDatumsAP242(const Handle(Standard_Transient)& theEnt
                                         const Handle(TDocStd_Document)& theDoc,
                                         const Handle(XSControl_WorkSession)& theWS)
 {
-  Handle(XCAFDoc_ShapeTool) aSTool = XCAFDoc_DocumentTool::ShapeTool( theDoc->Main() );
-  Handle(XCAFDoc_DimTolTool) aDGTTool = XCAFDoc_DocumentTool::DimTolTool( theDoc->Main() );
   const Handle(XSControl_TransferReader) &aTR = theWS->TransferReader();
   const Handle(Transfer_TransientProcess) &aTP = aTR->TransientProcess();
   const Interface_Graph& aGraph = aTP->Graph();
@@ -2646,55 +2713,6 @@ static Standard_Boolean readDatumsAP242(const Handle(Standard_Transient)& theEnt
 }
 
 //=======================================================================
-//function : collectShapeAspect
-//purpose  : 
-//=======================================================================
-static void collectShapeAspect(const Handle(StepRepr_ShapeAspect)& theSA,
-                               const Handle(XSControl_WorkSession)& theWS,
-                               NCollection_Sequence<Handle(StepRepr_ShapeAspect)>& theSAs)
-{
-  if (theSA.IsNull())
-    return;
-  Handle(XSControl_TransferReader) aTR = theWS->TransferReader();
-  Handle(Transfer_TransientProcess) aTP = aTR->TransientProcess();
-  const Interface_Graph& aGraph = aTP->Graph();
-  // Retrieve Shape_Aspect, connected to Representation_Item from Derived_Shape_Aspect
-  if (theSA->IsKind(STANDARD_TYPE(StepRepr_DerivedShapeAspect))) {
-    Interface_EntityIterator anIter = aGraph.Sharings(theSA);
-    Handle(StepRepr_ShapeAspectDerivingRelationship) aSADR = NULL;
-    for (; aSADR.IsNull() && anIter.More(); anIter.Next()) {
-      aSADR = Handle(StepRepr_ShapeAspectDerivingRelationship)::DownCast(anIter.Value());
-    }
-    if (!aSADR.IsNull())
-      collectShapeAspect(aSADR->RelatedShapeAspect(), theWS, theSAs);
-  }
-  else if (theSA->IsKind(STANDARD_TYPE(StepDimTol_DatumFeature))) {
-    theSAs.Append(theSA);
-    return;
-  }
-  else {
-    // Find all children Shape_Aspect
-    Standard_Boolean isSimple = Standard_True;
-    Interface_EntityIterator anIter = aGraph.Sharings(theSA);
-    for (; anIter.More(); anIter.Next()) {
-      if (anIter.Value()->IsKind(STANDARD_TYPE(StepRepr_ShapeAspectRelationship)) &&
-          !anIter.Value()->IsKind(STANDARD_TYPE(StepShape_DimensionalLocation))) {
-        Handle(StepRepr_ShapeAspectRelationship) aSAR =
-          Handle(StepRepr_ShapeAspectRelationship)::DownCast(anIter.Value());
-        if (aSAR->RelatingShapeAspect() == theSA) {
-          collectShapeAspect(aSAR->RelatedShapeAspect(), theWS, theSAs);
-          isSimple = Standard_False;
-        }
-      }
-    }
-    // If not Composite_Shape_Aspect (or subtype) append to sequence.
-    if (isSimple)
-      theSAs.Append(theSA);
-  }
-}
-
-
-//=======================================================================
 //function : createGeomTolObjectInXCAF
 //purpose  : 
 //=======================================================================
index 0b7b608..cd134fe 100644 (file)
 static NCollection_Vector<Handle(StepVisual_AnnotationPlane)> gdtAnnotationPlanes;
 static Handle(StepVisual_DraughtingModel) gdtPresentationDM;
 static Handle(StepVisual_HArray1OfPresentationStyleAssignment) gdtPrsCurveStyle;
+static Handle(StepRepr_ProductDefinitionShape) gdtCommonPDS;
 
 // added by skl 15.01.2004 for D&GT writing
 //#include <StepRepr_CompoundItemDefinition.hxx>
@@ -2490,7 +2491,7 @@ static void WritePresentation(const Handle(XSControl_WorkSession) &WS,
 //           in case of multiple features association)
 //=======================================================================
 static Handle(StepDimTol_Datum) WriteDatumAP242(const Handle(XSControl_WorkSession) &WS,
-                                                const TDF_Label theShapeL,
+                                                const TDF_LabelSequence theShapeL,
                                                 const TDF_Label theDatumL,
                                                 const Standard_Boolean isFirstDTarget,
                                                 const Handle(StepDimTol_Datum) theWrittenDatum)
@@ -2505,31 +2506,51 @@ static Handle(StepDimTol_Datum) WriteDatumAP242(const Handle(XSControl_WorkSessi
   Interface_Graph aGraph = aHGraph->Graph();
 
   Handle(StepRepr_ShapeAspect) aSA;
+  Handle(StepRepr_RepresentationContext) aRC;
+  Handle(StepRepr_ProductDefinitionShape) aPDS;
+  NCollection_Sequence<Handle(StepRepr_ShapeAspect)> aSASeq;
   Handle(StepAP242_GeometricItemSpecificUsage) aGISU;
+  Standard_Integer aSANum = 0, aGISUNum = 0;
   // Link with datum feature
-  Handle(StepRepr_ProductDefinitionShape) aPDS;
-  Handle(StepRepr_RepresentationContext) aRC;
-  Handle(Standard_Transient) anEnt;
-  TopoDS_Shape aShape;
-  TopLoc_Location aLoc;
-  TColStd_SequenceOfTransient aSeqRI;
+  for (Standard_Integer i = 1; i <= theShapeL.Length(); i++) {
+    Handle(Standard_Transient) anEnt;
+    TopoDS_Shape aShape;
+    TopLoc_Location aLoc;
+    TColStd_SequenceOfTransient aSeqRI;
+
+    aShape = XCAFDoc_ShapeTool::GetShape(theShapeL.Value(i));
+    FindEntities(FP, aShape, aLoc, aSeqRI);
+    if (aSeqRI.Length() <= 0) {
+      FP->Messenger() << "Warning: Cannot find RI for " << aShape.TShape()->DynamicType()->Name() << endl;
+      continue;
+    }
+    anEnt = aSeqRI.Value(1);
+    aPDS = FindPDS(aGraph, anEnt, aRC);
+    if (aPDS.IsNull())
+      continue;
 
-  aShape = XCAFDoc_ShapeTool::GetShape(theShapeL);
-  FindEntities( FP, aShape, aLoc, aSeqRI );
-  if ( aSeqRI.Length() <= 0 ) {
-    FP->Messenger() << "Warning: Cannot find RI for "<<aShape.TShape()->DynamicType()->Name()<<endl;
-    return NULL;
+    Handle(StepRepr_ShapeAspect) aCurrentSA = WriteShapeAspect(WS, theDatumL, aShape, aRC, aGISU);
+    if (aCurrentSA.IsNull())
+      continue;
+    aSASeq.Append(aCurrentSA);
+    aSANum = Model->Number(aCurrentSA);
+    aGISUNum = Model->Number(aGISU);
+  }
+  if (aPDS.IsNull()) {
+    // Workaround for datums without shape
+    aPDS = gdtCommonPDS;
+    Interface_EntityIterator aSDRIt = aGraph.Sharings(aPDS);
+    Handle(StepShape_ShapeDefinitionRepresentation) aSDR;
+    for (aSDRIt.Start(); aSDRIt.More() && aSDR.IsNull(); aSDRIt.Next())
+      aSDR = Handle(StepShape_ShapeDefinitionRepresentation)::DownCast(aSDRIt.Value());
+    if (!aSDR.IsNull()) {
+      Handle(StepRepr_Representation) aRepr = aSDR->UsedRepresentation();
+      if (!aRepr.IsNull())
+        aRC = aRepr->ContextOfItems();
+    }
   }
-  anEnt = aSeqRI.Value(1);
-  aPDS = FindPDS(aGraph, anEnt, aRC);
-  if (aPDS.IsNull()) 
-    return NULL;
 
-  aSA = WriteShapeAspect(WS, theDatumL, aShape, aRC, aGISU);
-  if (aSA.IsNull())
-    return NULL;
-  Standard_Integer aSANum = Model->Number(aSA);
-  Standard_Integer aGISUNum = Model->Number(aGISU);
+
   // Find if datum has datum targets and get common datum attributes
   Handle(XCAFDoc_Datum) aDatumAttr;
   if (!theDatumL.FindAttribute(XCAFDoc_Datum::GetID(), aDatumAttr)) 
@@ -2549,14 +2570,34 @@ static Handle(StepDimTol_Datum) WriteDatumAP242(const Handle(XSControl_WorkSessi
 
   // Simple datum
   if (isSimpleDatum) {
-    Handle(StepDimTol_DatumFeature) aDF = new StepDimTol_DatumFeature();
-    aDF->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aSA->OfShape(), aSA->ProductDefinitional());
-    Model->ReplaceEntity(aSANum, aDF);
-    aSA = aDF;
-    StepAP242_ItemIdentifiedRepresentationUsageDefinition aDefinition;
-    aDefinition.SetValue(aDF);
-    aGISU->SetDefinition(aDefinition);
-    Model->ReplaceEntity(aGISUNum, aGISU);
+    if (aSASeq.Length() == 0) {
+      // Create empty datum with name and presentation only
+      Handle(StepDimTol_DatumFeature) aDF = new StepDimTol_DatumFeature();
+      aDF->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aPDS, StepData_LTrue);
+      aSA = aDF;
+      Model->AddWithRefs(aDF);
+    }
+    else if (aSASeq.Length() == 1) {
+      Handle(StepDimTol_DatumFeature) aDF = new StepDimTol_DatumFeature();
+      aDF->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aPDS, StepData_LTrue);
+      Model->ReplaceEntity(aSANum, aDF);
+      aSA = aDF;
+      StepAP242_ItemIdentifiedRepresentationUsageDefinition aDefinition;
+      aDefinition.SetValue(aDF);
+      aGISU->SetDefinition(aDefinition);
+      Model->ReplaceEntity(aGISUNum, aGISU);
+    }
+    else if (aSASeq.Length() > 1) {
+      Handle(StepRepr_CompShAspAndDatumFeatAndShAsp) aDF = new StepRepr_CompShAspAndDatumFeatAndShAsp();
+      aDF->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aPDS, StepData_LTrue);
+      for (Standard_Integer i = 1; i <= aSASeq.Length(); i++) {
+        Handle(StepRepr_ShapeAspectRelationship) aSAR = new StepRepr_ShapeAspectRelationship();
+        aSAR->Init(new TCollection_HAsciiString(), Standard_False, new TCollection_HAsciiString(), aDF, aSASeq.Value(i));
+        Model->AddWithRefs(aSAR);
+      }
+      aSA = aDF;
+      Model->AddWithRefs(aDF);
+    }
   }
   // Datum with datum targets
   else {
@@ -2571,13 +2612,13 @@ static Handle(StepDimTol_Datum) WriteDatumAP242(const Handle(XSControl_WorkSessi
       aGISUNum = Model->Number(anAreaGISU);
       Handle(StepDimTol_DatumTarget) aDT = new StepDimTol_DatumTarget();
       aDT->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString("area"), anAreaSA->OfShape(),
-        anAreaSA->ProductDefinitional(), aTargetId);
+        StepData_LTrue, aTargetId);
       Model->ReplaceEntity(aSANum, aDT);
       StepAP242_ItemIdentifiedRepresentationUsageDefinition aDefinition;
       aDefinition.SetValue(aDT);
       anAreaGISU->SetDefinition(aDefinition);
       Model->ReplaceEntity(aGISUNum, anAreaGISU);
-  }
+    }
     else {
       Handle(StepDimTol_PlacedDatumTargetFeature) aPDTF = new StepDimTol_PlacedDatumTargetFeature();
       aPDTF->Init(new TCollection_HAsciiString(), STEPCAFControl_GDTProperty::GetDatumTargetName(aDatumType),
@@ -2589,59 +2630,76 @@ static Handle(StepDimTol_Datum) WriteDatumAP242(const Handle(XSControl_WorkSessi
       StepRepr_CharacterizedDefinition aCDefinition;
       aCDefinition.SetValue(aPDTF);
       aPD->Init(new TCollection_HAsciiString(), Standard_False, NULL, aCDefinition);
-      Handle(StepShape_ShapeRepresentationWithParameters) aSRWP = new StepShape_ShapeRepresentationWithParameters();
-      // Common for all datum targets
-      StepBasic_Unit aUnit = GetUnit(aRC);
-      gp_Ax2 aDTAxis = anObject->GetDatumTargetAxis();
-      Handle(StepGeom_Axis2Placement3d) anA2P3D = 
-        STEPCAFControl_GDTProperty::GetAxis2Placement3D(aDTAxis);
-      anA2P3D->SetName(new TCollection_HAsciiString("orientation"));
-      Handle(StepRepr_HArray1OfRepresentationItem) anItems;
-      // Process each datum target type
-      if (aDatumType == XCAFDimTolObjects_DatumTargetType_Point) {
-        anItems = new StepRepr_HArray1OfRepresentationItem(1, 1);
-      }
-      else  {
-        Handle(TCollection_HAsciiString) aTargetValueName;
-        if (aDatumType == XCAFDimTolObjects_DatumTargetType_Line) {
-          anItems = new StepRepr_HArray1OfRepresentationItem(1, 2);
-          aTargetValueName = new TCollection_HAsciiString("target length");
+      if (anObject->HasDatumTargetParams()) {
+        // write all parameters of datum target
+        Handle(StepShape_ShapeRepresentationWithParameters) aSRWP = new StepShape_ShapeRepresentationWithParameters();
+        // Common for all datum targets
+        StepBasic_Unit aUnit = GetUnit(aRC);
+        gp_Ax2 aDTAxis = anObject->GetDatumTargetAxis();
+        Handle(StepGeom_Axis2Placement3d) anA2P3D =
+          STEPCAFControl_GDTProperty::GetAxis2Placement3D(aDTAxis);
+        anA2P3D->SetName(new TCollection_HAsciiString("orientation"));
+        Handle(StepRepr_HArray1OfRepresentationItem) anItems;
+        // Process each datum target type
+        if (aDatumType == XCAFDimTolObjects_DatumTargetType_Point) {
+          anItems = new StepRepr_HArray1OfRepresentationItem(1, 1);
         }
-        else if (aDatumType == XCAFDimTolObjects_DatumTargetType_Rectangle) {
-          anItems = new StepRepr_HArray1OfRepresentationItem(1, 3);
-          aTargetValueName = new TCollection_HAsciiString("target length");
-          // Additional value
-          Handle(StepRepr_ReprItemAndMeasureWithUnit) aTargetValue = CreateDimValue(anObject->GetDatumTargetWidth(),
-            aUnit, new TCollection_HAsciiString("target width"), "POSITIVE_LENGTH_MEASURE", Standard_False);
-          anItems->SetValue(2, aTargetValue);
+        else  {
+          Handle(TCollection_HAsciiString) aTargetValueName;
+          if (aDatumType == XCAFDimTolObjects_DatumTargetType_Line) {
+            anItems = new StepRepr_HArray1OfRepresentationItem(1, 2);
+            aTargetValueName = new TCollection_HAsciiString("target length");
+          }
+          else if (aDatumType == XCAFDimTolObjects_DatumTargetType_Rectangle) {
+            anItems = new StepRepr_HArray1OfRepresentationItem(1, 3);
+            aTargetValueName = new TCollection_HAsciiString("target length");
+            // Additional value
+            Handle(StepRepr_ReprItemAndMeasureWithUnit) aTargetValue = CreateDimValue(anObject->GetDatumTargetWidth(),
+              aUnit, new TCollection_HAsciiString("target width"), "POSITIVE_LENGTH_MEASURE", Standard_False);
+            anItems->SetValue(2, aTargetValue);
+            Model->AddWithRefs(aTargetValue);
+          }
+          else if (aDatumType == XCAFDimTolObjects_DatumTargetType_Circle) {
+            anItems = new StepRepr_HArray1OfRepresentationItem(1, 2);
+            aTargetValueName = new TCollection_HAsciiString("target diameter");
+          }
+          // Value
+          Handle(StepRepr_ReprItemAndMeasureWithUnit) aTargetValue = CreateDimValue(anObject->GetDatumTargetLength(),
+            aUnit, aTargetValueName, "POSITIVE_LENGTH_MEASURE", Standard_False);
+          anItems->SetValue(1, aTargetValue);
           Model->AddWithRefs(aTargetValue);
         }
-        else if (aDatumType == XCAFDimTolObjects_DatumTargetType_Circle) {
-          anItems = new StepRepr_HArray1OfRepresentationItem(1, 2);
-          aTargetValueName = new TCollection_HAsciiString("target diameter");
-        }
-        // Value
-        Handle(StepRepr_ReprItemAndMeasureWithUnit) aTargetValue= CreateDimValue(anObject->GetDatumTargetLength(),
-          aUnit, aTargetValueName, "POSITIVE_LENGTH_MEASURE", Standard_False);
-        anItems->SetValue(1, aTargetValue);
-        Model->AddWithRefs(aTargetValue);
+        anItems->SetValue(anItems->Length(), anA2P3D);
+        aSRWP->Init(new TCollection_HAsciiString(), anItems, aRC);
+        // Create and write auxiliary entities
+        Handle(StepShape_ShapeDefinitionRepresentation) aSDR = new StepShape_ShapeDefinitionRepresentation();
+        StepRepr_RepresentedDefinition aRDefinition;
+        aRDefinition.SetValue(aPD);
+        aSDR->Init(aRDefinition, aSRWP);
+        Model->AddWithRefs(aPD);
+        Model->AddWithRefs(aSRWP);
+        Model->AddWithRefs(aSDR);
       }
-      anItems->SetValue(anItems->Length(), anA2P3D);
-      aSRWP->Init(new TCollection_HAsciiString(), anItems, aRC);
-  
-      // Create and write auxiliary entities
-      Handle (StepShape_ShapeDefinitionRepresentation) aSDR = new StepShape_ShapeDefinitionRepresentation();
-      StepRepr_RepresentedDefinition aRDefinition;
-      aRDefinition.SetValue(aPD);
-      aSDR->Init(aRDefinition, aSRWP);
-      Model->AddWithRefs(aPD);
-      Model->AddWithRefs(aSRWP);
-      Model->AddWithRefs(aSDR);
     }
     // Link datum target to datum feature
-    Handle(StepRepr_FeatureForDatumTargetRelationship) aFFDTR = new StepRepr_FeatureForDatumTargetRelationship();
-    aFFDTR->Init(new TCollection_HAsciiString(), Standard_False, NULL, aDatumTarget, aSA);
-    Model->AddWithRefs(aFFDTR);
+    // if aSASeq.Length() == 0 nothing to do
+    if (aSASeq.Length() == 1) {
+      Handle(StepRepr_FeatureForDatumTargetRelationship) aFFDTR = new StepRepr_FeatureForDatumTargetRelationship();
+      aFFDTR->Init(new TCollection_HAsciiString(), Standard_False, NULL, aSASeq.Value(1), aDatumTarget);
+      Model->AddWithRefs(aFFDTR);
+    }
+    else if (aSASeq.Length() > 1) {
+      Handle(StepRepr_CompositeShapeAspect) aCompSA = new StepRepr_CompositeShapeAspect();
+      aCompSA->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aPDS, aSASeq.Value(1)->ProductDefinitional());
+      for (Standard_Integer i = 1; i <= aSASeq.Length(); i++) {
+        Handle(StepRepr_ShapeAspectRelationship) aSAR = new StepRepr_ShapeAspectRelationship();
+        aSAR->Init(new TCollection_HAsciiString(), Standard_False, new TCollection_HAsciiString(), aCompSA, aSASeq.Value(i));
+        Model->AddWithRefs(aSAR);
+      }
+      Handle(StepRepr_FeatureForDatumTargetRelationship) aFFDTR = new StepRepr_FeatureForDatumTargetRelationship();
+      aFFDTR->Init(new TCollection_HAsciiString(), Standard_False, NULL, aCompSA, aDatumTarget);
+      Model->AddWithRefs(aFFDTR);
+    }
     aSA = aDatumTarget;
   }
 
@@ -2649,34 +2707,16 @@ static Handle(StepDimTol_Datum) WriteDatumAP242(const Handle(XSControl_WorkSessi
   Handle(StepDimTol_Datum) aDatum = theWrittenDatum;
   if (isFirstDTarget) {
     aDatum = new StepDimTol_Datum();
-    aDatum->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aPDS, StepData_LTrue, anIdentifier);
+    aDatum->Init(new TCollection_HAsciiString(), new TCollection_HAsciiString(), aPDS, StepData_LFalse, anIdentifier);
     Model->AddWithRefs(aDatum);
   }
 
   // Shape_Aspect_Relationship
-  Handle(StepRepr_ShapeAspectRelationship) aSAR = new StepRepr_ShapeAspectRelationship();
-  aSAR->Init(new TCollection_HAsciiString(), Standard_False, NULL, aSA, aDatum);
-  Model->AddWithRefs(aSAR);
-
-  // Auxiliary entities
-  // Property_Definition
-  Handle(StepRepr_PropertyDefinition) aPD = new StepRepr_PropertyDefinition();
-  Handle(TCollection_HAsciiString) aPDName = new TCollection_HAsciiString("Datum Feature Symbol ");
-  aPDName = aPDName->Cat(anIdentifier)->Cat(aTargetId);
-  StepRepr_CharacterizedDefinition aCD;
-  aCD.SetValue(aSA);
-  aPD->Init(aPDName, Standard_False, NULL, aCD);
-  Model->AddWithRefs(aPD);
-  // Shape_Representation
-  Handle(StepShape_ShapeRepresentation) aShapeRepr = new StepShape_ShapeRepresentation();
-  aShapeRepr->Init(aPDName, aGISU->IdentifiedItem(), aRC);
-  Model->AddWithRefs(aShapeRepr);
-  // Shape_Definition_Representation
-  Handle (StepShape_ShapeDefinitionRepresentation) aSDR = new StepShape_ShapeDefinitionRepresentation();
-  StepRepr_RepresentedDefinition aRDefinition;
-  aRDefinition.SetValue(aPD);
-  aSDR->Init(aRDefinition, aShapeRepr);
-  Model->AddWithRefs(aSDR);
+  if (!aSA.IsNull()) {
+    Handle(StepRepr_ShapeAspectRelationship) aSAR = new StepRepr_ShapeAspectRelationship();
+    aSAR->Init(new TCollection_HAsciiString(), Standard_False, NULL, aSA, aDatum);
+    Model->AddWithRefs(aSAR);
+  }
 
   //Annotation plane and Presentation
   WritePresentation(WS, anObject->GetPresentation(), anObject->GetPresentationName(), anObject->GetPlane(), anObject->GetPointTextAttach(), aSA);
@@ -3733,6 +3773,9 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTsAP242 (const Handle(XSControl_W
   Handle(StepRepr_RepresentationItem) anItem = NULL;
   gdtPrsCurveStyle = new StepVisual_HArray1OfPresentationStyleAssignment(1, 1);
   gdtPrsCurveStyle->SetValue(1, aStyles.MakeColorPSA(anItem, aCurvColor, aCurvColor));
+  Interface_EntityIterator aModelIter = aModel->Entities();
+  for (; aModelIter.More() && gdtCommonPDS.IsNull(); aModelIter.Next())
+    gdtCommonPDS = Handle(StepRepr_ProductDefinitionShape)::DownCast(aModelIter.Value());
 
   TDF_LabelSequence aDGTLabels;
   STEPConstruct_DataMapOfAsciiStringTransient aDatumMap;
@@ -3746,10 +3789,8 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTsAP242 (const Handle(XSControl_W
   TColStd_MapOfAsciiString aNameIdMap;
   for(Standard_Integer i = 1; i <= aDGTLabels.Length(); i++) {
     TDF_Label aDatumL = aDGTLabels.Value(i);
-    TDF_LabelSequence aShapeL;
-    TDF_LabelSequence aNullSeq;
-    if(!DGTTool->GetRefShapeLabel(aDatumL, aShapeL, aNullSeq))
-      continue;
+    TDF_LabelSequence aShapeL, aNullSeq;
+    DGTTool->GetRefShapeLabel(aDatumL, aShapeL, aNullSeq);
     Handle(XCAFDoc_Datum) aDatumAttr;
     aDatumL.FindAttribute(XCAFDoc_Datum::GetID(), aDatumAttr);
     Handle(XCAFDimTolObjects_DatumObject) anObject = aDatumAttr->GetObject();
@@ -3759,7 +3800,7 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTsAP242 (const Handle(XSControl_W
       continue;
     Handle(Standard_Transient) aWrittenDatum;
     Standard_Boolean isFirstDT = !aDatumMap.Find(aDatumName, aWrittenDatum);
-    Handle(StepDimTol_Datum) aDatum = WriteDatumAP242(WS, aShapeL.First(), aDatumL, isFirstDT, 
+    Handle(StepDimTol_Datum) aDatum = WriteDatumAP242(WS, aShapeL, aDatumL, isFirstDT, 
                                                       Handle(StepDimTol_Datum)::DownCast (aWrittenDatum));
     // Add created Datum into Map
     aDatumMap.Bind(aDatumName, aDatum);
index 6523340..b0554ab 100644 (file)
@@ -24,6 +24,7 @@ IMPLEMENT_STANDARD_RTTIEXT(XCAFDimTolObjects_DatumObject,Standard_Transient)
 XCAFDimTolObjects_DatumObject::XCAFDimTolObjects_DatumObject()
 {
   myIsDTarget = Standard_False;
+  myIsValidDT = Standard_False;
   myHasPlane = Standard_False;
   myHasPnt = Standard_False;
   myHasPntText = Standard_False;
@@ -42,6 +43,7 @@ XCAFDimTolObjects_DatumObject::XCAFDimTolObjects_DatumObject(const Handle(XCAFDi
   myValueOfModifier = theObj->myValueOfModifier;
   myDatumTarget = theObj->myDatumTarget;
   myIsDTarget = theObj->myIsDTarget;
+  myIsValidDT = theObj->myIsValidDT;
   myAxis = theObj->myAxis;
   myDTargetType = theObj->myDTargetType;
   myPlane = theObj->myPlane;
@@ -224,6 +226,7 @@ gp_Ax2 XCAFDimTolObjects_DatumObject::GetDatumTargetAxis() const
 void XCAFDimTolObjects_DatumObject::SetDatumTargetAxis(const gp_Ax2& theAxis)
 {
   myAxis = theAxis;
+  myIsValidDT = Standard_True;
 }
 
 //=======================================================================
@@ -244,6 +247,7 @@ Standard_Real XCAFDimTolObjects_DatumObject::GetDatumTargetLength() const
 void XCAFDimTolObjects_DatumObject::SetDatumTargetLength(const Standard_Real theLength)
 {
   myLength = theLength;
+  myIsValidDT = Standard_True;
 }
 
 
@@ -265,6 +269,7 @@ Standard_Real XCAFDimTolObjects_DatumObject::GetDatumTargetWidth() const
 void XCAFDimTolObjects_DatumObject::SetDatumTargetWidth(const Standard_Real theWidth)
 {
   myWidth = theWidth;
+  myIsValidDT = Standard_True;
 }
 
 //=======================================================================
index 96266d7..a9f8bd3 100644 (file)
@@ -151,7 +151,11 @@ public:
     return myPresentationName;
   }
 
-  
+  //! Returns true if datum has valid parameters for datum target (width, length, circle radius etc)
+  Standard_EXPORT Standard_Boolean HasDatumTargetParams()
+  {
+    return myIsValidDT;
+  }
 
   DEFINE_STANDARD_RTTIEXT(XCAFDimTolObjects_DatumObject,Standard_Transient)
 
@@ -164,6 +168,7 @@ private:
   TopoDS_Shape myDatumTarget;
   Standard_Integer myPosition;
   Standard_Boolean myIsDTarget;
+  Standard_Boolean myIsValidDT;
   XCAFDimTolObjects_DatumTargetType myDTargetType;
   gp_Ax2 myAxis;
   Standard_Real myLength;
index b242d76..2e4538a 100644 (file)
@@ -226,7 +226,7 @@ void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theOb
         tnBuild.Generated(theObject->GetDatumTarget());
       }
     }
-    else
+    else if (theObject->HasDatumTargetParams())
     {
       Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
       Handle(TDataStd_RealArray) aN = new TDataStd_RealArray();
index fe1a05e..371e8bf 100644 (file)
@@ -20,6 +20,7 @@
 #include <TDataStd_Name.hxx>
 #include <TDataStd_TreeNode.hxx>
 #include <TDF_Attribute.hxx>
+#include <TDF_AttributeIterator.hxx>
 #include <TDF_ChildIDIterator.hxx>
 #include <TDF_Label.hxx>
 #include <TDF_RelocationTable.hxx>
@@ -517,6 +518,13 @@ Standard_Boolean XCAFDoc_DimTolTool::GetRefShapeLabel(const TDF_Label& theL,
         }
         return Standard_True;
       }
+      else if (theL.FindAttribute(XCAFDoc::DatumRefGUID(), aGNode) && aGNode->NbFathers() > 0) {
+        for (Standard_Integer i = 1; i <= aGNode->NbFathers(); i++)
+        {
+          theShapeLFirst.Append(aGNode->GetFather(i)->Label());
+        }
+        return Standard_True;
+      }
       else if( theL.FindAttribute(XCAFDoc::DimensionRefFirstGUID(),aGNode) && aGNode->NbFathers() > 0 ) {
         for(Standard_Integer i = 1; i <= aGNode->NbFathers(); i++)
         {
@@ -596,17 +604,12 @@ Standard_Boolean XCAFDoc_DimTolTool::GetRefGeomToleranceLabels(const TDF_Label&
 Standard_Boolean XCAFDoc_DimTolTool::GetRefDatumLabel(const TDF_Label& theShapeL,
                                                      TDF_LabelSequence& theDatum) const
 {
-  Handle(TDataStd_TreeNode) aNode;
-  if( !theShapeL.FindAttribute(XCAFDoc::DatumRefGUID(),aNode) ||
-       !aNode->HasFirst() ) {
+  Handle(XCAFDoc_GraphNode) aGNode;
+  if (!theShapeL.FindAttribute(XCAFDoc::DatumRefGUID(), aGNode)) {
     return Standard_False;
   }
-  Handle(TDataStd_TreeNode) aFirst = aNode->First();
-  theDatum.Append(aFirst->Label());
-  for(Standard_Integer i = 1; i < aNode->NbChildren(); i++)
-  {
-    aFirst = aFirst->Next();
-    theDatum.Append(aFirst->Label());
+  for (Standard_Integer i = 1; i <= aGNode->NbChildren(); i++) {
+    theDatum.Append(aGNode->GetChild(i)->Label());
   }
   return Standard_True;
 }
@@ -728,15 +731,42 @@ TDF_Label XCAFDoc_DimTolTool::AddDatum()
 //purpose  : 
 //=======================================================================
 
-void XCAFDoc_DimTolTool::SetDatum(const TDF_Label& theL,
+void XCAFDoc_DimTolTool::SetDatum(const TDF_LabelSequence& theL,
                                   const TDF_Label& theDatumL) const
 {
-  // set reference
-  Handle(TDataStd_TreeNode) refNode, mainNode;
-  refNode = TDataStd_TreeNode::Set ( theDatumL, XCAFDoc::DatumRefGUID() );
-  mainNode  = TDataStd_TreeNode::Set ( theL, XCAFDoc::DatumRefGUID() );
-  refNode->Remove();
-  mainNode->Append(refNode);
+  if (!IsDatum(theDatumL))
+  {
+    return;
+  }
+
+  Handle(XCAFDoc_GraphNode) aChGNode;
+  Handle(XCAFDoc_GraphNode) aFGNode;
+
+  if (theDatumL.FindAttribute(XCAFDoc::DatumRefGUID(), aChGNode)) {
+    while (aChGNode->NbFathers() > 0) {
+      aFGNode = aChGNode->GetFather(1);
+      aFGNode->UnSetChild(aChGNode);
+      if (aFGNode->NbChildren() == 0)
+        aFGNode->ForgetAttribute(XCAFDoc::DatumRefGUID());
+    }
+    theDatumL.ForgetAttribute(XCAFDoc::DatumRefGUID());
+  }
+
+  if (!theDatumL.FindAttribute(XCAFDoc::DatumRefGUID(), aChGNode)) {
+    aChGNode = new XCAFDoc_GraphNode;
+    aChGNode = XCAFDoc_GraphNode::Set(theDatumL);
+    aChGNode->SetGraphID(XCAFDoc::DatumRefGUID());
+  }
+  for (Standard_Integer i = theL.Lower(); i <= theL.Upper(); i++)
+  {
+    if (!theL.Value(i).FindAttribute(XCAFDoc::DatumRefGUID(), aFGNode)) {
+      aFGNode = new XCAFDoc_GraphNode;
+      aFGNode = XCAFDoc_GraphNode::Set(theL.Value(i));
+    }
+    aFGNode->SetGraphID(XCAFDoc::DatumRefGUID());
+    aFGNode->SetChild(aChGNode);
+    aChGNode->SetFather(aFGNode);
+  }
 }
 
 //=======================================================================
@@ -753,7 +783,9 @@ void XCAFDoc_DimTolTool::SetDatum(const TDF_Label& L,
   TDF_Label DatumL;
   if(!FindDatum(aName,aDescription,anIdentification,DatumL))
     DatumL = AddDatum(aName,aDescription,anIdentification);
-  SetDatum(L,DatumL);
+  TDF_LabelSequence aLabels;
+  aLabels.Append(L);
+  SetDatum(aLabels,DatumL);
   // set reference
   Handle(XCAFDoc_GraphNode) FGNode;
   Handle(XCAFDoc_GraphNode) ChGNode;
index 3081691..f12b2f2 100644 (file)
@@ -161,7 +161,7 @@ public:
   Standard_EXPORT TDF_Label AddDatum() ;
   
   //! Sets a link with GUID
-  Standard_EXPORT void SetDatum (const TDF_Label& L, const TDF_Label& DatumL) const;
+  Standard_EXPORT void SetDatum (const TDF_LabelSequence& theShapeLabels, const TDF_Label& theDatumL) const;
 
   //! Sets a link with GUID for Datum
   //! Sets connection between Datum and Tolerance
index 987584c..cce1cf5 100644 (file)
@@ -760,6 +760,9 @@ static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer
     else if ( att->ID() == XCAFDoc::GeomToleranceRefGUID() ){
       type = "GeomTolerance Link";
     }
+    else if ( att->ID() == XCAFDoc::DatumRefGUID() ){
+      type = "Datum Link";
+    }
     else return 0;
 
     Handle(XCAFDoc_GraphNode) DETGN = Handle(XCAFDoc_GraphNode)::DownCast(att);
index ebd5240..e22e89a 100644 (file)
@@ -589,7 +589,7 @@ static Standard_Integer addGTol (Draw_Interpretor& di, Standard_Integer argc, co
 static Standard_Integer addDatum (Draw_Interpretor& di, Standard_Integer argc, const char** argv)
 {
   if (argc < 3) {
-    di<<"Use: XAddDatum Doc shape/label\n";
+    di<<"Use: XAddDatum Doc shape1/label1 ... shapeN/labelN\n";
     return 1;
   }
   Handle(TDocStd_Document) Doc;
@@ -598,24 +598,22 @@ static Standard_Integer addDatum (Draw_Interpretor& di, Standard_Integer argc, c
   Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main());
   Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main());
 
-  TDF_Label aLabel;
-  TDF_Tool::Label(Doc->GetData(), argv[2], aLabel);
-  if ( aLabel.IsNull() ) 
-  {
-    TopoDS_Shape aShape= DBRep::Get(argv[2]);
-    if ( !aShape.IsNull() )
-    {
-      aShapeTool->Search(aShape, aLabel);
-      if ( aLabel.IsNull() )
-      {
-        di<<"Shape "<<argv[2]<<" is absent in "<<argv[1]<<"\n";
-        return 1;
-      }
+  TDF_LabelSequence aLabelSeq;
+  for (Standard_Integer i = 2; i < argc; i++) {
+    TDF_Label aLabel;
+    TDF_Tool::Label(Doc->GetData(), argv[i], aLabel);
+    if (aLabel.IsNull()) {
+      TopoDS_Shape aShape = DBRep::Get(argv[i]);
+      if (!aShape.IsNull())
+        aShapeTool->Search(aShape, aLabel);
+      if (aLabel.IsNull())
+        continue;
     }
+    aLabelSeq.Append(aLabel);
   }
 
   TDF_Label aDatumL = aDimTolTool->AddDatum();
-  aDimTolTool->SetDatum(aLabel, aDatumL);
+  aDimTolTool->SetDatum(aLabelSeq, aDatumL);
   TCollection_AsciiString Entry;
   TDF_Tool::Entry(aDatumL, Entry);
   di << Entry;
@@ -2534,7 +2532,7 @@ void XDEDRAW_GDTs::InitCommands(Draw_Interpretor& di)
   di.Add ("XAddGeomTolerance","XAddGeomTolerance Doc shape/label",
     __FILE__, addGTol, g);
 
-  di.Add ("XAddDatum","XAddDatum Doc shape/label",
+  di.Add ("XAddDatum","XAddDatum Doc shape1/label1 ... shapeN/labelN",
     __FILE__, addDatum, g);
 
   di.Add ("XSetDatum","XSetDatum Doc Datum_Label GeomTol_Label",
index 3824da2..37856f2 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 0
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 5
- NbOfDatumFeature        : 3
- NbOfAttachedDatum       : 11
+ NbOfDatumFeature        : 5
+ NbOfAttachedDatum       : 17
  NbOfDatumTarget         : 0
 }
index 916e6b5..ccceae9 100644 (file)
@@ -12,8 +12,8 @@ set ref_data {
  NbOfTolerances          : 22
   NbOfGTWithModifiers    : 4
   NbOfGTWithMaxTolerance : 0
-  NbOfGTWithDatums       : 13
- NbOfDatumFeature        : 5
- NbOfAttachedDatum       : 24
- NbOfDatumTarget         : 9
+  NbOfGTWithDatums       : 20
+ NbOfDatumFeature        : 15
+ NbOfAttachedDatum       : 70
+ NbOfDatumTarget         : 57
 }
index 12cb0fe..f9f72f6 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 2
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 11
- NbOfDatumFeature        : 5
- NbOfAttachedDatum       : 26
+ NbOfDatumFeature        : 8
+ NbOfAttachedDatum       : 47
  NbOfDatumTarget         : 0
 }
index 57ac5e6..929b8a7 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 0
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 6
- NbOfDatumFeature        : 8
- NbOfAttachedDatum       : 15
+ NbOfDatumFeature        : 10
+ NbOfAttachedDatum       : 19
  NbOfDatumTarget         : 0
 }
index 2bbe854..f712ef1 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 0
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 8
- NbOfDatumFeature        : 2
- NbOfAttachedDatum       : 9
+ NbOfDatumFeature        : 6
+ NbOfAttachedDatum       : 26
  NbOfDatumTarget         : 2
 }
index 7aac1c5..d1fd5d0 100644 (file)
@@ -1,7 +1,5 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
 set filename bug27645_nist_ftc_06_asme1_cr3000_rd.prt.stp
-puts "TODO CR26859 ALL:Error : 1 differences with reference data found :"
-puts "TODO CR26859 ALL:Error on writing file"
 
 set ref_data {
 
@@ -14,8 +12,8 @@ set ref_data {
  NbOfTolerances          : 27
   NbOfGTWithModifiers    : 4
   NbOfGTWithMaxTolerance : 0
-  NbOfGTWithDatums       : 3
- NbOfDatumFeature        : 3
- NbOfAttachedDatum       : 3
+  NbOfGTWithDatums       : 24
+ NbOfDatumFeature        : 5
+ NbOfAttachedDatum       : 5
  NbOfDatumTarget         : 0
 }
index 142e6ba..d083a03 100644 (file)
@@ -12,8 +12,8 @@ set ref_data {
  NbOfTolerances          : 27
   NbOfGTWithModifiers    : 4
   NbOfGTWithMaxTolerance : 0
-  NbOfGTWithDatums       : 23
- NbOfDatumFeature        : 6
- NbOfAttachedDatum       : 54
+  NbOfGTWithDatums       : 24
+ NbOfDatumFeature        : 16
+ NbOfAttachedDatum       : 78
  NbOfDatumTarget         : 0
 }
index 974b049..078d2bd 100644 (file)
@@ -12,8 +12,8 @@ set ref_data {
  NbOfTolerances          : 27
   NbOfGTWithModifiers    : 4
   NbOfGTWithMaxTolerance : 0
-  NbOfGTWithDatums       : 23
- NbOfDatumFeature        : 6
- NbOfAttachedDatum       : 54
+  NbOfGTWithDatums       : 24
+ NbOfDatumFeature        : 16
+ NbOfAttachedDatum       : 78
  NbOfDatumTarget         : 0
 }
index f59f0d7..30869f5 100644 (file)
@@ -1,7 +1,5 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
 set filename bug27645_nist_ftc_08_asme1_cr3000_rc.prt.stp
-puts "TODO CR26859 ALL:Error : 1 differences with reference data found :"
-puts "TODO CR26859 ALL:Error on writing file"
 
 set ref_data {
 
@@ -14,7 +12,7 @@ set ref_data {
  NbOfTolerances          : 30
   NbOfGTWithModifiers    : 14
   NbOfGTWithMaxTolerance : 0
-  NbOfGTWithDatums       : 1
+  NbOfGTWithDatums       : 27
  NbOfDatumFeature        : 2
  NbOfAttachedDatum       : 2
  NbOfDatumTarget         : 0
index 700c151..330f0df 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 17
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 30
- NbOfDatumFeature        : 10
- NbOfAttachedDatum       : 75
+ NbOfDatumFeature        : 22
+ NbOfAttachedDatum       : 124
  NbOfDatumTarget         : 0
 }
index 970a8a4..62df7f0 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 17
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 30
- NbOfDatumFeature        : 10
- NbOfAttachedDatum       : 75
+ NbOfDatumFeature        : 22
+ NbOfAttachedDatum       : 124
  NbOfDatumTarget         : 0
 }
index 8a7ddf0..04fcce1 100644 (file)
@@ -1,7 +1,5 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
 set filename bug27645_nist_ftc_09_asme1_cr3000_rd.prt.stp
-puts "TODO CR26859 ALL:Error : 1 differences with reference data found :"
-puts "TODO CR26859 ALL:Error on writing file"
 
 set ref_data {
 
@@ -14,7 +12,7 @@ set ref_data {
  NbOfTolerances          : 29
   NbOfGTWithModifiers    : 6
   NbOfGTWithMaxTolerance : 0
-  NbOfGTWithDatums       : 0
+  NbOfGTWithDatums       : 28
  NbOfDatumFeature        : 0
  NbOfAttachedDatum       : 0
  NbOfDatumTarget         : 0
index 14f6697..0dbf18d 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 6
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 30
- NbOfDatumFeature        : 6
- NbOfAttachedDatum       : 73
+ NbOfDatumFeature        : 22
+ NbOfAttachedDatum       : 126
  NbOfDatumTarget         : 0
 }
index b994fc8..0ba40d2 100644 (file)
@@ -13,7 +13,7 @@ set ref_data {
   NbOfGTWithModifiers    : 6
   NbOfGTWithMaxTolerance : 0
   NbOfGTWithDatums       : 30
- NbOfDatumFeature        : 6
- NbOfAttachedDatum       : 73
+ NbOfDatumFeature        : 22
+ NbOfAttachedDatum       : 126
  NbOfDatumTarget         : 0
 }
index 690803c..c3ff618 100644 (file)
@@ -5,8 +5,8 @@ set ref_data {
 
  NbOfDimensions          : 8
  NbOfTolerances          : 6
- NbOfDatumFeature        : 3
- NbOfAttachedDatum       : 11
+ NbOfDatumFeature        : 5
+ NbOfAttachedDatum       : 17
  NbOfDatumTarget         : 0
 
  0:1:1:1:1 Shape.2
@@ -45,31 +45,31 @@ set ref_data {
  0:1:1:1:11 Shape.12
         0:1:4:18 Dimension.12.1 ( T 15, V 35, VL 0.20000000000000001, VU 0, P 0 )
  0:1:1:1:12 Shape.13
-        0:1:4:19 Dimension.13.1 ( T 15, V 35, VL 0, VU 0.20000000000000001, P 0 )
+        0:1:4:18 Dimension.13.1 ( T 15, V 35, VL 0.20000000000000001, VU 0, P 0 )
  0:1:1:1:13 Shape.14
-        0:1:4:10 GeomTolerance.14.1 ( T 10 TV 0, V 0.75 )
-                0:1:4:11 Datum.14.1.1 ( )
-                0:1:4:12 Datum.14.1.2 ( )
-                0:1:4:13 Datum.14.1.3 ( )
+        0:1:4:19 Dimension.14.1 ( T 15, V 35, VL 0, VU 0.20000000000000001, P 0 )
  0:1:1:1:14 Shape.15
-        0:1:4:10 GeomTolerance.15.1 ( T 10 TV 0, V 0.75 )
-                0:1:4:11 Datum.15.1.1 ( )
-                0:1:4:12 Datum.15.1.2 ( )
-                0:1:4:13 Datum.15.1.3 ( )
+        0:1:4:19 Dimension.15.1 ( T 15, V 35, VL 0, VU 0.20000000000000001, P 0 )
  0:1:1:1:15 Shape.16
-        0:1:4:14 GeomTolerance.16.1 ( T 12 TV 0, V 1.25 )
-                0:1:4:15 Datum.16.1.1 ( )
-                0:1:4:16 Datum.16.1.2 ( )
-                0:1:4:17 Datum.16.1.3 ( )
+        0:1:4:10 GeomTolerance.16.1 ( T 10 TV 0, V 0.75 )
+                0:1:4:11 Datum.16.1.1 ( )
+                0:1:4:12 Datum.16.1.2 ( )
+                0:1:4:13 Datum.16.1.3 ( )
  0:1:1:1:16 Shape.17
-        0:1:4:14 GeomTolerance.17.1 ( T 12 TV 0, V 1.25 )
-                0:1:4:15 Datum.17.1.1 ( )
-                0:1:4:16 Datum.17.1.2 ( )
-                0:1:4:17 Datum.17.1.3 ( )
+        0:1:4:10 GeomTolerance.17.1 ( T 10 TV 0, V 0.75 )
+                0:1:4:11 Datum.17.1.1 ( )
+                0:1:4:12 Datum.17.1.2 ( )
+                0:1:4:13 Datum.17.1.3 ( )
  0:1:1:1:17 Shape.18
-        0:1:4:18 Dimension.18.1 ( T 15, V 35, VL 0.20000000000000001, VU 0, P 0 )
+        0:1:4:14 GeomTolerance.18.1 ( T 12 TV 0, V 1.25 )
+                0:1:4:15 Datum.18.1.1 ( )
+                0:1:4:16 Datum.18.1.2 ( )
+                0:1:4:17 Datum.18.1.3 ( )
  0:1:1:1:18 Shape.19
-        0:1:4:19 Dimension.19.1 ( T 15, V 35, VL 0, VU 0.20000000000000001, P 0 )
+        0:1:4:14 GeomTolerance.19.1 ( T 12 TV 0, V 1.25 )
+                0:1:4:15 Datum.19.1.1 ( )
+                0:1:4:16 Datum.19.1.2 ( )
+                0:1:4:17 Datum.19.1.3 ( )
  0:1:1:1:19 Shape.20
         0:1:4:20 Dimension.20.1 ( T 15, V 20, VL 0.10000000000000001, VU 0.050000000000000003, P 0 )
  0:1:1:1:20 Shape.21
index 927ff23..8f73d21 100644 (file)
@@ -5,9 +5,9 @@ set ref_data {
 
  NbOfDimensions          : 8
  NbOfTolerances          : 22
- NbOfDatumFeature        : 5
- NbOfAttachedDatum       : 24
- NbOfDatumTarget         : 9
+ NbOfDatumFeature        : 15
+ NbOfAttachedDatum       : 70
+ NbOfDatumTarget         : 57
 
  0:1:1:2:1 Shape.4
         0:1:4:1 GeomTolerance.4.1 ( T 11 TV 0, V 0.25 )
@@ -19,177 +19,379 @@ set ref_data {
                 0:1:4:7 Datum.4.1.6 ( )
                 0:1:4:8 Datum.4.1.7 ( )
                 0:1:4:9 Datum.4.1.8 ( )
-        0:1:4:9 Datum target.4.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:9 Datum target.4.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:9 Datum target.4.2 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:9 Datum target.4.3 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:9 Datum target.4.4 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:9 Datum target.4.5 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:9 Datum target.4.6 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:9 Datum target.4.7 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:4 Shape.7
-        0:1:4:21 GeomTolerance.7.1 ( T 7 TV 0, V 0.050000000000000003 )
+        0:1:4:69 GeomTolerance.7.1 ( T 7 TV 0, V 0.050000000000000003 )
  0:1:1:2:44 Shape.47
-        0:1:4:2 Datum target.47.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
-        0:1:4:2 Datum target.47.2 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
-        0:1:4:2 Datum target.47.3 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:2 Datum target.47.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.2 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.3 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.4 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.5 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.6 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.7 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.8 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.9 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.10 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.11 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.12 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.13 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.14 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.15 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.16 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.17 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.18 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.19 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.20 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:2 Datum target.47.21 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:45 Shape.48
-        0:1:4:6 Datum target.48.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:6 Datum target.48.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:6 Datum target.48.2 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:6 Datum target.48.3 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:6 Datum target.48.4 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:6 Datum target.48.5 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:6 Datum target.48.6 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:6 Datum target.48.7 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:53 Shape.56
-        0:1:4:5 Datum target.56.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:5 Datum target.56.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:5 Datum target.56.2 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:5 Datum target.56.3 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:5 Datum target.56.4 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:5 Datum target.56.5 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:5 Datum target.56.6 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:5 Datum target.56.7 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:60 Shape.63
-        0:1:4:16 GeomTolerance.63.1 ( T 12 TV 0, V 2.5 )
+        0:1:4:48 GeomTolerance.63.1 ( T 12 TV 0, V 2.5 )
+                0:1:4:49 Datum.63.1.1 ( )
+                0:1:4:50 Datum.63.1.2 ( )
+                0:1:4:51 Datum.63.1.3 ( )
+                0:1:4:52 Datum.63.1.4 ( )
+                0:1:4:53 Datum.63.1.5 ( )
+                0:1:4:54 Datum.63.1.6 ( )
+                0:1:4:55 Datum.63.1.7 ( )
+                0:1:4:56 Datum.63.1.8 ( )
  0:1:1:2:62 Shape.65
-        0:1:4:8 Datum target.65.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:8 Datum target.65.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:8 Datum target.65.2 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:8 Datum target.65.3 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:8 Datum target.65.4 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:8 Datum target.65.5 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:8 Datum target.65.6 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:8 Datum target.65.7 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:71 Shape.74
-        0:1:4:7 Datum target.74.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:7 Datum target.74.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:7 Datum target.74.2 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:7 Datum target.74.3 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:7 Datum target.74.4 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:7 Datum target.74.5 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:7 Datum target.74.6 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
+        0:1:4:7 Datum target.74.7 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:75 Shape.78
-        0:1:4:57 GeomTolerance.78.1 ( T 12 TV 0, V 0.80000000000000004 )
-                0:1:4:58 Datum.78.1.1 (, M 12 )
-                0:1:4:59 Datum.78.1.2 ( )
+        0:1:4:109 GeomTolerance.78.1 ( T 12 TV 0, V 0.80000000000000004 )
+                0:1:4:110 Datum.78.1.1 ( )
+                0:1:4:111 Datum.78.1.2 (, M 12 )
+                0:1:4:112 Datum.78.1.3 ( )
  0:1:1:2:94 Shape.97
-        0:1:4:29 Dimension.97.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
-        0:1:4:30 GeomTolerance.97.1 ( T 10 TV 1, V 0.050000000000000003 )
-                0:1:4:31 Datum.97.1.1 ( )
-                0:1:4:32 Datum.97.1.2 ( )
+        0:1:4:78 Dimension.97.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
+        0:1:4:79 GeomTolerance.97.1 ( T 10 TV 1, V 0.050000000000000003 )
+                0:1:4:80 Datum.97.1.1 ( )
+                0:1:4:81 Datum.97.1.2 ( )
  0:1:1:2:95 Shape.98
-        0:1:4:29 Dimension.98.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
-        0:1:4:30 GeomTolerance.98.1 ( T 10 TV 1, V 0.050000000000000003 )
-                0:1:4:31 Datum.98.1.1 ( )
-                0:1:4:32 Datum.98.1.2 ( )
+        0:1:4:78 Dimension.98.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
+        0:1:4:79 GeomTolerance.98.1 ( T 10 TV 1, V 0.050000000000000003 )
+                0:1:4:80 Datum.98.1.1 ( )
+                0:1:4:81 Datum.98.1.2 ( )
  0:1:1:2:96 Shape.99
-        0:1:4:26 Dimension.99.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
-        0:1:4:27 GeomTolerance.99.1 ( T 9 TV 1, V 0.050000000000000003 )
-                0:1:4:28 Datum.99.1.1 ( )
+        0:1:4:75 Dimension.99.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
+        0:1:4:76 GeomTolerance.99.1 ( T 9 TV 1, V 0.050000000000000003 )
+                0:1:4:77 Datum.99.1.1 ( )
  0:1:1:2:97 Shape.100
-        0:1:4:26 Dimension.100.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
-        0:1:4:27 GeomTolerance.100.1 ( T 9 TV 1, V 0.050000000000000003 )
-                0:1:4:28 Datum.100.1.1 ( )
+        0:1:4:75 Dimension.100.1 ( T 15, V 12, VL 0.050000000000000003, VU 0.050000000000000003, P 0 )
+        0:1:4:76 GeomTolerance.100.1 ( T 9 TV 1, V 0.050000000000000003 )
+                0:1:4:77 Datum.100.1.1 ( )
  0:1:1:2:184 Shape.187
-        0:1:4:22 GeomTolerance.187.1 ( T 12 TV 0, V 0.10000000000000001 )
+        0:1:4:70 GeomTolerance.187.1 ( T 12 TV 0, V 0.10000000000000001 )
  0:1:1:2:185 Shape.188
-        0:1:4:45 GeomTolerance.188.1 ( T 12 TV 0, V 0.5 )
-                0:1:4:46 Datum.188.1.1 ( )
-                0:1:4:47 Datum.188.1.2 (, M 15 )
-                0:1:4:48 Datum.188.1.3 ( )
+        0:1:4:97 GeomTolerance.188.1 ( T 12 TV 0, V 0.5 )
+                0:1:4:98 Datum.188.1.1 ( )
+                0:1:4:99 Datum.188.1.2 (, M 15 )
+                0:1:4:100 Datum.188.1.3 ( )
  0:1:1:2:192 Shape.195
-        0:1:4:41 GeomTolerance.195.1 ( T 12 TV 0, V 0.5 )
-                0:1:4:42 Datum.195.1.1 ( )
-                0:1:4:43 Datum.195.1.2 ( )
-                0:1:4:44 Datum.195.1.3 ( )
+        0:1:4:93 GeomTolerance.195.1 ( T 12 TV 0, V 0.5 )
+                0:1:4:94 Datum.195.1.1 ( )
+                0:1:4:95 Datum.195.1.2 ( )
+                0:1:4:96 Datum.195.1.3 ( )
  0:1:1:2:195 Shape.198
-        0:1:4:22 GeomTolerance.198.1 ( T 12 TV 0, V 0.10000000000000001 )
+        0:1:4:70 GeomTolerance.198.1 ( T 12 TV 0, V 0.10000000000000001 )
  0:1:1:2:205 Shape.208
-        0:1:4:53 GeomTolerance.208.1 ( T 12 TV 0, V 0.5 )
-                0:1:4:54 Datum.208.1.1 ( )
-                0:1:4:55 Datum.208.1.2 ( )
-                0:1:4:56 Datum.208.1.3 (, M 15 )
+        0:1:4:105 GeomTolerance.208.1 ( T 12 TV 0, V 0.5 )
+                0:1:4:106 Datum.208.1.1 ( )
+                0:1:4:107 Datum.208.1.2 ( )
+                0:1:4:108 Datum.208.1.3 (, M 15 )
  0:1:1:2:208 Shape.211
-        0:1:4:22 GeomTolerance.211.1 ( T 12 TV 0, V 0.10000000000000001 )
+        0:1:4:70 GeomTolerance.211.1 ( T 12 TV 0, V 0.10000000000000001 )
  0:1:1:2:219 Shape.222
-        0:1:4:22 GeomTolerance.222.1 ( T 12 TV 0, V 0.10000000000000001 )
+        0:1:4:70 GeomTolerance.222.1 ( T 12 TV 0, V 0.10000000000000001 )
  0:1:1:2:220 Shape.223
-        0:1:4:49 GeomTolerance.223.1 ( T 12 TV 0, V 0.5 )
-                0:1:4:50 Datum.223.1.1 ( )
-                0:1:4:51 Datum.223.1.2 (, M 15 )
-                0:1:4:52 Datum.223.1.3 (, M 15 )
+        0:1:4:101 GeomTolerance.223.1 ( T 12 TV 0, V 0.5 )
+                0:1:4:102 Datum.223.1.1 ( )
+                0:1:4:103 Datum.223.1.2 (, M 15 )
+                0:1:4:104 Datum.223.1.3 (, M 15 )
  0:1:1:2:311 Shape.314
-        0:1:4:23 GeomTolerance.314.1 ( T 12 TV 0, V 0.80000000000000004 )
-                0:1:4:24 Datum.314.1.1 (, M 12 )
-                0:1:4:25 Datum.314.1.2 (, M 12 )
+        0:1:4:71 GeomTolerance.314.1 ( T 12 TV 0, V 0.80000000000000004 )
+                0:1:4:72 Datum.314.1.1 ( )
+                0:1:4:73 Datum.314.1.2 (, M 12 )
+                0:1:4:74 Datum.314.1.3 (, M 12 )
  0:1:1:2:331 Shape.334
-        0:1:4:33 Dimension.334.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:34 GeomTolerance.334.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+        0:1:4:82 Dimension.334.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:83 GeomTolerance.334.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+                0:1:4:84 Datum.334.1.1 ( )
  0:1:1:2:332 Shape.335
-        0:1:4:33 Dimension.335.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:34 GeomTolerance.335.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+        0:1:4:82 Dimension.335.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:83 GeomTolerance.335.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+                0:1:4:84 Datum.335.1.1 ( )
  0:1:1:2:357 Shape.360
-        0:1:4:35 GeomTolerance.360.1 ( T 12 TV 0, V 0.80000000000000004 )
-                0:1:4:36 Datum.360.1.1 ( )
-                0:1:4:37 Datum.360.1.2 ( )
+        0:1:4:85 GeomTolerance.360.1 ( T 12 TV 0, V 0.80000000000000004 )
+                0:1:4:86 Datum.360.1.1 ( )
+                0:1:4:87 Datum.360.1.2 ( )
+                0:1:4:88 Datum.360.1.3 ( )
  0:1:1:2:363 Shape.366
-        0:1:4:60 Dimension.366.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:61 GeomTolerance.366.1 ( T 10 TV 1, V 0.14999999999999999, MR 2 )
-                0:1:4:62 Datum.366.1.1 ( )
+        0:1:4:113 Dimension.366.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:114 GeomTolerance.366.1 ( T 10 TV 1, V 0.14999999999999999, MR 2 )
+                0:1:4:115 Datum.366.1.1 ( )
+                0:1:4:116 Datum.366.1.2 ( )
  0:1:1:2:364 Shape.367
-        0:1:4:60 Dimension.367.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:61 GeomTolerance.367.1 ( T 10 TV 1, V 0.14999999999999999, MR 2 )
-                0:1:4:62 Datum.367.1.1 ( )
+        0:1:4:113 Dimension.367.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:114 GeomTolerance.367.1 ( T 10 TV 1, V 0.14999999999999999, MR 2 )
+                0:1:4:115 Datum.367.1.1 ( )
+                0:1:4:116 Datum.367.1.2 ( )
  0:1:1:2:375 Shape.378
-        0:1:4:14 GeomTolerance.378.1 ( T 12 TV 0, V 2.5 )
+        0:1:4:30 GeomTolerance.378.1 ( T 12 TV 0, V 2.5 )
+                0:1:4:31 Datum.378.1.1 ( )
+                0:1:4:32 Datum.378.1.2 ( )
+                0:1:4:33 Datum.378.1.3 ( )
+                0:1:4:34 Datum.378.1.4 ( )
+                0:1:4:35 Datum.378.1.5 ( )
+                0:1:4:36 Datum.378.1.6 ( )
+                0:1:4:37 Datum.378.1.7 ( )
+                0:1:4:38 Datum.378.1.8 ( )
  0:1:1:2:396 Shape.399
-        0:1:4:15 GeomTolerance.399.1 ( T 12 TV 0, V 0.75 )
+        0:1:4:39 GeomTolerance.399.1 ( T 12 TV 0, V 0.75 )
+                0:1:4:40 Datum.399.1.1 ( )
+                0:1:4:41 Datum.399.1.2 ( )
+                0:1:4:42 Datum.399.1.3 ( )
+                0:1:4:43 Datum.399.1.4 ( )
+                0:1:4:44 Datum.399.1.5 ( )
+                0:1:4:45 Datum.399.1.6 ( )
+                0:1:4:46 Datum.399.1.7 ( )
+                0:1:4:47 Datum.399.1.8 ( )
  0:1:1:2:431 Shape.434
         0:1:4:10 Dimension.434.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.434.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.434.1.1 ( )
+                0:1:4:13 Datum.434.1.2 ( )
+                0:1:4:14 Datum.434.1.3 ( )
+                0:1:4:15 Datum.434.1.4 ( )
+                0:1:4:16 Datum.434.1.5 ( )
+                0:1:4:17 Datum.434.1.6 ( )
+                0:1:4:18 Datum.434.1.7 ( )
+                0:1:4:19 Datum.434.1.8 ( )
  0:1:1:2:432 Shape.435
         0:1:4:10 Dimension.435.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.435.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.435.1.1 ( )
+                0:1:4:13 Datum.435.1.2 ( )
+                0:1:4:14 Datum.435.1.3 ( )
+                0:1:4:15 Datum.435.1.4 ( )
+                0:1:4:16 Datum.435.1.5 ( )
+                0:1:4:17 Datum.435.1.6 ( )
+                0:1:4:18 Datum.435.1.7 ( )
+                0:1:4:19 Datum.435.1.8 ( )
  0:1:1:2:435 Shape.438
         0:1:4:10 Dimension.438.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.438.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.438.1.1 ( )
+                0:1:4:13 Datum.438.1.2 ( )
+                0:1:4:14 Datum.438.1.3 ( )
+                0:1:4:15 Datum.438.1.4 ( )
+                0:1:4:16 Datum.438.1.5 ( )
+                0:1:4:17 Datum.438.1.6 ( )
+                0:1:4:18 Datum.438.1.7 ( )
+                0:1:4:19 Datum.438.1.8 ( )
  0:1:1:2:436 Shape.439
         0:1:4:10 Dimension.439.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.439.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.439.1.1 ( )
+                0:1:4:13 Datum.439.1.2 ( )
+                0:1:4:14 Datum.439.1.3 ( )
+                0:1:4:15 Datum.439.1.4 ( )
+                0:1:4:16 Datum.439.1.5 ( )
+                0:1:4:17 Datum.439.1.6 ( )
+                0:1:4:18 Datum.439.1.7 ( )
+                0:1:4:19 Datum.439.1.8 ( )
  0:1:1:2:437 Shape.440
-        0:1:4:38 GeomTolerance.440.1 ( T 12 TV 0, V 0.80000000000000004 )
-                0:1:4:39 Datum.440.1.1 ( )
-                0:1:4:40 Datum.440.1.2 (, M 12 )
+        0:1:4:89 GeomTolerance.440.1 ( T 12 TV 0, V 0.80000000000000004 )
+                0:1:4:90 Datum.440.1.1 ( )
+                0:1:4:91 Datum.440.1.2 ( )
+                0:1:4:92 Datum.440.1.3 (, M 12 )
  0:1:1:2:494 Shape.497
-        0:1:4:12 Dimension.497.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:13 GeomTolerance.497.1 ( T 10 TV 1, V 1.5, MR 1 )
+        0:1:4:20 Dimension.497.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:21 GeomTolerance.497.1 ( T 10 TV 1, V 1.5, MR 1 )
+                0:1:4:22 Datum.497.1.1 ( )
+                0:1:4:23 Datum.497.1.2 ( )
+                0:1:4:24 Datum.497.1.3 ( )
+                0:1:4:25 Datum.497.1.4 ( )
+                0:1:4:26 Datum.497.1.5 ( )
+                0:1:4:27 Datum.497.1.6 ( )
+                0:1:4:28 Datum.497.1.7 ( )
+                0:1:4:29 Datum.497.1.8 ( )
  0:1:1:2:495 Shape.498
-        0:1:4:12 Dimension.498.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:13 GeomTolerance.498.1 ( T 10 TV 1, V 1.5, MR 1 )
+        0:1:4:20 Dimension.498.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:21 GeomTolerance.498.1 ( T 10 TV 1, V 1.5, MR 1 )
+                0:1:4:22 Datum.498.1.1 ( )
+                0:1:4:23 Datum.498.1.2 ( )
+                0:1:4:24 Datum.498.1.3 ( )
+                0:1:4:25 Datum.498.1.4 ( )
+                0:1:4:26 Datum.498.1.5 ( )
+                0:1:4:27 Datum.498.1.6 ( )
+                0:1:4:28 Datum.498.1.7 ( )
+                0:1:4:29 Datum.498.1.8 ( )
  0:1:1:2:518 Shape.521
-        0:1:4:12 Dimension.521.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:13 GeomTolerance.521.1 ( T 10 TV 1, V 1.5, MR 1 )
+        0:1:4:20 Dimension.521.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:21 GeomTolerance.521.1 ( T 10 TV 1, V 1.5, MR 1 )
+                0:1:4:22 Datum.521.1.1 ( )
+                0:1:4:23 Datum.521.1.2 ( )
+                0:1:4:24 Datum.521.1.3 ( )
+                0:1:4:25 Datum.521.1.4 ( )
+                0:1:4:26 Datum.521.1.5 ( )
+                0:1:4:27 Datum.521.1.6 ( )
+                0:1:4:28 Datum.521.1.7 ( )
+                0:1:4:29 Datum.521.1.8 ( )
  0:1:1:2:519 Shape.522
-        0:1:4:12 Dimension.522.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:13 GeomTolerance.522.1 ( T 10 TV 1, V 1.5, MR 1 )
+        0:1:4:20 Dimension.522.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:21 GeomTolerance.522.1 ( T 10 TV 1, V 1.5, MR 1 )
+                0:1:4:22 Datum.522.1.1 ( )
+                0:1:4:23 Datum.522.1.2 ( )
+                0:1:4:24 Datum.522.1.3 ( )
+                0:1:4:25 Datum.522.1.4 ( )
+                0:1:4:26 Datum.522.1.5 ( )
+                0:1:4:27 Datum.522.1.6 ( )
+                0:1:4:28 Datum.522.1.7 ( )
+                0:1:4:29 Datum.522.1.8 ( )
  0:1:1:2:540 Shape.543
-        0:1:4:17 GeomTolerance.543.1 ( T 12 TV 0, V 2.5 )
+        0:1:4:57 GeomTolerance.543.1 ( T 12 TV 0, V 2.5 )
+                0:1:4:58 Datum.543.1.1 ( )
+                0:1:4:59 Datum.543.1.2 ( )
+                0:1:4:60 Datum.543.1.3 ( )
+                0:1:4:61 Datum.543.1.4 ( )
+                0:1:4:62 Datum.543.1.5 ( )
+                0:1:4:63 Datum.543.1.6 ( )
+                0:1:4:64 Datum.543.1.7 ( )
+                0:1:4:65 Datum.543.1.8 ( )
  0:1:1:2:612 Shape.615
-        0:1:4:20 Datum target.615.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:68 Datum target.615.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:645 Shape.648
-        0:1:4:18 Dimension.648.1 ( T 15, V 40, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:19 GeomTolerance.648.1 ( T 9 TV 1, V 0.25 )
-                0:1:4:20 Datum.648.1.1 ( )
+        0:1:4:66 Dimension.648.1 ( T 15, V 40, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:67 GeomTolerance.648.1 ( T 9 TV 1, V 0.25 )
+                0:1:4:68 Datum.648.1.1 ( )
  0:1:1:2:646 Shape.649
-        0:1:4:18 Dimension.649.1 ( T 15, V 40, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:19 GeomTolerance.649.1 ( T 9 TV 1, V 0.25 )
-                0:1:4:20 Datum.649.1.1 ( )
+        0:1:4:66 Dimension.649.1 ( T 15, V 40, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:67 GeomTolerance.649.1 ( T 9 TV 1, V 0.25 )
+                0:1:4:68 Datum.649.1.1 ( )
  0:1:1:2:672 Shape.675
         0:1:4:10 Dimension.675.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.675.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.675.1.1 ( )
+                0:1:4:13 Datum.675.1.2 ( )
+                0:1:4:14 Datum.675.1.3 ( )
+                0:1:4:15 Datum.675.1.4 ( )
+                0:1:4:16 Datum.675.1.5 ( )
+                0:1:4:17 Datum.675.1.6 ( )
+                0:1:4:18 Datum.675.1.7 ( )
+                0:1:4:19 Datum.675.1.8 ( )
  0:1:1:2:673 Shape.676
         0:1:4:10 Dimension.676.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.676.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.676.1.1 ( )
+                0:1:4:13 Datum.676.1.2 ( )
+                0:1:4:14 Datum.676.1.3 ( )
+                0:1:4:15 Datum.676.1.4 ( )
+                0:1:4:16 Datum.676.1.5 ( )
+                0:1:4:17 Datum.676.1.6 ( )
+                0:1:4:18 Datum.676.1.7 ( )
+                0:1:4:19 Datum.676.1.8 ( )
  0:1:1:2:674 Shape.677
         0:1:4:10 Dimension.677.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.677.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.677.1.1 ( )
+                0:1:4:13 Datum.677.1.2 ( )
+                0:1:4:14 Datum.677.1.3 ( )
+                0:1:4:15 Datum.677.1.4 ( )
+                0:1:4:16 Datum.677.1.5 ( )
+                0:1:4:17 Datum.677.1.6 ( )
+                0:1:4:18 Datum.677.1.7 ( )
+                0:1:4:19 Datum.677.1.8 ( )
  0:1:1:2:675 Shape.678
         0:1:4:10 Dimension.678.1 ( T 15, V 52, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
         0:1:4:11 GeomTolerance.678.1 ( T 10 TV 1, V 1, MR 2 )
+                0:1:4:12 Datum.678.1.1 ( )
+                0:1:4:13 Datum.678.1.2 ( )
+                0:1:4:14 Datum.678.1.3 ( )
+                0:1:4:15 Datum.678.1.4 ( )
+                0:1:4:16 Datum.678.1.5 ( )
+                0:1:4:17 Datum.678.1.6 ( )
+                0:1:4:18 Datum.678.1.7 ( )
+                0:1:4:19 Datum.678.1.8 ( )
  0:1:1:2:676 Shape.679
-        0:1:4:12 Dimension.679.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:13 GeomTolerance.679.1 ( T 10 TV 1, V 1.5, MR 1 )
+        0:1:4:20 Dimension.679.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:21 GeomTolerance.679.1 ( T 10 TV 1, V 1.5, MR 1 )
+                0:1:4:22 Datum.679.1.1 ( )
+                0:1:4:23 Datum.679.1.2 ( )
+                0:1:4:24 Datum.679.1.3 ( )
+                0:1:4:25 Datum.679.1.4 ( )
+                0:1:4:26 Datum.679.1.5 ( )
+                0:1:4:27 Datum.679.1.6 ( )
+                0:1:4:28 Datum.679.1.7 ( )
+                0:1:4:29 Datum.679.1.8 ( )
  0:1:1:2:677 Shape.680
-        0:1:4:12 Dimension.680.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
-        0:1:4:13 GeomTolerance.680.1 ( T 10 TV 1, V 1.5, MR 1 )
+        0:1:4:20 Dimension.680.1 ( T 15, V 100, VL 0.14999999999999999, VU 0.14999999999999999, P 0 )
+        0:1:4:21 GeomTolerance.680.1 ( T 10 TV 1, V 1.5, MR 1 )
+                0:1:4:22 Datum.680.1.1 ( )
+                0:1:4:23 Datum.680.1.2 ( )
+                0:1:4:24 Datum.680.1.3 ( )
+                0:1:4:25 Datum.680.1.4 ( )
+                0:1:4:26 Datum.680.1.5 ( )
+                0:1:4:27 Datum.680.1.6 ( )
+                0:1:4:28 Datum.680.1.7 ( )
+                0:1:4:29 Datum.680.1.8 ( )
  0:1:1:2:678 Shape.681
-        0:1:4:33 Dimension.681.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:34 GeomTolerance.681.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+        0:1:4:82 Dimension.681.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:83 GeomTolerance.681.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+                0:1:4:84 Datum.681.1.1 ( )
  0:1:1:2:679 Shape.682
-        0:1:4:27 GeomTolerance.682.1 ( T 9 TV 1, V 0.050000000000000003 )
-                0:1:4:28 Datum.682.1.1 ( )
+        0:1:4:82 Dimension.682.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:83 GeomTolerance.682.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+                0:1:4:84 Datum.682.1.1 ( )
  0:1:1:2:680 Shape.683
-        0:1:4:27 GeomTolerance.683.1 ( T 9 TV 1, V 0.050000000000000003 )
-                0:1:4:28 Datum.683.1.1 ( )
+        0:1:4:76 GeomTolerance.683.1 ( T 9 TV 1, V 0.050000000000000003 )
+                0:1:4:77 Datum.683.1.1 ( )
  0:1:1:2:681 Shape.684
-        0:1:4:30 GeomTolerance.684.1 ( T 10 TV 1, V 0.050000000000000003 )
-                0:1:4:31 Datum.684.1.1 ( )
-                0:1:4:32 Datum.684.1.2 ( )
+        0:1:4:76 GeomTolerance.684.1 ( T 9 TV 1, V 0.050000000000000003 )
+                0:1:4:77 Datum.684.1.1 ( )
  0:1:1:2:682 Shape.685
-        0:1:4:30 GeomTolerance.685.1 ( T 10 TV 1, V 0.050000000000000003 )
-                0:1:4:31 Datum.685.1.1 ( )
-                0:1:4:32 Datum.685.1.2 ( )
+        0:1:4:79 GeomTolerance.685.1 ( T 10 TV 1, V 0.050000000000000003 )
+                0:1:4:80 Datum.685.1.1 ( )
+                0:1:4:81 Datum.685.1.2 ( )
  0:1:1:2:683 Shape.686
-        0:1:4:33 Dimension.686.1 ( T 15, V 22, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:34 GeomTolerance.686.1 ( T 9 TV 1, V 0.10000000000000001, MR 2 )
+        0:1:4:79 GeomTolerance.686.1 ( T 10 TV 1, V 0.050000000000000003 )
+                0:1:4:80 Datum.686.1.1 ( )
+                0:1:4:81 Datum.686.1.2 ( )
  0:1:1:3:1 Shape.687
         0:1:4:1 GeomTolerance.687.1 ( T 11 TV 0, V 0.25 )
                 0:1:4:2 Datum.687.1.1 ( )
index 76ee936..17a6b7a 100644 (file)
@@ -5,8 +5,8 @@ set ref_data {
 
  NbOfDimensions          : 10
  NbOfTolerances          : 13
- NbOfDatumFeature        : 5
- NbOfAttachedDatum       : 26
+ NbOfDatumFeature        : 8
+ NbOfAttachedDatum       : 47
  NbOfDatumTarget         : 0
 
  0:1:1:2:2 Shape.5
index 88a01f3..b529dfa 100644 (file)
@@ -5,8 +5,8 @@ set ref_data {
 
  NbOfDimensions          : 9
  NbOfTolerances          : 6
- NbOfDatumFeature        : 8
- NbOfAttachedDatum       : 15
+ NbOfDatumFeature        : 10
+ NbOfAttachedDatum       : 19
  NbOfDatumTarget         : 0
 
  0:1:1:2:1 Shape.4
@@ -129,29 +129,25 @@ set ref_data {
                 0:1:4:9 Datum.20.1.1 ( )
                 0:1:4:10 Datum.20.1.2 ( )
                 0:1:4:11 Datum.20.1.3 ( )
- 0:1:1:2:21 Shape.24
-        0:1:4:12 GeomTolerance.24.1 ( T 12 TV 0, V 2 )
-                0:1:4:13 Datum.24.1.1 ( )
-                0:1:4:14 Datum.24.1.2 ( )
-                0:1:4:15 Datum.24.1.3 ( )
-        0:1:4:16 GeomTolerance.24.2 ( T 12 TV 0, V 0.20000000000000001 )
-                0:1:4:17 Datum.24.2.1 ( )
- 0:1:1:2:22 Shape.25
-        0:1:4:12 GeomTolerance.25.1 ( T 12 TV 0, V 2 )
-                0:1:4:13 Datum.25.1.1 ( )
-                0:1:4:14 Datum.25.1.2 ( )
-                0:1:4:15 Datum.25.1.3 ( )
-        0:1:4:16 GeomTolerance.25.2 ( T 12 TV 0, V 0.20000000000000001 )
-                0:1:4:17 Datum.25.2.1 ( )
- 0:1:1:2:25 Shape.28
-        0:1:4:18 GeomTolerance.28.1 ( T 12 TV 0, V 0.5 )
-                0:1:4:19 Datum.28.1.1 ( )
-                0:1:4:20 Datum.28.1.2 ( )
-                0:1:4:21 Datum.28.1.3 ( )
- 0:1:1:2:26 Shape.29
-        0:1:4:23 Dimension.29.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+ 0:1:1:2:23 Shape.26
+        0:1:4:12 GeomTolerance.26.1 ( T 12 TV 0, V 2 )
+                0:1:4:13 Datum.26.1.1 ( )
+                0:1:4:14 Datum.26.1.2 ( )
+                0:1:4:15 Datum.26.1.3 ( )
+        0:1:4:16 GeomTolerance.26.2 ( T 12 TV 0, V 0.20000000000000001 )
+                0:1:4:17 Datum.26.2.1 ( )
+ 0:1:1:2:24 Shape.27
+        0:1:4:12 GeomTolerance.27.1 ( T 12 TV 0, V 2 )
+                0:1:4:13 Datum.27.1.1 ( )
+                0:1:4:14 Datum.27.1.2 ( )
+                0:1:4:15 Datum.27.1.3 ( )
+        0:1:4:16 GeomTolerance.27.2 ( T 12 TV 0, V 0.20000000000000001 )
+                0:1:4:17 Datum.27.2.1 ( )
  0:1:1:2:27 Shape.30
-        0:1:4:23 Dimension.30.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:18 GeomTolerance.30.1 ( T 12 TV 0, V 0.5 )
+                0:1:4:19 Datum.30.1.1 ( )
+                0:1:4:20 Datum.30.1.2 ( )
+                0:1:4:21 Datum.30.1.3 ( )
  0:1:1:2:28 Shape.31
         0:1:4:23 Dimension.31.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
  0:1:1:2:29 Shape.32
@@ -174,10 +170,8 @@ set ref_data {
         0:1:4:23 Dimension.40.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
  0:1:1:2:38 Shape.41
         0:1:4:23 Dimension.41.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:25 Dimension.41.2 ( T 2, V 75, P 0 )
  0:1:1:2:39 Shape.42
         0:1:4:23 Dimension.42.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
-        0:1:4:25 Dimension.42.2 ( T 2, V 75, P 0 )
  0:1:1:2:40 Shape.43
         0:1:4:23 Dimension.43.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
         0:1:4:25 Dimension.43.2 ( T 2, V 75, P 0 )
@@ -186,8 +180,10 @@ set ref_data {
         0:1:4:25 Dimension.44.2 ( T 2, V 75, P 0 )
  0:1:1:2:42 Shape.45
         0:1:4:23 Dimension.45.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:25 Dimension.45.2 ( T 2, V 75, P 0 )
  0:1:1:2:43 Shape.46
         0:1:4:23 Dimension.46.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
+        0:1:4:25 Dimension.46.2 ( T 2, V 75, P 0 )
  0:1:1:2:44 Shape.47
         0:1:4:23 Dimension.47.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
  0:1:1:2:45 Shape.48
@@ -269,13 +265,13 @@ set ref_data {
  0:1:1:2:83 Shape.86
         0:1:4:23 Dimension.86.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
  0:1:1:2:84 Shape.87
-        0:1:4:24 Dimension.87.1 ( T 15, V 10, P 0 )
+        0:1:4:23 Dimension.87.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
  0:1:1:2:85 Shape.88
-        0:1:4:24 Dimension.88.1 ( T 15, V 10, P 0 )
+        0:1:4:23 Dimension.88.1 ( T 15, V 14, VL 0.10000000000000001, VU 0.10000000000000001, P 0 )
  0:1:1:2:86 Shape.89
-        0:1:4:26 Dimension.89.1 ( T 15, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
+        0:1:4:24 Dimension.89.1 ( T 15, V 10, P 0 )
  0:1:1:2:87 Shape.90
-        0:1:4:26 Dimension.90.1 ( T 15, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
+        0:1:4:24 Dimension.90.1 ( T 15, V 10, P 0 )
  0:1:1:2:88 Shape.91
         0:1:4:26 Dimension.91.1 ( T 15, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
  0:1:1:2:89 Shape.92
@@ -289,14 +285,14 @@ set ref_data {
  0:1:1:2:93 Shape.96
         0:1:4:26 Dimension.96.1 ( T 15, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
  0:1:1:2:94 Shape.97
-        0:1:4:27 Dimension.97.1 ( T 2, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
+        0:1:4:26 Dimension.97.1 ( T 15, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
  0:1:1:2:95 Shape.98
-        0:1:4:28 Dimension.98.1 ( T 14, V 25, VL 0.25, VU 0.25, P 0 )
-        0:1:4:27 Dimension.98.2 ( T 2, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
+        0:1:4:26 Dimension.98.1 ( T 15, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
  0:1:1:2:96 Shape.99
-        0:1:4:29 Dimension.99.1 ( T 15, V 20, VL 0.29999999999999999, VU 0.29999999999999999, P 0 )
+        0:1:4:27 Dimension.99.1 ( T 2, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
  0:1:1:2:97 Shape.100
-        0:1:4:29 Dimension.100.1 ( T 15, V 20, VL 0.29999999999999999, VU 0.29999999999999999, P 0 )
+        0:1:4:28 Dimension.100.1 ( T 14, V 25, VL 0.25, VU 0.25, P 0 )
+        0:1:4:27 Dimension.100.2 ( T 2, V 20, VL 0.20000000000000001, VU 0.20000000000000001, P 0 )
  0:1:1:2:98 Shape.101
         0:1:4:29 Dimension.101.1 ( T 15, V 20, VL 0.29999999999999999, VU 0.29999999999999999, P 0 )
  0:1:1:2:99 Shape.102
@@ -414,12 +410,16 @@ set ref_data {
  0:1:1:2:155 Shape.158
         0:1:4:29 Dimension.158.1 ( T 15, V 20, VL 0.29999999999999999, VU 0.29999999999999999, P 0 )
  0:1:1:2:156 Shape.159
-        0:1:4:30 Dimension.159.1 ( T 11, V 89.999999999776747, VL 1, VU 1, Q 3, P 0 )
+        0:1:4:29 Dimension.159.1 ( T 15, V 20, VL 0.29999999999999999, VU 0.29999999999999999, P 0 )
  0:1:1:2:157 Shape.160
-        0:1:4:30 Dimension.160.1 ( T 11, V 89.999999999776747, VL 1, VU 1, Q 3, P 0 )
- 0:1:1:3:1 Shape.161
-        0:1:4:18 GeomTolerance.161.1 ( T 12 TV 0, V 0.5 )
-                0:1:4:19 Datum.161.1.1 ( )
-                0:1:4:20 Datum.161.1.2 ( )
-                0:1:4:21 Datum.161.1.3 ( )
+        0:1:4:29 Dimension.160.1 ( T 15, V 20, VL 0.29999999999999999, VU 0.29999999999999999, P 0 )
+ 0:1:1:2:158 Shape.161
+        0:1:4:30 Dimension.161.1 ( T 11, V 89.999999999776747, VL 1, VU 1, Q 3, P 0 )
+ 0:1:1:2:159 Shape.162
+        0:1:4:30 Dimension.162.1 ( T 11, V 89.999999999776747, VL 1, VU 1, Q 3, P 0 )
+ 0:1:1:3:1 Shape.163
+        0:1:4:18 GeomTolerance.163.1 ( T 12 TV 0, V 0.5 )
+                0:1:4:19 Datum.163.1.1 ( )
+                0:1:4:20 Datum.163.1.2 ( )
+                0:1:4:21 Datum.163.1.3 ( )
 }
index 2a1e8f4..4fb947d 100644 (file)
@@ -5,8 +5,8 @@ set ref_data {
 
  NbOfDimensions          : 6
  NbOfTolerances          : 10
- NbOfDatumFeature        : 2
- NbOfAttachedDatum       : 9
+ NbOfDatumFeature        : 6
+ NbOfAttachedDatum       : 26
  NbOfDatumTarget         : 2
 
  0:1:1:2:2 Shape.5
@@ -30,9 +30,9 @@ set ref_data {
         0:1:4:16 GeomTolerance.92.1 ( T 4 TV 1, V 0.76200000000000001 )
                 0:1:4:17 Datum.92.1.1 ( )
  0:1:1:2:118 Shape.121
-        0:1:4:27 Datum target.121.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:27 Datum target.121.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:123 Shape.126
-        0:1:4:25 Datum target.126.1 ( T 3, A ( L (000), XD (10-0), RD (-010)), L 0 )
+        0:1:4:25 Datum target.126.1 ( T 3, A ( L (000), XD (100), RD (010)), L 0 )
  0:1:1:2:125 Shape.128
         0:1:4:18 GeomTolerance.128.1 ( T 2 TV 0, V 0.63500000000000001 )
                 0:1:4:19 Datum.128.1.1 ( )
index 97e3f96..b89fc18 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug26689_nist_ctc_01_asme1_ap242.stp
 
 set ref_data {
-Centre of mass: 33.295841310232461 -56.047419205695817 -22.610629589474502
-Mass: 12142.750755797097
+Centre of mass: 29.546801037335253 -82.783066220874005 -19.99554027028211
+Mass: 13738.80582018411
 
 }
index 6690da9..7293b53 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug26689_nist_ctc_02_asme1_ap242-2.stp
 
 set ref_data {
-Centre of mass: -20.690618897992287 429.98435462807362 -195.18496405683655
-Mass: 71360.562475059254
+Centre of mass: 18.66947125963403 373.85517189733469 -218.66888436367711
+Mass: 113421.92341292847
 
 }
index a6a2153..d8546f9 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug26689_nist_ctc_04_asme1_ap242.stp
 
 set ref_data {
-Centre of mass: -30.449180184134651 416.32906679654656 -71.016553810946093
-Mass: 15380.860003478236
+Centre of mass: -24.252221154276793 414.27122809865392 -67.499648752527435
+Mass: 16181.056829161265
 
 }
index 7303def..9b32c2a 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug26689_nist_ctc_05_asme1_ap242-1.stp
 
 set ref_data {
-Centre of mass: 56.678867441850549 62.371517442719387 56.338758909806039
-Mass: 14602.02565195344
+Centre of mass: 48.087957284250827 72.719433938737708 29.443809253146483
+Mass: 17319.863084079672
 
 }
index 6d9fb01..4b1dc0d 100644 (file)
@@ -1,10 +1,8 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
 set filename bug27645_nist_ftc_06_asme1_cr3000_rd.prt.stp
-puts "TODO CR27235 ALL:Error : 4 differences with reference data found :"
-puts "TODO CR27235 ALL:Error on writing file"
 
 set ref_data {
-Centre of mass: 362.61474383020976 2196.4222207238172 -2017.5878044804083
-Mass: 639159.86516525224
+Centre of mass: 353.0342262077636 2195.7131569185326 -1984.1595092335315
+Mass: 652240.08849643217
 
 }
index 4e49156..149d988 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug27808_nist_ftc_06_asme1_ct5240_rd.stp
 
 set ref_data {
-Centre of mass: 4.9764105227425732 64.184386470151395 -67.058886121406474
-Mass: 24387.315219228582
+Centre of mass: -0.74274946098869621 58.97231577066983 -68.214139931277799
+Mass: 27143.62735625666
 
 }
index 6564284..49c6bc3 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug27645_nist_ftc_06_asme1_ct5240_rd-1.stp
 
 set ref_data {
-Centre of mass: 126.40116834489778 1630.2833705491985 -1703.2961457827012
-Mass: 619437.81154779939
+Centre of mass: -18.865504732887754 1497.8967671908645 -1732.6395748131215
+Mass: 689448.13901608682
 
 }
index fdd328b..300486b 100644 (file)
@@ -1,7 +1,5 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
 set filename bug27645_nist_ftc_08_asme1_cr3000_rc.prt.stp
-puts "TODO CR27235 ALL:Error : 4 differences with reference data found :"
-puts "TODO CR27235 ALL:Error on writing file"
 
 set ref_data {
 Centre of mass: 1104.9937982009856 239.05520712068363 1053.1493316328786
index 85142b5..141b7e4 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug27808_nist_ftc_08_asme1_ct5240_rc.stp
 
 set ref_data {
-Centre of mass: 44.537314289484314 44.054934745863214 33.295311157211145
-Mass: 22754.349304272349
+Centre of mass: 45.592058840520288 57.746342213198673 29.009867037491144
+Mass: 27993.933359111707
 
 }
index 365af2e..10d9ed0 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug27645_nist_ftc_08_asme1_ct5240_rc-1.stp
 
 set ref_data {
-Centre of mass: 1131.248437223685 1118.9954844429806 845.70091310388898
-Mass: 577960.40529879264
+Centre of mass: 1158.0392758487928 1466.7572922614359 736.8506424687256
+Mass: 711045.84939578606
 
 }
index b8552a4..2dd9597 100644 (file)
@@ -1,7 +1,5 @@
 # !!!! This file is generated automatically, do not edit manually! See end script
 set filename bug27645_nist_ftc_09_asme1_cr3000_rd.prt.stp
-puts "TODO CR27235 ALL:Error : 4 differences with reference data found :"
-puts "TODO CR27235 ALL:Error on writing file"
 
 set ref_data {
 Centre of mass: 502.07157406480525 128.63296443659232 -279.83117556867592
index 05f5401..e8724d6 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug27808_nist_ftc_09_asme1_ct5240_rd.stp
 
 set ref_data {
-Centre of mass: -20.281360550123736 7.5575111121398644 -1.4132597243023584
-Mass: 23871.875331976771
+Centre of mass: -36.599786468681039 7.7614827642946826 1.7474609105557635
+Mass: 29481.508138690682
 
 }
index 04d68b7..0c41ca1 100644 (file)
@@ -2,7 +2,7 @@
 set filename bug27645_nist_ftc_09_asme1_ct5240_rd-1.stp
 
 set ref_data {
-Centre of mass: -515.14631491538069 191.96077215596614 -35.896739001613369
-Mass: 606345.50780760846
+Centre of mass: -929.63433298181099 197.14165173802976 44.385591909492049
+Mass: 748830.1046596528
 
 }