// Created by: DAUTRY Philippe // Copyright (c) 1997-1999 Matra Datavision // Copyright (c) 1999-2012 OPEN CASCADE SAS // // The content of this file is subject to the Open CASCADE Technology Public // License Version 6.5 (the "License"). You may not use the content of this file // except in compliance with the License. Please obtain a copy of the License // at http://www.opencascade.org and read it completely before using this file. // // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. // // The Original Code and all software distributed under the License is // distributed on an "AS IS" basis, without warranty of any kind, and the // Initial Developer hereby disclaims all such warranties, including without // limitation, any warranties of merchantability, fitness for a particular // purpose or non-infringement. Please see the License for the specific terms // and conditions governing the rights and limitations under the License. // -------------------- // Version: 0.0 //Version Date Purpose // 0.0 Sep 30 1997 Creation #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //======================================================================= //function : MakeDF //purpose : Creates a new data framework. //======================================================================= static Standard_Integer MakeDF (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n < 2) return 1; Handle (Draw_Drawable3D) D = Draw::Get(a[1]); Handle(DDF_Data) NewDDF; if (!D.IsNull ()) { NewDDF = Handle(DDF_Data)::DownCast (D); if (!NewDDF.IsNull ()) { di<<"DDF_BasicCommands::MakeDF - Sorry, this Data Framework already exists"<<"\n"; return 0; } } Handle(TDF_Data) NewDF = new TDF_Data (); NewDDF = new DDF_Data (NewDF); Draw::Set (a[1], NewDDF); //DeltaDS.Nullify(); return 0; } //======================================================================= //function : ClearDF //purpose : Creates a new data framework. //======================================================================= static Standard_Integer ClearDF (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n < 2) return 1; Handle (Draw_Drawable3D) D = Draw::Get(a[1]); Handle(DDF_Data) DDF; if (!D.IsNull ()) { DDF = Handle(DDF_Data)::DownCast (D); if (!DDF.IsNull ()) { Handle(TDF_Data) DF = DDF->DataFramework (); if (!DF.IsNull ()) { Handle(TDF_Data) NewEmpty = new TDF_Data; DDF->DataFramework (NewEmpty); //DeltaDS.Nullify(); } return 0; } } di<<"DDF_BasicCommands::MakeDF - Sorry, this Data Framework doesn't exist"<<"\n"; return 0; } //======================================================================= //function : CopyDF //purpose : CopyDF. //======================================================================= static Standard_Integer CopyDF (Draw_Interpretor& /*di*/, Standard_Integer n, const char** a) { if (n < 4 || n > 5) return 1; Handle(TDF_Data) DF1; Handle(TDF_Data) DF2; Standard_CString Entry1; Standard_CString Entry2; if (!DDF::GetDF (a[1], DF1)) return 1; Entry1 = a[2]; Entry2 = a[3]; if (n == 4) { DF2 = DF1; Entry2 = a[3]; } else if (n == 5) { if (!DDF::GetDF (a[3], DF2)) return 1; Entry2 = a[4]; } TDF_Label Label1; if (!DDF::FindLabel (DF1, Entry1, Label1)) return 1; TDF_Label Label2; if (!DDF::FindLabel (DF2, Entry2, Label2, Standard_False)) { DDF::AddLabel(DF2,Entry2,Label2); } Handle(TDF_DataSet) DataSet = new TDF_DataSet; DataSet->AddLabel(Label1); TDF_ClosureTool::Closure(DataSet); Handle(TDF_RelocationTable) Reloc = new TDF_RelocationTable(); Reloc->SetRelocation(Label1,Label2); TDF_CopyTool::Copy (DataSet, Reloc); return 0; } //======================================================================= //function : MiniDumpDF //purpose : //======================================================================= static Standard_Integer MiniDumpDF (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n < 2) return 1; Handle (Draw_Drawable3D) D; Handle(DDF_Data) DDF; D = Draw::Get(a[1]); if (D.IsNull ()) { di<<"DDF_BasicCommands : Sorry this Data Framework doesn't exist"<<"\n"; return Standard_False; } DDF = Handle(DDF_Data)::DownCast (D); if (DDF.IsNull ()) { di<<"DDF_BasicCommands : Sorry this Data Framework doesn't exist"<<"\n"; return Standard_False; } di<<"*********** Dump of "<DataFramework()->Dump(cout); Standard_SStream aSStream; DDF->DataFramework()->Dump(aSStream); aSStream << ends; di << aSStream << "\n"; return 0; } //======================================================================= //function : XDumpDF //purpose : eXtended deep dump of a DataFramework //======================================================================= static Standard_Integer XDumpDF (Draw_Interpretor& di, Standard_Integer n, const char** a) { if (n < 2) return 1; Handle (Draw_Drawable3D) D; Handle(DDF_Data) DDF; D = Draw::Get(a[1]); if (D.IsNull ()) { di<<"DDF_BasicCommands : Sorry this Data Framework doesn't exist"<<"\n"; return Standard_False; } DDF = Handle(DDF_Data)::DownCast (D); if (DDF.IsNull ()) { di<<"DDF_BasicCommands : Sorry this Data Framework doesn't exist"<<"\n"; return Standard_False; } di<<"*********** Dump of "<DataFramework(),filter); Standard_SStream aSStream; TDF_Tool::ExtendedDeepDump(aSStream,DDF->DataFramework(),filter); aSStream << ends; di << aSStream <<"\n"; return 0; } //======================================================================= //function : CopyLabel_SCopy //purpose : CopyLabel (DF,fromlabel,tolabel) //======================================================================= static Standard_Integer CopyLabel_SCopy (Draw_Interpretor& di,Standard_Integer n, const char** a) { TDF_Label SOURCE,TARGET; if (n == 4) { Handle(TDF_Data) DF; if(!DDF::GetDF(a[1], DF)) return 1; if (!DDF::FindLabel(DF,a[2],SOURCE)) return 1; if (DDF::FindLabel(DF,a[3],TARGET)) { di << " target label is already setted "<< "\n"; return 1; } DDF::AddLabel(DF,a[3],TARGET); TDF_CopyLabel cop; cop.Load(SOURCE, TARGET); cop.Perform(); if (!cop.IsDone()) di << "copy not done" << "\n"; return 0; } di << "DDF_CopyLabel : Error" << "\n"; return 1; } //======================================================================= //function : DDF_CheckAttr //purpose : CheckAttr (DOC,label1,label2) // : Checks references of attributes of label1 and label2 // : in order to find shareable attributes //======================================================================= static Standard_Integer DDF_CheckAttrs (Draw_Interpretor& di,Standard_Integer n, const char** a) { TDF_Label SOURCE,TARGET; if (n == 4) { Handle(TDF_Data) DF; if(!DDF::GetDF(a[1], DF)) return 1; if (!DDF::FindLabel(DF,a[2],SOURCE)) return 1; if (!DDF::FindLabel(DF,a[3],TARGET)) return 1; Handle(TDF_DataSet) ds1 = new TDF_DataSet(); Handle(TDF_DataSet) ds2 = new TDF_DataSet(); Standard_Boolean Shar = Standard_False; for (TDF_AttributeIterator itr(SOURCE); itr.More(); itr.Next()) { itr.Value()->References(ds1); // cout<<"\tSource Attribute dynamic type = "<DynamicType()<Attributes(); //attMap for (TDF_MapIteratorOfAttributeMap attMItr(attMap);attMItr.More(); attMItr.Next()) { Handle(TDF_Attribute) sAtt = attMItr.Key(); // cout<<"\t\tSource references attribute dynamic type = "<DynamicType()<References(ds2); // cout<<"\t\t\tTARGET attribute dynamic type = "<DynamicType()<Attributes(); //attMap for (TDF_MapIteratorOfAttributeMap attMItr2(attMap2);attMItr2.More(); attMItr2.Next()) { Handle(TDF_Attribute) tAtt = attMItr2.Key(); // cout<<"\t\t\t\tTarget reference attribute dynamic type = "<DynamicType()<IsInstance(sAtt->DynamicType())) if(tAtt == sAtt) { TCollection_AsciiString entr1,entr2; if(!Shar) { TDF_Tool::Entry(SOURCE, entr1); TDF_Tool::Entry(TARGET, entr2); //cout<<"\tSHAREABLE attribute(s) found between Lab1 = "<Label(), entr1); //cout<<"\tAttribute dynamic type = "<DynamicType()<<",\tlocated on Label = "<Clear(); } } ds1->Clear(); } if(!Shar) di << "Shareable attributes not found" << "\n"; return 0; } di << "DDF_CheckAttrs : Error" << "\n"; return 1; } //======================================================================= //function : DDF_Checklabel //purpose : CheckLabel (DOC,label1,label2) // : prints all structure of first level attributes with its references //======================================================================= static Standard_Integer DDF_CheckLabel (Draw_Interpretor& di,Standard_Integer n, const char** a) { // TDF_Label SOURCE,TARGET; TDF_Label SOURCE; if (n == 3) { Handle(TDF_Data) DF; if(!DDF::GetDF(a[1], DF)) return 1; if (!DDF::FindLabel(DF,a[2],SOURCE)) return 1; Handle(TDF_DataSet) ds1 = new TDF_DataSet(); for (TDF_AttributeIterator itr(SOURCE); itr.More(); itr.Next()) { itr.Value()->References(ds1); //cout<<"\tSource Attribute dynamic type = "<DynamicType()<Attributes(); //attMap for (TDF_MapIteratorOfAttributeMap attMItr(attMap);attMItr.More(); attMItr.Next()) { Handle(TDF_Attribute) sAtt = attMItr.Key(); TCollection_AsciiString entry; TDF_Tool::Entry(sAtt->Label(), entry); //cout<<"\t\tReferences attribute dynamic type = "<DynamicType()<<",\tLabel = "<Clear(); } return 0; } di << "DDF_ChecLabel : Error" << "\n"; return 1; } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //======================================================================= //function : DataCommands //purpose : //======================================================================= void DDF::DataCommands (Draw_Interpretor& theCommands) { static Standard_Boolean done = Standard_False; if (done) return; done = Standard_True; const char* g = "DF Data Framework commands"; // Data Framework : // ++++++++++++++++ theCommands.Add ("MakeDF", "Makes a new DF: MakeDF dfname", __FILE__, MakeDF, g); theCommands.Add ("ClearDF", "Clears a DF: ClearDF dfname", __FILE__, ClearDF, g); theCommands.Add ("CopyDF", "Copies a label: CopyDF dfname1 entry1 [dfname2] entry2", __FILE__, CopyDF, g); theCommands.Add ("XDumpDF", "Exented deep dump of a DF (with attributes content): DumpDF dfname", __FILE__, XDumpDF, g); theCommands.Add ("MiniDumpDF", "Mini dump of a DF (with attributes content): DumpDF dfname", __FILE__, MiniDumpDF, g); theCommands.Add ("CopyLabel", "CopyLabel (DOC, from, to)", __FILE__, CopyLabel_SCopy, g); theCommands.Add("CheckAttrs","CheckAttrs DocName Lab1 Lab2 ", __FILE__, DDF_CheckAttrs, g); theCommands.Add("CheckLabel","CheckLabel DocName Label ", __FILE__, DDF_CheckLabel, g); }