#include <ViewerTest.hxx>
#include <XmlDrivers_DocumentRetrievalDriver.hxx>
#include <XmlDrivers_DocumentStorageDriver.hxx>
+#include <TDataStd_Real.hxx>
#include <cstdio>
#include <cmath>
Handle(TDocStd_Document) aDoc;
anApp->NewDocument ("BinOcaf", aDoc);
TDF_Label aLab = aDoc->Main();
+ // Prepend an int value.
TDataStd_Integer::Set (aLab, 0);
+ // Prepend a name.
TDataStd_Name::Set (aLab, "test");
+ // Append a double value.
+ aLab.AddAttribute(new TDataStd_Real(), true/*append*/);
TDF_AttributeIterator i (aLab);
Handle(TDF_Attribute) anAttr = i.Value();
+ QCOMPARE (anAttr->IsKind (STANDARD_TYPE (TDataStd_Name)), Standard_True);
+ i.Next();
+ anAttr = i.Value();
QCOMPARE (anAttr->IsKind (STANDARD_TYPE (TDataStd_Integer)), Standard_True);
i.Next();
anAttr = i.Value();
- QCOMPARE (anAttr->IsKind (STANDARD_TYPE (TDataStd_Name)), Standard_True);
+ QCOMPARE (anAttr->IsKind (STANDARD_TYPE (TDataStd_Real)), Standard_True);
return 0;
}
tAtt = sAtt->NewEmpty();
if(tAtt->ID() != id)
tAtt->SetID(id);//
- aTargetLabel.AddAttribute(tAtt);
+ aTargetLabel.AddAttribute(tAtt, Standard_True);
aAttMap.Bind(sAtt,tAtt);
}
else {
//purpose :
//=======================================================================
-void TDF_Label::AddAttribute (const Handle(TDF_Attribute)& anAttribute) const
-{ AddToNode(myLabelNode,anAttribute); }
+void TDF_Label::AddAttribute (const Handle(TDF_Attribute)& anAttribute,
+ const Standard_Boolean append/* = Standard_False*/) const
+{ AddToNode(myLabelNode,anAttribute,append); }
//=======================================================================
//=======================================================================
void TDF_Label::AddToNode (const TDF_LabelNodePtr& toNode,
- const Handle(TDF_Attribute)& anAttribute) const
+ const Handle(TDF_Attribute)& anAttribute,
+ const Standard_Boolean append) const
{
// check that modification is allowed
if ( !toNode->Data()->IsModificationAllowed() ) {
//append to the end of the attribute list
dummyAtt.Nullify();
- for (TDF_AttributeIterator itr (toNode); itr.More(); itr.Next())
- dummyAtt = itr.Value();
+ if (append) {
+ for (TDF_AttributeIterator itr (toNode); itr.More(); itr.Next())
+ dummyAtt = itr.Value();
+ }
toNode->AddAttribute(dummyAtt,anAttribute);
toNode->AttributesModified(anAttribute->myTransaction != 0);
anAttribute->BeforeRemoval();
}
fromNode->RemoveAttribute(lastAtt,anAttribute);
- anAttribute->Forget(fromNode->Data()->Transaction()); // vro
+ anAttribute->Forget(fromNode->Data()->Transaction());
break;
}
lastAtt = itr.Value();
if (!anAttribute->IsForgotten())
throw Standard_DomainError("Cannot resume an unforgotten attribute.");
- AddToNode(toNode, anAttribute); // vro
+ AddToNode(toNode, anAttribute, Standard_False);
anAttribute->Resume();
if (toNode->Data()->NotUndoMode()) anAttribute->AfterResume();
}
//! Adds an Attribute to the current label. Raises if
//! there is already one.
- Standard_EXPORT void AddAttribute (const Handle(TDF_Attribute)& anAttribute) const;
+ Standard_EXPORT void AddAttribute (const Handle(TDF_Attribute)& anAttribute, const Standard_Boolean append = Standard_False) const;
//! Forgets an Attribute from the current label,
//! setting its forgotten status true and its valid
//! Adds an Attribute to <toNode>. Raises if there is
//! already one.
- Standard_EXPORT void AddToNode (const TDF_LabelNodePtr& toNode, const Handle(TDF_Attribute)& anAttribute) const;
+ Standard_EXPORT void AddToNode (const TDF_LabelNodePtr& toNode, const Handle(TDF_Attribute)& anAttribute, const Standard_Boolean append) const;
//! Forgets an Attribute from <fromNode>. Raises if
//! the attribute is not in the structure.
if ( !theLabel.FindAttribute(TPrsStd_AISPresentation::GetID(), aPresentation) )
{
aPresentation = new TPrsStd_AISPresentation();
- theLabel.AddAttribute(aPresentation);
+ theLabel.AddAttribute(aPresentation, Standard_True);
}
return aPresentation;