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 | |
70 | static 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 | |
403 | Standard_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 | } |