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)
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(const GEOM::ListOfGO& theContours,
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 std::list< Handle(GEOM_Object) > aShapes;
899 if (! GetListOfObjectsImpl( theContours, aShapes ))
900 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 (aShapes, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, aMethod, theApprox);
929 if (!GetOperations()->IsDone() || anObject.IsNull())
930 return aGEOMObject._retn();
932 return GetObject(anObject);
935 //=============================================================================
939 //=============================================================================
940 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThruSections(const GEOM::ListOfGO& theSeqSections,
941 CORBA::Boolean theModeSolid,
942 CORBA::Double thePreci,
943 CORBA::Boolean theRuled)
945 GEOM::GEOM_Object_var aGEOMObject;
947 //Set a not done flag
948 GetOperations()->SetNotDone();
949 Handle(TColStd_HSequenceOfTransient) aSeqSections = new TColStd_HSequenceOfTransient;
953 aLen = theSeqSections.length();
954 for (ind = 0; ind < aLen; ind++) {
955 Handle(GEOM_Object) aSh = GetObjectImpl(theSeqSections[ind]);
957 aSeqSections->Append(aSh);
959 if (!aSeqSections->Length())
960 return aGEOMObject._retn();
962 // Make shell or solid
963 Handle(GEOM_Object) anObject =
964 GetOperations()->MakeThruSections(aSeqSections,theModeSolid,thePreci,theRuled);
965 if (!GetOperations()->IsDone() || anObject.IsNull())
966 return aGEOMObject._retn();
968 return GetObject(anObject);
971 //=============================================================================
973 * MakePipeWithDifferentSections
975 //=============================================================================
976 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithDifferentSections
977 (const GEOM::ListOfGO& theBases,
978 const GEOM::ListOfGO& theLocations,
979 GEOM::GEOM_Object_ptr thePath,
980 CORBA::Boolean theWithContact,
981 CORBA::Boolean theWithCorrections)
983 GEOM::GEOM_Object_var aGEOMObject;
985 //Set a not done flag
986 GetOperations()->SetNotDone();
987 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
988 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
989 int ind=0, aNbBases =0,aNbLocs=0;
992 aNbBases = theBases.length();
993 aNbLocs = theLocations.length();
995 if (aNbLocs && aNbBases != aNbLocs)
996 return aGEOMObject._retn();
998 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1000 return aGEOMObject._retn();
1002 for (ind = 0; ind < aNbBases; ind++) {
1003 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1008 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1011 aSeqLocations->Append(aLoc);
1013 aSeqBases->Append(aBase);
1015 if (!aSeqBases->Length())
1016 return aGEOMObject._retn();
1019 Handle(GEOM_Object) anObject =
1020 GetOperations()->MakePipeWithDifferentSections(aSeqBases,aSeqLocations ,aPath,
1021 theWithContact,theWithCorrections);
1022 if (!GetOperations()->IsDone() || anObject.IsNull())
1023 return aGEOMObject._retn();
1025 return GetObject(anObject);
1029 //=============================================================================
1031 * MakePipeWithShellSections
1033 //=============================================================================
1034 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeWithShellSections
1035 (const GEOM::ListOfGO& theBases,
1036 const GEOM::ListOfGO& theSubBases,
1037 const GEOM::ListOfGO& theLocations,
1038 GEOM::GEOM_Object_ptr thePath,
1039 CORBA::Boolean theWithContact,
1040 CORBA::Boolean theWithCorrections)
1042 GEOM::GEOM_Object_var aGEOMObject;
1044 //Set a not done flag
1045 GetOperations()->SetNotDone();
1046 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1047 Handle(TColStd_HSequenceOfTransient) aSeqSubBases = new TColStd_HSequenceOfTransient;
1048 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1049 int ind=0, aNbBases=0, aNbSubBases=0, aNbLocs=0;
1052 aNbBases = theBases.length();
1053 aNbSubBases = theSubBases.length();
1054 aNbLocs = theLocations.length();
1056 if (aNbLocs && aNbBases != aNbLocs)
1057 return aGEOMObject._retn();
1059 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1061 return aGEOMObject._retn();
1063 for (ind = 0; ind < aNbBases; ind++) {
1064 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1068 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1071 aSeqLocations->Append(aLoc);
1073 aSeqBases->Append(aBase);
1075 if (aNbSubBases >= aNbBases) {
1076 Handle(GEOM_Object) aSubBase = GetObjectImpl(theSubBases[ind]);
1077 if (aSubBase.IsNull()) {
1078 aSeqSubBases->Clear();
1082 aSeqSubBases->Append(aSubBase);
1085 if (!aSeqBases->Length())
1086 return aGEOMObject._retn();
1089 Handle(GEOM_Object) anObject =
1090 GetOperations()->MakePipeWithShellSections(aSeqBases, aSeqSubBases,
1091 aSeqLocations, aPath,
1092 theWithContact, theWithCorrections);
1093 if (!GetOperations()->IsDone() || anObject.IsNull())
1094 return aGEOMObject._retn();
1096 return GetObject(anObject);
1100 //=============================================================================
1102 * MakePipeShellsWithoutPath
1104 //=============================================================================
1105 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeShellsWithoutPath
1106 (const GEOM::ListOfGO& theBases,
1107 const GEOM::ListOfGO& theLocations)
1109 GEOM::GEOM_Object_var aGEOMObject;
1111 //Set a not done flag
1112 GetOperations()->SetNotDone();
1113 Handle(TColStd_HSequenceOfTransient) aSeqBases = new TColStd_HSequenceOfTransient;
1114 Handle(TColStd_HSequenceOfTransient) aSeqLocations = new TColStd_HSequenceOfTransient;
1115 int ind=0, aNbBases=0, aNbLocs=0;
1118 aNbBases = theBases.length();
1119 aNbLocs = theLocations.length();
1121 if (aNbLocs && aNbBases != aNbLocs)
1122 return aGEOMObject._retn();
1124 for (ind = 0; ind < aNbBases; ind++) {
1125 Handle(GEOM_Object) aBase = GetObjectImpl(theBases[ind]);
1129 Handle(GEOM_Object) aLoc = GetObjectImpl(theLocations[ind]);
1132 aSeqLocations->Append(aLoc);
1134 aSeqBases->Append(aBase);
1137 if (!aSeqBases->Length())
1138 return aGEOMObject._retn();
1141 Handle(GEOM_Object) anObject =
1142 GetOperations()->MakePipeShellsWithoutPath(aSeqBases,aSeqLocations);
1144 if (!GetOperations()->IsDone() || anObject.IsNull())
1145 return aGEOMObject._retn();
1147 return GetObject(anObject);
1150 //=============================================================================
1152 * MakePipeBiNormalAlongVector
1154 //=============================================================================
1155 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePipeBiNormalAlongVector
1156 (GEOM::GEOM_Object_ptr theBase,
1157 GEOM::GEOM_Object_ptr thePath,
1158 GEOM::GEOM_Object_ptr theVec)
1160 GEOM::GEOM_Object_var aGEOMObject;
1162 //Set a not done flag
1163 GetOperations()->SetNotDone();
1165 //Get the reference objects
1166 Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
1167 Handle(GEOM_Object) aPath = GetObjectImpl(thePath);
1168 Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
1170 if (aBase.IsNull() || aPath.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
1173 Handle(GEOM_Object) anObject =
1174 GetOperations()->MakePipeBiNormalAlongVector(aBase, aPath, aVec);
1175 if (!GetOperations()->IsDone() || anObject.IsNull())
1176 return aGEOMObject._retn();
1178 return GetObject(anObject);
1181 //=============================================================================
1185 //=============================================================================
1186 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeThickening
1187 (GEOM::GEOM_Object_ptr theObject,
1188 CORBA::Double theOffset,
1189 CORBA::Boolean doCopy)
1191 GEOM::GEOM_Object_var aGEOMObject;
1192 //Set a not done flag
1193 GetOperations()->SetNotDone();
1195 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
1197 //check if the object is a sub-shape
1198 if (!theObject->IsMainShape() && !doCopy) {
1199 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
1200 return aGEOMObject._retn();
1204 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
1206 //Get the basic object
1207 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1208 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1210 //Create the thickened shape
1213 Handle(GEOM_Object) anObject = GetOperations()->MakeThickening(
1214 aBasicObject, theOffset, doCopy);
1215 if (!GetOperations()->IsDone() || anObject.IsNull())
1216 return aGEOMObject._retn();
1218 return GetObject(anObject);
1222 GetOperations()->MakeThickening(aBasicObject, theOffset, doCopy);
1225 UpdateGUIForObject(theObject);
1227 return aGEOMObject._retn();
1231 //=============================================================================
1235 //=============================================================================
1236 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePath
1237 (GEOM::GEOM_Object_ptr theShape,
1238 GEOM::GEOM_Object_ptr theBase1,
1239 GEOM::GEOM_Object_ptr theBase2)
1241 GEOM::GEOM_Object_var aGEOMObject;
1243 // Set a not done flag
1244 GetOperations()->SetNotDone();
1246 // Get the reference objects
1247 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1248 Handle(GEOM_Object) aBase1 = GetObjectImpl(theBase1);
1249 Handle(GEOM_Object) aBase2 = GetObjectImpl(theBase2);
1251 if (aShape.IsNull() || aBase1.IsNull() || aBase2.IsNull()) return aGEOMObject._retn();
1254 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aBase1, aBase2);
1255 if (!GetOperations()->IsDone() || anObject.IsNull())
1256 return aGEOMObject._retn();
1258 return GetObject(anObject);
1261 //=============================================================================
1265 //=============================================================================
1266 GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::RestorePathEdges
1267 (GEOM::GEOM_Object_ptr theShape,
1268 const GEOM::ListOfGO& theBase1,
1269 const GEOM::ListOfGO& theBase2)
1271 GEOM::GEOM_Object_var aGEOMObject;
1273 // Set a not done flag
1274 GetOperations()->SetNotDone();
1276 // Get the reference objects
1277 Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
1278 if (aShape.IsNull()) return aGEOMObject._retn();
1280 Handle(TColStd_HSequenceOfTransient) aSeqBases1 = new TColStd_HSequenceOfTransient;
1281 Handle(TColStd_HSequenceOfTransient) aSeqBases2 = new TColStd_HSequenceOfTransient;
1284 int aNbBases1 = theBase1.length();
1285 int aNbBases2 = theBase2.length();
1287 for (ind = 0; ind < aNbBases1; ind++) {
1288 Handle(GEOM_Object) aBase = GetObjectImpl(theBase1[ind]);
1289 if (!aBase.IsNull())
1290 aSeqBases1->Append(aBase);
1292 for (ind = 0; ind < aNbBases2; ind++) {
1293 Handle(GEOM_Object) aBase = GetObjectImpl(theBase2[ind]);
1294 if (!aBase.IsNull())
1295 aSeqBases2->Append(aBase);
1298 if (!aSeqBases1->Length() || !aSeqBases2->Length())
1299 return aGEOMObject._retn();
1302 Handle(GEOM_Object) anObject = GetOperations()->RestorePath(aShape, aSeqBases1, aSeqBases2);
1303 if (!GetOperations()->IsDone() || anObject.IsNull())
1304 return aGEOMObject._retn();
1306 return GetObject(anObject);