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::ListOfGO *GEOM_I3DPrimOperations_i::MakePipe
798 (GEOM::GEOM_Object_ptr theBase,
799 GEOM::GEOM_Object_ptr thePath,
800 CORBA::Boolean IsGenerateGroups)
802 GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
804 //Set a not done flag
805 GetOperations()->SetNotDone();
807 //Get the reference objects
808 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
809 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
811 if (aBase.IsNull() || aPath.IsNull()) return aSeq._retn();
814 Handle(TColStd_HSequenceOfTransient) aHSeq =
815 GetOperations()->MakePipe(aBase, aPath, IsGenerateGroups);
816 if (!GetOperations()->IsDone() || aHSeq.IsNull())
819 Standard_Integer aLength = aHSeq->Length();
820 aSeq->length(aLength);
821 for (Standard_Integer i = 1; i <= aLength; i++)
822 aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i)));
827 //=============================================================================
829 * MakeRevolutionAxisAngle
831 //=============================================================================
832 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
833 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
834 CORBA::Double theAngle)
836 GEOM::GEOM_Object_var aGEOMObject;
838 //Set a not done flag
839 GetOperations()->SetNotDone();
841 //Get the reference objects
842 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
843 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
845 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
847 //Create the Revolution
848 Handle(GEOM_Object) anObject =
849 GetOperations()->MakeRevolutionAxisAngle(aBase, anAxis, theAngle);
850 if (!GetOperations()->IsDone() || anObject.IsNull())
851 return aGEOMObject._retn();
853 return GetObject(anObject);
856 //=============================================================================
858 * MakeRevolutionAxisAngle2Ways
860 //=============================================================================
861 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
862 (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
863 CORBA::Double theAngle)
865 GEOM::GEOM_Object_var aGEOMObject;
867 //Set a not done flag
868 GetOperations()->SetNotDone();
870 //Get the reference objects
871 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
872 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
874 if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
876 //Create the Revolution
877 Handle(GEOM_Object) anObject =
878 GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
879 if (!GetOperations()->IsDone() || anObject.IsNull())
880 return aGEOMObject._retn();
882 return GetObject(anObject);
885 //=============================================================================
889 //=============================================================================
890 GEOM::GEOM_Object_ptr
891 GEOM_I3DPrimOperations_i::MakeFilling(const GEOM::ListOfGO& theContours,
892 CORBA::Long theMinDeg,
893 CORBA::Long theMaxDeg,
894 CORBA::Double theTol2D,
895 CORBA::Double theTol3D,
896 CORBA::Long theNbIter,
897 GEOM::filling_oper_method theMethod,
898 CORBA::Boolean theApprox)
900 GEOM::GEOM_Object_var aGEOMObject;
902 //Set a not done flag
903 GetOperations()->SetNotDone();
905 //Get the reference objects
906 std::list< Handle(GEOM_Object) > aShapes;
907 if (! GetListOfObjectsImpl( theContours, aShapes ))
908 return aGEOMObject._retn();
912 case GEOM::FOM_Default:
914 // Default (standard behaviour)
918 case GEOM::FOM_UseOri:
920 // Use edges orientation
924 case GEOM::FOM_AutoCorrect:
926 // Auto-correct edges orientation
935 Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
936 (aShapes, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, aMethod, theApprox);
937 if (!GetOperations()->IsDone() || anObject.IsNull())
938 return aGEOMObject._retn();
940 return GetObject(anObject);
943 //=============================================================================
947 //=============================================================================
948 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
949 CORBA::Boolean theModeSolid,
950 CORBA::Double thePreci,
951 CORBA::Boolean theRuled)
953 GEOM::GEOM_Object_var aGEOMObject;
955 //Set a not done flag
956 GetOperations()->SetNotDone();
957 Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
961 aLen = theSeqSections.length();
962 for (ind = 0; ind < aLen; ind++) {
963 Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
965 aSeqSections->Append(aSh);
967 if (!aSeqSections->Length())
968 return aGEOMObject._retn();
970 // Make shell or solid
971 Handle(GEOM_Object) anObject =
972 GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
973 if (!GetOperations()->IsDone() || anObject.IsNull())
974 return aGEOMObject._retn();
976 return GetObject(anObject);
979 //=============================================================================
981 * MakePipeWithDifferentSections
983 //=============================================================================
984 GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
985 (const GEOM::ListOfGO &theBases,
986 const GEOM::ListOfGO &theLocations,
987 GEOM::GEOM_Object_ptr thePath,
988 CORBA::Boolean theWithContact,
989 CORBA::Boolean theWithCorrections,
990 CORBA::Boolean IsGenerateGroups)
992 GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
994 //Set a not done flag
995 GetOperations()->SetNotDone();
996 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
997 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
998 int ind=0, aNbBases =0,aNbLocs=0;
1001 aNbBases = theBases.length();
1002 aNbLocs = theLocations.length();
1004 if (aNbLocs && aNbBases != aNbLocs)
1005 return aSeq._retn();
1007 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1009 return aSeq._retn();
1011 for (ind = 0; ind < aNbBases; ind++) {
1012 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1017 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1020 aSeqLocations->Append(aLoc);
1022 aSeqBases->Append(aBase);
1024 if (!aSeqBases->Length())
1025 return aSeq._retn();
1028 Handle(TColStd_HSequenceOfTransient) aHSeq =
1029 GetOperations()->MakePipeWithDifferentSections
1030 (aSeqBases, aSeqLocations,
1031 aPath, theWithContact,
1032 theWithCorrections, IsGenerateGroups);
1033 if (!GetOperations()->IsDone() || aHSeq.IsNull())
1034 return aSeq._retn();
1036 Standard_Integer aLength = aHSeq->Length();
1037 aSeq->length(aLength);
1038 for (Standard_Integer i = 1; i <= aLength; i++)
1039 aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i)));
1041 return aSeq._retn();
1045 //=============================================================================
1047 * MakePipeWithShellSections
1049 //=============================================================================
1050 GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeWithShellSections
1051 (const GEOM::ListOfGO &theBases,
1052 const GEOM::ListOfGO &theSubBases,
1053 const GEOM::ListOfGO &theLocations,
1054 GEOM::GEOM_Object_ptr thePath,
1055 CORBA::Boolean theWithContact,
1056 CORBA::Boolean theWithCorrections,
1057 CORBA::Boolean IsGenerateGroups)
1059 GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
1061 //Set a not done flag
1062 GetOperations()->SetNotDone();
1063 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1064 Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
1065 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1066 int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
1069 aNbBases = theBases.length();
1070 aNbSubBases = theSubBases.length();
1071 aNbLocs = theLocations.length();
1073 if (aNbLocs && aNbBases != aNbLocs)
1074 return aSeq._retn();
1076 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1078 return aSeq._retn();
1080 for (ind = 0; ind < aNbBases; ind++) {
1081 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1085 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1088 aSeqLocations->Append(aLoc);
1090 aSeqBases->Append(aBase);
1092 if (aNbSubBases >= aNbBases) {
1093 Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
1094 if (aSubBase.IsNull()) {
1095 aSeqSubBases->Clear();
1099 aSeqSubBases->Append(aSubBase);
1102 if (!aSeqBases->Length())
1103 return aSeq._retn();
1106 Handle(TColStd_HSequenceOfTransient) aHSeq =
1107 GetOperations()->MakePipeWithShellSections
1108 (aSeqBases, aSeqSubBases,
1109 aSeqLocations, aPath,
1110 theWithContact, theWithCorrections, IsGenerateGroups);
1111 if (!GetOperations()->IsDone() || aHSeq.IsNull())
1112 return aSeq._retn();
1114 Standard_Integer aLength = aHSeq->Length();
1115 aSeq->length(aLength);
1116 for (Standard_Integer i = 1; i <= aLength; i++)
1117 aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i)));
1119 return aSeq._retn();
1123 //=============================================================================
1125 * MakePipeShellsWithoutPath
1127 //=============================================================================
1128 GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
1129 (const GEOM::ListOfGO &theBases,
1130 const GEOM::ListOfGO &theLocations,
1131 CORBA::Boolean IsGenerateGroups)
1133 GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
1135 //Set a not done flag
1136 GetOperations()->SetNotDone();
1137 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1138 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1139 int ind=0, aNbBases=0, aNbLocs=0;
1142 aNbBases = theBases.length();
1143 aNbLocs = theLocations.length();
1145 if (aNbLocs && aNbBases != aNbLocs)
1146 return aSeq._retn();
1148 for (ind = 0; ind < aNbBases; ind++) {
1149 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1153 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1156 aSeqLocations->Append(aLoc);
1158 aSeqBases->Append(aBase);
1161 if (!aSeqBases->Length())
1162 return aSeq._retn();
1165 Handle(TColStd_HSequenceOfTransient) aHSeq =
1166 GetOperations()->MakePipeShellsWithoutPath
1167 (aSeqBases, aSeqLocations, IsGenerateGroups);
1169 if (!GetOperations()->IsDone() || aHSeq.IsNull())
1170 return aSeq._retn();
1172 Standard_Integer aLength = aHSeq->Length();
1173 aSeq->length(aLength);
1174 for (Standard_Integer i = 1; i <= aLength; i++)
1175 aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i)));
1177 return aSeq._retn();
1180 //=============================================================================
1182 * MakePipeBiNormalAlongVector
1184 //=============================================================================
1185 GEOM::ListOfGO *GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
1186 (GEOM::GEOM_Object_ptr theBase,
1187 GEOM::GEOM_Object_ptr thePath,
1188 GEOM::GEOM_Object_ptr theVec,
1189 CORBA::Boolean IsGenerateGroups)
1191 GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
1193 //Set a not done flag
1194 GetOperations()->SetNotDone();
1196 //Get the reference objects
1197 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
1198 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1199 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
1201 if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aSeq._retn();
1204 Handle(TColStd_HSequenceOfTransient) aHSeq =
1205 GetOperations()->MakePipeBiNormalAlongVector
1206 (aBase, aPath, aVec, IsGenerateGroups);
1207 if (!GetOperations()->IsDone() || aHSeq.IsNull())
1208 return aSeq._retn();
1210 Standard_Integer aLength = aHSeq->Length();
1211 aSeq->length(aLength);
1212 for (Standard_Integer i = 1; i <= aLength; i++)
1213 aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i)));
1215 return aSeq._retn();
1218 //=============================================================================
1222 //=============================================================================
1223 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening
1224 (GEOM::GEOM_Object_ptr theObject,
1225 const GEOM::ListOfLong &theFacesIDs,
1226 CORBA::Double theOffset,
1227 CORBA::Boolean doCopy,
1228 CORBA::Boolean theInside)
1230 GEOM::GEOM_Object_var aGEOMObject;
1231 //Set a not done flag
1232 GetOperations()->SetNotDone();
1234 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
1236 //check if the object is a sub-shape
1237 if (!theObject->IsMainShape() && !doCopy) {
1238 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
1239 return aGEOMObject._retn();
1243 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
1245 //Get the basic object
1246 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1247 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1250 Handle(TColStd_HArray1OfInteger) aFaceIDs;
1251 Standard_Integer aNbIDs = theFacesIDs.length();
1255 aFaceIDs = new TColStd_HArray1OfInteger (1, aNbIDs);
1257 for (i = 0; i < aNbIDs; i++) {
1258 aFaceIDs->SetValue(i + 1, theFacesIDs[i]);
1262 //Create the thickened shape
1265 Handle(GEOM_Object) anObject = GetOperations()->MakeThickening(
1266 aBasicObject, aFaceIDs, theOffset, doCopy, theInside);
1267 if (!GetOperations()->IsDone() || anObject.IsNull())
1268 return aGEOMObject._retn();
1270 return GetObject(anObject);
1274 GetOperations()->MakeThickening(aBasicObject, aFaceIDs, theOffset, doCopy, theInside);
1277 UpdateGUIForObject(theObject);
1279 return aGEOMObject._retn();
1283 //=============================================================================
1287 //=============================================================================
1288 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePath
1289 (GEOM::GEOM_Object_ptr theShape,
1290 GEOM::GEOM_Object_ptr theBase1,
1291 GEOM::GEOM_Object_ptr theBase2)
1293 GEOM::GEOM_Object_var aGEOMObject;
1295 // Set a not done flag
1296 GetOperations()->SetNotDone();
1298 // Get the reference objects
1299 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1300 Handle(GEOM_Object) aBase1 = GetObjectImpl(theBase1);
1301 Handle(GEOM_Object) aBase2 = GetObjectImpl(theBase2);
1303 if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) return aGEOMObject._retn();
1306 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aBase1, aBase2);
1307 if (!GetOperations()->IsDone() || anObject.IsNull())
1308 return aGEOMObject._retn();
1310 return GetObject(anObject);
1313 //=============================================================================
1317 //=============================================================================
1318 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePathEdges
1319 (GEOM::GEOM_Object_ptr theShape,
1320 const GEOM::ListOfGO& theBase1,
1321 const GEOM::ListOfGO& theBase2)
1323 GEOM::GEOM_Object_var aGEOMObject;
1325 // Set a not done flag
1326 GetOperations()->SetNotDone();
1328 // Get the reference objects
1329 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1330 if (aShape.IsNull()) return aGEOMObject._retn();
1332 Handle(TColStd_HSequenceOfTransient) aSeqBases1 = new TColStd_HSequenceOfTransient;
1333 Handle(TColStd_HSequenceOfTransient) aSeqBases2 = new TColStd_HSequenceOfTransient;
1336 int aNbBases1 = theBase1.length();
1337 int aNbBases2 = theBase2.length();
1339 for (ind = 0; ind < aNbBases1; ind++) {
1340 Handle(GEOM_Object) aBase = GetObjectImpl(theBase1[ind]);
1341 if (!aBase.IsNull())
1342 aSeqBases1->Append(aBase);
1344 for (ind = 0; ind < aNbBases2; ind++) {
1345 Handle(GEOM_Object) aBase = GetObjectImpl(theBase2[ind]);
1346 if (!aBase.IsNull())
1347 aSeqBases2->Append(aBase);
1350 if (!aSeqBases1->Length() || !aSeqBases2->Length())
1351 return aGEOMObject._retn();
1354 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aSeqBases1, aSeqBases2);
1355 if (!GetOperations()->IsDone() || anObject.IsNull())
1356 return aGEOMObject._retn();
1358 return GetObject(anObject);