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