// File: DDataStd_TreeCommands.cxx // Created: Fri Nov 5 11:32:51 1999 // Author: Denis PASCAL // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //======================================================================= //TreeNode : SetNode //purpose : SetNode (DOC Entry [ID]) //======================================================================= static Standard_Integer DDataStd_SetNode (Draw_Interpretor& di, Standard_Integer n, const char** a) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; TDF_Label L; Handle(TDataStd_TreeNode) TN; DDF::AddLabel(DF,a[2],L); if (n == 3) { TN = TDataStd_TreeNode::Set(L); DDF::ReturnLabel(di,TN->Label()); return 0; } else if (n == 4) { if (!Standard_GUID::CheckGUIDFormat(a[3])) { di<<"DDataStd_SetNode: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID ID(a[3]); TN = TDataStd_TreeNode::Set(L, ID); DDF::ReturnLabel(di,TN->Label()); return 0; } di << "DDataStd_SetNode : Error" << "\n"; return 1; } //======================================================================= //TreeNode : AppendNode //purpose : AppendNode (DOC FatherEntry childEntry [fatherID]) //======================================================================= static Standard_Integer DDataStd_AppendNode (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n >= 4) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF))return 1; Handle(TDataStd_TreeNode) father, child; Standard_GUID ID; if (n==4) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[4])) { di<<"DDataStd_AppendNode: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[4]); ID=varID; } if (!DDF::Find(DF,a[2],ID,father)) return 1; TDF_Label L; DDF::AddLabel(DF,a[3],L); if ( (L.FindAttribute(ID,child)) &&(!child->IsRoot()) ){ di << "DDataStd_AppendNode : Error : childTreeNode don't detach" << "\n"; return 1; } child = TDataStd_TreeNode::Set(L,ID); if (!father->Append(child)) return 1; #ifdef DEB di<<"AppendNode: OK"<<"\n"; #endif return 0; } di << "DDataStd_AppendNode : Error" << "\n"; return 1; } //======================================================================= //TreeNode : PrependNode //purpose : PrependNode (DOC FatherEntry childEntry [fatherID]) //======================================================================= static Standard_Integer DDataStd_PrependNode (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n >= 4) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF))return 1; Handle(TDataStd_TreeNode) father, child; Standard_GUID ID; if (n==4) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[4])) { di<<"DDataStd_PrependNode: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[4]); ID=varID; } if (!DDF::Find(DF,a[2],ID,father)) return 1; TDF_Label L; DDF::AddLabel(DF,a[3],L); if ( (L.FindAttribute(ID,child)) &&(!child->IsRoot()) ){ di << "DDataStd_PrependNode : Error : childTreeNode don't detach" << "\n"; return 1; } child = TDataStd_TreeNode::Set(L,ID); if (!father->Prepend(child)) return 1; #ifdef DEB di<<"PrependNode: OK"<<"\n"; #endif return 0; } di << "DDataStd_PrependNode : Error" << "\n"; return 1; } //======================================================================= //TreeNode : RootNode //purpose : RootNode (DOC TreeNodeEntry [ID]) //======================================================================= static Standard_Integer DDataStd_RootNode (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n >= 3) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; Handle(TDataStd_TreeNode) TN; Standard_GUID ID; if (n==3) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[3])) { di<<"DDataStd_RootNode: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[3]); ID=varID; } if (!DDF::Find(DF,a[2],ID,TN)) return 1; DDF::ReturnLabel(di,TN->Root()->Label()); return 0; } di << "DDataStd_RootNode : Error" << "\n"; return 1; } //======================================================================= //TreeNode : InsertNodeBefore //purpose : InsertNodeBefore (DOC TreeNodeEntry TreeNodeWhichHasToBeBefore [ID]) //======================================================================= static Standard_Integer DDataStd_InsertNodeBefore(Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n >= 4) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; Handle(TDataStd_TreeNode) current, TN; Standard_GUID ID; if (n==4) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[4])) { di<<"DDataStd_InsertNodeBefore: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[4]); ID=varID; } if (!DDF::Find(DF,a[2],ID,current)) return 1; // if (!DDF::Find(DF,a[3],ID,TN)) return 1; TDF_Label L; if (!DDF::FindLabel(DF,a[3],L)) return 1; TN = TDataStd_TreeNode::Set(L,ID); if (!current->InsertBefore(TN)) return 1; return 0; } di << "DDataStd_InsertBefore : Error" << "\n"; return 1; } //======================================================================= //TreeNode : InsertNodeAfter //purpose : InsertNodeAfter (DOC TreeNodeEntry TreeNodeWhichHasToBeAfter [ID]) //======================================================================= static Standard_Integer DDataStd_InsertNodeAfter(Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n >= 4) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; Handle(TDataStd_TreeNode) current, TN; Standard_GUID ID; if (n==4) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[4])) { di<<"DDataStd_InsertNodeAfter: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[4]); ID=varID; } if (!DDF::Find(DF,a[2],ID,current)) return 1; //if (!DDF::Find(DF,a[3],TDataStd_TreeNode::GetDefaultTreeID(),TN)) return 1; TDF_Label L; if (!DDF::FindLabel(DF,a[3],L)) return 1; TN = TDataStd_TreeNode::Set(L); if (!current->InsertAfter(TN)) return 1; return 0; } di << "DDataStd_InsertNodeAfter : Error" << "\n"; return 1; } //======================================================================= //TreeNode : DetachNode //purpose : DetachNode (DOC TreeNodeEntry [ID]) //======================================================================= static Standard_Integer DDataStd_DetachNode (Draw_Interpretor& di,Standard_Integer n, const char** a) { if (n >= 3) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; Handle(TDataStd_TreeNode) TN; Standard_GUID ID; if (n==3) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[3])) { di<<"DDataStd_DetachNode: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[3]); ID=varID; } if (!DDF::Find(DF,a[2],ID,TN)) return 1; if (!TN->Remove()) di << "Can't Detach the TreeNode" << "\n"; return 0; } di << "DDataStd_DetachNode : Error" << "\n"; return 1; } //======================================================================= //function : TreeBrowse //purpose : // arg 1 : DF name // arg 2 : Entry // [arg 3] : Browser name //======================================================================= static Standard_Integer DDataStd_TreeBrowse (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n<3) return 1; Handle(TDF_Data) DF; if (!DDF::GetDF (a[1], DF)) return 1; TDF_Label lab; TDF_Tool::Label(DF,a[2],lab); Handle(DDataStd_TreeBrowser) NewTreeNode = new DDataStd_TreeBrowser (lab); char *name = new char[50]; if (n == 4) sprintf(name,"treebrowser_%s",a[3]); else sprintf(name,"treebrowser_%s",a[1]); Draw::Set(name, NewTreeNode); TCollection_AsciiString inst1("treebrowser "); inst1.AssignCat(name); di.Eval(inst1.ToCString()); return 0; } //======================================================================= //function : OpenNode //purpose : // arg 1 : Browser name // [arg 2] : Label entry //======================================================================= static Standard_Integer DDataStd_OpenNode (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n < 2) return 1; Handle(DDataStd_TreeBrowser) browser = Handle(DDataStd_TreeBrowser)::DownCast (Draw::Get(a[1], Standard_True)); TDF_Label lab; if (n == 3) TDF_Tool::Label(browser->Label().Data(),a[2],lab); if (n == 2 || lab.IsNull()) { TCollection_AsciiString list = browser->OpenRoot(); di<OpenNode(lab); di<= 4) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; const Standard_Boolean AllLevels(atoi(a[3])); Handle(TDataStd_TreeNode) TN, Value; Standard_GUID ID; if (n==4) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[4])) { di<<"DDataStd_ChildNodeIterate: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[4]); ID=varID; } if (!DDF::Find(DF, a[2], ID, TN)) return 1; //di<<"TDataStd_ChildNodeIterator: "<<"\n"; TDataStd_ChildNodeIterator itr(TN, AllLevels); for (; itr.More(); itr.Next()) { Value = itr.Value(); TCollection_AsciiString entry; TDF_Tool::Entry(Value->Label(), entry); di<= 4) { Handle(TDF_Data) DF; if (!DDF::GetDF(a[1],DF)) return 1; Handle(TDataStd_TreeNode) TN, Value; Standard_GUID ID; if (n==4) ID=Standard_GUID(TDataStd_TreeNode::GetDefaultTreeID()); else{ if (!Standard_GUID::CheckGUIDFormat(a[4])) { di<<"DDataStd_ChildNodeIterator: The format of GUID is invalid"<<"\n"; return 1; } const Standard_GUID varID(a[4]); ID=varID; } if (!DDF::Find(DF, a[2], ID, TN)) return 1; const Standard_Boolean AllLevels(atoi(a[3])); cni.Initialize(TN, AllLevels); return 0; } di << "DDataStd_InitChildNodeIterator : Error" << "\n"; return 1; } //======================================================================= //TreeNode : ChildNodeMore //purpose : ChildNodeMore //======================================================================= static Standard_Integer DDataStd_ChildNodeMore (Draw_Interpretor& di, Standard_Integer /*n*/, const char** /*a*/) { if (cni.More()) { //cout<<"TRUE"<Label(), entry); //cout<