1 // Copyright (C) 2007-2014 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, or (at your option) any later version.
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 #define SUBSHAPE_ERROR "Sub shape cannot be transformed"
36 //=============================================================================
40 //=============================================================================
41 GEOM_I3DPrimOperations_i::GEOM_I3DPrimOperations_i(PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, ::GEOMImpl_I3DPrimOperations* theImpl)
42 :GEOM_IOperations_i(thePOA, theEngine, theImpl)
44 MESSAGE("GEOM_I3DPrimOperations_i::GEOM_I3DPrimOperations_i");
47 //=============================================================================
51 //=============================================================================
52 GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i()
54 MESSAGE("GEOM_I3DPrimOperations_i::~GEOM_I3DPrimOperations_i");
58 //=============================================================================
62 //=============================================================================
63 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxDXDYDZ (CORBA::Double theDX,
67 GEOM::GEOM_Object_var aGEOMObject;
70 GetOperations()->SetNotDone();
73 Handle(GEOM_Object) anObject = GetOperations()->MakeBoxDXDYDZ(theDX, theDY, theDZ);
74 if (!GetOperations()->IsDone() || anObject.IsNull())
75 return aGEOMObject._retn();
77 return GetObject(anObject);
80 //=============================================================================
84 //=============================================================================
85 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeBoxTwoPnt
86 (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2)
88 GEOM::GEOM_Object_var aGEOMObject;
91 GetOperations()->SetNotDone();
93 Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1);
94 Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
96 if (aPnt1.IsNull() || aPnt2.IsNull()) return aGEOMObject._retn();
99 Handle(GEOM_Object) anObject = GetOperations()->MakeBoxTwoPnt(aPnt1, aPnt2);
100 if (!GetOperations()->IsDone() || anObject.IsNull())
101 return aGEOMObject._retn();
103 return GetObject(anObject);
106 //=============================================================================
110 //=============================================================================
111 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceHW (CORBA::Double theH,
113 CORBA::Short theOrientation)
115 GEOM::GEOM_Object_var aGEOMObject;
117 //Set a not done flag
118 GetOperations()->SetNotDone();
120 if (theH == 0 || theW == 0)
121 return aGEOMObject._retn();
124 Handle(GEOM_Object) anObject = GetOperations()->MakeFaceHW(theH, theW, theOrientation);
125 if (!GetOperations()->IsDone() || anObject.IsNull())
126 return aGEOMObject._retn();
128 return GetObject(anObject);
131 //=============================================================================
135 //=============================================================================
136 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFaceObjHW
137 (GEOM::GEOM_Object_ptr theObj,
141 GEOM::GEOM_Object_var aGEOMObject;
143 //Set a not done flag
144 GetOperations()->SetNotDone();
146 //Get the reference object
147 Handle(GEOM_Object) anObj = GetObjectImpl(theObj);
150 return aGEOMObject._retn();
153 Handle(GEOM_Object) anObject = GetOperations()->MakeFaceObjHW(anObj, theH, theW);
154 if (!GetOperations()->IsDone() || anObject.IsNull())
155 return aGEOMObject._retn();
157 return GetObject(anObject);
160 //=============================================================================
164 //=============================================================================
165 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskPntVecR
166 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
169 GEOM::GEOM_Object_var aGEOMObject;
171 //Set a not done flag
172 GetOperations()->SetNotDone();
174 //Get the reference points
175 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
176 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
178 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
181 Handle(GEOM_Object) anObject =
182 GetOperations()->MakeDiskPntVecR(aPnt, aVec, theR);
183 if (!GetOperations()->IsDone() || anObject.IsNull())
184 return aGEOMObject._retn();
186 return GetObject(anObject);
189 //=============================================================================
193 //=============================================================================
194 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskThreePnt
195 (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2,
196 GEOM::GEOM_Object_ptr thePnt3)
198 GEOM::GEOM_Object_var aGEOMObject;
200 //Set a not done flag
201 GetOperations()->SetNotDone();
203 //Get the reference points
204 Handle(GEOM_Object) aPnt1 = GetObjectImpl(thePnt1);
205 Handle(GEOM_Object) aPnt2 = GetObjectImpl(thePnt2);
206 Handle(GEOM_Object) aPnt3 = GetObjectImpl(thePnt3);
208 if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn();
211 Handle(GEOM_Object) anObject =
212 GetOperations()->MakeDiskThreePnt(aPnt1, aPnt2, aPnt3);
213 if (!GetOperations()->IsDone() || anObject.IsNull())
214 return aGEOMObject._retn();
216 return GetObject(anObject);
219 //=============================================================================
223 //=============================================================================
224 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDiskR (CORBA::Double theR,
225 CORBA::Short theOrientation)
227 GEOM::GEOM_Object_var aGEOMObject;
229 //Set a not done flag
230 GetOperations()->SetNotDone();
233 return aGEOMObject._retn();
236 Handle(GEOM_Object) anObject = GetOperations()->MakeDiskR(theR, theOrientation);
237 if (!GetOperations()->IsDone() || anObject.IsNull())
238 return aGEOMObject._retn();
240 return GetObject(anObject);
243 //=============================================================================
247 //=============================================================================
248 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRH (CORBA::Double theR,
251 GEOM::GEOM_Object_var aGEOMObject;
253 //Set a not done flag
254 GetOperations()->SetNotDone();
256 //Create the Cylinder
257 Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRH(theR, theH);
258 if (!GetOperations()->IsDone() || anObject.IsNull())
259 return aGEOMObject._retn();
261 return GetObject(anObject);
264 //=============================================================================
268 //=============================================================================
269 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderRHA (CORBA::Double theR,
273 GEOM::GEOM_Object_var aGEOMObject;
275 //Set a not done flag
276 GetOperations()->SetNotDone();
278 //Create the Cylinder
279 Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderRHA(theR, theH, theA);
280 if (!GetOperations()->IsDone() || anObject.IsNull())
281 return aGEOMObject._retn();
283 return GetObject(anObject);
286 //=============================================================================
288 * MakeCylinderPntVecRH
290 //=============================================================================
291 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRH
292 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
293 CORBA::Double theR, CORBA::Double theH)
295 GEOM::GEOM_Object_var aGEOMObject;
297 //Set a not done flag
298 GetOperations()->SetNotDone();
300 //Get the reference points
301 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
302 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
304 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
306 //Create the Cylinder
307 Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRH(aPnt, aVec, theR, theH);
308 if (!GetOperations()->IsDone() || anObject.IsNull())
309 return aGEOMObject._retn();
311 return GetObject(anObject);
314 //=============================================================================
316 * MakeCylinderPntVecRHA
318 //=============================================================================
319 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeCylinderPntVecRHA
320 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
321 CORBA::Double theR, CORBA::Double theH, CORBA::Double theA)
323 GEOM::GEOM_Object_var aGEOMObject;
325 //Set a not done flag
326 GetOperations()->SetNotDone();
328 //Get the reference points
329 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
330 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
332 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
334 //Create the Cylinder
335 Handle(GEOM_Object) anObject = GetOperations()->MakeCylinderPntVecRHA(aPnt, aVec, theR, theH, theA);
336 if (!GetOperations()->IsDone() || anObject.IsNull())
337 return aGEOMObject._retn();
339 return GetObject(anObject);
342 //=============================================================================
346 //=============================================================================
347 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConeR1R2H (CORBA::Double theR1,
351 GEOM::GEOM_Object_var aGEOMObject;
353 //Set a not done flag
354 GetOperations()->SetNotDone();
357 Handle(GEOM_Object) anObject = GetOperations()->MakeConeR1R2H(theR1, theR2, theH);
358 if (!GetOperations()->IsDone() || anObject.IsNull())
359 return aGEOMObject._retn();
361 return GetObject(anObject);
364 //=============================================================================
366 * MakeConePntVecR1R2H
368 //=============================================================================
369 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeConePntVecR1R2H
370 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
371 CORBA::Double theR1, CORBA::Double theR2, CORBA::Double theH)
373 GEOM::GEOM_Object_var aGEOMObject;
375 //Set a not done flag
376 GetOperations()->SetNotDone();
378 //Get the reference points
379 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
380 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
382 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
385 Handle(GEOM_Object) anObject =
386 GetOperations()->MakeConePntVecR1R2H(aPnt, aVec, theR1, theR2, theH);
387 if (!GetOperations()->IsDone() || anObject.IsNull())
388 return aGEOMObject._retn();
390 return GetObject(anObject);
393 //=============================================================================
397 //=============================================================================
398 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSphereR (CORBA::Double theR)
400 GEOM::GEOM_Object_var aGEOMObject;
402 //Set a not done flag
403 GetOperations()->SetNotDone();
406 Handle(GEOM_Object) anObject = GetOperations()->MakeSphereR(theR);
407 if (!GetOperations()->IsDone() || anObject.IsNull())
408 return aGEOMObject._retn();
410 return GetObject(anObject);
413 //=============================================================================
417 //=============================================================================
418 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeSpherePntR
419 (GEOM::GEOM_Object_ptr thePnt, CORBA::Double theR)
421 GEOM::GEOM_Object_var aGEOMObject;
423 //Set a not done flag
424 GetOperations()->SetNotDone();
426 //Get the reference point
427 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
429 if (aPnt.IsNull()) return aGEOMObject._retn();
432 Handle(GEOM_Object) anObject =
433 GetOperations()->MakeSpherePntR(aPnt, theR);
434 if (!GetOperations()->IsDone() || anObject.IsNull())
435 return aGEOMObject._retn();
437 return GetObject(anObject);
440 //=============================================================================
444 //=============================================================================
445 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusRR
446 (CORBA::Double theRMajor, CORBA::Double theRMinor)
448 GEOM::GEOM_Object_var aGEOMObject;
450 //Set a not done flag
451 GetOperations()->SetNotDone();
454 Handle(GEOM_Object) anObject =
455 GetOperations()->MakeTorusRR(theRMajor, theRMinor);
456 if (!GetOperations()->IsDone() || anObject.IsNull())
457 return aGEOMObject._retn();
459 return GetObject(anObject);
462 //=============================================================================
466 //=============================================================================
467 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeTorusPntVecRR
468 (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec,
469 CORBA::Double theRMajor, CORBA::Double theRMinor)
471 GEOM::GEOM_Object_var aGEOMObject;
473 //Set a not done flag
474 GetOperations()->SetNotDone();
476 //Get the reference points
477 Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
478 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
480 if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
483 Handle(GEOM_Object) anObject =
484 GetOperations()->MakeTorusPntVecRR(aPnt, aVec, theRMajor, theRMinor);
485 if (!GetOperations()->IsDone() || anObject.IsNull())
486 return aGEOMObject._retn();
488 return GetObject(anObject);
491 //=============================================================================
495 //=============================================================================
496 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
497 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
500 GEOM::GEOM_Object_var aGEOMObject;
502 //Set a not done flag
503 GetOperations()->SetNotDone();
505 //Get the reference objects
506 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
507 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
509 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
512 Handle(GEOM_Object) anObject =
513 GetOperations()->MakePrismVecH(aBase, aVec, theH);
514 if (!GetOperations()->IsDone() || anObject.IsNull())
515 return aGEOMObject._retn();
517 return GetObject(anObject);
520 //=============================================================================
524 //=============================================================================
525 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
526 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
529 GEOM::GEOM_Object_var aGEOMObject;
531 //Set a not done flag
532 GetOperations()->SetNotDone();
534 //Get the reference objects
535 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
536 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
538 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
541 Handle(GEOM_Object) anObject =
542 GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
543 if (!GetOperations()->IsDone() || anObject.IsNull())
544 return aGEOMObject._retn();
546 return GetObject(anObject);
549 //=============================================================================
553 //=============================================================================
554 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecHWithScaling
555 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
556 CORBA::Double theH, CORBA::Double theScaleFactor)
558 GEOM::GEOM_Object_var aGEOMObject;
560 //Set a not done flag
561 GetOperations()->SetNotDone();
563 //Get the reference objects
564 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
565 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
567 if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
570 Handle(GEOM_Object) anObject =
571 GetOperations()->MakePrismVecH(aBase, aVec, theH, theScaleFactor);
572 if (!GetOperations()->IsDone() || anObject.IsNull())
573 return aGEOMObject._retn();
575 return GetObject(anObject);
578 //=============================================================================
582 //=============================================================================
583 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt
584 (GEOM::GEOM_Object_ptr theBase,
585 GEOM::GEOM_Object_ptr thePoint1,
586 GEOM::GEOM_Object_ptr thePoint2)
588 GEOM::GEOM_Object_var aGEOMObject;
590 //Set a not done flag
591 GetOperations()->SetNotDone();
593 //Get the reference objects
594 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
595 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
596 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
598 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
599 return aGEOMObject._retn();
602 Handle(GEOM_Object) anObject =
603 GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2);
604 if (!GetOperations()->IsDone() || anObject.IsNull())
605 return aGEOMObject._retn();
607 return GetObject(anObject);
610 //=============================================================================
612 * MakePrismTwoPnt2Ways
614 //=============================================================================
615 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
616 (GEOM::GEOM_Object_ptr theBase,
617 GEOM::GEOM_Object_ptr thePoint1,
618 GEOM::GEOM_Object_ptr thePoint2)
620 GEOM::GEOM_Object_var aGEOMObject;
622 //Set a not done flag
623 GetOperations()->SetNotDone();
625 //Get the reference objects
626 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
627 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
628 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
630 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
631 return aGEOMObject._retn();
634 Handle(GEOM_Object) anObject =
635 GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
636 if (!GetOperations()->IsDone() || anObject.IsNull())
637 return aGEOMObject._retn();
639 return GetObject(anObject);
642 //=============================================================================
646 //=============================================================================
647 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPntWithScaling
648 (GEOM::GEOM_Object_ptr theBase,
649 GEOM::GEOM_Object_ptr thePoint1,
650 GEOM::GEOM_Object_ptr thePoint2,
651 CORBA::Double theScaleFactor)
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) aPoint1 = GetObjectImpl(thePoint1);
661 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
663 if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
664 return aGEOMObject._retn();
667 Handle(GEOM_Object) anObject =
668 GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2, theScaleFactor);
669 if (!GetOperations()->IsDone() || anObject.IsNull())
670 return aGEOMObject._retn();
672 return GetObject(anObject);
675 //=============================================================================
679 //=============================================================================
680 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ
681 (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
682 CORBA::Double theDY, CORBA::Double theDZ)
684 GEOM::GEOM_Object_var aGEOMObject;
686 //Set a not done flag
687 GetOperations()->SetNotDone();
689 //Get the reference objects
690 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
692 if (aBase.IsNull()) return aGEOMObject._retn();
695 Handle(GEOM_Object) anObject =
696 GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ);
697 if (!GetOperations()->IsDone() || anObject.IsNull())
698 return aGEOMObject._retn();
700 return GetObject(anObject);
703 //=============================================================================
705 * MakePrismDXDYDZ2Ways
707 //=============================================================================
708 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ2Ways
709 (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
710 CORBA::Double theDY, CORBA::Double theDZ)
712 GEOM::GEOM_Object_var aGEOMObject;
714 //Set a not done flag
715 GetOperations()->SetNotDone();
717 //Get the reference objects
718 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
720 if (aBase.IsNull()) return aGEOMObject._retn();
723 Handle(GEOM_Object) anObject =
724 GetOperations()->MakePrismDXDYDZ2Ways(aBase, theDX, theDY, theDZ);
725 if (!GetOperations()->IsDone() || anObject.IsNull())
726 return aGEOMObject._retn();
728 return GetObject(anObject);
731 //=============================================================================
735 //=============================================================================
736 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZWithScaling
737 (GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
738 CORBA::Double theDY, CORBA::Double theDZ,
739 CORBA::Double theScaleFactor)
741 GEOM::GEOM_Object_var aGEOMObject;
743 //Set a not done flag
744 GetOperations()->SetNotDone();
746 //Get the reference objects
747 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
749 if (aBase.IsNull()) return aGEOMObject._retn();
752 Handle(GEOM_Object) anObject =
753 GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ, theScaleFactor);
754 if (!GetOperations()->IsDone() || anObject.IsNull())
755 return aGEOMObject._retn();
757 return GetObject(anObject);
760 //=============================================================================
764 //=============================================================================
765 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeDraftPrism
766 (GEOM::GEOM_Object_ptr theInitShape, GEOM::GEOM_Object_ptr theBase,
767 CORBA::Double theHeight,
768 CORBA::Double theAngle,
769 CORBA::Boolean theFuse)
771 GEOM::GEOM_Object_var aGEOMObject;
773 //Set a not done flag
774 GetOperations()->SetNotDone();
776 //Get the reference objects
777 Handle(GEOM_Object) aInit = GetObjectImpl(theInitShape);
778 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
780 if (aBase.IsNull() || aInit.IsNull()) return aGEOMObject._retn();
783 Handle(GEOM_Object) anObject = GetOperations()->MakeDraftPrism(aInit, aBase, theHeight, theAngle, theFuse);
785 if (!GetOperations()->IsDone() || anObject.IsNull())
786 return aGEOMObject._retn();
788 return GetObject(anObject);
791 //=============================================================================
795 //=============================================================================
796 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe
797 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath)
799 GEOM::GEOM_Object_var aGEOMObject;
801 //Set a not done flag
802 GetOperations()->SetNotDone();
804 //Get the reference objects
805 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
806 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
808 if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn();
811 Handle(GEOM_Object) anObject =
812 GetOperations()->MakePipe(aBase, aPath);
813 if (!GetOperations()->IsDone() || anObject.IsNull())
814 return aGEOMObject._retn();
816 return GetObject(anObject);
819 //=============================================================================
821 * MakeRevolutionAxisAngle
823 //=============================================================================
824 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
825 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
826 CORBA::Double theAngle)
828 GEOM::GEOM_Object_var aGEOMObject;
830 //Set a not done flag
831 GetOperations()->SetNotDone();
833 //Get the reference objects
834 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
835 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
837 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
839 //Create the Revolution
840 Handle(GEOM_Object) anObject =
841 GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
842 if (!GetOperations()->IsDone() || anObject.IsNull())
843 return aGEOMObject._retn();
845 return GetObject(anObject);
848 //=============================================================================
850 * MakeRevolutionAxisAngle2Ways
852 //=============================================================================
853 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
854 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
855 CORBA::Double theAngle)
857 GEOM::GEOM_Object_var aGEOMObject;
859 //Set a not done flag
860 GetOperations()->SetNotDone();
862 //Get the reference objects
863 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
864 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
866 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
868 //Create the Revolution
869 Handle(GEOM_Object) anObject =
870 GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
871 if (!GetOperations()->IsDone() || anObject.IsNull())
872 return aGEOMObject._retn();
874 return GetObject(anObject);
877 //=============================================================================
881 //=============================================================================
882 GEOM::GEOM_Object_ptr
883 GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
884 CORBA::Long theMinDeg,
885 CORBA::Long theMaxDeg,
886 CORBA::Double theTol2D,
887 CORBA::Double theTol3D,
888 CORBA::Long theNbIter,
889 GEOM::filling_oper_method theMethod,
890 CORBA::Boolean theApprox)
892 GEOM::GEOM_Object_var aGEOMObject;
894 //Set a not done flag
895 GetOperations()->SetNotDone();
897 //Get the reference objects
898 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
900 if (aShape.IsNull()) return aGEOMObject._retn();
904 case GEOM::FOM_Default:
906 // Default (standard behaviour)
910 case GEOM::FOM_UseOri:
912 // Use edges orientation
916 case GEOM::FOM_AutoCorrect:
918 // Auto-correct edges orientation
927 Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
928 (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter,
930 if (!GetOperations()->IsDone() || anObject.IsNull())
931 return aGEOMObject._retn();
933 return GetObject(anObject);
936 //=============================================================================
940 //=============================================================================
941 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
942 CORBA::Boolean theModeSolid,
943 CORBA::Double thePreci,
944 CORBA::Boolean theRuled)
946 GEOM::GEOM_Object_var aGEOMObject;
948 //Set a not done flag
949 GetOperations()->SetNotDone();
950 Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
954 aLen = theSeqSections.length();
955 for (ind = 0; ind < aLen; ind++) {
956 Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
958 aSeqSections->Append(aSh);
960 if (!aSeqSections->Length())
961 return aGEOMObject._retn();
963 // Make shell or solid
964 Handle(GEOM_Object) anObject =
965 GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
966 if (!GetOperations()->IsDone() || anObject.IsNull())
967 return aGEOMObject._retn();
969 return GetObject(anObject);
972 //=============================================================================
974 * MakePipeWithDifferentSections
976 //=============================================================================
977 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
978 (const GEOM::ListOfGO& theBases,
979 const GEOM::ListOfGO& theLocations,
980 GEOM::GEOM_Object_ptr thePath,
981 CORBA::Boolean theWithContact,
982 CORBA::Boolean theWithCorrections)
984 GEOM::GEOM_Object_var aGEOMObject;
986 //Set a not done flag
987 GetOperations()->SetNotDone();
988 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
989 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
990 int ind=0, aNbBases =0,aNbLocs=0;
993 aNbBases = theBases.length();
994 aNbLocs = theLocations.length();
996 if (aNbLocs && aNbBases != aNbLocs)
997 return aGEOMObject._retn();
999 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1001 return aGEOMObject._retn();
1003 for (ind = 0; ind < aNbBases; ind++) {
1004 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1009 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1012 aSeqLocations->Append(aLoc);
1014 aSeqBases->Append(aBase);
1016 if (!aSeqBases->Length())
1017 return aGEOMObject._retn();
1020 Handle(GEOM_Object) anObject =
1021 GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath,
1022 theWithContact,theWithCorrections);
1023 if (!GetOperations()->IsDone() || anObject.IsNull())
1024 return aGEOMObject._retn();
1026 return GetObject(anObject);
1030 //=============================================================================
1032 * MakePipeWithShellSections
1034 //=============================================================================
1035 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
1036 (const GEOM::ListOfGO& theBases,
1037 const GEOM::ListOfGO& theSubBases,
1038 const GEOM::ListOfGO& theLocations,
1039 GEOM::GEOM_Object_ptr thePath,
1040 CORBA::Boolean theWithContact,
1041 CORBA::Boolean theWithCorrections)
1043 GEOM::GEOM_Object_var aGEOMObject;
1045 //Set a not done flag
1046 GetOperations()->SetNotDone();
1047 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1048 Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
1049 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1050 int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
1053 aNbBases = theBases.length();
1054 aNbSubBases = theSubBases.length();
1055 aNbLocs = theLocations.length();
1057 if (aNbLocs && aNbBases != aNbLocs)
1058 return aGEOMObject._retn();
1060 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1062 return aGEOMObject._retn();
1064 for (ind = 0; ind < aNbBases; ind++) {
1065 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1069 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1072 aSeqLocations->Append(aLoc);
1074 aSeqBases->Append(aBase);
1076 if (aNbSubBases >= aNbBases) {
1077 Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
1078 if (aSubBase.IsNull()) {
1079 aSeqSubBases->Clear();
1083 aSeqSubBases->Append(aSubBase);
1086 if (!aSeqBases->Length())
1087 return aGEOMObject._retn();
1090 Handle(GEOM_Object) anObject =
1091 GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases,
1092 aSeqLocations, aPath,
1093 theWithContact, theWithCorrections);
1094 if (!GetOperations()->IsDone() || anObject.IsNull())
1095 return aGEOMObject._retn();
1097 return GetObject(anObject);
1101 //=============================================================================
1103 * MakePipeShellsWithoutPath
1105 //=============================================================================
1106 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
1107 (const GEOM::ListOfGO& theBases,
1108 const GEOM::ListOfGO& theLocations)
1110 GEOM::GEOM_Object_var aGEOMObject;
1112 //Set a not done flag
1113 GetOperations()->SetNotDone();
1114 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1115 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1116 int ind=0, aNbBases=0, aNbLocs=0;
1119 aNbBases = theBases.length();
1120 aNbLocs = theLocations.length();
1122 if (aNbLocs && aNbBases != aNbLocs)
1123 return aGEOMObject._retn();
1125 for (ind = 0; ind < aNbBases; ind++) {
1126 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1130 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1133 aSeqLocations->Append(aLoc);
1135 aSeqBases->Append(aBase);
1138 if (!aSeqBases->Length())
1139 return aGEOMObject._retn();
1142 Handle(GEOM_Object) anObject =
1143 GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
1145 if (!GetOperations()->IsDone() || anObject.IsNull())
1146 return aGEOMObject._retn();
1148 return GetObject(anObject);
1151 //=============================================================================
1153 * MakePipeBiNormalAlongVector
1155 //=============================================================================
1156 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
1157 (GEOM::GEOM_Object_ptr theBase,
1158 GEOM::GEOM_Object_ptr thePath,
1159 GEOM::GEOM_Object_ptr theVec)
1161 GEOM::GEOM_Object_var aGEOMObject;
1163 //Set a not done flag
1164 GetOperations()->SetNotDone();
1166 //Get the reference objects
1167 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
1168 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1169 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
1171 if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
1174 Handle(GEOM_Object) anObject =
1175 GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec);
1176 if (!GetOperations()->IsDone() || anObject.IsNull())
1177 return aGEOMObject._retn();
1179 return GetObject(anObject);
1182 //=============================================================================
1186 //=============================================================================
1187 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening
1188 (GEOM::GEOM_Object_ptr theObject,
1189 CORBA::Double theOffset,
1190 CORBA::Boolean doCopy)
1192 GEOM::GEOM_Object_var aGEOMObject;
1193 //Set a not done flag
1194 GetOperations()->SetNotDone();
1196 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
1198 //check if the object is a sub-shape
1199 if (!theObject->IsMainShape() && !doCopy) {
1200 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
1201 return aGEOMObject._retn();
1205 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
1207 //Get the basic object
1208 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1209 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1211 //Create the thickened shape
1214 Handle(GEOM_Object) anObject = GetOperations()->MakeThickening(
1215 aBasicObject, theOffset, doCopy);
1216 if (!GetOperations()->IsDone() || anObject.IsNull())
1217 return aGEOMObject._retn();
1219 return GetObject(anObject);
1223 GetOperations()->MakeThickening(aBasicObject, theOffset, doCopy);
1226 UpdateGUIForObject(theObject);
1228 return aGEOMObject._retn();
1232 //=============================================================================
1236 //=============================================================================
1237 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePath
1238 (GEOM::GEOM_Object_ptr theShape,
1239 GEOM::GEOM_Object_ptr theBase1,
1240 GEOM::GEOM_Object_ptr theBase2)
1242 GEOM::GEOM_Object_var aGEOMObject;
1244 // Set a not done flag
1245 GetOperations()->SetNotDone();
1247 // Get the reference objects
1248 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1249 Handle(GEOM_Object) aBase1 = GetObjectImpl(theBase1);
1250 Handle(GEOM_Object) aBase2 = GetObjectImpl(theBase2);
1252 if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) return aGEOMObject._retn();
1255 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aBase1, aBase2);
1256 if (!GetOperations()->IsDone() || anObject.IsNull())
1257 return aGEOMObject._retn();
1259 return GetObject(anObject);
1262 //=============================================================================
1266 //=============================================================================
1267 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePathEdges
1268 (GEOM::GEOM_Object_ptr theShape,
1269 const GEOM::ListOfGO& theBase1,
1270 const GEOM::ListOfGO& theBase2)
1272 GEOM::GEOM_Object_var aGEOMObject;
1274 // Set a not done flag
1275 GetOperations()->SetNotDone();
1277 // Get the reference objects
1278 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1279 if (aShape.IsNull()) return aGEOMObject._retn();
1281 Handle(TColStd_HSequenceOfTransient) aSeqBases1 = new TColStd_HSequenceOfTransient;
1282 Handle(TColStd_HSequenceOfTransient) aSeqBases2 = new TColStd_HSequenceOfTransient;
1285 int aNbBases1 = theBase1.length();
1286 int aNbBases2 = theBase2.length();
1288 for (ind = 0; ind < aNbBases1; ind++) {
1289 Handle(GEOM_Object) aBase = GetObjectImpl(theBase1[ind]);
1290 if (!aBase.IsNull())
1291 aSeqBases1->Append(aBase);
1293 for (ind = 0; ind < aNbBases2; ind++) {
1294 Handle(GEOM_Object) aBase = GetObjectImpl(theBase2[ind]);
1295 if (!aBase.IsNull())
1296 aSeqBases2->Append(aBase);
1299 if (!aSeqBases1->Length() || !aSeqBases2->Length())
1300 return aGEOMObject._retn();
1303 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aSeqBases1, aSeqBases2);
1304 if (!GetOperations()->IsDone() || anObject.IsNull())
1305 return aGEOMObject._retn();
1307 return GetObject(anObject);