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
708 GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
709 CORBA::Long theMinDeg,
710 CORBA::Long theMaxDeg,
711 CORBA::Double theTol2D,
712 CORBA::Double theTol3D,
713 CORBA::Long theNbIter,
714 GEOM::filling_oper_method theMethod,
715 CORBA::Boolean theApprox)
717 GEOM::GEOM_Object_var aGEOMObject;
719 //Set a not done flag
720 GetOperations()->SetNotDone();
722 //Get the reference objects
723 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
725 if (aShape.IsNull()) return aGEOMObject._retn();
729 case GEOM::FOM_Default:
731 // Default (standard behaviour)
735 case GEOM::FOM_UseOri:
737 // Use edges orientation
741 case GEOM::FOM_AutoCorrect:
743 // Auto-correct edges orientation
752 Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
753 (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter,
755 if (!GetOperations()->IsDone() || anObject.IsNull())
756 return aGEOMObject._retn();
758 return GetObject(anObject);
761 //=============================================================================
765 //=============================================================================
766 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
767 CORBA::Boolean theModeSolid,
768 CORBA::Double thePreci,
769 CORBA::Boolean theRuled)
771 GEOM::GEOM_Object_var aGEOMObject;
773 //Set a not done flag
774 GetOperations()->SetNotDone();
775 Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
779 aLen = theSeqSections.length();
780 for (ind = 0; ind < aLen; ind++) {
781 Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
783 aSeqSections->Append(aSh);
785 if (!aSeqSections->Length())
786 return aGEOMObject._retn();
788 // Make shell or solid
789 Handle(GEOM_Object) anObject =
790 GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
791 if (!GetOperations()->IsDone() || anObject.IsNull())
792 return aGEOMObject._retn();
794 return GetObject(anObject);
797 //=============================================================================
799 * MakePipeWithDifferentSections
801 //=============================================================================
802 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
803 (const GEOM::ListOfGO& theBases,
804 const GEOM::ListOfGO& theLocations,
805 GEOM::GEOM_Object_ptr thePath,
806 CORBA::Boolean theWithContact,
807 CORBA::Boolean theWithCorrections)
809 GEOM::GEOM_Object_var aGEOMObject;
811 //Set a not done flag
812 GetOperations()->SetNotDone();
813 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
814 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
815 int ind=0, aNbBases =0,aNbLocs=0;
818 aNbBases = theBases.length();
819 aNbLocs = theLocations.length();
821 if (aNbLocs && aNbBases != aNbLocs)
822 return aGEOMObject._retn();
824 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
826 return aGEOMObject._retn();
828 for (ind = 0; ind < aNbBases; ind++) {
829 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
834 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
837 aSeqLocations->Append(aLoc);
839 aSeqBases->Append(aBase);
841 if (!aSeqBases->Length())
842 return aGEOMObject._retn();
845 Handle(GEOM_Object) anObject =
846 GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath,
847 theWithContact,theWithCorrections);
848 if (!GetOperations()->IsDone() || anObject.IsNull())
849 return aGEOMObject._retn();
851 return GetObject(anObject);
855 //=============================================================================
857 * MakePipeWithShellSections
859 //=============================================================================
860 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
861 (const GEOM::ListOfGO& theBases,
862 const GEOM::ListOfGO& theSubBases,
863 const GEOM::ListOfGO& theLocations,
864 GEOM::GEOM_Object_ptr thePath,
865 CORBA::Boolean theWithContact,
866 CORBA::Boolean theWithCorrections)
868 GEOM::GEOM_Object_var aGEOMObject;
870 //Set a not done flag
871 GetOperations()->SetNotDone();
872 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
873 Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
874 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
875 int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
878 aNbBases = theBases.length();
879 aNbSubBases = theSubBases.length();
880 aNbLocs = theLocations.length();
882 if (aNbLocs && aNbBases != aNbLocs)
883 return aGEOMObject._retn();
885 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
887 return aGEOMObject._retn();
889 for (ind = 0; ind < aNbBases; ind++) {
890 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
894 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
897 aSeqLocations->Append(aLoc);
899 aSeqBases->Append(aBase);
901 if (aNbSubBases >= aNbBases) {
902 Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
903 if (aSubBase.IsNull()) {
904 aSeqSubBases->Clear();
908 aSeqSubBases->Append(aSubBase);
911 if (!aSeqBases->Length())
912 return aGEOMObject._retn();
915 Handle(GEOM_Object) anObject =
916 GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases,
917 aSeqLocations, aPath,
918 theWithContact, theWithCorrections);
919 if (!GetOperations()->IsDone() || anObject.IsNull())
920 return aGEOMObject._retn();
922 return GetObject(anObject);
926 //=============================================================================
928 * MakePipeShellsWithoutPath
930 //=============================================================================
931 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
932 (const GEOM::ListOfGO& theBases,
933 const GEOM::ListOfGO& theLocations)
935 GEOM::GEOM_Object_var aGEOMObject;
937 //Set a not done flag
938 GetOperations()->SetNotDone();
939 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
940 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
941 int ind=0, aNbBases=0, aNbLocs=0;
944 aNbBases = theBases.length();
945 aNbLocs = theLocations.length();
947 if (aNbLocs && aNbBases != aNbLocs)
948 return aGEOMObject._retn();
950 for (ind = 0; ind < aNbBases; ind++) {
951 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
955 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
958 aSeqLocations->Append(aLoc);
960 aSeqBases->Append(aBase);
963 if (!aSeqBases->Length())
964 return aGEOMObject._retn();
967 Handle(GEOM_Object) anObject =
968 GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
970 if (!GetOperations()->IsDone() || anObject.IsNull())
971 return aGEOMObject._retn();
973 return GetObject(anObject);
977 //=============================================================================
979 * MakePipeBiNormalAlongVector
981 //=============================================================================
982 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
983 (GEOM::GEOM_Object_ptr theBase,
984 GEOM::GEOM_Object_ptr thePath,
985 GEOM::GEOM_Object_ptr theVec)
987 GEOM::GEOM_Object_var aGEOMObject;
989 //Set a not done flag
990 GetOperations()->SetNotDone();
992 //Get the reference objects
993 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
994 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
995 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
997 if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
1000 Handle(GEOM_Object) anObject =
1001 GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec);
1002 if (!GetOperations()->IsDone() || anObject.IsNull())
1003 return aGEOMObject._retn();
1005 return GetObject(anObject);