0024023: Revamp the OCCT Handle -- general
[occt.git] / src / IGESSelect / IGESSelect_Activator.cxx
CommitLineData
973c2be1 1// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 2//
973c2be1 3// This file is part of Open CASCADE Technology software library.
b311480e 4//
d5f74e42 5// This library is free software; you can redistribute it and/or modify it under
6// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 7// by the Free Software Foundation, with special exception defined in the file
8// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9// distribution for complete text of the license and disclaimer of any warranty.
b311480e 10//
973c2be1 11// Alternatively, this file may be used under the terms of Open CASCADE
12// commercial license or contractual agreement.
b311480e 13
7fd59977 14#include <Standard_ErrorHandler.hxx>
15#include <Standard_Failure.hxx>
16
17#include <IGESSelect_Activator.ixx>
18#include <Interface_EntityIterator.hxx>
19#include <Interface_Macros.hxx>
20#include <IFSelect_WorkSession.hxx>
21#include <IFSelect_WorkLibrary.hxx>
22
23#include <IGESData_IGESModel.hxx>
24#include <IGESData_IGESEntity.hxx>
25#include <IGESData_Protocol.hxx>
26#include <IFSelect_IntParam.hxx>
27#include <TCollection_HAsciiString.hxx>
28
29#include <IGESSelect_IGESTypeForm.hxx>
30
31#include <IGESSelect_ViewSorter.hxx>
32#include <IFSelect_PacketList.hxx>
33
34#include <IGESSelect_DispPerSingleView.hxx>
35#include <IGESSelect_DispPerDrawing.hxx>
36
37#include <IFSelect_SelectSignature.hxx>
38#include <IGESSelect_SelectVisibleStatus.hxx>
39#include <IGESSelect_SelectLevelNumber.hxx>
40#include <IGESSelect_SelectName.hxx>
41
42#include <IGESSelect_SelectFromSingleView.hxx>
43#include <IGESSelect_SelectFromDrawing.hxx>
44#include <IGESSelect_SelectSingleViewFrom.hxx>
45#include <IGESSelect_SelectDrawingFrom.hxx>
46
47#include <IGESSelect_SelectBypassGroup.hxx>
48
49#include <IGESSelect_FloatFormat.hxx>
50#include <IGESSelect_UpdateCreationDate.hxx>
51#include <IGESSelect_UpdateLastChange.hxx>
52#include <IGESSelect_UpdateFileName.hxx>
53#include <IGESSelect_SetVersion5.hxx>
54#include <IGESSelect_SetGlobalParameter.hxx>
55
56#include <IGESSelect_AutoCorrect.hxx>
57#include <IGESSelect_ComputeStatus.hxx>
58#include <IGESSelect_RebuildDrawings.hxx>
59#include <IGESSelect_RebuildGroups.hxx>
60#include <IGESSelect_AddGroup.hxx>
61
62#include <IGESSelect_SplineToBSpline.hxx>
63
64#include <TColStd_HSequenceOfTransient.hxx>
65#include <IGESSelect_WorkLibrary.hxx>
66#include <stdio.h>
67
68
69
70static int initActivator = 0;
71
72 IGESSelect_Activator::IGESSelect_Activator ()
73{
74 if (initActivator) return; initActivator = 1;
75// Add ( 0,"load");
76// Add ( 0,"loadiges"); // homonyme
77 SetForGroup ("XSTEP-IGES");
78
79 Add ( 5,"listviews");
80 Add ( 6,"listdrawings");
81 Add ( 7,"listsviews");
82
83 AddSet (10,"igestype");
84 AddSet (11,"bypassgroup");
85 AddSet (12,"igesname");
86 AddSet (13,"igesvisible");
87 AddSet (14,"igeslevel");
88
89 AddSet (21,"igesfromdrawing");
90 AddSet (22,"igesfromview");
91 AddSet (23,"igesdrawingfrom");
92 AddSet (24,"igesviewfrom");
93
94 AddSet (31,"igesdispdrawing");
95 AddSet (32,"igesdispview");
96
97 AddSet (40,"floatformat");
98 AddSet (41,"setglobalparam");
99 AddSet (42,"setversion5");
100 AddSet (43,"updatecreationdate");
101 AddSet (44,"updatelastchange");
102 AddSet (45,"updatefilename");
103
104 AddSet (50,"autocorrect");
105 AddSet (51,"computestatus");
106 AddSet (52,"rebuildgroups");
107 AddSet (53,"rebuilddrawings");
108 AddSet (54,"addgroup");
109
110 AddSet (60,"splinetobspline");
111
112 Add (70,"setuseflag");
113}
114
115
116 IFSelect_ReturnStatus IGESSelect_Activator::Do
117 (const Standard_Integer number,
118 const Handle(IFSelect_SessionPilot)& pilot)
119{
120 Standard_Integer argc = pilot->NbWords();
121 const Standard_CString arg1 = pilot->Word(1).ToCString();
122 const Standard_CString arg2 = pilot->Word(2).ToCString();
123// const Standard_CString arg3 = pilot->Word(3).ToCString();
124 Handle(IFSelect_WorkSession) WS = pilot->Session();
125
126 switch (number) {
127
128 case 5 : // **** ListViews (sans tri complementaire)
129 case 6 : // **** ListDrawings
130 case 7 : { // **** ListS(ingle)Views
131 Standard_Integer listmode = 0;
132 if (argc == 2 && arg1[0] == '?') argc = -1;
133 if (argc < 2) {
134 cout<<"Ajouter un argument pour avoir :\n"<<
135 " l : liste resumee"<<
136 " c : liste complete par item (mais pas pour remaining)\n"<<
137 " r : idem + liste complete remaining\n"<<
138 " sur tout le modele. Ajouter nom selection pour lister sur une partie"<<endl;
139 return (argc >= 0 ? IFSelect_RetError : IFSelect_RetVoid);
140 }
141 if (arg1[0] == 'l') {
142 listmode = 0; cout<<"Liste resumee";
143 }
144 else if (arg1[0] == 'c') {
145 listmode = 1; cout<<"Liste complete par item (pas pour Remaining)"<<endl;
146 }
147 else if (arg1[0] == 'r') {
148 listmode = 2; cout<<"Liste complete par item et pour Remaining"<<endl;
149 }
150 else {
151 cout<<"Parametre de listage non compris"<<endl; return IFSelect_RetError;
152 }
153
154 Handle(IGESSelect_ViewSorter) vs = new IGESSelect_ViewSorter;
155 vs->SetModel(GetCasted(IGESData_IGESModel,WS->Model()));
156 if (argc == 2) vs->AddModel(WS->Model());
157 else {
158// on demande une selection
159 DeclareAndCast(IFSelect_Selection,sel,WS->NamedItem(arg2));
160 if (sel.IsNull()) {
161 cout<<"Pas une selection : "<<arg2<<endl;
162 return IFSelect_RetError;
163 }
164 vs->AddList (WS->SelectionResult(sel));
165 }
166 Standard_Boolean listdr = (number > 5);
167 if (number == 6) vs->SortDrawings(WS->Graph());
168 if (number == 7) vs->SortSingleViews(Standard_True);
169 Handle(IFSelect_PacketList) sets = vs->Sets(listdr);
170 Standard_Integer nb = vs->NbSets(listdr);
171 cout<<" -- ViewSorter for";
172 if (number == 5) cout<<" Views & Drawings";
173 if (number == 6) cout<<" Drawings only (complete)";
174 if (number == 7) cout<<" Single Views & Drawing Frames";
175 cout<<", on "<<vs->NbEntities()<<" ent.s, give "<<nb<<" Sets"<<endl;
176
177 Interface_EntityIterator iter;
178 for (Standard_Integer i = 1; i <= nb; i ++) {
179 cout<<" -- Set n0 "<<i<<" Item=entity n0: "<<
180 WS->Model()->Number(vs->SetItem(i,listdr))<<" List:";
181 cout<<sets->NbEntities(i)<<" ent.s:"<<endl;
182 if (listmode == 0) continue;
183 iter = sets->Entities(i);
184 WS->ListEntities (iter,0);
185 }
186
187 cout <<" -- Remaining Entities (not yet sorted) :"
188 <<sets->NbDuplicated(0,Standard_False)<<endl;
189 if (listmode < 2) return IFSelect_RetVoid;
190 iter = sets->Duplicated(0,Standard_False);
191 WS->ListEntities(iter,0);
192 return IFSelect_RetVoid;
193 }
194
195 case 10 : { // **** IGESType (form Type/Form)
196 if (argc < 2) {
197 cout<<"Donner le n0 de type desire, + en option la forme\n"
198 <<" Si pas de forme, prend toutes les formes du type demande"<<endl;
199 return IFSelect_RetError;
200 }
201 char signature[20];
202 if (argc == 2) sprintf(signature,"%s",arg1);
203 else sprintf(signature,"%s %s",arg1,arg2);
204 Handle(IFSelect_SelectSignature) sel = new IFSelect_SelectSignature
205 (new IGESSelect_IGESTypeForm, signature,(argc > 2));
206 return pilot->RecordItem (sel);
207 }
208
209 case 11 : { // **** IGES BypassGroup
210 return pilot->RecordItem (new IGESSelect_SelectBypassGroup);
211 }
212
213 case 12 : { // **** IGES Name
214 if (argc < 2) {
215 cout<<"Donner un Nom de TextParam pour IGESName"<<endl;
216 return IFSelect_RetError;
217 }
218 Handle(IGESSelect_SelectName) sel = new IGESSelect_SelectName;
219 sel->SetName
220 (GetCasted(TCollection_HAsciiString,WS->NamedItem(arg1)) );
221 return pilot->RecordItem (sel);
222 }
223
224 case 13 : { // **** IGES VisibleStatus
225 return pilot->RecordItem (new IGESSelect_SelectVisibleStatus);
226 }
227
228 case 14 : { // **** IGES LevelNumber
229 if (argc < 2) {
230 cout<<"Donner nom IntParam pour Level"<<endl;
231 return IFSelect_RetError;
232 }
233 DeclareAndCast(IFSelect_IntParam,lev,WS->NamedItem(arg1));
234 if (lev.IsNull()) {
235 cout<<arg1<<" : pas un IntParam (pour Level)"<<endl;
236 return IFSelect_RetError;
237 }
238 Handle(IGESSelect_SelectLevelNumber) sel = new IGESSelect_SelectLevelNumber;
239 sel->SetLevelNumber(lev);
240 return pilot->RecordItem (sel);
241 }
242
243 case 21 : { // **** IGES FromDrawing
244 return pilot->RecordItem (new IGESSelect_SelectFromDrawing);
245 }
246 case 22 : { // **** IGES FromSingleView
247 return pilot->RecordItem (new IGESSelect_SelectFromSingleView);
248 }
249 case 23 : { // **** IGES FromDrawing
250 return pilot->RecordItem (new IGESSelect_SelectDrawingFrom);
251 }
252 case 24 : { // **** IGES FromDrawing
253 return pilot->RecordItem (new IGESSelect_SelectSingleViewFrom);
254 }
255
256 case 31 : { // **** IGES DispatchPerDrawing
257 return pilot->RecordItem (new IGESSelect_DispPerDrawing);
258 }
259 case 32 : { // **** IGES DispatchPerSingleView
260 return pilot->RecordItem (new IGESSelect_DispPerSingleView);
261 }
262
263 case 40 : { // **** FloatFormat
264 char prem = ' ';
265 if (argc < 2) prem = '?';
266 else if (argc == 5) {
267 cout<<"floatformat tout court donne les formes admises"<<endl;
268 return IFSelect_RetError;
269 }
270 else prem = arg1[0];
271 Standard_Boolean zerosup=Standard_False;
272 Standard_Integer digits = 0;
273 if (prem == 'N' || prem == 'n') zerosup = Standard_False;
274 else if (prem == 'Z' || prem == 'z') zerosup = Standard_True;
275 else if (prem >= 48 && prem <= 57) digits = atoi(arg1);
276 else {
277 cout<<"floatformat digits, digits=nb de chiffres signifiants, ou\n"
278 << "floatformat NZ %mainformat [%rangeformat [Rmin Rmax]]\n"
279 <<" NZ : N ou n pour Non-zero-suppress, Z ou z pour zero-suppress\n"
280 <<" %mainformat : format principal type printf, ex,: %E\n"
281 <<" + optionnel : format secondaire (flottants autour de 1.) :\n"
282 <<" %rangeformat Rmin Rmax : format type printf entre Rmin et Rmax\n"
283 <<" %rangeformat tout seul : format type printf entre 0.1 et 1000.\n"
284 <<flush;
285 return (prem == '?' ? IFSelect_RetVoid : IFSelect_RetError);
286 }
287 Standard_Real Rmin=0., Rmax=0.;
288 if (argc > 4) {
91322f44 289 Rmin = Atof(pilot->Word(4).ToCString());
290 Rmax = Atof(pilot->Word(5).ToCString());
7fd59977 291 if (Rmin <= 0 || Rmax <= 0) { cout<<"intervalle : donner reels > 0"<<endl; return IFSelect_RetError; }
292 }
293 Handle(IGESSelect_FloatFormat) fm = new IGESSelect_FloatFormat;
294 if (argc == 2) fm->SetDefault(digits);
295 else {
296 fm->SetZeroSuppress(zerosup);
297 fm->SetFormat (arg2);
298 if (argc == 4) fm->SetFormatForRange(pilot->Word(3).ToCString());
299 else if (argc >= 6) fm->SetFormatForRange(pilot->Word(3).ToCString(),Rmin,Rmax);
300 else fm->SetFormatForRange("");
301 }
302 return pilot->RecordItem(fm);
303 }
304
305 case 41 : { // **** SetGlobalParameter
306 if (argc < 3) {
307 cout<<"Donner entier=n0 param a changer + nom TextParam pour la valeur"<<endl;
308 return IFSelect_RetError;
309 }
310 Standard_Integer numpar = atoi(arg1);
311 if (numpar <= 0) {
312 cout<<"Pas un n0 de param global correct:"<<arg1<<endl;
313 return IFSelect_RetError;
314 }
315 DeclareAndCast(TCollection_HAsciiString,val,WS->NamedItem(arg2));
316 if (val.IsNull()) {
317 cout<<"Pas un nom de TextParam:"<<arg2<<endl;
318 return IFSelect_RetError;
319 }
320 Handle(IGESSelect_SetGlobalParameter) mod =
321 new IGESSelect_SetGlobalParameter(numpar);
322 mod->SetValue(val);
323 return pilot->RecordItem (mod);
324 }
325
326 case 42 : { // **** Set IGES Version 5.1
327 return pilot->RecordItem (new IGESSelect_SetVersion5);
328 }
329 case 43 : { // **** Update Creation Date
330 return pilot->RecordItem (new IGESSelect_UpdateCreationDate);
331 }
332 case 44 : { // **** Update Last Change Date
333 return pilot->RecordItem (new IGESSelect_UpdateLastChange);
334 }
335 case 45 : { // **** Update File Name
336 return pilot->RecordItem (new IGESSelect_UpdateFileName);
337 }
338
339 case 50 : { // **** AutoCorrect
340 return pilot->RecordItem (new IGESSelect_AutoCorrect);
341 }
342 case 51 : { // **** Compute Status
343 return pilot->RecordItem (new IGESSelect_ComputeStatus);
344 }
345 case 52 : { // **** Rebuild Groups
346 return pilot->RecordItem (new IGESSelect_RebuildGroups);
347 }
348 case 53 : { // **** Rebuild Drawings
349 return pilot->RecordItem (new IGESSelect_RebuildDrawings);
350 }
351 case 54 : { // **** Add Group
352 return pilot->RecordItem (new IGESSelect_AddGroup);
353 }
354
355 case 60 : { // **** Spline To BSpline
356 if (argc < 2) {
357 cout<<"Pour SplineToBSpline, donner mode :\n"<<
358 " n pour normal, t pour tryC2"<<endl;
359 return IFSelect_RetError;
360 }
361 Standard_Boolean tryC2;
362 if (arg1[0] == 'n' || arg1[0] == 'N')
363 tryC2 = Standard_False;
364 else if (arg1[0] == 't' || arg1[0] == 'T')
365 tryC2 = Standard_True;
366 else {
367 cout<<" Mode incorrect : "<<arg1<<endl;
368 return IFSelect_RetError;
369 }
370 Handle(IGESSelect_SplineToBSpline) conv =
371 new IGESSelect_SplineToBSpline (tryC2);
372 return pilot->RecordItem(conv);
373 }
374
375 case 70 : { // **** SetUseFlag
376 Standard_Integer usefl = atoi (arg1);
377 if (argc > 2) {
378 Handle(TColStd_HSequenceOfTransient) list = WS->GiveList(pilot->CommandPart(2));
379 Standard_Integer i, nb = list->Length();
380 for (i = 1; i <= nb; i ++) {
381 DeclareAndCast(IGESData_IGESEntity,ent,list->Value(i));
382 if (!ent.IsNull()) ent->InitStatus
383 (ent->BlankStatus(),ent->SubordinateStatus(),usefl,ent->HierarchyStatus());
384 }
385 }
386 else {
387 Standard_Integer i, nb = WS->NbStartingEntities();
388 for (i = 1; i <= nb; i ++) {
389 DeclareAndCast(IGESData_IGESEntity,ent,WS->StartingEntity(i));
390 if (!ent.IsNull()) ent->InitStatus
391 (ent->BlankStatus(),ent->SubordinateStatus(),usefl,ent->HierarchyStatus());
392 }
393 }
394 return IFSelect_RetDone;
395 }
396
397 default : break;
398 }
399 return IFSelect_RetVoid;
400
401}
402
403Standard_CString IGESSelect_Activator::Help
404 (const Standard_Integer number) const
405{
406 switch (number) {
407 case 5 : return "Liste Vues (tous types). Nom selection sinon tout modele";
408 case 6 : return "Liste Drawings. Nom selection sinon tout modele";
409 case 7 : return "Liste Vues SIMPLES. Nom selection sinon tout modele";
410
411 case 10 : return "type:integer [form:integer] : cree Select IGESType";
412 case 11 : return "cree Select Bypass Group";
413 case 12 : return "name:TextParam : cree Select Name (Name/Label)";
414 case 13 : return "cree Select Visible Status (Blank Status = 0 sinon 1)";
415 case 14 : return "level:IntParam : cree Select LevelNumber";
416
417 case 21 : return "cree Select From Drawing";
418 case 22 : return "cree Select From Single View";
419 case 23 : return "cree Select Drawing From, drawing(s) pour une liste d entites";
420 case 24 : return "cree Select View From, views pour une liste d entites";
421
422 case 31 : return "cree Dispatch Per Drawing";
423 case 32 : return "cree Dispatch Per SingleView";
424
425 case 40 : return "options... : cree FloatFormat ... floatformat tout court->help";
426 case 41 : return "numpar:integer value:TextParam : cree Set Global Param";
427 case 42 : return "cree Set Version -> 5.1";
428 case 43 : return "cree Update Creation Date";
429 case 44 : return "cree Update Last Change Date";
430 case 45 : return "cree Update File Name (dynamic)";
431
432 case 50 : return "cree AutoCorrect";
433 case 51 : return "cree Compute Status (in D.E.)";
434 case 52 : return "cree Rebuild Groups";
435 case 53 : return "cree Rebuild Drawings";
436 case 54 : return "cree AddGroup";
437
438 case 60 : return "cree SplineToBSpline Conversion";
439
440 case 70 : return "useflag givelist : Set Use Flag to value";
441
442 default : break;
443 }
444 return "??";
445}