]> SALOME platform Git repositories - modules/geom.git/blob - src/GEOM_I/GEOM_I3DPrimOperations_i.cc
Salome HOME
Issue 0013373: EDF PAL 273 : Option Single/Multi file dump
[modules/geom.git] / src / GEOM_I / GEOM_I3DPrimOperations_i.cc
1 //  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21
22 #include <Standard_Stream.hxx>
23
24 #include "GEOM_I3DPrimOperations_i.hh"
25
26 #include "utilities.h"
27 #include "OpUtil.hxx"
28 #include "Utils_ExceptHandlers.hxx"
29
30 #include "GEOM_Engine.hxx"
31 #include "GEOM_Object.hxx"
32
33 //=============================================================================
34 /*!
35  *   constructor:
36  */
37 //=============================================================================
38 GEOM_I3DPrimOperations_i::GEOM_I3DPrimOperations_i(PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, ::GEOMImpl_I3DPrimOperations* theImpl)
39 :GEOM_IOperations_i(thePOA, theEngine, theImpl)
40 {
41   MESSAGE("GEOM_I3DPrimOperations_i::GEOM_I3DPrimOperations_i");
42 }
43
44 //=============================================================================
45 /*!
46  *  destructor
47  */
48 //=============================================================================
49 GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i()
50 {
51   MESSAGE("GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i");
52 }
53
54
55 //=============================================================================
56 /*!
57  *  MakeBoxDXDYDZ
58  */
59 //=============================================================================
60 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxDXDYDZ (CORBA::Double theDX,
61                                                                CORBA::Double theDY,
62                                                                CORBA::Double theDZ)
63 {
64   GEOM::GEOM_Object_var aGEOMObject;
65
66   //Set a not done flag
67   GetOperations()->SetNotDone();
68
69   //Create the Box
70   Handle(GEOM_Object) anObject = GetOperations()->MakeBoxDXDYDZ(theDX, theDY, theDZ);
71   if (!GetOperations()->IsDone() || anObject.IsNull())
72     return aGEOMObject._retn();
73
74   return GetObject(anObject);
75 }
76
77 //=============================================================================
78 /*!
79  *  MakeBoxTwoPnt
80  */
81 //=============================================================================
82 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxTwoPnt
83                       (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2)
84 {
85   GEOM::GEOM_Object_var aGEOMObject;
86
87   //Set a not done flag
88   GetOperations()->SetNotDone();
89
90   Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1);
91   Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
92
93   if (aPnt1.IsNull() || aPnt2.IsNull()) return aGEOMObject._retn();
94
95   //Create the Box
96   Handle(GEOM_Object) anObject = GetOperations()->MakeBoxTwoPnt(aPnt1, aPnt2);
97   if (!GetOperations()->IsDone() || anObject.IsNull())
98     return aGEOMObject._retn();
99
100   return GetObject(anObject);
101 }
102
103 //=============================================================================
104 /*!
105  *  MakeFaceHW
106  */
107 //=============================================================================
108 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
109                                                             CORBA::Double theW,
110                                                             CORBA::Short  theOrientation)
111 {
112   GEOM::GEOM_Object_var aGEOMObject;
113
114   //Set a not done flag
115   GetOperations()->SetNotDone();
116
117   if (theH == 0 || theW == 0)
118     return aGEOMObject._retn();
119
120   //Create the Face
121   Handle(GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW, theOrientation);
122   if (!GetOperations()->IsDone() || anObject.IsNull())
123     return aGEOMObject._retn();
124
125   return GetObject(anObject);
126 }
127
128 //=============================================================================
129 /*!
130  *  MakeFaceObjHW
131  */
132 //=============================================================================
133 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceObjHW
134                                                (GEOM::GEOM_Object_ptr theObj,
135                                                 CORBA::Double theH,
136                                                 CORBA::Double theW)
137 {
138   GEOM::GEOM_Object_var aGEOMObject;
139
140   //Set a not done flag
141   GetOperations()->SetNotDone();
142
143   //Get the reference object
144   Handle(GEOM_Object) anObj = GetObjectImpl(theObj);
145
146   if (anObj.IsNull())
147     return aGEOMObject._retn();
148
149   //Create the Face
150   Handle(GEOM_Object) anObject = GetOperations()->MakeFaceObjHW(anObj, theH, theW);
151   if (!GetOperations()->IsDone() || anObject.IsNull())
152     return aGEOMObject._retn();
153
154   return GetObject(anObject);
155 }
156
157 //=============================================================================
158 /*!
159  *  MakeDiskPntVecR
160  */
161 //=============================================================================
162 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskPntVecR
163                       (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
164                        CORBA::Double theR)
165 {
166   GEOM::GEOM_Object_var aGEOMObject;
167
168   //Set a not done flag
169   GetOperations()->SetNotDone();
170
171   //Get the reference points
172   Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
173   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
174
175   if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
176
177   // Make Disk
178   Handle(GEOM_Object) anObject =
179     GetOperations()->MakeDiskPntVecR(aPnt, aVec, theR);
180   if (!GetOperations()->IsDone() || anObject.IsNull())
181     return aGEOMObject._retn();
182
183   return GetObject(anObject);
184 }
185
186 //=============================================================================
187 /*!
188  *  MakeDiskThreePnt
189  */
190 //=============================================================================
191 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskThreePnt
192                       (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2,
193                        GEOM::GEOM_Object_ptr thePnt3)
194 {
195   GEOM::GEOM_Object_var aGEOMObject;
196
197   //Set a not done flag
198   GetOperations()->SetNotDone();
199
200   //Get the reference points
201   Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1);
202   Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
203   Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3);
204
205   if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn();
206
207   // Make Disk
208   Handle(GEOM_Object) anObject =
209       GetOperations()->MakeDiskThreePnt(aPnt1, aPnt2, aPnt3);
210   if (!GetOperations()->IsDone() || anObject.IsNull())
211     return aGEOMObject._retn();
212
213   return GetObject(anObject);
214 }
215
216 //=============================================================================
217 /*!
218  *  MakeDiskR
219  */
220 //=============================================================================
221 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR,
222                                                            CORBA::Short  theOrientation)
223 {
224   GEOM::GEOM_Object_var aGEOMObject;
225
226   //Set a not done flag
227   GetOperations()->SetNotDone();
228
229   if (theR == 0)
230     return aGEOMObject._retn();
231
232   //Create the Face
233   Handle(GEOM_Object) anObject = GetOperations()->MakeDiskR(theR, theOrientation);
234   if (!GetOperations()->IsDone() || anObject.IsNull())
235     return aGEOMObject._retn();
236
237   return GetObject(anObject);
238 }
239
240 //=============================================================================
241 /*!
242  *  MakeCylinderRH
243  */
244 //=============================================================================
245 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR,
246                                                                 CORBA::Double theH)
247 {
248   GEOM::GEOM_Object_var aGEOMObject;
249
250   //Set a not done flag
251   GetOperations()->SetNotDone();
252
253   //Create the Cylinder
254   Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH);
255   if (!GetOperations()->IsDone() || anObject.IsNull())
256     return aGEOMObject._retn();
257
258   return GetObject(anObject);
259 }
260
261 //=============================================================================
262 /*!
263  *  MakeCylinderPntVecRH
264  */
265 //=============================================================================
266 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH
267                       (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
268                        CORBA::Double theR, CORBA::Double theH)
269 {
270   GEOM::GEOM_Object_var aGEOMObject;
271
272   //Set a not done flag
273   GetOperations()->SetNotDone();
274
275   //Get the reference points
276   Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
277   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
278
279   if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
280
281   //Create the Cylinder
282   Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH);
283   if (!GetOperations()->IsDone() || anObject.IsNull())
284     return aGEOMObject._retn();
285
286   return GetObject(anObject);
287 }
288
289 //=============================================================================
290 /*!
291  *  MakeConeR1R2H
292  */
293 //=============================================================================
294 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConeR1R2H (CORBA::Double theR1,
295                                                                CORBA::Double theR2,
296                                                                CORBA::Double theH)
297 {
298   GEOM::GEOM_Object_var aGEOMObject;
299
300   //Set a not done flag
301   GetOperations()->SetNotDone();
302
303   //Create the Cone
304   Handle(GEOM_Object) anObject = GetOperations()->MakeConeR1R2H(theR1, theR2, theH);
305   if (!GetOperations()->IsDone() || anObject.IsNull())
306     return aGEOMObject._retn();
307
308   return GetObject(anObject);
309 }
310
311 //=============================================================================
312 /*!
313  *  MakeConePntVecR1R2H
314  */
315 //=============================================================================
316 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConePntVecR1R2H
317                       (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
318                        CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH)
319 {
320   GEOM::GEOM_Object_var aGEOMObject;
321
322   //Set a not done flag
323   GetOperations()->SetNotDone();
324
325   //Get the reference points
326   Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
327   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
328
329   if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
330
331   //Create the Cone
332   Handle(GEOM_Object) anObject =
333       GetOperations()->MakeConePntVecR1R2H(aPnt, aVec, theR1, theR2, theH);
334   if (!GetOperations()->IsDone() || anObject.IsNull())
335     return aGEOMObject._retn();
336
337   return GetObject(anObject);
338 }
339
340 //=============================================================================
341 /*!
342  *  MakeSphereR
343  */
344 //=============================================================================
345 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSphereR (CORBA::Double theR)
346 {
347   GEOM::GEOM_Object_var aGEOMObject;
348
349   //Set a not done flag
350   GetOperations()->SetNotDone();
351
352   //Create the Cone
353   Handle(GEOM_Object) anObject = GetOperations()->MakeSphereR(theR);
354   if (!GetOperations()->IsDone() || anObject.IsNull())
355     return aGEOMObject._retn();
356
357   return GetObject(anObject);
358 }
359
360 //=============================================================================
361 /*!
362  *  MakeSpherePntR
363  */
364 //=============================================================================
365 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSpherePntR
366                       (GEOM::GEOM_Object_ptr thePnt, CORBA::Double theR)
367 {
368   GEOM::GEOM_Object_var aGEOMObject;
369
370   //Set a not done flag
371   GetOperations()->SetNotDone();
372
373   //Get the reference point
374   Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
375
376   if (aPnt.IsNull()) return aGEOMObject._retn();
377
378   //Create the Sphere
379   Handle(GEOM_Object) anObject =
380     GetOperations()->MakeSpherePntR(aPnt, theR);
381   if (!GetOperations()->IsDone() || anObject.IsNull())
382     return aGEOMObject._retn();
383
384   return GetObject(anObject);
385 }
386
387 //=============================================================================
388 /*!
389  *  MakeTorusRR
390  */
391 //=============================================================================
392 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusRR
393                       (CORBA::Double theRMajor, CORBA::Double theRMinor)
394 {
395   GEOM::GEOM_Object_var aGEOMObject;
396
397   //Set a not done flag
398   GetOperations()->SetNotDone();
399
400   // Make Torus
401   Handle(GEOM_Object) anObject =
402     GetOperations()->MakeTorusRR(theRMajor, theRMinor);
403   if (!GetOperations()->IsDone() || anObject.IsNull())
404     return aGEOMObject._retn();
405
406   return GetObject(anObject);
407 }
408
409 //=============================================================================
410 /*!
411  *  MakeTorusPntVecRR
412  */
413 //=============================================================================
414 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusPntVecRR
415                       (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
416                        CORBA::Double theRMajor, CORBA::Double theRMinor)
417 {
418   GEOM::GEOM_Object_var aGEOMObject;
419
420   //Set a not done flag
421   GetOperations()->SetNotDone();
422
423   //Get the reference points
424   Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
425   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
426
427   if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
428
429   // Make Torus
430   Handle(GEOM_Object) anObject =
431     GetOperations()->MakeTorusPntVecRR(aPnt, aVec, theRMajor, theRMinor);
432   if (!GetOperations()->IsDone() || anObject.IsNull())
433     return aGEOMObject._retn();
434
435   return GetObject(anObject);
436 }
437
438 //=============================================================================
439 /*!
440  *  MakePrismVecH
441  */
442 //=============================================================================
443 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
444                       (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
445                        CORBA::Double theH)
446 {
447   GEOM::GEOM_Object_var aGEOMObject;
448
449   //Set a not done flag
450   GetOperations()->SetNotDone();
451
452   //Get the reference objects
453   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
454   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
455
456   if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
457
458   //Create the Prism
459   Handle(GEOM_Object) anObject =
460     GetOperations()->MakePrismVecH(aBase, aVec, theH);
461   if (!GetOperations()->IsDone() || anObject.IsNull())
462     return aGEOMObject._retn();
463
464   return GetObject(anObject);
465 }
466
467 //=============================================================================
468 /*!
469  *  MakePrismVecH2Ways
470  */
471 //=============================================================================
472 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
473                       (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
474                        CORBA::Double theH)
475 {
476   GEOM::GEOM_Object_var aGEOMObject;
477
478   //Set a not done flag
479   GetOperations()->SetNotDone();
480
481   //Get the reference objects
482   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
483   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
484
485   if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
486
487   //Create the Prism
488   Handle(GEOM_Object) anObject =
489       GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
490   if (!GetOperations()->IsDone() || anObject.IsNull())
491     return aGEOMObject._retn();
492
493   return GetObject(anObject);
494 }
495
496 //=============================================================================
497 /*!
498  *  MakePrismVecH
499  */
500 //=============================================================================
501 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecHWithScaling
502                       (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
503                        CORBA::Double theH, CORBA::Double theScaleFactor)
504 {
505   GEOM::GEOM_Object_var aGEOMObject;
506
507   //Set a not done flag
508   GetOperations()->SetNotDone();
509
510   //Get the reference objects
511   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
512   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
513
514   if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
515
516   //Create the Prism
517   Handle(GEOM_Object) anObject =
518     GetOperations()->MakePrismVecH(aBase, aVec, theH, theScaleFactor);
519   if (!GetOperations()->IsDone() || anObject.IsNull())
520     return aGEOMObject._retn();
521
522   return GetObject(anObject);
523 }
524
525 //=============================================================================
526 /*!
527  *  MakePrismTwoPnt
528  */
529 //=============================================================================
530 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt
531                                              (GEOM::GEOM_Object_ptr theBase,
532                                               GEOM::GEOM_Object_ptr thePoint1,
533                                               GEOM::GEOM_Object_ptr thePoint2)
534 {
535   GEOM::GEOM_Object_var aGEOMObject;
536
537   //Set a not done flag
538   GetOperations()->SetNotDone();
539
540   //Get the reference objects
541   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
542   Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
543   Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
544
545   if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
546     return aGEOMObject._retn();
547
548   //Create the Prism
549   Handle(GEOM_Object) anObject =
550     GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2);
551   if (!GetOperations()->IsDone() || anObject.IsNull())
552     return aGEOMObject._retn();
553
554   return GetObject(anObject);
555 }
556
557 //=============================================================================
558 /*!
559  *  MakePrismTwoPnt2Ways
560  */
561 //=============================================================================
562 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
563                                              (GEOM::GEOM_Object_ptr theBase,
564                                               GEOM::GEOM_Object_ptr thePoint1,
565                                               GEOM::GEOM_Object_ptr thePoint2)
566 {
567   GEOM::GEOM_Object_var aGEOMObject;
568
569   //Set a not done flag
570   GetOperations()->SetNotDone();
571
572   //Get the reference objects
573   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
574   Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
575   Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
576
577   if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
578     return aGEOMObject._retn();
579
580   //Create the Prism
581   Handle(GEOM_Object) anObject =
582     GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
583   if (!GetOperations()->IsDone() || anObject.IsNull())
584     return aGEOMObject._retn();
585
586   return GetObject(anObject);
587 }
588
589 //=============================================================================
590 /*!
591  *  MakePrismTwoPnt
592  */
593 //=============================================================================
594 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPntWithScaling
595                                              (GEOM::GEOM_Object_ptr theBase,
596                                               GEOM::GEOM_Object_ptr thePoint1,
597                                               GEOM::GEOM_Object_ptr thePoint2,
598                                               CORBA::Double         theScaleFactor)
599 {
600   GEOM::GEOM_Object_var aGEOMObject;
601
602   //Set a not done flag
603   GetOperations()->SetNotDone();
604
605   //Get the reference objects
606   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
607   Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
608   Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
609
610   if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
611     return aGEOMObject._retn();
612
613   //Create the Prism
614   Handle(GEOM_Object) anObject =
615     GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2, theScaleFactor);
616   if (!GetOperations()->IsDone() || anObject.IsNull())
617     return aGEOMObject._retn();
618
619   return GetObject(anObject);
620 }
621
622 //=============================================================================
623 /*!
624  *  MakePrismDXDYDZ
625  */
626 //=============================================================================
627 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ
628                       (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
629                        CORBA::Double theDY, CORBA::Double theDZ)
630 {
631   GEOM::GEOM_Object_var aGEOMObject;
632
633   //Set a not done flag
634   GetOperations()->SetNotDone();
635
636   //Get the reference objects
637   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
638
639   if (aBase.IsNull()) return aGEOMObject._retn();
640
641   //Create the Prism
642   Handle(GEOM_Object) anObject =
643       GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ);
644   if (!GetOperations()->IsDone() || anObject.IsNull())
645     return aGEOMObject._retn();
646
647   return GetObject(anObject);
648 }
649
650 //=============================================================================
651 /*!
652  *  MakePrismDXDYDZ2Ways
653  */
654 //=============================================================================
655 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ2Ways
656                       (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
657                        CORBA::Double theDY, CORBA::Double theDZ)
658 {
659   GEOM::GEOM_Object_var aGEOMObject;
660
661   //Set a not done flag
662   GetOperations()->SetNotDone();
663
664   //Get the reference objects
665   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
666
667   if (aBase.IsNull()) return aGEOMObject._retn();
668
669   //Create the Prism
670   Handle(GEOM_Object) anObject =
671       GetOperations()->MakePrismDXDYDZ2Ways(aBase, theDX, theDY, theDZ);
672   if (!GetOperations()->IsDone() || anObject.IsNull())
673     return aGEOMObject._retn();
674
675   return GetObject(anObject);
676 }
677
678 //=============================================================================
679 /*!
680  *  MakePrismDXDYDZ
681  */
682 //=============================================================================
683 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZWithScaling
684                       (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
685                        CORBA::Double theDY, CORBA::Double theDZ,
686                        CORBA::Double theScaleFactor)
687 {
688   GEOM::GEOM_Object_var aGEOMObject;
689
690   //Set a not done flag
691   GetOperations()->SetNotDone();
692
693   //Get the reference objects
694   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
695
696   if (aBase.IsNull()) return aGEOMObject._retn();
697
698   //Create the Prism
699   Handle(GEOM_Object) anObject =
700     GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ, theScaleFactor);
701   if (!GetOperations()->IsDone() || anObject.IsNull())
702     return aGEOMObject._retn();
703
704   return GetObject(anObject);
705 }
706
707 //=============================================================================
708 /*!
709  *  MakePipe
710  */
711 //=============================================================================
712 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe
713                  (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath)
714 {
715   GEOM::GEOM_Object_var aGEOMObject;
716
717   //Set a not done flag
718   GetOperations()->SetNotDone();
719
720   //Get the reference objects
721   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
722   Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
723
724   if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn();
725
726   //Create the Pipe
727   Handle(GEOM_Object) anObject =
728     GetOperations()->MakePipe(aBase, aPath);
729   if (!GetOperations()->IsDone() || anObject.IsNull())
730     return aGEOMObject._retn();
731
732   return GetObject(anObject);
733 }
734
735 //=============================================================================
736 /*!
737  *  MakeRevolutionAxisAngle
738  */
739 //=============================================================================
740 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
741                       (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
742                        CORBA::Double theAngle)
743 {
744   GEOM::GEOM_Object_var aGEOMObject;
745
746   //Set a not done flag
747   GetOperations()->SetNotDone();
748
749   //Get the reference objects
750   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
751   Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
752
753   if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
754
755   //Create the Revolution
756   Handle(GEOM_Object) anObject =
757       GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
758   if (!GetOperations()->IsDone() || anObject.IsNull())
759     return aGEOMObject._retn();
760
761   return GetObject(anObject);
762 }
763
764 //=============================================================================
765 /*!
766  *  MakeRevolutionAxisAngle2Ways
767  */
768 //=============================================================================
769 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
770                       (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
771                        CORBA::Double theAngle)
772 {
773   GEOM::GEOM_Object_var aGEOMObject;
774
775   //Set a not done flag
776   GetOperations()->SetNotDone();
777
778   //Get the reference objects
779   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
780   Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
781
782   if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
783
784   //Create the Revolution
785   Handle(GEOM_Object) anObject =
786       GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
787   if (!GetOperations()->IsDone() || anObject.IsNull())
788     return aGEOMObject._retn();
789
790   return GetObject(anObject);
791 }
792
793 //=============================================================================
794 /*!
795  *  MakeFilling
796  */
797 //=============================================================================
798 GEOM::GEOM_Object_ptr
799 GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
800                                       CORBA::Long theMinDeg,
801                                       CORBA::Long theMaxDeg,
802                                       CORBA::Double theTol2D,
803                                       CORBA::Double theTol3D,
804                                       CORBA::Long theNbIter,
805                                       GEOM::filling_oper_method theMethod,
806                                       CORBA::Boolean theApprox)
807 {
808   GEOM::GEOM_Object_var aGEOMObject;
809
810   //Set a not done flag
811   GetOperations()->SetNotDone();
812
813   //Get the reference objects
814   Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
815
816   if (aShape.IsNull()) return aGEOMObject._retn();
817
818   int aMethod = 0;
819   switch (theMethod) {
820   case GEOM::FOM_Default:
821     {
822       // Default (standard behaviour)
823       aMethod = 0;
824     }
825     break;
826   case GEOM::FOM_UseOri:
827     {
828       // Use edges orientation
829       aMethod = 1;
830     }
831     break;
832   case GEOM::FOM_AutoCorrect:
833     {
834       // Auto-correct edges orientation
835       aMethod = 2;
836     }
837     break;
838   default:
839     {}
840   }
841
842   //Create the Solid
843   Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
844     (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter,
845      aMethod, theApprox);
846   if (!GetOperations()->IsDone() || anObject.IsNull())
847     return aGEOMObject._retn();
848
849   return GetObject(anObject);
850 }
851
852 //=============================================================================
853 /*!
854  *  MakeThruSections
855  */
856 //=============================================================================
857 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
858                                                                  CORBA::Boolean theModeSolid,
859                                                                  CORBA::Double thePreci,
860                                                                  CORBA::Boolean theRuled)
861 {
862    GEOM::GEOM_Object_var aGEOMObject;
863
864   //Set a not done flag
865   GetOperations()->SetNotDone();
866   Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
867   int ind, aLen;
868
869   //Get the shapes
870   aLen = theSeqSections.length();
871   for (ind = 0; ind < aLen; ind++) {
872     Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
873     if (!aSh.IsNull())
874       aSeqSections->Append(aSh);
875   }
876   if (!aSeqSections->Length())
877     return aGEOMObject._retn();
878
879   // Make shell or solid
880   Handle(GEOM_Object) anObject =
881     GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
882   if (!GetOperations()->IsDone() || anObject.IsNull())
883     return aGEOMObject._retn();
884
885   return GetObject(anObject);
886 }
887
888 //=============================================================================
889 /*!
890  *  MakePipeWithDifferentSections
891  */
892 //=============================================================================
893 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
894                       (const GEOM::ListOfGO& theBases,
895                        const GEOM::ListOfGO& theLocations,
896                        GEOM::GEOM_Object_ptr thePath,
897                        CORBA::Boolean theWithContact,
898                        CORBA::Boolean theWithCorrections)
899 {
900   GEOM::GEOM_Object_var aGEOMObject;
901
902   //Set a not done flag
903   GetOperations()->SetNotDone();
904   Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
905   Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
906   int ind=0, aNbBases =0,aNbLocs=0;
907
908   //Get the shapes
909   aNbBases = theBases.length();
910   aNbLocs = theLocations.length();
911
912   if (aNbLocs && aNbBases != aNbLocs)
913     return aGEOMObject._retn();
914
915   Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
916   if (aPath.IsNull())
917     return aGEOMObject._retn();
918
919   for (ind = 0; ind < aNbBases; ind++) {
920     Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
921     if (aBase.IsNull())
922       continue;
923     if (aNbLocs)
924     {
925       Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
926       if (aLoc.IsNull())
927         continue;
928       aSeqLocations->Append(aLoc);
929     }
930     aSeqBases->Append(aBase);
931   }
932   if (!aSeqBases->Length())
933     return aGEOMObject._retn();
934
935   // Make pipe
936   Handle(GEOM_Object) anObject =
937     GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath,
938                                                    theWithContact,theWithCorrections);
939   if (!GetOperations()->IsDone() || anObject.IsNull())
940     return aGEOMObject._retn();
941
942   return GetObject(anObject);
943 }
944
945
946 //=============================================================================
947 /*!
948  *  MakePipeWithShellSections
949  */
950 //=============================================================================
951 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
952                  (const GEOM::ListOfGO& theBases,
953                   const GEOM::ListOfGO& theSubBases,
954                   const GEOM::ListOfGO& theLocations,
955                   GEOM::GEOM_Object_ptr thePath,
956                   CORBA::Boolean theWithContact,
957                   CORBA::Boolean theWithCorrections)
958 {
959   GEOM::GEOM_Object_var aGEOMObject;
960
961   //Set a not done flag
962   GetOperations()->SetNotDone();
963   Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
964   Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
965   Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
966   int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
967
968   //Get the shapes
969   aNbBases = theBases.length();
970   aNbSubBases = theSubBases.length();
971   aNbLocs = theLocations.length();
972
973   if (aNbLocs && aNbBases != aNbLocs)
974     return aGEOMObject._retn();
975
976   Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
977   if (aPath.IsNull())
978     return aGEOMObject._retn();
979
980   for (ind = 0; ind < aNbBases; ind++) {
981     Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
982     if (aBase.IsNull())
983       continue;
984     if (aNbLocs) {
985       Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
986       if (aLoc.IsNull())
987         continue;
988       aSeqLocations->Append(aLoc);
989     }
990     aSeqBases->Append(aBase);
991
992     if (aNbSubBases >= aNbBases) {
993       Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
994       if (aSubBase.IsNull()) {
995         aSeqSubBases->Clear();
996         aNbSubBases = 0;
997         continue;
998       }
999       aSeqSubBases->Append(aSubBase);
1000     }
1001   }
1002   if (!aSeqBases->Length())
1003     return aGEOMObject._retn();
1004
1005   // Make pipe
1006   Handle(GEOM_Object) anObject =
1007     GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases,
1008                                                aSeqLocations, aPath,
1009                                                theWithContact, theWithCorrections);
1010   if (!GetOperations()->IsDone() || anObject.IsNull())
1011     return aGEOMObject._retn();
1012
1013   return GetObject(anObject);
1014 }
1015
1016
1017 //=============================================================================
1018 /*!
1019  *  MakePipeShellsWithoutPath
1020  */
1021 //=============================================================================
1022 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
1023                  (const GEOM::ListOfGO& theBases,
1024                   const GEOM::ListOfGO& theLocations)
1025 {
1026   GEOM::GEOM_Object_var aGEOMObject;
1027
1028   //Set a not done flag
1029   GetOperations()->SetNotDone();
1030   Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1031   Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1032   int ind=0, aNbBases=0, aNbLocs=0;
1033
1034   //Get the shapes
1035   aNbBases = theBases.length();
1036   aNbLocs = theLocations.length();
1037
1038   if (aNbLocs && aNbBases != aNbLocs)
1039     return aGEOMObject._retn();
1040
1041   for (ind = 0; ind < aNbBases; ind++) {
1042     Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1043     if (aBase.IsNull())
1044       continue;
1045     if (aNbLocs) {
1046       Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1047       if (aLoc.IsNull())
1048         continue;
1049       aSeqLocations->Append(aLoc);
1050     }
1051     aSeqBases->Append(aBase);
1052   }
1053
1054   if (!aSeqBases->Length())
1055     return aGEOMObject._retn();
1056
1057   // Make pipe
1058   Handle(GEOM_Object) anObject =
1059     GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
1060
1061   if (!GetOperations()->IsDone() || anObject.IsNull())
1062     return aGEOMObject._retn();
1063
1064   return GetObject(anObject);
1065 }
1066
1067
1068 //=============================================================================
1069 /*!
1070  *  MakePipeBiNormalAlongVector
1071  */
1072 //=============================================================================
1073 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
1074                  (GEOM::GEOM_Object_ptr theBase,
1075                   GEOM::GEOM_Object_ptr thePath,
1076                   GEOM::GEOM_Object_ptr theVec)
1077 {
1078   GEOM::GEOM_Object_var aGEOMObject;
1079
1080   //Set a not done flag
1081   GetOperations()->SetNotDone();
1082
1083   //Get the reference objects
1084   Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
1085   Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1086   Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
1087
1088   if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
1089
1090   //Create the Pipe
1091   Handle(GEOM_Object) anObject =
1092     GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec);
1093   if (!GetOperations()->IsDone() || anObject.IsNull())
1094     return aGEOMObject._retn();
1095
1096   return GetObject(anObject);
1097 }