1 // Copyright (C) 2007-2012 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
22 #include <Standard_Stream.hxx>
24 #include "GEOM_ILocalOperations_i.hh"
26 #include "utilities.h"
28 #include "Utils_ExceptHandlers.hxx"
30 #include "GEOM_Engine.hxx"
31 #include "GEOM_Object.hxx"
33 //=============================================================================
37 //=============================================================================
38 GEOM_ILocalOperations_i::GEOM_ILocalOperations_i (PortableServer::POA_ptr thePOA,
39 GEOM::GEOM_Gen_ptr theEngine,
40 ::GEOMImpl_ILocalOperations* theImpl)
41 :GEOM_IOperations_i(thePOA, theEngine, theImpl)
43 MESSAGE("GEOM_ILocalOperations_i::GEOM_ILocalOperations_i");
46 //=============================================================================
50 //=============================================================================
51 GEOM_ILocalOperations_i::~GEOM_ILocalOperations_i()
53 MESSAGE("GEOM_ILocalOperations_i::~GEOM_ILocalOperations_i");
57 //=============================================================================
61 //=============================================================================
62 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletAll
63 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR)
65 GEOM::GEOM_Object_var aGEOMObject;
67 //Get the reference shape
68 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
69 if (aShapeRef.IsNull()) return aGEOMObject._retn();
72 Handle(GEOM_Object) anObject =
73 GetOperations()->MakeFilletAll(aShapeRef, theR);
74 if (!GetOperations()->IsDone() || anObject.IsNull())
75 return aGEOMObject._retn();
77 return GetObject(anObject);
80 //=============================================================================
84 //=============================================================================
85 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdges
86 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
87 const GEOM::ListOfLong& theEdges)
89 GEOM::GEOM_Object_var aGEOMObject;
91 //Get the reference shape
92 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
93 if (aShapeRef.IsNull()) return aGEOMObject._retn();
95 //Get the reference edges
97 int aLen = theEdges.length();
98 std::list<int> anEdges;
99 for (; ind < aLen; ind++) {
100 anEdges.push_back(theEdges[ind]);
104 Handle(GEOM_Object) anObject =
105 GetOperations()->MakeFilletEdges(aShapeRef, theR, anEdges);
106 if (!GetOperations()->IsDone() || anObject.IsNull())
107 return aGEOMObject._retn();
109 return GetObject(anObject);
112 //=============================================================================
114 * MakeFilletEdges R1 R2
116 //=============================================================================
117 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdgesR1R2
118 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
119 CORBA::Double theR2, const GEOM::ListOfLong& theEdges)
121 GEOM::GEOM_Object_var aGEOMObject;
123 //Get the reference shape
124 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
125 if (aShapeRef.IsNull()) return aGEOMObject._retn();
127 //Get the reference edges
129 int aLen = theEdges.length();
130 std::list<int> anEdges;
131 for (; ind < aLen; ind++) {
132 anEdges.push_back(theEdges[ind]);
136 Handle(GEOM_Object) anObject =
137 GetOperations()->MakeFilletEdgesR1R2(aShapeRef, theR1, theR2, anEdges);
138 if (!GetOperations()->IsDone() || anObject.IsNull())
139 return aGEOMObject._retn();
141 return GetObject(anObject);
144 //=============================================================================
148 //=============================================================================
149 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFaces
150 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
151 const GEOM::ListOfLong& theFaces)
153 GEOM::GEOM_Object_var aGEOMObject;
155 //Get the reference shape
156 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
157 if (aShapeRef.IsNull()) return aGEOMObject._retn();
159 //Get the reference faces
161 int aLen = theFaces.length();
162 std::list<int> aFaces;
163 for (; ind < aLen; ind++) {
164 aFaces.push_back(theFaces[ind]);
168 Handle(GEOM_Object) anObject =
169 GetOperations()->MakeFilletFaces(aShapeRef, theR, aFaces);
170 if (!GetOperations()->IsDone() || anObject.IsNull())
171 return aGEOMObject._retn();
173 return GetObject(anObject);
176 //=============================================================================
178 * MakeFilletFaces R1 R2
180 //=============================================================================
181 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFacesR1R2
182 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
183 CORBA::Double theR2, const GEOM::ListOfLong& theFaces)
185 GEOM::GEOM_Object_var aGEOMObject;
187 //Get the reference shape
188 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
189 if (aShapeRef.IsNull()) return aGEOMObject._retn();
191 //Get the reference faces
193 int aLen = theFaces.length();
194 std::list<int> aFaces;
195 for (; ind < aLen; ind++) {
196 aFaces.push_back(theFaces[ind]);
200 Handle(GEOM_Object) anObject =
201 GetOperations()->MakeFilletFacesR1R2(aShapeRef, theR1, theR2, aFaces);
202 if (!GetOperations()->IsDone() || anObject.IsNull())
203 return aGEOMObject._retn();
205 return GetObject(anObject);
208 //=============================================================================
212 //=============================================================================
213 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFillet2D
214 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
215 const GEOM::ListOfLong& theVertexes)
217 GEOM::GEOM_Object_var aGEOMObject;
219 //Get the reference shape
220 Handle(GEOM_Object) aShapeRef = GetObjectImpl(theShape);
221 if (aShapeRef.IsNull()) return aGEOMObject._retn();
223 //Get the reference vertex
225 int aLen = theVertexes.length();
226 std::list<int> aVertexes;
227 for (; ind < aLen; ind++) {
228 aVertexes.push_back(theVertexes[ind]);
232 Handle(GEOM_Object) anObject =
233 GetOperations()->MakeFillet2D(aShapeRef, theR, aVertexes);
234 if (!GetOperations()->IsDone() || anObject.IsNull())
235 return aGEOMObject._retn();
237 return GetObject(anObject);
240 //=============================================================================
244 //=============================================================================
245 GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFillet1D
246 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
247 const GEOM::ListOfLong& theVertexes,
248 CORBA::Boolean doIgnoreSecantVertices)
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, doIgnoreSecantVertices);
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())