0022898: IGES import fails in german environment
[occt.git] / src / QADNaming / QADNaming.cxx
1 // Created on: 1997-01-09
2 // Created by: VAUTHIER Jean-Claude & Fricaud Yves
3 // Copyright (c) 1997-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
10 //
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 //
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
20
21
22 #include <stdio.h>
23
24 #include <QADNaming.ixx>
25
26 #include <DDF.hxx>
27
28 #include <Draw.hxx>
29 #include <TColStd_HArray1OfInteger.hxx>
30 #include <TColStd_ListIteratorOfListOfInteger.hxx>
31 #include <TColStd_ListOfInteger.hxx>
32 #include <TCollection_AsciiString.hxx>
33 #include <TDF_ChildIterator.hxx>
34 #include <TDF_LabelList.hxx>
35 #include <TDF_LabelMap.hxx>
36 #include <TDF_Tool.hxx>
37 #include <TNaming_Iterator.hxx>
38 #include <TNaming_Tool.hxx>
39 #include <TNaming_NamedShape.hxx>
40 #include <DBRep.hxx>
41 #include <TopExp_Explorer.hxx>
42 #include <TopoDS_Vertex.hxx>
43 #include <TopoDS.hxx>
44 #include <BRep_Tool.hxx>
45 #include <gp_Pnt.hxx>
46
47 //=======================================================================
48 //function : GetShape
49 //purpose  : 
50 //=======================================================================
51
52 void QADNaming::GetShape (const Standard_CString      LabelName,
53                         const Handle(TDF_Data)&     DF,
54                         TopTools_ListOfShape&       L)
55 {
56   L.Clear();
57   TDF_Label Label;
58   Standard_Boolean Found = DDF::AddLabel (DF, LabelName, Label);
59   if (Found) {
60     TNaming_Iterator it (Label, DF->Transaction ());
61     for (; it.More(); it.Next()) {
62       L.Append(it.NewShape());
63     }
64   }
65 }
66
67 //=======================================================================
68 //function : BuildMap
69 //purpose  : 
70 //=======================================================================
71
72 void QADNaming_BuildMap(TDF_LabelMap& Updated, 
73                       const TDF_Label& Lab)
74 {
75   TDF_ChildIterator it(Lab);
76   for (; it.More(); it.Next()) {
77     Updated.Add(it.Value());
78     QADNaming_BuildMap(Updated,it.Value());
79   }
80 }
81
82 //=======================================================================
83 //function : CurrentShape
84 //purpose  : 
85 //=======================================================================
86
87 TopoDS_Shape QADNaming::CurrentShape (const Standard_CString  LabelName,
88                                     const Handle(TDF_Data)& DF)
89 {
90   TopoDS_Shape S;
91   TDF_Label Label; 
92   Standard_Boolean Found =  DDF::AddLabel (DF, LabelName, Label);
93   if (!Found) {
94     cout <<"no labels"<<endl;
95     return S;
96   }
97   if (Found) { 
98     Handle(TNaming_NamedShape)  NS;
99     Label.FindAttribute(TNaming_NamedShape::GetID(),NS);
100     S =  TNaming_Tool::CurrentShape(NS);
101     if (S.IsNull())
102       cout <<"current shape from "<< LabelName <<" is deleted"<<endl;
103     return S;
104   }
105   return S;
106 }
107
108 //=======================================================================
109 //function : GetEntry
110 //purpose  : 
111 //=======================================================================
112
113 TCollection_AsciiString QADNaming::GetEntry (const TopoDS_Shape&         Shape,
114                                            const Handle(TDF_Data)&     DF,
115                                            Standard_Integer&           Status)
116 {
117   Status = 0;
118   //Handle(TNaming_UsedShapes) US;
119   //DF->Root().FindAttribute(TNaming_UsedShapes::GetID(),US);
120
121   if (!TNaming_Tool::HasLabel (DF->Root(), Shape)) {
122     return TCollection_AsciiString ();
123   }
124   Standard_Integer Transdef;
125   TDF_Label Lab = TNaming_Tool::Label (DF->Root(), Shape,Transdef);
126   TCollection_AsciiString entry; TDF_Tool::Entry(Lab,entry);
127   //Update Status;
128   TNaming_Iterator it(Lab,DF->Transaction());
129   for (; it.More(); it.Next()) {
130     Status++;
131     if (Status == 2) break;
132   }
133   return entry;
134 }
135
136 //=======================================================================
137 //function : GetEntry
138 //purpose  : 
139 //=======================================================================
140
141 Standard_Boolean QADNaming::Entry(const Standard_Address theArguments,
142                                 TDF_Label& theLabel) {
143   const char** arg = (const char**)theArguments;
144   Handle(TDF_Data) DF;
145   if (!DDF::GetDF(arg[1],DF)) {
146     cout<<"Wrong df"<<endl;
147     return Standard_False;
148   }
149   DDF::AddLabel(DF,arg[2],theLabel);
150   if (!theLabel.IsNull()) return Standard_True;
151   cout<<"Wrong entry"<<endl;
152   return Standard_False;
153 }
154
155 //=======================================================================
156 //function : IsSameShapes
157 //purpose  : IsSameShapes DrawShape1 DrawShape2
158 //=======================================================================
159 static Standard_Integer QADNaming_IsSameShapes (Draw_Interpretor& di,
160                                 Standard_Integer nb, 
161                                 const char** arg) {
162   if (nb == 3) {
163     TopoDS_Shape aShape1 = DBRep::Get(arg[1]);
164     TopoDS_Shape aShape2 = DBRep::Get(arg[2]);
165     if (aShape1.IsNull() || aShape2.IsNull()) return 0;
166     if (aShape1.IsSame(aShape2)) di<<"1";
167     return 0;
168   }
169   return 1;
170 }
171
172 //=======================================================================
173 //function : CenterOfShape
174 //purpose  : CenterOfShape DrawShape
175 //=======================================================================
176 static Standard_Integer QADNaming_CenterOfShape (Draw_Interpretor& di,
177                                                Standard_Integer nb, 
178                                                const char** arg) {
179   if (nb == 2) {
180     TopoDS_Shape aShape = DBRep::Get(arg[1]);
181     if (aShape.IsNull()) return 1;
182     Standard_Real x=0,y=0,z=0;
183     float all = 0;
184     TopExp_Explorer anExp(aShape,TopAbs_VERTEX);
185     for(;anExp.More();anExp.Next(),all++) {
186       TopoDS_Vertex aVertex = TopoDS::Vertex(anExp.Current());
187       gp_Pnt aPoint = BRep_Tool::Pnt(aVertex);
188       x+=aPoint.X();
189       y+=aPoint.Y();
190       z+=aPoint.Z();
191     }
192     if (all != 0) {
193       char s[100];
194       Sprintf(s,"%f %f %f",(float)x/all,(float)y/all,(float)z/all);
195       di<<s;
196       return 0;
197     }
198   }
199   return 1;
200 }
201
202 //=======================================================================
203 //function : AllCommands
204 //purpose  : 
205 //=======================================================================
206
207 void QADNaming::AllCommands(Draw_Interpretor& theCommands)
208 {
209   static Standard_Boolean done = Standard_False;
210   if (done) return;
211   done = Standard_True;
212
213   QADNaming::BasicCommands     (theCommands); 
214   QADNaming::BuilderCommands   (theCommands); 
215   QADNaming::IteratorsCommands (theCommands); 
216   QADNaming::ToolsCommands     (theCommands);  
217   QADNaming::SelectionCommands (theCommands);
218
219   // auxiliary command IsSameShapes
220   theCommands.Add("IsSameShapes","IsSameShapes DrawShape1 DrawShape2",__FILE__,QADNaming_IsSameShapes, "Auxiliary methods");
221   theCommands.Add("CenterOfShape","CenterOfShape DrawShape",__FILE__,QADNaming_CenterOfShape, "Auxiliary methods");
222   // define the TCL variable Draw_NamingData
223   const char* com = "set Draw_NamingData 1";
224   theCommands.Eval(com);
225 }