1 // Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include <Standard_Stream.hxx>
25 #include "GEOM_ITransformOperations_i.hh"
27 #include "utilities.h"
29 #include "Utils_ExceptHandlers.hxx"
31 #include <TDF_Label.hxx>
32 #include <TDF_Tool.hxx>
33 #include <TCollection_AsciiString.hxx>
34 #include "GEOM_Engine.hxx"
35 #include "GEOM_Object.hxx"
37 #define SUBSHAPE_ERROR "Sub shape cannot be transformed"
39 //=============================================================================
43 //=============================================================================
45 GEOM_ITransformOperations_i::GEOM_ITransformOperations_i (PortableServer::POA_ptr thePOA,
46 GEOM::GEOM_Gen_ptr theEngine,
47 ::GEOMImpl_ITransformOperations* theImpl)
48 :GEOM_IOperations_i(thePOA, theEngine, theImpl)
50 MESSAGE("GEOM_ITransformOperations_i::GEOM_ITransformOperations_i");
53 //=============================================================================
57 //=============================================================================
59 GEOM_ITransformOperations_i::~GEOM_ITransformOperations_i()
61 MESSAGE("GEOM_ITransformOperations_i::~GEOM_ITransformOperations_i");
65 //=============================================================================
69 //=============================================================================
70 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPoints
71 (GEOM::GEOM_Object_ptr theObject,
72 GEOM::GEOM_Object_ptr thePoint1,
73 GEOM::GEOM_Object_ptr thePoint2)
76 GetOperations()->SetNotDone();
77 GEOM::GEOM_Object_var aGEOMObject;
79 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
81 //check if the object is a sub-shape
82 if (!theObject->IsMainShape()) {
83 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
84 return aGEOMObject._retn();
87 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
89 //Get the object itself
90 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
91 if (anObject.IsNull()) return aGEOMObject._retn();
93 //Get the first point of translation
94 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
95 if (aPoint1.IsNull()) return aGEOMObject._retn();
97 //Get the second point of translation
98 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
99 if (aPoint2.IsNull()) return aGEOMObject._retn();
101 //Perform the translation
102 GetOperations()->TranslateTwoPoints(anObject, aPoint1, aPoint2);
105 UpdateGUIForObject(theObject);
107 return aGEOMObject._retn();
110 //=============================================================================
112 * TranslateTwoPointsCopy
114 //=============================================================================
115 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateTwoPointsCopy
116 (GEOM::GEOM_Object_ptr theObject,
117 GEOM::GEOM_Object_ptr thePoint1,
118 GEOM::GEOM_Object_ptr thePoint2)
120 GEOM::GEOM_Object_var aGEOMObject;
122 //Set a not done flag
123 GetOperations()->SetNotDone();
125 //Get the object itself
126 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
127 if (aBasicObject.IsNull()) return aGEOMObject._retn();
129 //Get the first point of translation
130 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
131 if (aPoint1.IsNull()) return aGEOMObject._retn();
133 //Get the second point of translation
134 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
135 if (aPoint2.IsNull()) return aGEOMObject._retn();
137 //Create the translated shape
138 Handle(GEOM_Object) anObject =
139 GetOperations()->TranslateTwoPointsCopy(aBasicObject, aPoint1, aPoint2);
140 if (!GetOperations()->IsDone() || anObject.IsNull())
141 return aGEOMObject._retn();
143 return GetObject(anObject);
146 //=============================================================================
150 //=============================================================================
151 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZ
152 (GEOM::GEOM_Object_ptr theObject,
153 CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ)
155 //Set a not done flag
156 GetOperations()->SetNotDone();
157 GEOM::GEOM_Object_var aGEOMObject;
159 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
161 //check if the object is a sub-shape
162 if (!theObject->IsMainShape()) {
163 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
164 return aGEOMObject._retn();
167 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
169 //Get the object itself
170 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
171 if (anObject.IsNull()) return aGEOMObject._retn();
173 //Perform the translation
174 GetOperations()->TranslateDXDYDZ(anObject, theDX, theDY, theDZ);
177 UpdateGUIForObject(theObject);
179 return aGEOMObject._retn();
182 //=============================================================================
184 * TranslateDXDYDZCopy
186 //=============================================================================
187 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateDXDYDZCopy
188 (GEOM::GEOM_Object_ptr theObject,
189 CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ)
191 GEOM::GEOM_Object_var aGEOMObject;
193 //Set a not done flag
194 GetOperations()->SetNotDone();
196 //Get the object itself
197 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
198 if (aBasicObject.IsNull()) return aGEOMObject._retn();
200 //Create the translated shape
201 Handle(GEOM_Object) anObject =
202 GetOperations()->TranslateDXDYDZCopy(aBasicObject, theDX, theDY, theDZ);
203 if (!GetOperations()->IsDone() || anObject.IsNull())
204 return aGEOMObject._retn();
206 return GetObject(anObject);
209 //=============================================================================
213 //=============================================================================
214 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateVector
215 (GEOM::GEOM_Object_ptr theObject,
216 GEOM::GEOM_Object_ptr theVector)
218 //Set a not done flag
219 GetOperations()->SetNotDone();
220 GEOM::GEOM_Object_var aGEOMObject;
222 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
224 //check if the object is a sub-shape
225 if (!theObject->IsMainShape()) {
226 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
227 return aGEOMObject._retn();
230 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
232 //Get the object itself
233 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
234 if (anObject.IsNull()) return aGEOMObject._retn();
236 //Get the vector of translation
237 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
238 if (aVector.IsNull()) return aGEOMObject._retn();
240 //Perform the translation
241 GetOperations()->TranslateVector(anObject, aVector);
244 UpdateGUIForObject(theObject);
246 return aGEOMObject._retn();
249 //=============================================================================
251 * TranslateVectorCopy
253 //=============================================================================
254 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateVectorCopy
255 (GEOM::GEOM_Object_ptr theObject,
256 GEOM::GEOM_Object_ptr theVector)
258 GEOM::GEOM_Object_var aGEOMObject;
260 //Set a not done flag
261 GetOperations()->SetNotDone();
263 //Get the object itself
264 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
265 if (aBasicObject.IsNull()) return aGEOMObject._retn();
267 //Get the vector of translation
268 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
269 if (aVector.IsNull()) return aGEOMObject._retn();
271 //Perform the translation
272 Handle(GEOM_Object) anObject = GetOperations()->TranslateVectorCopy(aBasicObject, aVector);
273 if (!GetOperations()->IsDone() || anObject.IsNull())
274 return aGEOMObject._retn();
276 return GetObject(anObject);
279 //=============================================================================
281 * TranslateVectorDistance
283 //=============================================================================
284 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TranslateVectorDistance
285 (GEOM::GEOM_Object_ptr theObject,
286 GEOM::GEOM_Object_ptr theVector,
287 CORBA::Double theDistance,
288 CORBA::Boolean theCopy)
290 GEOM::GEOM_Object_var aGEOMObject;
291 GetOperations()->SetNotDone(); //Set a not done flag
293 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
295 //check if the object is a sub-shape
296 if (!theCopy && !theObject->IsMainShape()) {
297 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
298 return aGEOMObject._retn();
302 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
304 //Get the object itself
305 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
306 if (aBasicObject.IsNull()) return aGEOMObject._retn();
308 //Get the vector of translation
309 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
310 if (aVector.IsNull()) return aGEOMObject._retn();
312 //Perform the translation
314 Handle(GEOM_Object) anObject = GetOperations()->
315 TranslateVectorDistance(aBasicObject, aVector, theDistance, theCopy);
316 if (!GetOperations()->IsDone() || anObject.IsNull())
317 return aGEOMObject._retn();
319 return GetObject(anObject);
322 GetOperations()->TranslateVectorDistance(aBasicObject, aVector, theDistance, theCopy);
325 UpdateGUIForObject(theObject);
327 return aGEOMObject._retn();
330 //=============================================================================
334 //=============================================================================
335 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::Rotate (GEOM::GEOM_Object_ptr theObject,
336 GEOM::GEOM_Object_ptr theAxis,
337 CORBA::Double theAngle)
339 //Set a not done flag
340 GetOperations()->SetNotDone();
341 GEOM::GEOM_Object_var aGEOMObject;
343 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
345 //check if the object is a sub-shape
346 if (!theObject->IsMainShape()) {
347 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
348 return aGEOMObject._retn();
351 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
353 //Get the object itself
354 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
355 if (anObject.IsNull()) return aGEOMObject._retn();
357 //Get the axis of revolution
358 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
359 if (anAxis.IsNull()) return aGEOMObject._retn();
361 //Perform the rotation
362 GetOperations()->Rotate(anObject, anAxis, theAngle);
365 UpdateGUIForObject(theObject);
367 return aGEOMObject._retn();
370 //=============================================================================
374 //=============================================================================
375 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateCopy (GEOM::GEOM_Object_ptr theObject,
376 GEOM::GEOM_Object_ptr theAxis,
377 CORBA::Double theAngle)
379 GEOM::GEOM_Object_var aGEOMObject;
381 //Set a not done flag
382 GetOperations()->SetNotDone();
384 //Get the object itself
385 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
386 if (aBasicObject.IsNull()) return aGEOMObject._retn();
388 //Get the axis of rotation
389 Handle(GEOM_Object) anAxis = GetObjectImpl(theAxis);
390 if (anAxis.IsNull()) return aGEOMObject._retn();
392 //Perform the rotation
393 Handle(GEOM_Object) anObject = GetOperations()->RotateCopy(aBasicObject, anAxis, theAngle);
394 if (!GetOperations()->IsDone() || anObject.IsNull())
395 return aGEOMObject._retn();
397 return GetObject(anObject);
400 //=============================================================================
404 //=============================================================================
405 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPlane
406 (GEOM::GEOM_Object_ptr theObject,
407 GEOM::GEOM_Object_ptr thePlane)
409 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
411 //Set a not done flag
412 GetOperations()->SetNotDone();
414 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
416 //check if the object is a sub-shape
417 if (!theObject->IsMainShape()) {
418 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
419 return aGEOMObject._retn();
422 //Get the object itself
423 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
424 if (anObject.IsNull()) return aGEOMObject._retn();
427 Handle(GEOM_Object) aPlane = GetObjectImpl(thePlane);
428 if (aPlane.IsNull()) return aGEOMObject._retn();
431 GetOperations()->MirrorPlane(anObject, aPlane);
434 UpdateGUIForObject(theObject);
436 return aGEOMObject._retn();
439 //=============================================================================
443 //=============================================================================
444 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPlaneCopy
445 (GEOM::GEOM_Object_ptr theObject,
446 GEOM::GEOM_Object_ptr thePlane)
448 GEOM::GEOM_Object_var aGEOMObject;
450 //Set a not done flag
451 GetOperations()->SetNotDone();
453 //Get the object itself
454 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
455 if (aBasicObject.IsNull()) return aGEOMObject._retn();
457 //Get the vector of translation
458 Handle(GEOM_Object) aPlane = GetObjectImpl(thePlane);
459 if (aPlane.IsNull()) return aGEOMObject._retn();
462 Handle(GEOM_Object) anObject = GetOperations()->MirrorPlaneCopy(aBasicObject, aPlane);
463 if (!GetOperations()->IsDone() || anObject.IsNull())
464 return aGEOMObject._retn();
466 return GetObject(anObject);
469 //=============================================================================
473 //=============================================================================
474 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorAxis
475 (GEOM::GEOM_Object_ptr theObject,
476 GEOM::GEOM_Object_ptr theAxis)
478 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
480 //Set a not done flag
481 GetOperations()->SetNotDone();
483 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
485 //check if the object is a sub-shape
486 if (!theObject->IsMainShape()) {
487 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
488 return aGEOMObject._retn();
491 //Get the object itself
492 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
493 if (anObject.IsNull()) return aGEOMObject._retn();
496 Handle(GEOM_Object) aAxis = GetObjectImpl(theAxis);
497 if (aAxis.IsNull()) return aGEOMObject._retn();
500 GetOperations()->MirrorAxis(anObject, aAxis);
503 UpdateGUIForObject(theObject);
505 return aGEOMObject._retn();
508 //=============================================================================
512 //=============================================================================
513 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorAxisCopy
514 (GEOM::GEOM_Object_ptr theObject,
515 GEOM::GEOM_Object_ptr theAxis)
517 GEOM::GEOM_Object_var aGEOMObject;
519 //Set a not done flag
520 GetOperations()->SetNotDone();
522 //Get the object itself
523 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
524 if (aBasicObject.IsNull()) return aGEOMObject._retn();
526 //Get the vector of translation
527 Handle(GEOM_Object) aAxis = GetObjectImpl(theAxis);
528 if (aAxis.IsNull()) return aGEOMObject._retn();
531 Handle(GEOM_Object) anObject = GetOperations()->MirrorAxisCopy(aBasicObject, aAxis);
532 if (!GetOperations()->IsDone() || anObject.IsNull())
533 return aGEOMObject._retn();
535 return GetObject(anObject);
538 //=============================================================================
542 //=============================================================================
543 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPoint
544 (GEOM::GEOM_Object_ptr theObject,
545 GEOM::GEOM_Object_ptr thePoint)
547 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
549 //Set a not done flag
550 GetOperations()->SetNotDone();
552 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
554 //check if the object is a sub-shape
555 if (!theObject->IsMainShape()) {
556 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
557 return aGEOMObject._retn();
560 //Get the object itself
561 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
562 if (anObject.IsNull()) return aGEOMObject._retn();
565 Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint);
566 if (aPoint.IsNull()) return aGEOMObject._retn();
569 GetOperations()->MirrorPoint(anObject, aPoint);
572 UpdateGUIForObject(theObject);
574 return aGEOMObject._retn();
577 //=============================================================================
581 //=============================================================================
582 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MirrorPointCopy
583 (GEOM::GEOM_Object_ptr theObject,
584 GEOM::GEOM_Object_ptr thePoint)
586 GEOM::GEOM_Object_var aGEOMObject;
588 //Set a not done flag
589 GetOperations()->SetNotDone();
591 //Get the object itself
592 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
593 if (aBasicObject.IsNull()) return aGEOMObject._retn();
595 //Get the vector of translation
596 Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint);
597 if (aPoint.IsNull()) return aGEOMObject._retn();
600 Handle(GEOM_Object) anObject = GetOperations()->MirrorPointCopy(aBasicObject, aPoint);
601 if (!GetOperations()->IsDone() || anObject.IsNull())
602 return aGEOMObject._retn();
604 return GetObject(anObject);
607 //=============================================================================
611 //=============================================================================
612 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::OffsetShape
613 (GEOM::GEOM_Object_ptr theObject,
614 CORBA::Double theOffset)
616 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
618 //Set a not done flag
619 GetOperations()->SetNotDone();
621 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
623 //check if the object is a sub-shape
624 if (!theObject->IsMainShape()) {
625 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
626 return aGEOMObject._retn();
629 //Get the basic object
630 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
631 if (aBasicObject.IsNull()) return aGEOMObject._retn();
633 //Create the offset shape
634 GetOperations()->OffsetShape(aBasicObject, theOffset);
637 UpdateGUIForObject(theObject);
639 return aGEOMObject._retn();
642 //=============================================================================
646 //=============================================================================
647 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::OffsetShapeCopy
648 (GEOM::GEOM_Object_ptr theObject,
649 CORBA::Double theOffset)
651 GEOM::GEOM_Object_var aGEOMObject;
653 //Set a not done flag
654 GetOperations()->SetNotDone();
656 //Get the basic object
657 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
658 if (aBasicObject.IsNull()) return aGEOMObject._retn();
660 //Create the offset shape
661 Handle(GEOM_Object) anObject = GetOperations()->OffsetShapeCopy(aBasicObject, theOffset);
662 if (!GetOperations()->IsDone() || anObject.IsNull())
663 return aGEOMObject._retn();
665 return GetObject(anObject);
668 //=============================================================================
672 //=============================================================================
673 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ProjectShapeCopy
674 (GEOM::GEOM_Object_ptr theSource,
675 GEOM::GEOM_Object_ptr theTarget)
677 GEOM::GEOM_Object_var aGEOMObject;
679 //Set a not done flag
680 GetOperations()->SetNotDone();
682 //Get the input objects
683 Handle(GEOM_Object) aSource = GetObjectImpl(theSource);
684 Handle(GEOM_Object) aTarget = GetObjectImpl(theTarget);
685 if (aSource.IsNull() || aTarget.IsNull()) return aGEOMObject._retn();
687 //Create the projection
688 Handle(GEOM_Object) anObject = GetOperations()->ProjectShapeCopy(aSource, aTarget);
689 if (!GetOperations()->IsDone() || anObject.IsNull())
690 return aGEOMObject._retn();
692 return GetObject(anObject);
695 //=============================================================================
699 //=============================================================================
700 CORBA::Double GEOM_ITransformOperations_i::ProjectPointOnWire
701 (GEOM::GEOM_Object_ptr thePoint,
702 GEOM::GEOM_Object_ptr theWire,
703 GEOM::GEOM_Object_out thePointOnEdge,
704 CORBA::Long& theEdgeInWireIndex)
706 //Set a not done flag
707 GetOperations()->SetNotDone();
709 //Get the reference shape
710 Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint);
711 Handle(GEOM_Object) aWire = GetObjectImpl(theWire);
713 if (aPoint.IsNull() || aWire.IsNull()) {
717 Handle(GEOM_Object) aPointOnEdge;
718 CORBA::Double aResult = GetOperations()->ProjectPointOnWire
719 (aPoint, aWire, aPointOnEdge, theEdgeInWireIndex);
721 if (!aPointOnEdge.IsNull()) {
722 thePointOnEdge = GetObject(aPointOnEdge);
728 //=============================================================================
732 //=============================================================================
733 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShape
734 (GEOM::GEOM_Object_ptr theObject,
735 GEOM::GEOM_Object_ptr thePoint,
736 CORBA::Double theFactor)
738 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
740 //Set a not done flag
741 GetOperations()->SetNotDone();
743 if (theObject->_is_nil()) return aGEOMObject._retn();
745 //check if the object is a sub-shape
746 if (!theObject->IsMainShape()) {
747 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
748 return aGEOMObject._retn();
751 //Get the object itself
752 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
753 if (anObject.IsNull()) return aGEOMObject._retn();
756 Handle(GEOM_Object) aPoint;
757 if (!thePoint->_is_nil()) {
758 aPoint = GetObjectImpl(thePoint);
759 if (aPoint.IsNull()) return aGEOMObject._retn();
763 GetOperations()->ScaleShape(anObject, aPoint, theFactor);
766 UpdateGUIForObject(theObject);
768 return aGEOMObject._retn();
771 //=============================================================================
775 //=============================================================================
776 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeCopy
777 (GEOM::GEOM_Object_ptr theObject,
778 GEOM::GEOM_Object_ptr thePoint,
779 CORBA::Double theFactor)
781 GEOM::GEOM_Object_var aGEOMObject;
783 //Set a not done flag
784 GetOperations()->SetNotDone();
786 //Get the basic object
787 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
788 if (aBasicObject.IsNull()) return aGEOMObject._retn();
791 Handle(GEOM_Object) aPoint;
792 if (!thePoint->_is_nil()) {
793 aPoint = GetObjectImpl(thePoint);
794 if (aPoint.IsNull()) return aGEOMObject._retn();
798 Handle(GEOM_Object) anObject =
799 GetOperations()->ScaleShapeCopy(aBasicObject, aPoint, theFactor);
800 if (!GetOperations()->IsDone() || anObject.IsNull())
801 return aGEOMObject._retn();
803 return GetObject(anObject);
806 //=============================================================================
808 * ScaleShapeAlongAxes
810 //=============================================================================
811 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeAlongAxes
812 (GEOM::GEOM_Object_ptr theObject,
813 GEOM::GEOM_Object_ptr thePoint,
814 CORBA::Double theFactorX,
815 CORBA::Double theFactorY,
816 CORBA::Double theFactorZ)
818 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
820 //Set a not done flag
821 GetOperations()->SetNotDone();
823 if (theObject->_is_nil()) return aGEOMObject._retn();
825 //check if the object is a sub-shape
826 if (!theObject->IsMainShape()) {
827 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
828 return aGEOMObject._retn();
831 //Get the object itself
832 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
833 if (anObject.IsNull()) return aGEOMObject._retn();
836 Handle(GEOM_Object) aPoint;
837 if (!thePoint->_is_nil()) {
838 aPoint = GetObjectImpl(thePoint);
839 if (aPoint.IsNull()) return aGEOMObject._retn();
843 GetOperations()->ScaleShapeAlongAxes
844 (anObject, aPoint, theFactorX, theFactorY, theFactorZ, /*doCopy*/false);
847 UpdateGUIForObject(theObject);
849 return aGEOMObject._retn();
852 //=============================================================================
854 * ScaleShapeAlongAxesCopy
856 //=============================================================================
857 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::ScaleShapeAlongAxesCopy
858 (GEOM::GEOM_Object_ptr theObject,
859 GEOM::GEOM_Object_ptr thePoint,
860 CORBA::Double theFactorX,
861 CORBA::Double theFactorY,
862 CORBA::Double theFactorZ)
864 GEOM::GEOM_Object_var aGEOMObject;
866 //Set a not done flag
867 GetOperations()->SetNotDone();
869 //Get the basic object
870 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
871 if (aBasicObject.IsNull()) return aGEOMObject._retn();
874 Handle(GEOM_Object) aPoint;
875 if (!thePoint->_is_nil()) {
876 aPoint = GetObjectImpl(thePoint);
877 if (aPoint.IsNull()) return aGEOMObject._retn();
881 Handle(GEOM_Object) anObject = GetOperations()->ScaleShapeAlongAxes
882 (aBasicObject, aPoint, theFactorX, theFactorY, theFactorZ, /*doCopy*/true);
883 if (!GetOperations()->IsDone() || anObject.IsNull())
884 return aGEOMObject._retn();
886 return GetObject(anObject);
889 //=============================================================================
893 //=============================================================================
894 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionShape
895 (GEOM::GEOM_Object_ptr theObject,
896 GEOM::GEOM_Object_ptr theStartLCS,
897 GEOM::GEOM_Object_ptr theEndLCS)
899 GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
901 //Set a not done flag
902 GetOperations()->SetNotDone();
904 if (CORBA::is_nil(theObject) || CORBA::is_nil(theEndLCS))
905 return aGEOMObject._retn();
907 //check if the object is a sub-shape
908 if (!theObject->IsMainShape()) {
909 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
910 return aGEOMObject._retn();
913 //Get the basic object
914 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
915 if (anObject.IsNull()) return aGEOMObject._retn();
917 //Get the Start LCS (may be NULL for positioning from global LCS)
918 Handle(GEOM_Object) aStartLCS;
919 if (!CORBA::is_nil(theStartLCS)) {
920 aStartLCS = GetObjectImpl(theStartLCS);
921 if (aStartLCS.IsNull()) return aGEOMObject._retn();
925 Handle(GEOM_Object) aEndLCS = GetObjectImpl(theEndLCS);
926 if (aEndLCS.IsNull()) return aGEOMObject._retn();
928 //Perform the Position
929 GetOperations()->PositionShape(anObject, aStartLCS, aEndLCS);
932 UpdateGUIForObject(theObject);
934 return aGEOMObject._retn();
937 //=============================================================================
941 //=============================================================================
942 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionShapeCopy
943 (GEOM::GEOM_Object_ptr theObject,
944 GEOM::GEOM_Object_ptr theStartLCS,
945 GEOM::GEOM_Object_ptr theEndLCS)
947 GEOM::GEOM_Object_var aGEOMObject;
949 //Set a not done flag
950 GetOperations()->SetNotDone();
952 //Get the basic object
953 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
954 if (aBasicObject.IsNull()) return aGEOMObject._retn();
956 //Get the Start LCS (may be NULL for positioning from global LCS)
957 Handle(GEOM_Object) aStartLCS;
958 if (!CORBA::is_nil(theStartLCS)) {
959 aStartLCS = GetObjectImpl(theStartLCS);
960 if (aStartLCS.IsNull()) return aGEOMObject._retn();
964 Handle(GEOM_Object) aEndLCS = GetObjectImpl(theEndLCS);
965 if (aEndLCS.IsNull()) return aGEOMObject._retn();
967 //Perform the position
968 Handle(GEOM_Object) anObject =
969 GetOperations()->PositionShapeCopy(aBasicObject, aStartLCS, aEndLCS);
970 if (!GetOperations()->IsDone() || anObject.IsNull())
971 return aGEOMObject._retn();
973 return GetObject(anObject);
976 //=============================================================================
980 //=============================================================================
981 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::PositionAlongPath
982 (GEOM::GEOM_Object_ptr theObject,
983 GEOM::GEOM_Object_ptr thePath,
984 CORBA::Double theDistance,
985 CORBA::Boolean theCopy,
986 CORBA::Boolean theReverse)
988 GEOM::GEOM_Object_var aGEOMObject;
990 //Set a not done flag
991 GetOperations()->SetNotDone();
993 //Get the basic object
994 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
995 if (aBasicObject.IsNull()) return aGEOMObject._retn();
997 //Get the path object
998 Handle(GEOM_Object) aPathObject = GetObjectImpl(thePath);
999 if (aPathObject.IsNull()) return aGEOMObject._retn();
1001 //Perform the position
1002 Handle(GEOM_Object) anObject =
1003 GetOperations()->PositionAlongPath(aBasicObject, aPathObject, theDistance, theCopy, theReverse);
1004 if (!GetOperations()->IsDone() || anObject.IsNull())
1005 return aGEOMObject._retn();
1009 UpdateGUIForObject(theObject);
1012 return GetObject(anObject);
1015 //=============================================================================
1019 //=============================================================================
1020 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate1D
1021 (GEOM::GEOM_Object_ptr theObject,
1022 GEOM::GEOM_Object_ptr theVector,
1023 CORBA::Double theStep, CORBA::Long theNbTimes)
1025 //Set a not done flag
1026 GetOperations()->SetNotDone();
1028 GEOM::GEOM_Object_var aGEOMObject;
1030 //Get the object itself
1031 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1032 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1034 //Get the vector of translation
1035 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
1036 //if (aVector.IsNull()) return aGEOMObject._retn(); // DX by default
1038 //Perform the translation
1039 Handle(GEOM_Object) anObject =
1040 GetOperations()->Translate1D(aBasicObject, aVector, theStep, theNbTimes);
1041 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1043 return GetObject(anObject);
1046 //=============================================================================
1050 //=============================================================================
1051 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate2D (GEOM::GEOM_Object_ptr theObject,
1052 GEOM::GEOM_Object_ptr theVector1,
1053 CORBA::Double theStep1,
1054 CORBA::Long theNbTimes1,
1055 GEOM::GEOM_Object_ptr theVector2,
1056 CORBA::Double theStep2,
1057 CORBA::Long theNbTimes2)
1059 //Set a not done flag
1060 GetOperations()->SetNotDone();
1062 GEOM::GEOM_Object_var aGEOMObject;
1064 //Get the object itself
1065 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1066 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1068 //Get the vector1 of translation
1069 Handle(GEOM_Object) aVector1 = GetObjectImpl(theVector1);
1070 //if (aVector1.IsNull()) return aGEOMObject._retn(); // DX by default
1072 //Get the vector2 of translation
1073 Handle(GEOM_Object) aVector2 = GetObjectImpl(theVector2);
1074 //if (aVector2.IsNull()) return aGEOMObject._retn(); // DY by default
1076 //Perform the translation
1077 Handle(GEOM_Object) anObject = GetOperations()->Translate2D
1078 (aBasicObject, aVector1, theStep1, theNbTimes1, aVector2, theStep2, theNbTimes2);
1079 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1081 return GetObject(anObject);
1084 //=============================================================================
1088 //=============================================================================
1089 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate1D (GEOM::GEOM_Object_ptr theObject,
1090 GEOM::GEOM_Object_ptr theVector,
1091 CORBA::Long theNbTimes)
1093 //Set a not done flag
1094 GetOperations()->SetNotDone();
1096 GEOM::GEOM_Object_var aGEOMObject;
1098 //Get the object itself
1099 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1100 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1102 //Get the a directon of rotation
1103 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
1104 //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
1106 //Perform the rotation
1107 Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theNbTimes);
1108 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1110 return GetObject(anObject);
1113 //=============================================================================
1115 * MultiRotate1DByStep
1117 //=============================================================================
1118 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate1DByStep (GEOM::GEOM_Object_ptr theObject,
1119 GEOM::GEOM_Object_ptr theVector,
1120 CORBA::Double theAngleStep,
1121 CORBA::Long theNbSteps)
1123 //Set a not done flag
1124 GetOperations()->SetNotDone();
1126 GEOM::GEOM_Object_var aGEOMObject;
1128 //Get the object itself
1129 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1130 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1132 //Get the a directon of rotation
1133 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
1134 //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
1136 //Perform the rotation
1137 Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theAngleStep, theNbSteps);
1138 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1140 return GetObject(anObject);
1143 //=============================================================================
1145 * MultiRotate2DNbTimes
1147 //=============================================================================
1148 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2DNbTimes (GEOM::GEOM_Object_ptr theObject,
1149 GEOM::GEOM_Object_ptr theVector,
1150 CORBA::Long theNbObjects,
1151 CORBA::Double theRadialStep,
1152 CORBA::Long theNbSteps)
1154 //Set a not done flag
1155 GetOperations()->SetNotDone();
1157 GEOM::GEOM_Object_var aGEOMObject;
1159 //Get the object itself
1160 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1161 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1163 //Get the a directon of rotation
1164 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
1165 //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
1167 //Perform the rotation
1168 Handle(GEOM_Object) anObject = GetOperations()->Rotate2D
1169 (aBasicObject, aVector, theNbObjects, theRadialStep, theNbSteps);
1170 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1172 return GetObject(anObject);
1175 //=============================================================================
1177 * MultiRotate2DByStep
1179 //=============================================================================
1180 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2DByStep (GEOM::GEOM_Object_ptr theObject,
1181 GEOM::GEOM_Object_ptr theVector,
1182 CORBA::Double theAngle,
1183 CORBA::Long theNbTimes1,
1184 CORBA::Double theStep,
1185 CORBA::Long theNbTimes2)
1187 //Set a not done flag
1188 GetOperations()->SetNotDone();
1190 GEOM::GEOM_Object_var aGEOMObject;
1192 //Get the object itself
1193 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1194 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1196 //Get the a directon of rotation
1197 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
1198 //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
1200 //Perform the rotation
1201 Handle(GEOM_Object) anObject = GetOperations()->Rotate2D
1202 (aBasicObject, aVector, theAngle, theNbTimes1, theStep, theNbTimes2);
1203 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1205 return GetObject(anObject);
1208 //=============================================================================
1212 //=============================================================================
1213 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2D (GEOM::GEOM_Object_ptr theObject,
1214 GEOM::GEOM_Object_ptr theVector,
1215 CORBA::Double theAngle,
1216 CORBA::Long theNbTimes1,
1217 CORBA::Double theStep,
1218 CORBA::Long theNbTimes2)
1220 //Set a not done flag
1221 GetOperations()->SetNotDone();
1223 GEOM::GEOM_Object_var aGEOMObject;
1225 //Get the object itself
1226 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1227 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1229 //Get the a directon of rotation
1230 Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
1231 //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
1233 double anAngle = M_PI * theAngle / 180.;
1235 //Perform the rotation
1236 Handle(GEOM_Object) anObject = GetOperations()->Rotate2D
1237 (aBasicObject, aVector, anAngle, theNbTimes1, theStep, theNbTimes2);
1238 if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
1240 return GetObject(anObject);
1243 //=============================================================================
1247 //=============================================================================
1248 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateThreePoints
1249 (GEOM::GEOM_Object_ptr theObject,
1250 GEOM::GEOM_Object_ptr theCentPoint,
1251 GEOM::GEOM_Object_ptr thePoint1,
1252 GEOM::GEOM_Object_ptr thePoint2)
1254 //Set a not done flag
1255 GetOperations()->SetNotDone();
1256 GEOM::GEOM_Object_var aGEOMObject;
1258 if (CORBA::is_nil(theObject))
1259 return aGEOMObject._retn();
1261 //check if the object is a sub-shape
1262 if (!theObject->IsMainShape()) {
1263 GetOperations()->SetErrorCode(SUBSHAPE_ERROR);
1264 return aGEOMObject._retn();
1267 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
1269 //Get the object itself
1270 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
1271 if (anObject.IsNull()) return aGEOMObject._retn();
1273 //Get the central point of rotation
1274 Handle(GEOM_Object) aCentPoint = GetObjectImpl(theCentPoint);
1275 if (aCentPoint.IsNull()) return aGEOMObject._retn();
1277 //Get the first point
1278 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
1279 if (aPoint1.IsNull()) return aGEOMObject._retn();
1281 //Get the second point
1282 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
1283 if (aPoint2.IsNull()) return aGEOMObject._retn();
1285 //Perform the translation
1286 GetOperations()->RotateThreePoints(anObject, aCentPoint, aPoint1, aPoint2);
1289 UpdateGUIForObject(theObject);
1291 return aGEOMObject._retn();
1294 //=============================================================================
1296 * RotateThreePointsCopy
1298 //=============================================================================
1299 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateThreePointsCopy
1300 (GEOM::GEOM_Object_ptr theObject,
1301 GEOM::GEOM_Object_ptr theCentPoint,
1302 GEOM::GEOM_Object_ptr thePoint1,
1303 GEOM::GEOM_Object_ptr thePoint2)
1305 GEOM::GEOM_Object_var aGEOMObject;
1307 //Set a not done flag
1308 GetOperations()->SetNotDone();
1310 //Get the object itself
1311 Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
1312 if (aBasicObject.IsNull()) return aGEOMObject._retn();
1314 //Get the central point of rotation
1315 Handle(GEOM_Object) aCentPoint = GetObjectImpl(theCentPoint);
1316 if (aCentPoint.IsNull()) return aGEOMObject._retn();
1318 //Get the first point
1319 Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
1320 if (aPoint1.IsNull()) return aGEOMObject._retn();
1322 //Get the second point
1323 Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
1324 if (aPoint2.IsNull()) return aGEOMObject._retn();
1326 //Perform the rotation
1327 Handle(GEOM_Object) anObject =
1328 GetOperations()->RotateThreePointsCopy(aBasicObject, aCentPoint, aPoint1, aPoint2);
1329 if (!GetOperations()->IsDone() || anObject.IsNull())
1330 return aGEOMObject._retn();
1332 return GetObject(anObject);
1335 //=============================================================================
1337 * TransformLikeOtherCopy
1339 //=============================================================================
1340 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::TransformLikeOtherCopy
1341 (GEOM::GEOM_Object_ptr theObject,
1342 GEOM::GEOM_Object_ptr theSample)
1344 GEOM::GEOM_Object_var aGEOMObject;
1346 //Set a not done flag
1347 GetOperations()->SetNotDone();
1349 //Get the object itself
1350 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
1351 if (anObject.IsNull()) return aGEOMObject._retn();
1353 //Get the sample object
1354 Handle(GEOM_Object) aSample = GetObjectImpl(theSample);
1355 if (aSample.IsNull()) return aGEOMObject._retn();
1357 //Perform the transformation
1358 Handle(GEOM_Object) aResObject =
1359 GetOperations()->TransformLikeOtherCopy(anObject, aSample);
1360 if (!GetOperations()->IsDone() || aResObject.IsNull())
1361 return aGEOMObject._retn();
1363 return GetObject(aResObject);
1366 //=============================================================================
1370 //=============================================================================
1371 GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RecomputeObject
1372 (GEOM::GEOM_Object_ptr theObject)
1374 //Set a not done flag
1375 GetOperations()->SetNotDone();
1376 GEOM::GEOM_Object_var aGEOMObject;
1378 if (CORBA::is_nil(theObject)) return aGEOMObject._retn();
1380 aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject);
1382 //Get the object itself
1383 Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
1384 if (anObject.IsNull()) return aGEOMObject._retn();
1386 //Perform the recomputation
1387 Handle(GEOM_Function) aLastFunction = anObject->GetLastFunction();
1388 if (aLastFunction.IsNull()) return aGEOMObject._retn();
1389 GetOperations()->GetSolver()->ComputeFunction(aLastFunction);
1391 return aGEOMObject._retn();