1 // Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include <Standard_Stream.hxx>
25 #include "GEOM_I3DPrimOperations_i.hh"
27 #include "utilities.h"
29 #include "Utils_ExceptHandlers.hxx"
31 #include "GEOM_Engine.hxx"
32 #include "GEOM_Object.hxx"
34 //=============================================================================
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)
42 MESSAGE("GEOM_I3DPrimOperations_i::GEOM_I3DPrimOperations_i");
45 //=============================================================================
49 //=============================================================================
50 GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i()
52 MESSAGE("GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i");
56 //=============================================================================
60 //=============================================================================
61 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxDXDYDZ (CORBA::Double theDX,
65 GEOM::GEOM_Object_var aGEOMObject;
68 GetOperations()->SetNotDone();
71 Handle(GEOM_Object) anObject = GetOperations()->MakeBoxDXDYDZ(theDX, theDY, theDZ);
72 if (!GetOperations()->IsDone() || anObject.IsNull())
73 return aGEOMObject._retn();
75 return GetObject(anObject);
78 //=============================================================================
82 //=============================================================================
83 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxTwoPnt
84 (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2)
86 GEOM::GEOM_Object_var aGEOMObject;
89 GetOperations()->SetNotDone();
91 Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1);
92 Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
94 if (aPnt1.IsNull() || aPnt2.IsNull()) return aGEOMObject._retn();
97 Handle(GEOM_Object) anObject = GetOperations()->MakeBoxTwoPnt(aPnt1, aPnt2);
98 if (!GetOperations()->IsDone() || anObject.IsNull())
99 return aGEOMObject._retn();
101 return GetObject(anObject);
104 //=============================================================================
108 //=============================================================================
109 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
111 CORBA::Short theOrientation)
113 GEOM::GEOM_Object_var aGEOMObject;
115 //Set a not done flag
116 GetOperations()->SetNotDone();
118 if (theH == 0 || theW == 0)
119 return aGEOMObject._retn();
122 Handle(GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW, theOrientation);
123 if (!GetOperations()->IsDone() || anObject.IsNull())
124 return aGEOMObject._retn();
126 return GetObject(anObject);
129 //=============================================================================
133 //=============================================================================
134 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceObjHW
135 (GEOM::GEOM_Object_ptr theObj,
139 GEOM::GEOM_Object_var aGEOMObject;
141 //Set a not done flag
142 GetOperations()->SetNotDone();
144 //Get the reference object
145 Handle(GEOM_Object) anObj = GetObjectImpl(theObj);
148 return aGEOMObject._retn();
151 Handle(GEOM_Object) anObject = GetOperations()->MakeFaceObjHW(anObj, theH, theW);
152 if (!GetOperations()->IsDone() || anObject.IsNull())
153 return aGEOMObject._retn();
155 return GetObject(anObject);
158 //=============================================================================
162 //=============================================================================
163 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskPntVecR
164 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
167 GEOM::GEOM_Object_var aGEOMObject;
169 //Set a not done flag
170 GetOperations()->SetNotDone();
172 //Get the reference points
173 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
174 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
176 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
179 Handle(GEOM_Object) anObject =
180 GetOperations()->MakeDiskPntVecR(aPnt, aVec, theR);
181 if (!GetOperations()->IsDone() || anObject.IsNull())
182 return aGEOMObject._retn();
184 return GetObject(anObject);
187 //=============================================================================
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)
196 GEOM::GEOM_Object_var aGEOMObject;
198 //Set a not done flag
199 GetOperations()->SetNotDone();
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);
206 if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn();
209 Handle(GEOM_Object) anObject =
210 GetOperations()->MakeDiskThreePnt(aPnt1, aPnt2, aPnt3);
211 if (!GetOperations()->IsDone() || anObject.IsNull())
212 return aGEOMObject._retn();
214 return GetObject(anObject);
217 //=============================================================================
221 //=============================================================================
222 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR,
223 CORBA::Short theOrientation)
225 GEOM::GEOM_Object_var aGEOMObject;
227 //Set a not done flag
228 GetOperations()->SetNotDone();
231 return aGEOMObject._retn();
234 Handle(GEOM_Object) anObject = GetOperations()->MakeDiskR(theR, theOrientation);
235 if (!GetOperations()->IsDone() || anObject.IsNull())
236 return aGEOMObject._retn();
238 return GetObject(anObject);
241 //=============================================================================
245 //=============================================================================
246 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR,
249 GEOM::GEOM_Object_var aGEOMObject;
251 //Set a not done flag
252 GetOperations()->SetNotDone();
254 //Create the Cylinder
255 Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH);
256 if (!GetOperations()->IsDone() || anObject.IsNull())
257 return aGEOMObject._retn();
259 return GetObject(anObject);
262 //=============================================================================
264 * MakeCylinderPntVecRH
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)
271 GEOM::GEOM_Object_var aGEOMObject;
273 //Set a not done flag
274 GetOperations()->SetNotDone();
276 //Get the reference points
277 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
278 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
280 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
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();
287 return GetObject(anObject);
290 //=============================================================================
294 //=============================================================================
295 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConeR1R2H (CORBA::Double theR1,
299 GEOM::GEOM_Object_var aGEOMObject;
301 //Set a not done flag
302 GetOperations()->SetNotDone();
305 Handle(GEOM_Object) anObject = GetOperations()->MakeConeR1R2H(theR1, theR2, theH);
306 if (!GetOperations()->IsDone() || anObject.IsNull())
307 return aGEOMObject._retn();
309 return GetObject(anObject);
312 //=============================================================================
314 * MakeConePntVecR1R2H
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)
321 GEOM::GEOM_Object_var aGEOMObject;
323 //Set a not done flag
324 GetOperations()->SetNotDone();
326 //Get the reference points
327 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
328 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
330 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
333 Handle(GEOM_Object) anObject =
334 GetOperations()->MakeConePntVecR1R2H(aPnt, aVec, theR1, theR2, theH);
335 if (!GetOperations()->IsDone() || anObject.IsNull())
336 return aGEOMObject._retn();
338 return GetObject(anObject);
341 //=============================================================================
345 //=============================================================================
346 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSphereR (CORBA::Double theR)
348 GEOM::GEOM_Object_var aGEOMObject;
350 //Set a not done flag
351 GetOperations()->SetNotDone();
354 Handle(GEOM_Object) anObject = GetOperations()->MakeSphereR(theR);
355 if (!GetOperations()->IsDone() || anObject.IsNull())
356 return aGEOMObject._retn();
358 return GetObject(anObject);
361 //=============================================================================
365 //=============================================================================
366 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSpherePntR
367 (GEOM::GEOM_Object_ptr thePnt, CORBA::Double theR)
369 GEOM::GEOM_Object_var aGEOMObject;
371 //Set a not done flag
372 GetOperations()->SetNotDone();
374 //Get the reference point
375 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
377 if (aPnt.IsNull()) return aGEOMObject._retn();
380 Handle(GEOM_Object) anObject =
381 GetOperations()->MakeSpherePntR(aPnt, theR);
382 if (!GetOperations()->IsDone() || anObject.IsNull())
383 return aGEOMObject._retn();
385 return GetObject(anObject);
388 //=============================================================================
392 //=============================================================================
393 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusRR
394 (CORBA::Double theRMajor, CORBA::Double theRMinor)
396 GEOM::GEOM_Object_var aGEOMObject;
398 //Set a not done flag
399 GetOperations()->SetNotDone();
402 Handle(GEOM_Object) anObject =
403 GetOperations()->MakeTorusRR(theRMajor, theRMinor);
404 if (!GetOperations()->IsDone() || anObject.IsNull())
405 return aGEOMObject._retn();
407 return GetObject(anObject);
410 //=============================================================================
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)
419 GEOM::GEOM_Object_var aGEOMObject;
421 //Set a not done flag
422 GetOperations()->SetNotDone();
424 //Get the reference points
425 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
426 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
428 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
431 Handle(GEOM_Object) anObject =
432 GetOperations()->MakeTorusPntVecRR(aPnt, aVec, theRMajor, theRMinor);
433 if (!GetOperations()->IsDone() || anObject.IsNull())
434 return aGEOMObject._retn();
436 return GetObject(anObject);
439 //=============================================================================
443 //=============================================================================
444 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
445 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
448 GEOM::GEOM_Object_var aGEOMObject;
450 //Set a not done flag
451 GetOperations()->SetNotDone();
453 //Get the reference objects
454 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
455 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
457 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
460 Handle(GEOM_Object) anObject =
461 GetOperations()->MakePrismVecH(aBase, aVec, theH);
462 if (!GetOperations()->IsDone() || anObject.IsNull())
463 return aGEOMObject._retn();
465 return GetObject(anObject);
468 //=============================================================================
472 //=============================================================================
473 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
474 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
477 GEOM::GEOM_Object_var aGEOMObject;
479 //Set a not done flag
480 GetOperations()->SetNotDone();
482 //Get the reference objects
483 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
484 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
486 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
489 Handle(GEOM_Object) anObject =
490 GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
491 if (!GetOperations()->IsDone() || anObject.IsNull())
492 return aGEOMObject._retn();
494 return GetObject(anObject);
497 //=============================================================================
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)
506 GEOM::GEOM_Object_var aGEOMObject;
508 //Set a not done flag
509 GetOperations()->SetNotDone();
511 //Get the reference objects
512 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
513 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
515 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
518 Handle(GEOM_Object) anObject =
519 GetOperations()->MakePrismVecH(aBase, aVec, theH, theScaleFactor);
520 if (!GetOperations()->IsDone() || anObject.IsNull())
521 return aGEOMObject._retn();
523 return GetObject(anObject);
526 //=============================================================================
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)
536 GEOM::GEOM_Object_var aGEOMObject;
538 //Set a not done flag
539 GetOperations()->SetNotDone();
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);
546 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
547 return aGEOMObject._retn();
550 Handle(GEOM_Object) anObject =
551 GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2);
552 if (!GetOperations()->IsDone() || anObject.IsNull())
553 return aGEOMObject._retn();
555 return GetObject(anObject);
558 //=============================================================================
560 * MakePrismTwoPnt2Ways
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)
568 GEOM::GEOM_Object_var aGEOMObject;
570 //Set a not done flag
571 GetOperations()->SetNotDone();
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);
578 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
579 return aGEOMObject._retn();
582 Handle(GEOM_Object) anObject =
583 GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
584 if (!GetOperations()->IsDone() || anObject.IsNull())
585 return aGEOMObject._retn();
587 return GetObject(anObject);
590 //=============================================================================
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)
601 GEOM::GEOM_Object_var aGEOMObject;
603 //Set a not done flag
604 GetOperations()->SetNotDone();
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);
611 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
612 return aGEOMObject._retn();
615 Handle(GEOM_Object) anObject =
616 GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2, theScaleFactor);
617 if (!GetOperations()->IsDone() || anObject.IsNull())
618 return aGEOMObject._retn();
620 return GetObject(anObject);
623 //=============================================================================
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)
632 GEOM::GEOM_Object_var aGEOMObject;
634 //Set a not done flag
635 GetOperations()->SetNotDone();
637 //Get the reference objects
638 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
640 if (aBase.IsNull()) return aGEOMObject._retn();
643 Handle(GEOM_Object) anObject =
644 GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ);
645 if (!GetOperations()->IsDone() || anObject.IsNull())
646 return aGEOMObject._retn();
648 return GetObject(anObject);
651 //=============================================================================
653 * MakePrismDXDYDZ2Ways
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)
660 GEOM::GEOM_Object_var aGEOMObject;
662 //Set a not done flag
663 GetOperations()->SetNotDone();
665 //Get the reference objects
666 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
668 if (aBase.IsNull()) return aGEOMObject._retn();
671 Handle(GEOM_Object) anObject =
672 GetOperations()->MakePrismDXDYDZ2Ways(aBase, theDX, theDY, theDZ);
673 if (!GetOperations()->IsDone() || anObject.IsNull())
674 return aGEOMObject._retn();
676 return GetObject(anObject);
679 //=============================================================================
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)
689 GEOM::GEOM_Object_var aGEOMObject;
691 //Set a not done flag
692 GetOperations()->SetNotDone();
694 //Get the reference objects
695 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
697 if (aBase.IsNull()) return aGEOMObject._retn();
700 Handle(GEOM_Object) anObject =
701 GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ, theScaleFactor);
702 if (!GetOperations()->IsDone() || anObject.IsNull())
703 return aGEOMObject._retn();
705 return GetObject(anObject);
708 //=============================================================================
712 //=============================================================================
713 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe
714 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath)
716 GEOM::GEOM_Object_var aGEOMObject;
718 //Set a not done flag
719 GetOperations()->SetNotDone();
721 //Get the reference objects
722 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
723 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
725 if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn();
728 Handle(GEOM_Object) anObject =
729 GetOperations()->MakePipe(aBase, aPath);
730 if (!GetOperations()->IsDone() || anObject.IsNull())
731 return aGEOMObject._retn();
733 return GetObject(anObject);
736 //=============================================================================
738 * MakeRevolutionAxisAngle
740 //=============================================================================
741 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
742 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
743 CORBA::Double theAngle)
745 GEOM::GEOM_Object_var aGEOMObject;
747 //Set a not done flag
748 GetOperations()->SetNotDone();
750 //Get the reference objects
751 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
752 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
754 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
756 //Create the Revolution
757 Handle(GEOM_Object) anObject =
758 GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
759 if (!GetOperations()->IsDone() || anObject.IsNull())
760 return aGEOMObject._retn();
762 return GetObject(anObject);
765 //=============================================================================
767 * MakeRevolutionAxisAngle2Ways
769 //=============================================================================
770 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
771 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
772 CORBA::Double theAngle)
774 GEOM::GEOM_Object_var aGEOMObject;
776 //Set a not done flag
777 GetOperations()->SetNotDone();
779 //Get the reference objects
780 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
781 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
783 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
785 //Create the Revolution
786 Handle(GEOM_Object) anObject =
787 GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
788 if (!GetOperations()->IsDone() || anObject.IsNull())
789 return aGEOMObject._retn();
791 return GetObject(anObject);
794 //=============================================================================
798 //=============================================================================
799 GEOM::GEOM_Object_ptr
800 GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
801 CORBA::Long theMinDeg,
802 CORBA::Long theMaxDeg,
803 CORBA::Double theTol2D,
804 CORBA::Double theTol3D,
805 CORBA::Long theNbIter,
806 GEOM::filling_oper_method theMethod,
807 CORBA::Boolean theApprox)
809 GEOM::GEOM_Object_var aGEOMObject;
811 //Set a not done flag
812 GetOperations()->SetNotDone();
814 //Get the reference objects
815 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
817 if (aShape.IsNull()) return aGEOMObject._retn();
821 case GEOM::FOM_Default:
823 // Default (standard behaviour)
827 case GEOM::FOM_UseOri:
829 // Use edges orientation
833 case GEOM::FOM_AutoCorrect:
835 // Auto-correct edges orientation
844 Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
845 (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter,
847 if (!GetOperations()->IsDone() || anObject.IsNull())
848 return aGEOMObject._retn();
850 return GetObject(anObject);
853 //=============================================================================
857 //=============================================================================
858 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
859 CORBA::Boolean theModeSolid,
860 CORBA::Double thePreci,
861 CORBA::Boolean theRuled)
863 GEOM::GEOM_Object_var aGEOMObject;
865 //Set a not done flag
866 GetOperations()->SetNotDone();
867 Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
871 aLen = theSeqSections.length();
872 for (ind = 0; ind < aLen; ind++) {
873 Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
875 aSeqSections->Append(aSh);
877 if (!aSeqSections->Length())
878 return aGEOMObject._retn();
880 // Make shell or solid
881 Handle(GEOM_Object) anObject =
882 GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
883 if (!GetOperations()->IsDone() || anObject.IsNull())
884 return aGEOMObject._retn();
886 return GetObject(anObject);
889 //=============================================================================
891 * MakePipeWithDifferentSections
893 //=============================================================================
894 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
895 (const GEOM::ListOfGO& theBases,
896 const GEOM::ListOfGO& theLocations,
897 GEOM::GEOM_Object_ptr thePath,
898 CORBA::Boolean theWithContact,
899 CORBA::Boolean theWithCorrections)
901 GEOM::GEOM_Object_var aGEOMObject;
903 //Set a not done flag
904 GetOperations()->SetNotDone();
905 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
906 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
907 int ind=0, aNbBases =0,aNbLocs=0;
910 aNbBases = theBases.length();
911 aNbLocs = theLocations.length();
913 if (aNbLocs && aNbBases != aNbLocs)
914 return aGEOMObject._retn();
916 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
918 return aGEOMObject._retn();
920 for (ind = 0; ind < aNbBases; ind++) {
921 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
926 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
929 aSeqLocations->Append(aLoc);
931 aSeqBases->Append(aBase);
933 if (!aSeqBases->Length())
934 return aGEOMObject._retn();
937 Handle(GEOM_Object) anObject =
938 GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath,
939 theWithContact,theWithCorrections);
940 if (!GetOperations()->IsDone() || anObject.IsNull())
941 return aGEOMObject._retn();
943 return GetObject(anObject);
947 //=============================================================================
949 * MakePipeWithShellSections
951 //=============================================================================
952 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
953 (const GEOM::ListOfGO& theBases,
954 const GEOM::ListOfGO& theSubBases,
955 const GEOM::ListOfGO& theLocations,
956 GEOM::GEOM_Object_ptr thePath,
957 CORBA::Boolean theWithContact,
958 CORBA::Boolean theWithCorrections)
960 GEOM::GEOM_Object_var aGEOMObject;
962 //Set a not done flag
963 GetOperations()->SetNotDone();
964 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
965 Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
966 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
967 int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
970 aNbBases = theBases.length();
971 aNbSubBases = theSubBases.length();
972 aNbLocs = theLocations.length();
974 if (aNbLocs && aNbBases != aNbLocs)
975 return aGEOMObject._retn();
977 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
979 return aGEOMObject._retn();
981 for (ind = 0; ind < aNbBases; ind++) {
982 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
986 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
989 aSeqLocations->Append(aLoc);
991 aSeqBases->Append(aBase);
993 if (aNbSubBases >= aNbBases) {
994 Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
995 if (aSubBase.IsNull()) {
996 aSeqSubBases->Clear();
1000 aSeqSubBases->Append(aSubBase);
1003 if (!aSeqBases->Length())
1004 return aGEOMObject._retn();
1007 Handle(GEOM_Object) anObject =
1008 GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases,
1009 aSeqLocations, aPath,
1010 theWithContact, theWithCorrections);
1011 if (!GetOperations()->IsDone() || anObject.IsNull())
1012 return aGEOMObject._retn();
1014 return GetObject(anObject);
1018 //=============================================================================
1020 * MakePipeShellsWithoutPath
1022 //=============================================================================
1023 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
1024 (const GEOM::ListOfGO& theBases,
1025 const GEOM::ListOfGO& theLocations)
1027 GEOM::GEOM_Object_var aGEOMObject;
1029 //Set a not done flag
1030 GetOperations()->SetNotDone();
1031 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1032 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1033 int ind=0, aNbBases=0, aNbLocs=0;
1036 aNbBases = theBases.length();
1037 aNbLocs = theLocations.length();
1039 if (aNbLocs && aNbBases != aNbLocs)
1040 return aGEOMObject._retn();
1042 for (ind = 0; ind < aNbBases; ind++) {
1043 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1047 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1050 aSeqLocations->Append(aLoc);
1052 aSeqBases->Append(aBase);
1055 if (!aSeqBases->Length())
1056 return aGEOMObject._retn();
1059 Handle(GEOM_Object) anObject =
1060 GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
1062 if (!GetOperations()->IsDone() || anObject.IsNull())
1063 return aGEOMObject._retn();
1065 return GetObject(anObject);
1069 //=============================================================================
1071 * MakePipeBiNormalAlongVector
1073 //=============================================================================
1074 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
1075 (GEOM::GEOM_Object_ptr theBase,
1076 GEOM::GEOM_Object_ptr thePath,
1077 GEOM::GEOM_Object_ptr theVec)
1079 GEOM::GEOM_Object_var aGEOMObject;
1081 //Set a not done flag
1082 GetOperations()->SetNotDone();
1084 //Get the reference objects
1085 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
1086 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1087 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
1089 if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
1092 Handle(GEOM_Object) anObject =
1093 GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec);
1094 if (!GetOperations()->IsDone() || anObject.IsNull())
1095 return aGEOMObject._retn();
1097 return GetObject(anObject);