1 // Copyright (C) 2007-2015 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,
770 CORBA::Boolean theInvert)
772 GEOM::GEOM_Object_var aGEOMObject;
774 //Set a not done flag
775 GetOperations()->SetNotDone();
777 //Get the reference objects
778 Handle(GEOM_Object) aInit = GetObjectImpl(theInitShape);
779 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
781 if (aBase.IsNull() || aInit.IsNull()) return aGEOMObject._retn();
784 Handle(GEOM_Object) anObject = GetOperations()->MakeDraftPrism(aInit, aBase, theHeight, theAngle, theFuse, theInvert);
786 if (!GetOperations()->IsDone() || anObject.IsNull())
787 return aGEOMObject._retn();
789 return GetObject(anObject);
792 //=============================================================================
796 //=============================================================================
797 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipe
798 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr thePath)
800 GEOM::GEOM_Object_var aGEOMObject;
802 //Set a not done flag
803 GetOperations()->SetNotDone();
805 //Get the reference objects
806 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
807 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
809 if (aBase.IsNull() || aPath.IsNull()) return aGEOMObject._retn();
812 Handle(GEOM_Object) anObject =
813 GetOperations()->MakePipe(aBase, aPath);
814 if (!GetOperations()->IsDone() || anObject.IsNull())
815 return aGEOMObject._retn();
817 return GetObject(anObject);
820 //=============================================================================
822 * MakeRevolutionAxisAngle
824 //=============================================================================
825 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
826 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
827 CORBA::Double theAngle)
829 GEOM::GEOM_Object_var aGEOMObject;
831 //Set a not done flag
832 GetOperations()->SetNotDone();
834 //Get the reference objects
835 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
836 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
838 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
840 //Create the Revolution
841 Handle(GEOM_Object) anObject =
842 GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
843 if (!GetOperations()->IsDone() || anObject.IsNull())
844 return aGEOMObject._retn();
846 return GetObject(anObject);
849 //=============================================================================
851 * MakeRevolutionAxisAngle2Ways
853 //=============================================================================
854 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
855 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
856 CORBA::Double theAngle)
858 GEOM::GEOM_Object_var aGEOMObject;
860 //Set a not done flag
861 GetOperations()->SetNotDone();
863 //Get the reference objects
864 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
865 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
867 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
869 //Create the Revolution
870 Handle(GEOM_Object) anObject =
871 GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
872 if (!GetOperations()->IsDone() || anObject.IsNull())
873 return aGEOMObject._retn();
875 return GetObject(anObject);
878 //=============================================================================
882 //=============================================================================
883 GEOM::GEOM_Object_ptr
884 GEOM_I3DPrimOperations_i::MakeFilling(const GEOM::ListOfGO& theContours,
885 CORBA::Long theMinDeg,
886 CORBA::Long theMaxDeg,
887 CORBA::Double theTol2D,
888 CORBA::Double theTol3D,
889 CORBA::Long theNbIter,
890 GEOM::filling_oper_method theMethod,
891 CORBA::Boolean theApprox)
893 GEOM::GEOM_Object_var aGEOMObject;
895 //Set a not done flag
896 GetOperations()->SetNotDone();
898 //Get the reference objects
899 std::list< Handle(GEOM_Object) > aShapes;
900 if (! GetListOfObjectsImpl( theContours, aShapes ))
901 return aGEOMObject._retn();
905 case GEOM::FOM_Default:
907 // Default (standard behaviour)
911 case GEOM::FOM_UseOri:
913 // Use edges orientation
917 case GEOM::FOM_AutoCorrect:
919 // Auto-correct edges orientation
928 Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
929 (aShapes, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, aMethod, theApprox);
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 const GEOM::ListOfLong &theFacesIDs,
1190 CORBA::Double theOffset,
1191 CORBA::Boolean doCopy,
1192 CORBA::Boolean theInside)
1194 GEOM::GEOM_Object_var aGEOMObject;
1195 //Set a not done flag
1196 GetOperations()->SetNotDone();
1198 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
1200 //check if the object is a sub-shape
1201 if (!theObject->IsMainShape() && !doCopy) {
1202 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
1203 return aGEOMObject._retn();
1207 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
1209 //Get the basic object
1210 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1211 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1214 Handle(TColStd_HArray1OfInteger) aFaceIDs;
1215 Standard_Integer aNbIDs = theFacesIDs.length();
1219 aFaceIDs = new TColStd_HArray1OfInteger (1, aNbIDs);
1221 for (i = 0; i < aNbIDs; i++) {
1222 aFaceIDs->SetValue(i + 1, theFacesIDs[i]);
1226 //Create the thickened shape
1229 Handle(GEOM_Object) anObject = GetOperations()->MakeThickening(
1230 aBasicObject, aFaceIDs, theOffset, doCopy, theInside);
1231 if (!GetOperations()->IsDone() || anObject.IsNull())
1232 return aGEOMObject._retn();
1234 return GetObject(anObject);
1238 GetOperations()->MakeThickening(aBasicObject, aFaceIDs, theOffset, doCopy, theInside);
1241 UpdateGUIForObject(theObject);
1243 return aGEOMObject._retn();
1247 //=============================================================================
1251 //=============================================================================
1252 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePath
1253 (GEOM::GEOM_Object_ptr theShape,
1254 GEOM::GEOM_Object_ptr theBase1,
1255 GEOM::GEOM_Object_ptr theBase2)
1257 GEOM::GEOM_Object_var aGEOMObject;
1259 // Set a not done flag
1260 GetOperations()->SetNotDone();
1262 // Get the reference objects
1263 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1264 Handle(GEOM_Object) aBase1 = GetObjectImpl(theBase1);
1265 Handle(GEOM_Object) aBase2 = GetObjectImpl(theBase2);
1267 if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) return aGEOMObject._retn();
1270 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aBase1, aBase2);
1271 if (!GetOperations()->IsDone() || anObject.IsNull())
1272 return aGEOMObject._retn();
1274 return GetObject(anObject);
1277 //=============================================================================
1281 //=============================================================================
1282 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePathEdges
1283 (GEOM::GEOM_Object_ptr theShape,
1284 const GEOM::ListOfGO& theBase1,
1285 const GEOM::ListOfGO& theBase2)
1287 GEOM::GEOM_Object_var aGEOMObject;
1289 // Set a not done flag
1290 GetOperations()->SetNotDone();
1292 // Get the reference objects
1293 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1294 if (aShape.IsNull()) return aGEOMObject._retn();
1296 Handle(TColStd_HSequenceOfTransient) aSeqBases1 = new TColStd_HSequenceOfTransient;
1297 Handle(TColStd_HSequenceOfTransient) aSeqBases2 = new TColStd_HSequenceOfTransient;
1300 int aNbBases1 = theBase1.length();
1301 int aNbBases2 = theBase2.length();
1303 for (ind = 0; ind < aNbBases1; ind++) {
1304 Handle(GEOM_Object) aBase = GetObjectImpl(theBase1[ind]);
1305 if (!aBase.IsNull())
1306 aSeqBases1->Append(aBase);
1308 for (ind = 0; ind < aNbBases2; ind++) {
1309 Handle(GEOM_Object) aBase = GetObjectImpl(theBase2[ind]);
1310 if (!aBase.IsNull())
1311 aSeqBases2->Append(aBase);
1314 if (!aSeqBases1->Length() || !aSeqBases2->Length())
1315 return aGEOMObject._retn();
1318 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aSeqBases1, aSeqBases2);
1319 if (!GetOperations()->IsDone() || anObject.IsNull())
1320 return aGEOMObject._retn();
1322 return GetObject(anObject);