{
Handle(TDataStd_Name) N;
if (!label.FindAttribute(TDataStd_Name::GetID(), N)) {
- N = new TDataStd_Name ();
+ N = new TDataStd_Name ();
+ N->SetID(GetID());
label.AddAttribute(N);
}
N->Set(theString);
}
//=======================================================================
-//function : Find
-//purpose :
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const TDF_Label& label, Handle(TDataStd_Name)& name)
-// {
-// Handle(TDataStd_Name) N;
-// if (label.FindAttribute(TDataStd_Name::GetID(), N)) {
-// name = N;
-// return Standard_True;
-// }
-// TDF_Label L = label;
-// while (!L.IsRoot()) {
-// L = L.Father();
-// if (L.FindAttribute (TDataStd_Name::GetID(), N)) {
-// name = N;
-// return Standard_True;
-// }
-// }
-// return Standard_False;
-// }
-
-//=======================================================================
-//function : IsNamed
-//purpose :
-//=======================================================================
-// Standard_Boolean TDataStd_Name::IsNamed(const TDF_Label& label)
-// {
-// Handle(TDataStd_Name) N;
-
-// return label.FindAttribute(TDataStd_Name::GetID(), N);
-// }
-
-//=======================================================================
-//function : IsEmpty
-//purpose :
-//=======================================================================
-// Standard_Boolean TDataStd_Name::IsEmpty(const TDF_Label& label)
-// {
-// Handle(TDataStd_Name) N;
-// if(label.FindAttribute(TDataStd_Name::GetID(), N)) {
-// return N->IsEmpty();
-// }
-
-// Standard_DomainError::Raise("There isn't the Name Attribute on the label");
-// }
-
-//=======================================================================
-//function : Erase
-//purpose :
+//function : Set
+//purpose : Set user defined attribute
//=======================================================================
-// void TDataStd_Name::Erase(const TDF_Label& label)
-// {
-// Handle(TDataStd_Name) N;
-
-// if(label.FindAttribute(TDataStd_Name::GetID(), N)) {
-// N->SetEmpty();
-// return;
-// }
-
-// Standard_DomainError::Raise("There isn't the Name Attribute on the label");
-// }
+Handle(TDataStd_Name) TDataStd_Name::Set (const TDF_Label& L, const Standard_GUID& theGuid,
+ const TCollection_ExtendedString& theString)
+{
+ Handle(TDataStd_Name) N;
+ if (!L.FindAttribute(theGuid, N)) {
+ N = new TDataStd_Name ();
+ N->SetID(theGuid);
+ L.AddAttribute(N);
+ }
+ N->Set (theString);
+ return N;
+}
//=======================================================================
//function : TDataStd_Name
//purpose : Empty Constructor
return myString;
}
-// TDF_Attribute methods
+//=======================================================================
+//function : SetID
+//purpose :
+//=======================================================================
+void TDataStd_Name::SetID( const Standard_GUID& theGuid)
+{
+ if(myID == theGuid) return;
+
+ Backup();
+ myID = theGuid;
+}
+
+// TDF_Attribute methods
//=======================================================================
//function : ID
//purpose :
//=======================================================================
-const Standard_GUID& TDataStd_Name::ID () const { return GetID(); }
-
+const Standard_GUID& TDataStd_Name::ID () const { return myID; }
//=======================================================================
//function : NewEmpty
Handle(TDF_Attribute) TDataStd_Name::NewEmpty () const
{
- return new TDataStd_Name();
+ Handle(TDataStd_Name) Att = new TDataStd_Name();
+ Att->SetID(myID);
+ return Att;
}
//=======================================================================
void TDataStd_Name::Restore(const Handle(TDF_Attribute)& with)
{
- myString = Handle(TDataStd_Name)::DownCast (with)->Get();
+ Handle(TDataStd_Name) anAtt = Handle(TDataStd_Name)::DownCast (with);
+ myString = anAtt->Get();
+ myID = anAtt->ID();
}
void TDataStd_Name::Paste (const Handle(TDF_Attribute)& into,
const Handle(TDF_RelocationTable)&/* RT*/) const
{
- Handle(TDataStd_Name)::DownCast (into)->Set (myString);
+ Handle(TDataStd_Name) anAtt = Handle(TDataStd_Name)::DownCast (into);
+ anAtt->Set (myString);
+ anAtt->SetID(myID);
}
//=======================================================================
Standard_OStream& TDataStd_Name::Dump (Standard_OStream& anOS) const
{
TDF_Attribute::Dump(anOS);
- anOS << " Name=|"<<myString<<"|"<<endl;
+ anOS << " Name=|"<<myString<<"|";
+ Standard_Character sguid[Standard_GUID_SIZE_ALLOC];
+ myID.ToCString(sguid);
+ anOS << sguid << endl;
return anOS;
}
-
-
-//=======================================================================
-//function : Find (by the full path)
-//purpose : Name
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const Handle(TDF_Data)& framework,
-// const TDataStd_ListOfExtendedString& fullPath,
-// Handle(TDataStd_Name)& name)
-// {
-// Handle(TDataStd_Name) Ncurrent;
-// TDF_Label L, root = framework->Root();
-// TDF_ChildIterator ChItr (root, Standard_True);
-// TCollection_ExtendedString string, first = fullPath.First();
-// TDataStd_ListOfExtendedString tmpPath;
-// Standard_Boolean IsRootVisited = Standard_False;
-
-// tmpPath.Assign(fullPath);
-// if(tmpPath.Extent() > 0 ) tmpPath.RemoveFirst();
-
-// while( ChItr.More() ) {
-// if( !IsRootVisited ) L = root; //For the fisrt time visit the root label
-// else L = ChItr.Value();
-
-// if( L.FindAttribute(TDataStd_Name::GetID(), Ncurrent) ) {
-// string = Ncurrent->Get();
-// if( (string == first ) && ((string.Length()) == (first.Length())) ) {
-// if( fullPath.Extent() == 1 ) {
-// name = Ncurrent;
-// return Standard_True;
-// }
-// if (Ncurrent->Find(tmpPath, name) ) return Standard_True;
-// }
-// else {
-// if( !Ncurrent->IsEmpty() ) {
-// //The root contains String different from first name in the path
-// if( !IsRootVisited ) return Standard_False;
-// ChItr.NextBrother(); continue;
-// }
-// }
-// }
-
-// if( !IsRootVisited ) {
-// IsRootVisited = Standard_True;
-// continue;
-// }
-
-// ChItr.Next();
-// }
-// return Standard_False;
-// }
-
-//=======================================================================
-//function : Find (by the relative path)
-//purpose : Name
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const TDF_Label& currentLabel,
-// const TDataStd_ListOfExtendedString& relativePath,
-// Handle(TDataStd_Name)& name)
-// {
-// Handle(TDataStd_Name) Ncurrent;
-// TDF_ChildIterator ChItr (currentLabel, Standard_True);
-// TCollection_ExtendedString string, first = relativePath.First();
-// TDataStd_ListOfExtendedString tmpPath;
-// tmpPath.Assign(relativePath);
-
-// if( !currentLabel.FindAttribute(TDataStd_Name::GetID(), Ncurrent) )
-// Standard_DomainError::Raise("There isn't the Name attribute on the label");
-
-
-// while( ChItr.More() ) {
-// if( ChItr.Value().FindAttribute(TDataStd_Name::GetID(), Ncurrent) ) {
-// string = Ncurrent->Get();
-// if( (string == first ) && ((string.Length()) == (first.Length())) ) {
-// if( relativePath.Extent() == 1 ) { //it has reached the end of the relative path
-// name = Ncurrent;
-// return Standard_True;
-// }
-// else {
-// if (tmpPath.Extent() > 0) tmpPath.RemoveFirst();
-// if (Find(ChItr.Value(), tmpPath, Ncurrent)) return Standard_True;
-// }
-// }
-// else {
-// if( !Ncurrent->IsEmpty() ) {
-// ChItr.NextBrother(); continue;
-// }
-// }
-// }
-// ChItr.Next();
-// }
-
-// return Standard_False;
-// }
-
-
-//=======================================================================
-//function : Find (by the relative path)
-//purpose : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find(const TDF_Label& currentLabel,
-// const TCollection_ExtendedString& string,
-// Handle(TDataStd_Name)& name)
-// {
-// TDataStd_ListOfExtendedString tmpPath;
-// TDataStd_Name::MakePath(string, tmpPath,':');
-// Handle(TDataStd_Name) Ncurrent;
-// if (TDataStd_Name::Find(currentLabel,Ncurrent)) {
-// return Ncurrent->Find(tmpPath, name);
-// }
-// return Standard_False;
-// }
-
-//=======================================================================
-//function : Find (by the full path)
-//purpose : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find(const Handle(TDF_Data)& framework,
-// const TCollection_ExtendedString& string,
-// Handle(TDataStd_Name)& name)
-// {
-// TDataStd_ListOfExtendedString tmpPath;
-// TDataStd_Name::MakePath(string, tmpPath,':');
-// return Find(framework, tmpPath, name);
-// }
-
-//=======================================================================
-//function : FullPath
-//purpose : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::FullPath (TDF_AttributeList& path) const
-// {
-// path.Clear();
-// if( !IsEmpty() ) path.Append(this);
-// TDF_Label L = Label();
-// if(L.IsRoot() ) return Standard_True;
-// Handle(TDataStd_Name) Ncur;
-// while ( !L.IsRoot()) {
-// L = L.Father();
-// if(L.FindAttribute (TDataStd_Name::GetID(), Ncur)) {
-// if( !Ncur->IsEmpty() )path.Prepend(Ncur);
-// }
-// }
-// return Standard_True;
-// }
-
-//=======================================================================
-//function : MakePath
-//purpose : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::MakePath(const TCollection_ExtendedString& path,
-// TDataStd_ListOfExtendedString& pathlist,
-// const Standard_ExtCharacter Separator)
-// {
-// TCollection_ExtendedString tmpPath = path, str;
-
-// str+=Separator; str+=Separator;
-// if( tmpPath.Search(str) != -1 ) return Standard_False; //Not valid path (contains two adjacent separators)
-
-// if( tmpPath.Search(Separator) == -1 ) { //The path contains only one name.
-// pathlist.Append(path);
-// return Standard_True;
-// }
-// Standard_Integer i;
-// while( (i = tmpPath.SearchFromEnd(Separator) ) != -1 ) {
-// str = tmpPath.Split(i-1);
-// str.Remove(1);
-// pathlist.Prepend(str);
-// }
-// if( tmpPath.Length() > 0 ) pathlist.Prepend(tmpPath);
-// return Standard_True;
-// }
-
-
-//=======================================================================
-//function : MakePath
-//purpose : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::MakePath(const TDF_AttributeList& pathlist,
-// TCollection_ExtendedString& path,
-// const Standard_ExtCharacter Separator)
-// {
-// TDF_ListIteratorOfAttributeList Itr(pathlist);
-// Handle(TDataStd_Name) N;
-
-// if( pathlist.Extent() == 0 ) return Standard_False;
-// path.Clear();
-// for(; Itr.More(); Itr.Next() ) {
-// N = Handle(TDataStd_Name)::DownCast(Itr.Value());
-// path = path + N->Get();
-// path = path + Separator;
-// }
-// path.Remove(path.Length(), 1);
-// return Standard_True;
-// }
-
-//=======================================================================
-//function : Find (by the relative path)
-//purpose : Name
-//=======================================================================
-// Standard_Boolean TDataStd_Name::Find (const TDataStd_ListOfExtendedString& relativePath,
-// Handle(TDataStd_Name)& name) const
-// {
-// Handle(TDataStd_Name) Ncurrent;
-// TDF_ChildIterator ChItr (Label(), Standard_True);
-// TCollection_ExtendedString string, first = relativePath.First();
-// TDataStd_ListOfExtendedString tmpPath;
-// tmpPath.Assign(relativePath);
-// //
-// while( ChItr.More() ) {
-// if( ChItr.Value().FindAttribute(TDataStd_Name::GetID(), Ncurrent) ) {
-// string = Ncurrent->Get();
-// if( (string == first ) && ((string.Length()) == (first.Length())) ) {
-// if( relativePath.Extent() == 1 ) { //it has reached the end of the relative path
-// name = Ncurrent;
-// return Standard_True;
-// }
-// else {
-// if (tmpPath.Extent() > 0) tmpPath.RemoveFirst();
-// if (Ncurrent->Find(tmpPath, name)) return Standard_True;
-// }
-// }
-// else {
-// if (!Ncurrent->IsEmpty()) {
-// ChItr.NextBrother(); continue;
-// }
-// }
-// }
-// ChItr.Next();
-// }
-// return Standard_False;
-// }
-
-//=======================================================================
-//function : ChildNames
-//purpose : NameTool
-//=======================================================================
-// Standard_Boolean TDataStd_Name::ChildNames (TDF_AttributeList& list) const
-// {
-// Standard_Boolean found = Standard_False;
-// TDF_ChildIterator ChItr (Label(), Standard_True);
-// Handle(TDataStd_Name) N;
-// list.Clear();
-// for(; ChItr.More(); ChItr.Next()) {
-// if( ChItr.Value().FindAttribute(TDataStd_Name::GetID(), N) ) {
-// list.Append(N);
-// found = Standard_True;
-// cout << N->Get() << endl;
-// }
-// }
-// return found;
-// }