1 // Copyright (C) 2007-2010 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_ILocalOperations_i.hh"
27 #include "utilities.h"
29 #include "Utils_ExceptHandlers.hxx"
31 #include "GEOM_Engine.hxx"
32 #include "GEOM_Object.hxx"
34 //=============================================================================
38 //=============================================================================
39 GEOM_ILocalOperations_i::GEOM_ILocalOperations_i (PortableServer::POA_ptr thePOA,
40 GEOM::GEOM_Gen_ptr theEngine,
41 ::GEOMImpl_ILocalOperations* theImpl)
42 :GEOM_IOperations_i(thePOA, theEngine, theImpl)
44 MESSAGE("GEOM_ILocalOperations_i::GEOM_ILocalOperations_i");
47 //=============================================================================
51 //=============================================================================
52 GEOM_ILocalOperations_i::~GEOM_ILocalOperations_i()
54 MESSAGE("GEOM_ILocalOperations_i::~GEOM_ILocalOperations_i");
58 //=============================================================================
62 //=============================================================================
63 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletAll
64 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR)
66 GEOM::GEOM_Object_var aGEOMObject;
68 //Get the reference shape
69 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
70 if (aShapeRef.IsNull()) return aGEOMObject._retn();
73 Handle(GEOM_Object) anObject =
74 GetOperations()->MakeFilletAll(aShapeRef, theR);
75 if (!GetOperations()->IsDone() || anObject.IsNull())
76 return aGEOMObject._retn();
78 return GetObject(anObject);
81 //=============================================================================
85 //=============================================================================
86 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdges
87 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
88 const GEOM::ListOfLong& theEdges)
90 GEOM::GEOM_Object_var aGEOMObject;
92 //Get the reference shape
93 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
94 if (aShapeRef.IsNull()) return aGEOMObject._retn();
96 //Get the reference edges
98 int aLen = theEdges.length();
99 std::list<int> anEdges;
100 for (; ind < aLen; ind++) {
101 anEdges.push_back(theEdges[ind]);
105 Handle(GEOM_Object) anObject =
106 GetOperations()->MakeFilletEdges(aShapeRef, theR, anEdges);
107 if (!GetOperations()->IsDone() || anObject.IsNull())
108 return aGEOMObject._retn();
110 return GetObject(anObject);
113 //=============================================================================
115 * MakeFilletEdges R1 R2
117 //=============================================================================
118 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdgesR1R2
119 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
120 CORBA::Double theR2, const GEOM::ListOfLong& theEdges)
122 GEOM::GEOM_Object_var aGEOMObject;
124 //Get the reference shape
125 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
126 if (aShapeRef.IsNull()) return aGEOMObject._retn();
128 //Get the reference edges
130 int aLen = theEdges.length();
131 std::list<int> anEdges;
132 for (; ind < aLen; ind++) {
133 anEdges.push_back(theEdges[ind]);
137 Handle(GEOM_Object) anObject =
138 GetOperations()->MakeFilletEdgesR1R2(aShapeRef, theR1, theR2, anEdges);
139 if (!GetOperations()->IsDone() || anObject.IsNull())
140 return aGEOMObject._retn();
142 return GetObject(anObject);
145 //=============================================================================
149 //=============================================================================
150 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFaces
151 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
152 const GEOM::ListOfLong& theFaces)
154 GEOM::GEOM_Object_var aGEOMObject;
156 //Get the reference shape
157 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
158 if (aShapeRef.IsNull()) return aGEOMObject._retn();
160 //Get the reference faces
162 int aLen = theFaces.length();
163 std::list<int> aFaces;
164 for (; ind < aLen; ind++) {
165 aFaces.push_back(theFaces[ind]);
169 Handle(GEOM_Object) anObject =
170 GetOperations()->MakeFilletFaces(aShapeRef, theR, aFaces);
171 if (!GetOperations()->IsDone() || anObject.IsNull())
172 return aGEOMObject._retn();
174 return GetObject(anObject);
177 //=============================================================================
179 * MakeFilletFaces R1 R2
181 //=============================================================================
182 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFacesR1R2
183 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
184 CORBA::Double theR2, const GEOM::ListOfLong& theFaces)
186 GEOM::GEOM_Object_var aGEOMObject;
188 //Get the reference shape
189 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
190 if (aShapeRef.IsNull()) return aGEOMObject._retn();
192 //Get the reference faces
194 int aLen = theFaces.length();
195 std::list<int> aFaces;
196 for (; ind < aLen; ind++) {
197 aFaces.push_back(theFaces[ind]);
201 Handle(GEOM_Object) anObject =
202 GetOperations()->MakeFilletFacesR1R2(aShapeRef, theR1, theR2, aFaces);
203 if (!GetOperations()->IsDone() || anObject.IsNull())
204 return aGEOMObject._retn();
206 return GetObject(anObject);
209 //=============================================================================
213 //=============================================================================
214 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFillet2D
215 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
216 const GEOM::ListOfLong& theVertexes)
218 GEOM::GEOM_Object_var aGEOMObject;
220 //Get the reference shape
221 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
222 if (aShapeRef.IsNull()) return aGEOMObject._retn();
224 //Get the reference vertex
226 int aLen = theVertexes.length();
227 std::list<int> aVertexes;
228 for (; ind < aLen; ind++) {
229 aVertexes.push_back(theVertexes[ind]);
233 Handle(GEOM_Object) anObject =
234 GetOperations()->MakeFillet2D(aShapeRef, theR, aVertexes);
235 if (!GetOperations()->IsDone() || anObject.IsNull())
236 return aGEOMObject._retn();
238 return GetObject(anObject);
241 //=============================================================================
245 //=============================================================================
246 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFillet1D
247 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
248 const GEOM::ListOfLong& theVertexes)
250 GEOM::GEOM_Object_var aGEOMObject;
252 //Get the reference shape (wire)
253 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
254 if (aShapeRef.IsNull()) return aGEOMObject._retn();
256 //Get the reference vertex
258 int aLen = theVertexes.length();
259 std::list<int> aVertexes;
260 for (; ind < aLen; ind++) {
261 aVertexes.push_back(theVertexes[ind]);
265 Handle(GEOM_Object) anObject =
266 GetOperations()->MakeFillet1D(aShapeRef, theR, aVertexes);
267 if (!GetOperations()->IsDone() || anObject.IsNull())
268 return aGEOMObject._retn();
270 return GetObject(anObject);
273 //=============================================================================
277 //=============================================================================
278 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferAll
279 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theD)
281 GEOM::GEOM_Object_var aGEOMObject;
283 //Get the reference shape
284 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
285 if (aShapeRef.IsNull()) return aGEOMObject._retn();
288 Handle(GEOM_Object) anObject =
289 GetOperations()->MakeChamferAll(aShapeRef, theD);
290 if (!GetOperations()->IsDone() || anObject.IsNull())
291 return aGEOMObject._retn();
293 return GetObject(anObject);
296 //=============================================================================
300 //=============================================================================
301 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdge
302 (GEOM::GEOM_Object_ptr theShape,
303 CORBA::Double theD1, CORBA::Double theD2,
304 CORBA::Long theFace1, CORBA::Long theFace2)
306 GEOM::GEOM_Object_var aGEOMObject;
308 //Get the reference shape
309 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
310 if (aShapeRef.IsNull()) return aGEOMObject._retn();
313 Handle(GEOM_Object) anObject =
314 GetOperations()->MakeChamferEdge(aShapeRef, theD1, theD2, theFace1, theFace2);
315 if (!GetOperations()->IsDone() || anObject.IsNull())
316 return aGEOMObject._retn();
318 return GetObject(anObject);
320 //=============================================================================
324 //=============================================================================
325 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdgeAD
326 (GEOM::GEOM_Object_ptr theShape,
327 CORBA::Double theD, CORBA::Double theAngle,
328 CORBA::Long theFace1, CORBA::Long theFace2)
330 GEOM::GEOM_Object_var aGEOMObject;
332 //Get the reference shape
333 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
334 if (aShapeRef.IsNull()) return aGEOMObject._retn();
337 Handle(GEOM_Object) anObject =
338 GetOperations()->MakeChamferEdgeAD(aShapeRef, theD, theAngle, theFace1, theFace2);
339 if (!GetOperations()->IsDone() || anObject.IsNull())
340 return aGEOMObject._retn();
342 return GetObject(anObject);
345 //=============================================================================
349 //=============================================================================
350 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFaces
351 (GEOM::GEOM_Object_ptr theShape,
352 CORBA::Double theD1, CORBA::Double theD2,
353 const GEOM::ListOfLong& theFaces)
355 GEOM::GEOM_Object_var aGEOMObject;
357 //Get the reference shape
358 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
359 if (aShapeRef.IsNull()) return aGEOMObject._retn();
361 //Get the reference faces
363 int aLen = theFaces.length();
364 std::list<int> aFaces;
365 for (; ind < aLen; ind++) {
366 aFaces.push_back(theFaces[ind]);
370 Handle(GEOM_Object) anObject =
371 GetOperations()->MakeChamferFaces(aShapeRef, theD1, theD2, aFaces);
372 if (!GetOperations()->IsDone() || anObject.IsNull())
373 return aGEOMObject._retn();
375 return GetObject(anObject);
377 //=============================================================================
381 //=============================================================================
382 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFacesAD
383 (GEOM::GEOM_Object_ptr theShape,
384 CORBA::Double theD, CORBA::Double theAngle,
385 const GEOM::ListOfLong& theFaces)
387 GEOM::GEOM_Object_var aGEOMObject;
389 //Get the reference shape
390 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
391 if (aShapeRef.IsNull()) return aGEOMObject._retn();
393 //Get the reference faces
395 int aLen = theFaces.length();
396 std::list<int> aFaces;
397 for (; ind < aLen; ind++) {
398 aFaces.push_back(theFaces[ind]);
402 Handle(GEOM_Object) anObject =
403 GetOperations()->MakeChamferFacesAD(aShapeRef, theD, theAngle, aFaces);
404 if (!GetOperations()->IsDone() || anObject.IsNull())
405 return aGEOMObject._retn();
407 return GetObject(anObject);
410 //=============================================================================
414 //=============================================================================
415 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdges
416 (GEOM::GEOM_Object_ptr theShape,
417 CORBA::Double theD1, CORBA::Double theD2,
418 const GEOM::ListOfLong& theEdges)
420 GEOM::GEOM_Object_var aGEOMObject;
422 //Get the reference shape
423 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
424 if (aShapeRef.IsNull()) return aGEOMObject._retn();
426 //Get the reference edges
428 int aLen = theEdges.length();
429 std::list<int> aEdges;
430 for (; ind < aLen; ind++) {
431 aEdges.push_back(theEdges[ind]);
435 Handle(GEOM_Object) anObject =
436 GetOperations()->MakeChamferEdges(aShapeRef, theD1, theD2, aEdges);
437 if (!GetOperations()->IsDone() || anObject.IsNull())
438 return aGEOMObject._retn();
440 return GetObject(anObject);
443 //=============================================================================
447 //=============================================================================
448 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdgesAD
449 (GEOM::GEOM_Object_ptr theShape,
450 CORBA::Double theD, CORBA::Double theAngle,
451 const GEOM::ListOfLong& theEdges)
453 GEOM::GEOM_Object_var aGEOMObject;
455 //Get the reference shape
456 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
457 if (aShapeRef.IsNull()) return aGEOMObject._retn();
459 //Get the reference edges
461 int aLen = theEdges.length();
462 std::list<int> aEdges;
463 for (; ind < aLen; ind++) {
464 aEdges.push_back(theEdges[ind]);
468 Handle(GEOM_Object) anObject =
469 GetOperations()->MakeChamferEdgesAD(aShapeRef, theD, theAngle, aEdges);
470 if (!GetOperations()->IsDone() || anObject.IsNull())
471 return aGEOMObject._retn();
473 return GetObject(anObject);
476 //=============================================================================
480 //=============================================================================
481 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeArchimede (GEOM::GEOM_Object_ptr theShape,
482 CORBA::Double theWeight,
483 CORBA::Double theWaterDensity,
484 CORBA::Double theMeshingDeflection)
486 GEOM::GEOM_Object_var aGEOMObject;
488 //Get the reference shape
489 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
490 if (aShapeRef.IsNull()) return aGEOMObject._retn();
492 //Create the Archimede
493 Handle(GEOM_Object) anObject = GetOperations()->MakeArchimede
494 (aShapeRef, theWeight, theWaterDensity, theMeshingDeflection);
495 if (!GetOperations()->IsDone() || anObject.IsNull())
496 return aGEOMObject._retn();
498 return GetObject(anObject);
501 //=============================================================================
505 //=============================================================================
506 CORBA::Long GEOM_ILocalOperations_i::GetSubShapeIndex
507 (GEOM::GEOM_Object_ptr theShape, GEOM::GEOM_Object_ptr theSubShape)
509 //Get the reference shapes
510 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
511 Handle(GEOM_Object) aSubShapeRef = GetObjectImpl(theSubShape);
512 if (aShapeRef.IsNull() || aSubShapeRef.IsNull()) return -1;
514 //Get the unique ID of <theSubShape> inside <theShape>
515 CORBA::Long anID = GetOperations()->GetSubShapeIndex(aShapeRef, aSubShapeRef);
516 if (!GetOperations()->IsDone())