0024624: Lost word in license statement in source files
[occt.git] / src / STEPControl / STEPControl_Controller.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
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
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.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 //:j4 gka 16.03.99 S4134
15 //    gka 05.04.99 S4136: parameters definitions changed
16 #include <STEPControl_Controller.ixx>
17 #include <StepSelect_WorkLibrary.hxx>
18 #include <IFSelect_Option.hxx>
19 #include <IFSelect_Profile.hxx>
20
21 //#include <StepAP214.hxx>
22 #include <RWStepAP214.hxx>
23
24 #include <Standard_Version.hxx>
25 #include <StepData_StepModel.hxx>
26 #include <APIHeaderSection_MakeHeader.hxx>
27 #include <StepData_FileProtocol.hxx>
28 #include <HeaderSection.hxx>
29 #include <RWHeaderSection.hxx>
30 #include <IFSelect_SignCounter.hxx>
31 #include <IFSelect_SelectSignature.hxx>
32 #include <StepSelect_StepType.hxx>
33
34 //  Pour NewModel et Write : definition de produit (temporaire ...)
35 #include <STEPControl_ActorRead.hxx>
36 #include <STEPControl_ActorWrite.hxx>
37
38 #include <STEPEdit.hxx>
39 #include <STEPEdit_EditContext.hxx>
40 #include <STEPEdit_EditSDR.hxx>
41
42 #include <APIHeaderSection_EditHeader.hxx>
43 #include <IFSelect_EditForm.hxx>
44
45 #include <TCollection_HAsciiString.hxx>
46
47 #include <Interface_Static.hxx>
48 #include <Interface_Macros.hxx>
49 #include <IFSelect_SignAncestor.hxx>
50 #include <STEPSelections_SelectFaces.hxx>
51 #include <STEPSelections_SelectDerived.hxx>
52 #include <STEPSelections_SelectGSCurves.hxx>
53 #include <STEPSelections_SelectInstances.hxx>
54 #include <STEPSelections_SelectAssembly.hxx>
55 #include <XSAlgo.hxx>
56 #include <STEPSelections_SelectForTransfer.hxx>
57 #include <IFSelect_SelectModelRoots.hxx>
58
59
60 STEPControl_Controller::STEPControl_Controller ()
61      : XSControl_Controller ("STEP", "step")
62 {
63   static Standard_Boolean init = Standard_False;
64   if (!init) {
65     RWHeaderSection::Init();  RWStepAP214::Init();
66
67     Interface_Static::Init ("step","write.step.product.name",'t',"Open CASCADE STEP translator "OCC_VERSION_STRING);
68     Interface_Static::Init ("step","write.step.assembly",'e',"");
69     Interface_Static::Init ("step","write.step.assembly",'&',"enum 0");
70     Interface_Static::Init ("step","write.step.assembly",'&',"eval Off");
71     Interface_Static::Init ("step","write.step.assembly",'&',"eval On");
72     Interface_Static::Init ("step","write.step.assembly",'&',"eval Auto");
73     Interface_Static::SetCVal("write.step.assembly","Auto"); 
74
75     Interface_Static::Init("step","step.angleunit.mode", 'e',"");
76     Interface_Static::Init("step","step.angleunit.mode", '&',"enum 0");
77     Interface_Static::Init("step","step.angleunit.mode", '&',"eval File");
78     Interface_Static::Init("step","step.angleunit.mode", '&',"eval Rad");
79     Interface_Static::Init("step","step.angleunit.mode", '&',"eval Deg");
80     Interface_Static::SetCVal("step.angleunit.mode","File"); 
81
82     Interface_Static::Init("step","write.step.schema", 'e',"");  
83     Interface_Static::Init("step","write.step.schema",'&',"enum 1");
84     Interface_Static::Init("step","write.step.schema",'&',"eval AP214CD");
85     Interface_Static::Init("step","write.step.schema",'&',"eval AP214DIS");
86     Interface_Static::Init("step","write.step.schema",'&',"eval AP203");
87     Interface_Static::Init("step","write.step.schema",'&',"eval AP214IS");  
88     Interface_Static::SetCVal("write.step.schema","AP214CD"); 
89
90     // Type of Product Definition for reading
91     // Note: the numbers should be consistent with function FindShapeReprType()
92     // in STEPControl_ActorRead.cxx
93     Interface_Static::Init("step","read.step.shape.repr",'e',"");
94     Interface_Static::Init("step","read.step.shape.repr",'&',"enum 1");
95     Interface_Static::Init("step","read.step.shape.repr",'&',"eval All");   // 1
96     Interface_Static::Init("step","read.step.shape.repr",'&',"eval ABSR");  // 2
97     Interface_Static::Init("step","read.step.shape.repr",'&',"eval MSSR");  // 3
98     Interface_Static::Init("step","read.step.shape.repr",'&',"eval GBSSR"); // 4
99     Interface_Static::Init("step","read.step.shape.repr",'&',"eval FBSR");  // 5
100     Interface_Static::Init("step","read.step.shape.repr",'&',"eval EBWSR"); // 6
101     Interface_Static::Init("step","read.step.shape.repr",'&',"eval GBWSR"); // 7
102     Interface_Static::SetCVal("read.step.shape.repr","All");
103
104     // Mode for reading shapes attached to main SDR by SRR
105     // (hybrid model representation in AP203 since 1998)
106     Interface_Static::Init("step","read.step.shape.relationship",'e',"");
107     Interface_Static::Init("step","read.step.shape.relationship",'&',"enum 0");
108     Interface_Static::Init("step","read.step.shape.relationship",'&',"eval OFF");
109     Interface_Static::Init("step","read.step.shape.relationship",'&',"eval ON");
110     Interface_Static::SetCVal("read.step.shape.relationship","ON");
111
112     // Mode for reading shapes attached to Product by ShapeAspect 
113     // (hybrid model representation in AP203 before 1998)
114     Interface_Static::Init("step","read.step.shape.aspect",'e',"");
115     Interface_Static::Init("step","read.step.shape.aspect",'&',"enum 0");
116     Interface_Static::Init("step","read.step.shape.aspect",'&',"eval OFF");
117     Interface_Static::Init("step","read.step.shape.aspect",'&',"eval ON");
118     Interface_Static::SetCVal("read.step.shape.aspect","ON");
119
120     // Mode for reading SDR and ShapeRepr if it is necessary
121     Interface_Static::Init("step","read.step.product.mode",'e',"");
122     Interface_Static::Init("step","read.step.product.mode",'&',"enum 0");
123     Interface_Static::Init("step","read.step.product.mode",'&',"eval OFF");
124     Interface_Static::Init("step","read.step.product.mode",'&',"eval ON");
125     Interface_Static::SetCVal("read.step.product.mode","ON");
126
127     // Order of reading ShapeDefinitionRepresentation in ProductDefinition
128     Interface_Static::Init("step","read.step.product.context",'e',"");
129     Interface_Static::Init("step","read.step.product.context",'&',"enum 1");
130     Interface_Static::Init("step","read.step.product.context",'&',"eval all");     // 1
131     Interface_Static::Init("step","read.step.product.context",'&',"eval design");  // 2
132     Interface_Static::Init("step","read.step.product.context",'&',"eval analysis");// 3
133     Interface_Static::SetCVal("read.step.product.context","all");
134
135     // What we try to read in ProductDefinition
136     Interface_Static::Init("step","read.step.assembly.level",'e',"");
137     Interface_Static::Init("step","read.step.assembly.level",'&',"enum 1");
138     Interface_Static::Init("step","read.step.assembly.level",'&',"eval all");      // 1
139     Interface_Static::Init("step","read.step.assembly.level",'&',"eval assembly"); // 2
140     Interface_Static::Init("step","read.step.assembly.level",'&',"eval structure");// 3
141     Interface_Static::Init("step","read.step.assembly.level",'&',"eval shape");    // 4
142     Interface_Static::SetCVal("read.step.assembly.level","all");
143
144     // unit: supposed to be cascade unit (target unit for reading)
145     Interface_Static::Init("step","write.step.unit", 'e',"");
146     Interface_Static::Init("step","write.step.unit",'&',"enum 1");
147     Interface_Static::Init("step","write.step.unit",'&',"eval INCH");  // 1
148     Interface_Static::Init("step","write.step.unit",'&',"eval MM");    // 2
149     Interface_Static::Init("step","write.step.unit",'&',"eval ??");    // 3
150     Interface_Static::Init("step","write.step.unit",'&',"eval FT");    // 4
151     Interface_Static::Init("step","write.step.unit",'&',"eval MI");    // 5
152     Interface_Static::Init("step","write.step.unit",'&',"eval M");     // 6
153     Interface_Static::Init("step","write.step.unit",'&',"eval KM");    // 7
154     Interface_Static::Init("step","write.step.unit",'&',"eval MIL");   // 8
155     Interface_Static::Init("step","write.step.unit",'&',"eval UM");    // 9
156     Interface_Static::Init("step","write.step.unit",'&',"eval CM");    //10
157     Interface_Static::Init("step","write.step.unit",'&',"eval UIN");   //11
158     Interface_Static::SetCVal ("write.step.unit","MM");
159
160     // Non-manifold topology reading: OFF by default (ssv; 26.11.2010)
161     Interface_Static::Init ("step","read.step.nonmanifold",'e',"");
162     Interface_Static::Init ("step","read.step.nonmanifold",'&',"enum 0");
163     Interface_Static::Init ("step","read.step.nonmanifold",'&',"eval Off");
164     Interface_Static::Init ("step","read.step.nonmanifold",'&',"eval On");
165     Interface_Static::SetIVal("read.step.nonmanifold",0); 
166
167     // Non-manifold topology writing: OFF by default (ssv; 26.11.2010)
168     Interface_Static::Init ("step","write.step.nonmanifold",'e',"");
169     Interface_Static::Init ("step","write.step.nonmanifold",'&',"enum 0");
170     Interface_Static::Init ("step","write.step.nonmanifold",'&',"eval Off");
171     Interface_Static::Init ("step","write.step.nonmanifold",'&',"eval On");
172     Interface_Static::SetIVal("write.step.nonmanifold",0); 
173
174     // I-Deas-like STEP processing: OFF by default (ssv; 22.11.2010)
175     Interface_Static::Init ("step","read.step.ideas",'e',"");
176     Interface_Static::Init ("step","read.step.ideas",'&',"enum 0");
177     Interface_Static::Init ("step","read.step.ideas",'&',"eval Off");
178     Interface_Static::Init ("step","read.step.ideas",'&',"eval On");
179     Interface_Static::SetIVal("read.step.ideas",0); 
180   
181     // abv 15.11.00: ShapeProcessing
182     Interface_Static::Init ("XSTEP","write.step.resource.name",'t',"STEP");
183     Interface_Static::Init ("XSTEP","read.step.resource.name",'t',"STEP");
184     Interface_Static::Init ("XSTEP","write.step.sequence",'t',"ToSTEP");
185     Interface_Static::Init ("XSTEP","read.step.sequence",'t',"FromSTEP");
186
187     init = Standard_True;
188   }
189
190   Handle(STEPControl_ActorWrite) ActWrite = new STEPControl_ActorWrite;
191   ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly"));
192   theAdaptorWrite = ActWrite;
193
194   Handle(StepSelect_WorkLibrary) swl = new StepSelect_WorkLibrary;
195   swl->SetDumpLabel(1);
196   theAdaptorLibrary  = swl;
197   theAdaptorProtocol =  STEPEdit::Protocol();
198 //  theAdaptorProtocol =  StepAP214::Protocol();
199   theAdaptorRead     = new STEPControl_ActorRead;  // par ex pour Recognize
200
201   SetModeWrite (0,4);
202   SetModeWriteHelp (0,"As Is");
203   SetModeWriteHelp (1,"Faceted Brep");
204   SetModeWriteHelp (2,"Shell Based");
205   SetModeWriteHelp (3,"Manifold Solid");
206   SetModeWriteHelp (4,"Wireframe");
207   TraceStatic ("read.surfacecurve.mode",5);
208
209 //   ---  SELECTIONS, SIGNATURES, COMPTEURS, EDITEURS
210
211   DeclareAndCast(IFSelect_Selection,xmr,SessionItem("xst-model-roots"));
212   if (!xmr.IsNull()) {
213     Handle(IFSelect_Signature) sty = STEPEdit::SignType();
214     AddSessionItem (sty,"step-type");
215     Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter
216       (sty,Standard_False,Standard_True);
217     AddSessionItem (tys,"step-types");
218     theSignType = sty;
219
220     
221     //pdn S4133 18.02.99
222     Handle(IFSelect_SignAncestor)sta =  new IFSelect_SignAncestor();
223     AddSessionItem (sta,"xst-derived");
224     Handle(STEPSelections_SelectDerived) stdvar = new STEPSelections_SelectDerived();
225     stdvar->SetProtocol(STEPEdit::Protocol());
226     AddSessionItem (stdvar,"step-derived");
227     
228     Handle(IFSelect_SelectSignature) selsdr = STEPEdit::NewSelectSDR();
229     selsdr->SetInput (xmr);
230     AddSessionItem (selsdr,"step-shape-def-repr");
231     Handle(IFSelect_SelectSignature) selrrs = STEPEdit::NewSelectPlacedItem();
232 //    selrrs->SetInput (xmr);  deja prete avec ModelAll
233     AddSessionItem (selrrs,"step-placed-items");
234     Handle(IFSelect_SelectSignature) selsr = STEPEdit::NewSelectShapeRepr();
235 //    input deja pret avec ModelAll
236     AddSessionItem (selsr,"step-shape-repr");
237   }
238   
239   //pdn
240   Handle(STEPSelections_SelectFaces) stfaces = new STEPSelections_SelectFaces;
241   stfaces->SetInput (xmr);
242   AddSessionItem (stfaces,"step-faces");
243   
244   Handle(STEPSelections_SelectInstances) stinst = new STEPSelections_SelectInstances;
245   AddSessionItem (stinst,"step-instances");
246   
247   Handle(STEPSelections_SelectGSCurves) stcurves = new STEPSelections_SelectGSCurves;
248   stcurves->SetInput (xmr);
249   AddSessionItem (stcurves,"step-GS-curves");
250   
251   Handle(STEPSelections_SelectAssembly) assembly = new STEPSelections_SelectAssembly;
252   assembly->SetInput (xmr);
253   AddSessionItem (assembly,"step-assembly");
254   
255   Handle(APIHeaderSection_EditHeader) edhead = new APIHeaderSection_EditHeader;
256   Handle(IFSelect_EditForm) edheadf = new IFSelect_EditForm (edhead,Standard_False,Standard_True,"Step Header");
257   AddSessionItem (edhead,"step-header-edit");
258   AddSessionItem (edheadf,"step-header");
259
260   Handle(STEPEdit_EditContext) edctx = new STEPEdit_EditContext;
261   Handle(IFSelect_EditForm) edctxf = new IFSelect_EditForm (edctx,Standard_False,Standard_True,"STEP Product Definition Context");
262   AddSessionItem (edctx,"step-context-edit");
263   AddSessionItem (edctxf,"step-context");
264
265
266   Handle(STEPEdit_EditSDR) edsdr = new STEPEdit_EditSDR;
267   Handle(IFSelect_EditForm) edsdrf = new IFSelect_EditForm (edsdr,Standard_False,Standard_True,"STEP Product Data (SDR)");
268   AddSessionItem (edsdr,"step-SDR-edit");
269   AddSessionItem (edsdrf,"step-SDR-data");
270
271 //    ####    PROFILE    ####
272
273 //  ActorRead : on ajoute le cas Shape possible, a part du default
274 //  ainsi, on l a tjrs sous la main
275   Handle(IFSelect_Option) optacrd = Profile()->Option("tr-read");
276   optacrd->Add ("shape",theAdaptorRead);
277
278 //  ActorWrite : on ajoute les cas possibles (NB : shape == default)
279 //  On garde a part les cas shape compound (= shape traitee globale ou en
280 //   assembly), peuvent etre utiles. Tandis que les autres cas sont
281 //   susceptibles d etre remplaces si on fait du Model-Editor
282   Handle(IFSelect_Option) optacwr = Profile()->Option("tr-write");
283   Handle(STEPControl_ActorWrite) ActWSh = new STEPControl_ActorWrite;
284   ActWSh->SetGroupMode(0);
285   optacwr->Add ("shape",ActWSh);
286   Handle(STEPControl_ActorWrite) ActWA1 = new STEPControl_ActorWrite;
287   ActWA1->SetGroupMode(1);
288   optacwr->Add ("compound",ActWA1);
289   optacwr->Add ("assembly",ActWA1);
290   optacwr->Add ("SRWT",ActWA1);
291
292   Profile()->AddConf ("Shape");
293   Profile()->AddSwitch ("Shape","tr-write","shape");
294
295   Profile()->AddConf ("Assembly");
296   Profile()->AddSwitch ("Assembly","tr-write","SRWT");
297 }
298
299 Handle(Interface_InterfaceModel)  STEPControl_Controller::NewModel () const
300 {
301   return STEPEdit::NewModel();
302 }
303
304 Handle(Transfer_ActorOfTransientProcess)  STEPControl_Controller::ActorRead
305        (const Handle(Interface_InterfaceModel)& ) const
306 {
307   return theAdaptorRead;
308 }    // new Cc1ToTopoDSAct_Actor ??
309
310 //  ####    PROVISOIRE ???   ####
311
312 IFSelect_ReturnStatus  STEPControl_Controller::TransferWriteShape
313   (const TopoDS_Shape& shape,
314    const Handle(Transfer_FinderProcess)& FP,
315    const Handle(Interface_InterfaceModel)& model,
316    const Standard_Integer modeshape) const
317 {
318   if (modeshape < 0 || modeshape > 4) return IFSelect_RetError;
319   Handle(STEPControl_ActorWrite) ActWrite =
320     Handle(STEPControl_ActorWrite)::DownCast(theAdaptorWrite);
321 //    A PRESENT ON PASSE PAR LE PROFILE
322   if (!ActWrite.IsNull()) 
323     ActWrite->SetGroupMode (Interface_Static::IVal("write.step.assembly"));
324
325   return XSControl_Controller::TransferWriteShape (shape,FP,model,modeshape);
326 }
327
328 Standard_Boolean STEPControl_Controller::Init ()
329 {
330   static Standard_Boolean inic = Standard_False;
331   if (!inic) {
332     Handle(STEPControl_Controller) STEPCTL = new STEPControl_Controller;
333     STEPCTL->AutoRecord();  // avec les noms donnes a la construction
334     XSAlgo::Init();                                                                                                        
335     inic = Standard_True;
336   }
337   return Standard_True;
338 }
339 //=======================================================================
340 //function : Customise
341 //purpose  : 
342 //=======================================================================
343
344  void STEPControl_Controller::Customise(Handle(XSControl_WorkSession)& WS) 
345 {
346   XSControl_Controller::Customise(WS);
347   Handle(IFSelect_SelectModelRoots) slr;
348   Handle(Standard_Transient) slr1 = WS->NamedItem("xst-model-roots");
349   if(!slr1.IsNull())
350     slr = Handle(IFSelect_SelectModelRoots)::DownCast(slr1);
351   else  {
352     slr = new IFSelect_SelectModelRoots;
353     WS->AddNamedItem ("xst-model-roots",slr);
354   }
355   
356   
357   Handle(STEPSelections_SelectForTransfer) st1= new STEPSelections_SelectForTransfer;
358   st1->SetReader (WS->TransferReader());
359   WS->AddNamedItem ("xst-transferrable-roots",st1);
360   
361   
362    //DeclareAndCast(IFSelect_Selection,xmr,SessionItem("xst-model-roots"));
363   if (!slr.IsNull()) {
364     Handle(IFSelect_Signature) sty = STEPEdit::SignType();
365     WS->AddNamedItem ("step-type",sty);
366     
367     Handle(IFSelect_SignCounter) tys = new IFSelect_SignCounter
368       (sty,Standard_False,Standard_True);
369     WS->AddNamedItem ("step-types",tys);
370     theSignType = sty;
371
372     
373     //pdn S4133 18.02.99
374     Handle(IFSelect_SignAncestor)sta =  new IFSelect_SignAncestor();
375     WS->AddNamedItem ("xst-derived",sta);
376     Handle(STEPSelections_SelectDerived) stdvar = new STEPSelections_SelectDerived();
377     stdvar->SetProtocol(STEPEdit::Protocol());
378     WS->AddNamedItem ("step-derived",stdvar);
379     
380     Handle(IFSelect_SelectSignature) selsdr = STEPEdit::NewSelectSDR();
381     selsdr->SetInput (slr);
382     WS->AddNamedItem ("step-shape-def-repr",selsdr);
383     Handle(IFSelect_SelectSignature) selrrs = STEPEdit::NewSelectPlacedItem();
384 //    selrrs->SetInput (slr);  deja prete avec ModelAll
385     WS->AddNamedItem ("step-placed-items",selrrs);
386     Handle(IFSelect_SelectSignature) selsr = STEPEdit::NewSelectShapeRepr();
387 //    input deja pret avec ModelAll
388     WS->AddNamedItem ("step-shape-repr",selsr);
389   }
390   
391   //pdn
392   Handle(STEPSelections_SelectFaces) stfaces = new STEPSelections_SelectFaces;
393   stfaces->SetInput (slr);
394   WS->AddNamedItem ("step-faces",stfaces);
395   
396   Handle(STEPSelections_SelectInstances) stinst = new STEPSelections_SelectInstances;
397   WS->AddNamedItem ("step-instances",stinst);
398   
399   Handle(STEPSelections_SelectGSCurves) stcurves = new STEPSelections_SelectGSCurves;
400   stcurves->SetInput (slr);
401   WS->AddNamedItem ("step-GS-curves",stcurves);
402   
403   Handle(STEPSelections_SelectAssembly) assembly = new STEPSelections_SelectAssembly;
404   assembly->SetInput (slr);
405   WS->AddNamedItem ("step-assembly",assembly);
406   
407   Handle(APIHeaderSection_EditHeader) edhead = new APIHeaderSection_EditHeader;
408   Handle(IFSelect_EditForm) edheadf = new IFSelect_EditForm (edhead,Standard_False,Standard_True,"Step Header");
409   WS->AddNamedItem ("step-header-edit",edhead);
410   WS->AddNamedItem ("step-header",edheadf);
411
412   Handle(STEPEdit_EditContext) edctx = new STEPEdit_EditContext;
413   Handle(IFSelect_EditForm) edctxf = new IFSelect_EditForm (edctx,Standard_False,Standard_True,"STEP Product Definition Context");
414   WS->AddNamedItem ("step-context-edit",edctx);
415   WS->AddNamedItem ("step-context",edctxf);
416
417
418   Handle(STEPEdit_EditSDR) edsdr = new STEPEdit_EditSDR;
419   Handle(IFSelect_EditForm) edsdrf = new IFSelect_EditForm (edsdr,Standard_False,Standard_True,"STEP Product Data (SDR)");
420   WS->AddNamedItem ("step-SDR-edit",edsdr);
421   WS->AddNamedItem ("step-SDR-data",edsdrf);
422
423   
424   
425 }