Warnings on vc14 were eliminated
[occt.git] / src / QADNaming / QADNaming_BasicCommands.cxx
CommitLineData
b311480e 1// Created on: 1997-01-13
2// Created by: VAUTHIER Jean-Claude
3// Copyright (c) 1997-1999 Matra Datavision
973c2be1 4// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 5//
973c2be1 6// This file is part of Open CASCADE Technology software library.
b311480e 7//
d5f74e42 8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
b311480e 13//
973c2be1 14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
7fd59977 16
17#include <QADNaming.hxx>
18#include <TCollection_AsciiString.hxx>
19#include <TDF_Data.hxx>
20#include <TDF_ListIteratorOfLabelList.hxx>
21#include <TDF_LabelList.hxx>
22#include <TDF_LabelMap.hxx>
23#include <TDF_Tool.hxx>
24
25#include <DDF.hxx>
26
27#include <TNaming.hxx>
28#include <TNaming_NamedShape.hxx>
29#include <TNaming_NewShapeIterator.hxx>
30#include <TNaming_OldShapeIterator.hxx>
31#include <TNaming_Iterator.hxx>
32#include <TNaming_Tool.hxx>
33#include <TNaming_MapOfNamedShape.hxx>
34#include <TNaming_MapIteratorOfMapOfNamedShape.hxx>
35#include <Draw_Drawable3D.hxx>
36#include <Draw.hxx>
37#include <Draw_Interpretor.hxx>
38#include <TopTools_ListOfShape.hxx>
39#include <TopTools_ListIteratorOfListOfShape.hxx>
40#include <TopTools_DataMapOfShapeShape.hxx>
41#include <TopoDS_Shape.hxx>
42#include <DBRep.hxx>
43
44
45#include <gp.hxx>
46#include <gp_Vec.hxx>
47#include <gp_Ax1.hxx>
48#include <gp_Ax2.hxx>
49#include <gp_Ax3.hxx>
50#include <gp_Trsf.hxx>
51
52#include <TColStd_HArray1OfInteger.hxx>
57c28b61 53//#ifdef _MSC_VER
7fd59977 54#include <stdio.h>
55//#endif
56
57// POP : first Wrong Declaration : now it is correct
58// second not used
59//extern void QADNaming_BuildMap(TDF_LabelMap& Updated, const TDF_Label& Lab);
60
61
62//=======================================================================
63//function : Ascendants
64//purpose :
65//=======================================================================
66
67static Standard_Integer Ascendants (Draw_Interpretor& di, Standard_Integer n, const char ** a)
68{
69 if (n < 3) return 1;
70
71 char name[100];
72
73 Handle(TDF_Data) ND;
74// Handle(TNaming_UsedShapes) US;
75
76 if (!DDF::GetDF(a[1],ND)) return 1;
77// ND->Root().FindAttribute(TNaming_UsedShapes::GetID(),US);
78
79 TopoDS_Shape S = DBRep::Get (a[2]);
80 if (S.IsNull ()) return 1;
81
82 Standard_Integer T;
83
91322f44 84 if (n > 3) T = Draw::Atoi(a[3]);
7fd59977 85 else T = ND->Transaction ();
86
87 //TNaming_OldShapeIterator it (S, T, US);
88 TNaming_OldShapeIterator it (S, T, ND->Root());
89 Standard_Integer i = 0;
90 TCollection_AsciiString entry;
91 for (;it.More (); it.Next ()) {
92 S = it.Shape ();
91322f44 93 Sprintf (name,"%s_%s_%d",a[2],"old", i++);
7fd59977 94 DBRep::Set (name,it.Shape());
95 TDF_Label Label = it.Label ();
96 TDF_Tool::Entry(Label,entry);
97 di<<entry.ToCString()<<"\n";
98 }
99 return 0;
100}
101
102
103//=======================================================================
104//function : Descendants
105//purpose :
106//=======================================================================
107
108static Standard_Integer Descendants (Draw_Interpretor& di, Standard_Integer n, const char ** a)
109
110{
111 if (n < 3) return 1;
112
113 char name[100];
114 Handle(TDF_Data) ND;
115// Handle(TNaming_UsedShapes) US;
116 if (!DDF::GetDF(a[1],ND)) return 1;
117// ND->Root().FindAttribute(TNaming_UsedShapes::GetID(),US);
118
119
120 TopoDS_Shape S = DBRep::Get (a[2]);
121 if (S.IsNull ()) return 1;
122
123 Standard_Integer T;
124
91322f44 125 if (n > 3) T = Draw::Atoi(a[3]);
7fd59977 126 else T = ND->Transaction ();
127
128 TNaming_NewShapeIterator it (S, T, ND->Root());
129 Standard_Integer i = 0;
130 TCollection_AsciiString entry;
131 for (;it.More (); it.Next ()) {
132 S = it.Shape ();
91322f44 133 Sprintf (name,"%s_%s_%d",a[2],"new", i++);
7fd59977 134 DBRep::Set (name,it.Shape ());
135 TDF_Label Label = it.Label ();
136 TDF_Tool::Entry(Label,entry);
137 di<<entry.ToCString()<<"\n";
138 }
139
140 return 0;
141}
142
143//=======================================================================
144//function : GetEntry
145//purpose :
146//=======================================================================
147
148static Standard_Integer Getentry (Draw_Interpretor& di, Standard_Integer n, const char ** a)
149{
150 if (n < 3) return 1;
151 Handle(TDF_Data) ND;
152// Handle(TNaming_UsedShapes) US;
153
154 if (!DDF::GetDF(a[1],ND)) return 1;
155// ND->Root().FindAttribute(TNaming_UsedShapes::GetID(),US);
156
157 TopoDS_Shape S = DBRep::Get(a[2]);
158 if (S.IsNull()) {
586db386 159 di <<"Noone shape selected\n";
7fd59977 160 di << 0;
161 return 0;
162 }
163 Standard_Integer Status ;
164 TCollection_AsciiString Name = QADNaming::GetEntry(S,ND,Status);
165 if (Status == 0) {
166 di <<"E_NoName";
167 }
168 else {
169 di <<Name.ToCString();
170 if (Status == 2) {
586db386 171 di <<"Several shapes have the same name\n";
7fd59977 172 }
173 }
174 return 0;
175}
176
177//=======================================================================
178//function : NamedShape
179//purpose : retrive label of Primitive or a Generated shape
180//=======================================================================
181
182static Standard_Integer NamedShape(Draw_Interpretor& di, Standard_Integer n, const char ** a)
183{
184 if (n < 3) return 1;
185 Handle(TDF_Data) ND;
186// Handle(TNaming_UsedShapes) US;
187
188 if (!DDF::GetDF(a[1],ND)) return 1;
189 TopoDS_Shape SS = DBRep::Get(a[2]);
190 if (SS.IsNull()) {
586db386 191 di <<"Noone shape selected\n";
7fd59977 192 di << 0;
193 return 0;
194 }
195
196 Handle(TNaming_NamedShape) NS = TNaming_Tool::NamedShape (SS,ND->Root());
197
198 if (NS.IsNull()) {
199 di <<"E_NoName";
200 return 0;
201 }
202 TCollection_AsciiString Name; TDF_Tool::Entry(NS->Label(),Name);
203 di <<Name.ToCString();
204 return 0;
205}
206
207//=======================================================================
208//function : Currentshape
209//purpose :
210//=======================================================================
211
212static Standard_Integer Currentshape (Draw_Interpretor& , Standard_Integer n, const char ** a)
213{
214 if (n < 4) return 1;
215
216 Handle(TDF_Data) ND;
217 if (!DDF::GetDF(a[1],ND)) return 1;
218
219 Standard_CString LabelName = a[2];
220 TopoDS_Shape S = QADNaming::CurrentShape(LabelName,ND);
221 if (!S.IsNull()) {
222 if (n == 4) DBRep::Set(a[3],S);
223 else DBRep::Set(a[2],S);
224 return 0;
225 }
226 return 0;
227}
228
229//=======================================================================
230//function : Initialshape
231//purpose :
232//=======================================================================
233
234static Standard_Integer Initialshape (Draw_Interpretor& di, Standard_Integer n, const char ** a)
235{
236 if (n < 4) return 1;
237
238 Handle(TDF_Data) ND;
239
240 if (!DDF::GetDF(a[1],ND)) return 1;
241
242 TopoDS_Shape NS = DBRep::Get(a[2]);
243 if (NS.IsNull()) return 1;
244
245 TDF_LabelList Labels;
246 TopoDS_Shape S = TNaming_Tool::InitialShape (NS,ND->Root(),Labels);
247 if (!S.IsNull()) {
248 DBRep::Set (a[3], S);
249 }
250 TDF_ListIteratorOfLabelList itL(Labels);
251
252 TCollection_AsciiString entry;
253 if (itL.More()) {
254 TDF_Tool::Entry(itL.Value(),entry);
255 di << entry.ToCString();
256 itL.Next();
257 }
258 for (; itL.More(); itL.Next()) {
259 TDF_Tool::Entry(itL.Value(),entry);
260 di <<" , "<< entry.ToCString();
261 }
586db386 262 di <<".\n";
7fd59977 263 return 0;
264}
265
266//=======================================================================
267//function : GetShape
268//purpose :
269//=======================================================================
270
271static Standard_Integer Exploreshape (Draw_Interpretor& di, Standard_Integer n, const char ** a)
272{
273 char name[100];
274
275 if (n < 4) return 1;
276 Handle(TDF_Data) ND;
277// Handle(TNaming_UsedShapes) US;
278
279 if (!DDF::GetDF(a[1],ND)) return 1;
280// ND->Root().FindAttribute(TNaming_UsedShapes::GetID(),US);
281
282 Standard_Integer Trans = ND->Transaction();
91322f44 283 if (n == 5) { Trans = (Standard_Integer ) Draw::Atof(a[4]);}
7fd59977 284
285 TDF_Label Lab;
286 DDF::FindLabel(ND,a[2],Lab);
287 Handle(TNaming_NamedShape) NS;
288 if (!Lab.FindAttribute(TNaming_NamedShape::GetID(),NS)) {
586db386 289 di <<"No shape\n";
7fd59977 290 return 0;
291 }
292
293 //TNaming::Print(NS->Evolution(),cout);
294 Standard_SStream aSStream;
295 TNaming::Print(NS->Evolution(),aSStream);
296 di << aSStream;
297
298 Standard_Integer NbShapes = 1;
299
300 for (TNaming_Iterator itL(Lab,Trans) ; itL.More(); itL.Next()) {
301 if (!itL.OldShape().IsNull()) {
91322f44 302 Sprintf(name,"%s%s_%d","old",a[3],NbShapes);
7fd59977 303 DBRep::Set (name,itL.OldShape());
304 }
305 if (!itL.NewShape().IsNull()) {
91322f44 306 Sprintf(name,"%s_%d",a[3],NbShapes);
7fd59977 307 DBRep::Set (name,itL.NewShape());
308 }
309 NbShapes++;
310 }
311 di <<"\n";
312 if (NbShapes == 0) {
586db386 313 di <<"No shape\n";
7fd59977 314 }
315
316 return 0;
317}
318
319//=======================================================================
320//function : GeneratedShape
321//purpose : Generatedshape df shape Generationentry [drawname]
322//=======================================================================
323
324static Standard_Integer Generatedshape (Draw_Interpretor& di,
325 Standard_Integer nb,
326 const char ** arg)
327{
328 TopoDS_Shape S;
329 Handle(TNaming_NamedShape) A;
330 if (nb >= 4) {
331 Handle(TDF_Data) DF;
332 if (!DDF::GetDF(arg[1],DF)) return 1;
333 TopoDS_Shape Gen = DBRep::Get(arg[2]);
334 Handle(TNaming_NamedShape) Generation;
335 if (!DDF::Find(DF,arg[3],TNaming_NamedShape::GetID(),Generation)) return 1;
336 S = TNaming_Tool::GeneratedShape(Gen,Generation);
337 if (!S.IsNull()) {
338 if (nb == 4) DBRep::Set(arg[4],S);
339 else DBRep::Set(arg[3],S);
340 return 0;
341 }
342 }
586db386 343 di << "GetShape : Error\n";
7fd59977 344 return 1;
345}
346
347//=======================================================================
348//function : DDataStd_GetShape
349//purpose :
350//=======================================================================
351
352static Standard_Integer Getshape (Draw_Interpretor& di,
353 Standard_Integer nb,
354 const char ** arg)
355{
356 TopoDS_Shape s;
357 Handle(TNaming_NamedShape) A;
358 if (nb >= 3) {
359 Handle(TDF_Data) DF;
360 if (!DDF::GetDF(arg[1],DF)) return 1;
361 if (!DDF::Find(DF,arg[2],TNaming_NamedShape::GetID(),A)) return 1;
362 s = TNaming_Tool::GetShape(A);
363 if (!s.IsNull()) {
364 if (nb == 4) DBRep::Set(arg[3],s);
365 else DBRep::Set(arg[2],s);
366 return 0;
367 }
368 }
586db386 369 di << "DDataStd_GetShape : Error\n";
7fd59977 370 return 1;
371}
372
373//=======================================================================
374//function : Collect
375//purpose :
376//=======================================================================
377
378static Standard_Integer Collect (Draw_Interpretor& di,
379 Standard_Integer nb,
380 const char ** arg)
381{
382 TNaming_MapOfNamedShape MNS;
383 Handle(TNaming_NamedShape) A;
384 Standard_Boolean OnlyModif = 1;
385
386 if (nb >= 3) {
387 Handle(TDF_Data) DF;
388 if (!DDF::GetDF(arg[1],DF)) return 1;
389 if (!DDF::Find(DF,arg[2],TNaming_NamedShape::GetID(),A)) return 1;
390 if (nb >= 4) {
dde68833 391 OnlyModif = Draw::Atoi(arg[3]) != 0;
7fd59977 392 }
393 TNaming_Tool::Collect(A,MNS,OnlyModif);
394 for (TNaming_MapIteratorOfMapOfNamedShape it(MNS); it.More(); it.Next()) {
395 TCollection_AsciiString Name;
396 TDF_Tool::Entry(it.Key()->Label(),Name);
397 di <<Name.ToCString()<<" ";
398 }
399 }
400 return 1;
401}
402
403//=======================================================================
404//function : GetCreationEntry
405//purpose : retrive label of Primitive or a Generated shape
406//=======================================================================
407
408static Standard_Integer Getcreationentry (Draw_Interpretor& di, Standard_Integer n, const char ** a)
409{
410 if (n < 3) return 1;
411 Handle(TDF_Data) ND;
412// Handle(TNaming_UsedShapes) US;
413
414 if (!DDF::GetDF(a[1],ND)) return 1;
415// ND->Root().FindAttribute(TNaming_UsedShapes::GetID(),US);
416
417 TopoDS_Shape SS = DBRep::Get(a[2]);
418
419 if (SS.IsNull()) {
586db386 420 di <<"Noone shape selected\n";
7fd59977 421 di << 0;
422 return 0;
423 }
424
425 TDF_LabelList Labels;
426 TopoDS_Shape S = TNaming_Tool::InitialShape(SS, ND->Root(), Labels);
427
428 if (S.IsNull()) {
429 di <<"E_NoName";
430 return 0;
431 }
432 Standard_Integer Status ;
433
434 TCollection_AsciiString Name = QADNaming::GetEntry(S,ND,Status);
435 if (Status == 0) {
436 di <<"E_NoName";
437 }
438 else {
439 di <<Name.ToCString();
440 if (Status == 2) {
586db386 441 di <<"Several shapes have the same name\n";
7fd59977 442 }
443 }
444 return 0;
445}
446
447
448//=======================================================================
449//function : BasicCommands
450//purpose :
451//=======================================================================
452
453void QADNaming::BasicCommands(Draw_Interpretor& theCommands)
454{
455 static Standard_Boolean done = Standard_False;
456 if (done) return;
457 done = Standard_True;
458
459 const char* g = "Naming data commands";
460
461 // Exploration
462 theCommands.Add("Ascendants", "Ascendants df shape [trans]", __FILE__,Ascendants, g);
463
464 theCommands.Add("Descendants", "Descendants df shape [trans]", __FILE__,Descendants, g);
465
466 theCommands.Add("ExploreShape","ExploreShape df entry res [trans]",__FILE__,Exploreshape, g);
467
468 theCommands.Add("GetEntry", "GetEntry df shape", __FILE__,Getentry, g);
469
470 theCommands.Add("GetCreationEntry", "GetCreationEntry df shape",__FILE__,Getcreationentry,g);
471
472 theCommands.Add("NamedShape", "NamedShape df shape", __FILE__,NamedShape, g);
473
474 theCommands.Add("InitialShape","InitialShape df shape res", __FILE__,Initialshape, g);
475
476 theCommands.Add("CurrentShape","Currentshape df entry [drawname]", __FILE__,Currentshape, g);
477
478 theCommands.Add("GetShape", "GetShape df entry [drawname]", __FILE__,Getshape , g);
479
480 theCommands.Add("Collect", "Collect df entry [onlymodif 0/1]",__FILE__,Collect , g);
481
482 theCommands.Add ("GeneratedShape",
483 "Generatedshape df shape Generationentry [drawname]",
484 __FILE__,Generatedshape,g);
485}