1 // Copyright (C) 2007-2008 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
22 #include <Standard_Stream.hxx>
24 #include "GEOM_I3DPrimOperations_i.hh"
26 #include "utilities.h"
28 #include "Utils_ExceptHandlers.hxx"
30 #include "GEOM_Engine.hxx"
31 #include "GEOM_Object.hxx"
33 //=============================================================================
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)
41 MESSAGE("GEOM_I3DPrimOperations_i::GEOM_I3DPrimOperations_i");
44 //=============================================================================
48 //=============================================================================
49 GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i()
51 MESSAGE("GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i");
55 //=============================================================================
59 //=============================================================================
60 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxDXDYDZ (CORBA::Double theDX,
64 GEOM::GEOM_Object_var aGEOMObject;
67 GetOperations()->SetNotDone();
70 Handle(GEOM_Object) anObject = GetOperations()->MakeBoxDXDYDZ(theDX, theDY, theDZ);
71 if (!GetOperations()->IsDone() || anObject.IsNull())
72 return aGEOMObject._retn();
74 return GetObject(anObject);
77 //=============================================================================
81 //=============================================================================
82 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxTwoPnt
83 (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2)
85 GEOM::GEOM_Object_var aGEOMObject;
88 GetOperations()->SetNotDone();
90 Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1);
91 Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
93 if (aPnt1.IsNull() || aPnt2.IsNull()) return aGEOMObject._retn();
96 Handle(GEOM_Object) anObject = GetOperations()->MakeBoxTwoPnt(aPnt1, aPnt2);
97 if (!GetOperations()->IsDone() || anObject.IsNull())
98 return aGEOMObject._retn();
100 return GetObject(anObject);
103 //=============================================================================
107 //=============================================================================
108 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
110 CORBA::Short theOrientation)
112 GEOM::GEOM_Object_var aGEOMObject;
114 //Set a not done flag
115 GetOperations()->SetNotDone();
117 if (theH == 0 || theW == 0)
118 return aGEOMObject._retn();
121 Handle(GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW, theOrientation);
122 if (!GetOperations()->IsDone() || anObject.IsNull())
123 return aGEOMObject._retn();
125 return GetObject(anObject);
128 //=============================================================================
132 //=============================================================================
133 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceObjHW
134 (GEOM::GEOM_Object_ptr theObj,
138 GEOM::GEOM_Object_var aGEOMObject;
140 //Set a not done flag
141 GetOperations()->SetNotDone();
143 //Get the reference object
144 Handle(GEOM_Object) anObj = GetObjectImpl(theObj);
147 return aGEOMObject._retn();
150 Handle(GEOM_Object) anObject = GetOperations()->MakeFaceObjHW(anObj, theH, theW);
151 if (!GetOperations()->IsDone() || anObject.IsNull())
152 return aGEOMObject._retn();
154 return GetObject(anObject);
157 //=============================================================================
161 //=============================================================================
162 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskPntVecR
163 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
166 GEOM::GEOM_Object_var aGEOMObject;
168 //Set a not done flag
169 GetOperations()->SetNotDone();
171 //Get the reference points
172 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
173 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
175 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
178 Handle(GEOM_Object) anObject =
179 GetOperations()->MakeDiskPntVecR(aPnt, aVec, theR);
180 if (!GetOperations()->IsDone() || anObject.IsNull())
181 return aGEOMObject._retn();
183 return GetObject(anObject);
186 //=============================================================================
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)
195 GEOM::GEOM_Object_var aGEOMObject;
197 //Set a not done flag
198 GetOperations()->SetNotDone();
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);
205 if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn();
208 Handle(GEOM_Object) anObject =
209 GetOperations()->MakeDiskThreePnt(aPnt1, aPnt2, aPnt3);
210 if (!GetOperations()->IsDone() || anObject.IsNull())
211 return aGEOMObject._retn();
213 return GetObject(anObject);
216 //=============================================================================
220 //=============================================================================
221 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR,
222 CORBA::Short theOrientation)
224 GEOM::GEOM_Object_var aGEOMObject;
226 //Set a not done flag
227 GetOperations()->SetNotDone();
230 return aGEOMObject._retn();
233 Handle(GEOM_Object) anObject = GetOperations()->MakeDiskR(theR, theOrientation);
234 if (!GetOperations()->IsDone() || anObject.IsNull())
235 return aGEOMObject._retn();
237 return GetObject(anObject);
240 //=============================================================================
244 //=============================================================================
245 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR,
248 GEOM::GEOM_Object_var aGEOMObject;
250 //Set a not done flag
251 GetOperations()->SetNotDone();
253 //Create the Cylinder
254 Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH);
255 if (!GetOperations()->IsDone() || anObject.IsNull())
256 return aGEOMObject._retn();
258 return GetObject(anObject);
261 //=============================================================================
263 * MakeCylinderPntVecRH
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)
270 GEOM::GEOM_Object_var aGEOMObject;
272 //Set a not done flag
273 GetOperations()->SetNotDone();
275 //Get the reference points
276 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
277 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
279 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
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();
286 return GetObject(anObject);
289 //=============================================================================
293 //=============================================================================
294 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConeR1R2H (CORBA::Double theR1,
298 GEOM::GEOM_Object_var aGEOMObject;
300 //Set a not done flag
301 GetOperations()->SetNotDone();
304 Handle(GEOM_Object) anObject = GetOperations()->MakeConeR1R2H(theR1, theR2, theH);
305 if (!GetOperations()->IsDone() || anObject.IsNull())
306 return aGEOMObject._retn();
308 return GetObject(anObject);
311 //=============================================================================
313 * MakeConePntVecR1R2H
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)
320 GEOM::GEOM_Object_var aGEOMObject;
322 //Set a not done flag
323 GetOperations()->SetNotDone();
325 //Get the reference points
326 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
327 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
329 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
332 Handle(GEOM_Object) anObject =
333 GetOperations()->MakeConePntVecR1R2H(aPnt, aVec, theR1, theR2, theH);
334 if (!GetOperations()->IsDone() || anObject.IsNull())
335 return aGEOMObject._retn();
337 return GetObject(anObject);
340 //=============================================================================
344 //=============================================================================
345 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSphereR (CORBA::Double theR)
347 GEOM::GEOM_Object_var aGEOMObject;
349 //Set a not done flag
350 GetOperations()->SetNotDone();
353 Handle(GEOM_Object) anObject = GetOperations()->MakeSphereR(theR);
354 if (!GetOperations()->IsDone() || anObject.IsNull())
355 return aGEOMObject._retn();
357 return GetObject(anObject);
360 //=============================================================================
364 //=============================================================================
365 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSpherePntR
366 (GEOM::GEOM_Object_ptr thePnt, CORBA::Double theR)
368 GEOM::GEOM_Object_var aGEOMObject;
370 //Set a not done flag
371 GetOperations()->SetNotDone();
373 //Get the reference point
374 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
376 if (aPnt.IsNull()) return aGEOMObject._retn();
379 Handle(GEOM_Object) anObject =
380 GetOperations()->MakeSpherePntR(aPnt, theR);
381 if (!GetOperations()->IsDone() || anObject.IsNull())
382 return aGEOMObject._retn();
384 return GetObject(anObject);
387 //=============================================================================
391 //=============================================================================
392 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusRR
393 (CORBA::Double theRMajor, CORBA::Double theRMinor)
395 GEOM::GEOM_Object_var aGEOMObject;
397 //Set a not done flag
398 GetOperations()->SetNotDone();
401 Handle(GEOM_Object) anObject =
402 GetOperations()->MakeTorusRR(theRMajor, theRMinor);
403 if (!GetOperations()->IsDone() || anObject.IsNull())
404 return aGEOMObject._retn();
406 return GetObject(anObject);
409 //=============================================================================
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)
418 GEOM::GEOM_Object_var aGEOMObject;
420 //Set a not done flag
421 GetOperations()->SetNotDone();
423 //Get the reference points
424 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
425 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
427 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
430 Handle(GEOM_Object) anObject =
431 GetOperations()->MakeTorusPntVecRR(aPnt, aVec, theRMajor, theRMinor);
432 if (!GetOperations()->IsDone() || anObject.IsNull())
433 return aGEOMObject._retn();
435 return GetObject(anObject);
438 //=============================================================================
442 //=============================================================================
443 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
444 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
447 GEOM::GEOM_Object_var aGEOMObject;
449 //Set a not done flag
450 GetOperations()->SetNotDone();
452 //Get the reference objects
453 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
454 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
456 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
459 Handle(GEOM_Object) anObject =
460 GetOperations()->MakePrismVecH(aBase, aVec, theH);
461 if (!GetOperations()->IsDone() || anObject.IsNull())
462 return aGEOMObject._retn();
464 return GetObject(anObject);
467 //=============================================================================
471 //=============================================================================
472 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
473 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
476 GEOM::GEOM_Object_var aGEOMObject;
478 //Set a not done flag
479 GetOperations()->SetNotDone();
481 //Get the reference objects
482 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
483 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
485 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
488 Handle(GEOM_Object) anObject =
489 GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
490 if (!GetOperations()->IsDone() || anObject.IsNull())
491 return aGEOMObject._retn();
493 return GetObject(anObject);
496 //=============================================================================
500 //=============================================================================
501 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt
502 (GEOM::GEOM_Object_ptr theBase,
503 GEOM::GEOM_Object_ptr thePoint1,
504 GEOM::GEOM_Object_ptr thePoint2)
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) aPoint1 = GetObjectImpl(thePoint1);
514 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
516 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
517 return aGEOMObject._retn();
520 Handle(GEOM_Object) anObject =
521 GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2);
522 if (!GetOperations()->IsDone() || anObject.IsNull())
523 return aGEOMObject._retn();
525 return GetObject(anObject);
528 //=============================================================================
530 * MakePrismTwoPnt2Ways
532 //=============================================================================
533 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
534 (GEOM::GEOM_Object_ptr theBase,
535 GEOM::GEOM_Object_ptr thePoint1,
536 GEOM::GEOM_Object_ptr thePoint2)
538 GEOM::GEOM_Object_var aGEOMObject;
540 //Set a not done flag
541 GetOperations()->SetNotDone();
543 //Get the reference objects
544 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
545 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
546 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
548 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
549 return aGEOMObject._retn();
552 Handle(GEOM_Object) anObject =
553 GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
554 if (!GetOperations()->IsDone() || anObject.IsNull())
555 return aGEOMObject._retn();
557 return GetObject(anObject);
560 //=============================================================================
564 //=============================================================================
565 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ
566 (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
567 CORBA::Double theDY, CORBA::Double theDZ)
569 GEOM::GEOM_Object_var aGEOMObject;
571 //Set a not done flag
572 GetOperations()->SetNotDone();
574 //Get the reference objects
575 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
577 if (aBase.IsNull()) return aGEOMObject._retn();
580 Handle(GEOM_Object) anObject =
581 GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ);
582 if (!GetOperations()->IsDone() || anObject.IsNull())
583 return aGEOMObject._retn();
585 return GetObject(anObject);
588 //=============================================================================
590 * MakePrismDXDYDZ2Ways
592 //=============================================================================
593 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ2Ways
594 (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
595 CORBA::Double theDY, CORBA::Double theDZ)
597 GEOM::GEOM_Object_var aGEOMObject;
599 //Set a not done flag
600 GetOperations()->SetNotDone();
602 //Get the reference objects
603 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
605 if (aBase.IsNull()) return aGEOMObject._retn();
608 Handle(GEOM_Object) anObject =
609 GetOperations()->MakePrismDXDYDZ2Ways(aBase, theDX, theDY, theDZ);
610 if (!GetOperations()->IsDone() || anObject.IsNull())
611 return aGEOMObject._retn();
613 return GetObject(anObject);
616 //=============================================================================
620 //=============================================================================
621 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe
622 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath)
624 GEOM::GEOM_Object_var aGEOMObject;
626 //Set a not done flag
627 GetOperations()->SetNotDone();
629 //Get the reference objects
630 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
631 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
633 if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn();
636 Handle(GEOM_Object) anObject =
637 GetOperations()->MakePipe(aBase, aPath);
638 if (!GetOperations()->IsDone() || anObject.IsNull())
639 return aGEOMObject._retn();
641 return GetObject(anObject);
644 //=============================================================================
646 * MakeRevolutionAxisAngle
648 //=============================================================================
649 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
650 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
651 CORBA::Double theAngle)
653 GEOM::GEOM_Object_var aGEOMObject;
655 //Set a not done flag
656 GetOperations()->SetNotDone();
658 //Get the reference objects
659 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
660 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
662 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
664 //Create the Revolution
665 Handle(GEOM_Object) anObject =
666 GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
667 if (!GetOperations()->IsDone() || anObject.IsNull())
668 return aGEOMObject._retn();
670 return GetObject(anObject);
673 //=============================================================================
675 * MakeRevolutionAxisAngle2Ways
677 //=============================================================================
678 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
679 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
680 CORBA::Double theAngle)
682 GEOM::GEOM_Object_var aGEOMObject;
684 //Set a not done flag
685 GetOperations()->SetNotDone();
687 //Get the reference objects
688 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
689 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
691 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
693 //Create the Revolution
694 Handle(GEOM_Object) anObject =
695 GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
696 if (!GetOperations()->IsDone() || anObject.IsNull())
697 return aGEOMObject._retn();
699 return GetObject(anObject);
702 //=============================================================================
706 //=============================================================================
707 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
708 CORBA::Long theMinDeg,
709 CORBA::Long theMaxDeg,
710 CORBA::Double theTol2D,
711 CORBA::Double theTol3D,
712 CORBA::Long theNbIter,
713 CORBA::Boolean theUseOri,
714 CORBA::Boolean theApprox)
716 GEOM::GEOM_Object_var aGEOMObject;
718 //Set a not done flag
719 GetOperations()->SetNotDone();
721 //Get the reference objects
722 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
724 if (aShape.IsNull()) return aGEOMObject._retn();
727 Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
728 (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter,
729 theUseOri, theApprox);
730 if (!GetOperations()->IsDone() || anObject.IsNull())
731 return aGEOMObject._retn();
733 return GetObject(anObject);
736 //=============================================================================
740 //=============================================================================
741 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
742 CORBA::Boolean theModeSolid,
743 CORBA::Double thePreci,
744 CORBA::Boolean theRuled)
746 GEOM::GEOM_Object_var aGEOMObject;
748 //Set a not done flag
749 GetOperations()->SetNotDone();
750 Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
754 aLen = theSeqSections.length();
755 for (ind = 0; ind < aLen; ind++) {
756 Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
758 aSeqSections->Append(aSh);
760 if (!aSeqSections->Length())
761 return aGEOMObject._retn();
763 // Make shell or solid
764 Handle(GEOM_Object) anObject =
765 GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
766 if (!GetOperations()->IsDone() || anObject.IsNull())
767 return aGEOMObject._retn();
769 return GetObject(anObject);
772 //=============================================================================
774 * MakePipeWithDifferentSections
776 //=============================================================================
777 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
778 (const GEOM::ListOfGO& theBases,
779 const GEOM::ListOfGO& theLocations,
780 GEOM::GEOM_Object_ptr thePath,
781 CORBA::Boolean theWithContact,
782 CORBA::Boolean theWithCorrections)
784 GEOM::GEOM_Object_var aGEOMObject;
786 //Set a not done flag
787 GetOperations()->SetNotDone();
788 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
789 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
790 int ind=0, aNbBases =0,aNbLocs=0;
793 aNbBases = theBases.length();
794 aNbLocs = theLocations.length();
796 if (aNbLocs && aNbBases != aNbLocs)
797 return aGEOMObject._retn();
799 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
801 return aGEOMObject._retn();
803 for (ind = 0; ind < aNbBases; ind++) {
804 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
809 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
812 aSeqLocations->Append(aLoc);
814 aSeqBases->Append(aBase);
816 if (!aSeqBases->Length())
817 return aGEOMObject._retn();
820 Handle(GEOM_Object) anObject =
821 GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath,
822 theWithContact,theWithCorrections);
823 if (!GetOperations()->IsDone() || anObject.IsNull())
824 return aGEOMObject._retn();
826 return GetObject(anObject);
830 //=============================================================================
832 * MakePipeWithShellSections
834 //=============================================================================
835 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
836 (const GEOM::ListOfGO& theBases,
837 const GEOM::ListOfGO& theSubBases,
838 const GEOM::ListOfGO& theLocations,
839 GEOM::GEOM_Object_ptr thePath,
840 CORBA::Boolean theWithContact,
841 CORBA::Boolean theWithCorrections)
843 GEOM::GEOM_Object_var aGEOMObject;
845 //Set a not done flag
846 GetOperations()->SetNotDone();
847 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
848 Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
849 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
850 int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
853 aNbBases = theBases.length();
854 aNbSubBases = theSubBases.length();
855 aNbLocs = theLocations.length();
857 if (aNbLocs && aNbBases != aNbLocs)
858 return aGEOMObject._retn();
860 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
862 return aGEOMObject._retn();
864 for (ind = 0; ind < aNbBases; ind++) {
865 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
869 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
872 aSeqLocations->Append(aLoc);
874 aSeqBases->Append(aBase);
876 if (aNbSubBases >= aNbBases) {
877 Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
878 if (aSubBase.IsNull()) {
879 aSeqSubBases->Clear();
883 aSeqSubBases->Append(aSubBase);
886 if (!aSeqBases->Length())
887 return aGEOMObject._retn();
890 Handle(GEOM_Object) anObject =
891 GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases,
892 aSeqLocations, aPath,
893 theWithContact, theWithCorrections);
894 if (!GetOperations()->IsDone() || anObject.IsNull())
895 return aGEOMObject._retn();
897 return GetObject(anObject);
901 //=============================================================================
903 * MakePipeShellsWithoutPath
905 //=============================================================================
906 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
907 (const GEOM::ListOfGO& theBases,
908 const GEOM::ListOfGO& theLocations)
910 GEOM::GEOM_Object_var aGEOMObject;
912 //Set a not done flag
913 GetOperations()->SetNotDone();
914 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
915 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
916 int ind=0, aNbBases=0, aNbLocs=0;
919 aNbBases = theBases.length();
920 aNbLocs = theLocations.length();
922 if (aNbLocs && aNbBases != aNbLocs)
923 return aGEOMObject._retn();
925 for (ind = 0; ind < aNbBases; ind++) {
926 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
930 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
933 aSeqLocations->Append(aLoc);
935 aSeqBases->Append(aBase);
938 if (!aSeqBases->Length())
939 return aGEOMObject._retn();
942 Handle(GEOM_Object) anObject =
943 GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
945 if (!GetOperations()->IsDone() || anObject.IsNull())
946 return aGEOMObject._retn();
948 return GetObject(anObject);
952 //=============================================================================
954 * MakePipeBiNormalAlongVector
956 //=============================================================================
957 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
958 (GEOM::GEOM_Object_ptr theBase,
959 GEOM::GEOM_Object_ptr thePath,
960 GEOM::GEOM_Object_ptr theVec)
962 GEOM::GEOM_Object_var aGEOMObject;
964 //Set a not done flag
965 GetOperations()->SetNotDone();
967 //Get the reference objects
968 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
969 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
970 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
972 if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
975 Handle(GEOM_Object) anObject =
976 GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec);
977 if (!GetOperations()->IsDone() || anObject.IsNull())
978 return aGEOMObject._retn();
980 return GetObject(anObject);