Salome HOME
Import of edges participating to the result of the sketch
[modules/shaper.git] / src / SketchAPI / SketchAPI_Sketch.h
1 // Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or
18 // email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 //
20
21 #ifndef SRC_SKETCHAPI_SKETCHAPI_SKETCH_H_
22 #define SRC_SKETCHAPI_SKETCHAPI_SKETCH_H_
23
24 //--------------------------------------------------------------------------------------
25 #include "SketchAPI.h"
26
27 #include <list>
28
29 #include <SketchPlugin_Sketch.h>
30 #include <SketchPlugin_SketchEntity.h>
31
32 #include <ModelHighAPI_Interface.h>
33 #include <ModelHighAPI_Macro.h>
34 //--------------------------------------------------------------------------------------
35 class ModelAPI_CompositeFeature;
36 class ModelAPI_Object;
37 class ModelHighAPI_Double;
38 class ModelHighAPI_Integer;
39 class ModelHighAPI_RefAttr;
40 class ModelHighAPI_Reference;
41 class ModelHighAPI_Selection;
42 class SketchAPI_Arc;
43 class SketchAPI_MacroArc;
44 class SketchAPI_Circle;
45 class SketchAPI_MacroCircle;
46 class SketchAPI_IntersectionPoint;
47 class SketchAPI_Line;
48 class SketchAPI_Mirror;
49 class SketchAPI_Point;
50 class SketchAPI_Projection;
51 class SketchAPI_Rectangle;
52 class SketchAPI_Rotation;
53 class SketchAPI_Translation;
54 //--------------------------------------------------------------------------------------
55 /**\class SketchAPI_Sketch
56  * \ingroup CPPHighAPI
57  * \brief Interface for Sketch feature
58  */
59 class SketchAPI_Sketch : public ModelHighAPI_Interface
60 {
61 public:
62   /// Constructor without values
63   SKETCHAPI_EXPORT
64   explicit SketchAPI_Sketch(const std::shared_ptr<ModelAPI_Feature> & theFeature);
65   /// Constructor with values
66   SKETCHAPI_EXPORT
67   SketchAPI_Sketch(const std::shared_ptr<ModelAPI_Feature> & theFeature,
68                    const std::shared_ptr<GeomAPI_Ax3> & thePlane);
69   /// Constructor with values
70   SKETCHAPI_EXPORT
71   SketchAPI_Sketch(const std::shared_ptr<ModelAPI_Feature> & theFeature,
72                    const ModelHighAPI_Selection & theExternal);
73   /// Constructor with values
74   SKETCHAPI_EXPORT
75   SketchAPI_Sketch(const std::shared_ptr<ModelAPI_Feature> & theFeature,
76                    std::shared_ptr<ModelAPI_Object> thePlaneObject);
77   /// Destructor
78   SKETCHAPI_EXPORT
79   virtual ~SketchAPI_Sketch();
80
81   INTERFACE_7(SketchPlugin_Sketch::ID(),
82               origin, SketchPlugin_Sketch::ORIGIN_ID(),
83               GeomDataAPI_Point, /** Origin point */,
84               dirX, SketchPlugin_Sketch::DIRX_ID(),
85               GeomDataAPI_Dir, /** Direction of X */,
86               normal, SketchPlugin_Sketch::NORM_ID(),
87               GeomDataAPI_Dir, /** Normal */,
88               features, SketchPlugin_Sketch::FEATURES_ID(),
89               ModelAPI_AttributeRefList, /** Features */,
90               external, SketchPlugin_SketchEntity::EXTERNAL_ID(),
91               ModelAPI_AttributeSelection, /** External */,
92               solverError, SketchPlugin_Sketch::SOLVER_ERROR(),
93               ModelAPI_AttributeString, /** Solver error */,
94               solverDOF, SketchPlugin_Sketch::SOLVER_DOF(),
95               ModelAPI_AttributeString, /** Solver DOF */
96   )
97
98   /// Set plane
99   SKETCHAPI_EXPORT
100   void setPlane(const std::shared_ptr<GeomAPI_Ax3> & thePlane);
101
102   /// Set external
103   SKETCHAPI_EXPORT
104   void setExternal(const ModelHighAPI_Selection & theExternal);
105
106   /// Set external
107   SKETCHAPI_EXPORT
108   void setExternal(std::shared_ptr<ModelAPI_Object> thePlaneObject);
109
110   /// Add point
111   SKETCHAPI_EXPORT
112   std::shared_ptr<SketchAPI_Point> addPoint(
113       double theX, double theY);
114   /// Add point
115   SKETCHAPI_EXPORT
116   std::shared_ptr<SketchAPI_Point> addPoint(
117       const std::shared_ptr<GeomAPI_Pnt2d> & thePoint);
118   /// Add point
119   SKETCHAPI_EXPORT
120   std::shared_ptr<SketchAPI_Point> addPoint(const ModelHighAPI_Selection & theExternal);
121   /// Add point
122   SKETCHAPI_EXPORT
123   std::shared_ptr<SketchAPI_Point> addPoint(const std::string & theExternalName);
124
125   /// Add intersection point
126   SKETCHAPI_EXPORT
127   std::shared_ptr<SketchAPI_IntersectionPoint>
128     addIntersectionPoint(const ModelHighAPI_Selection & theExternal);
129   /// Add point
130   SKETCHAPI_EXPORT
131   std::shared_ptr<SketchAPI_IntersectionPoint>
132     addIntersectionPoint(const std::string & theExternalName);
133
134   /// Add line
135   SKETCHAPI_EXPORT
136   std::shared_ptr<SketchAPI_Line> addLine(
137       double theX1, double theY1, double theX2, double theY2);
138   /// Add line
139   SKETCHAPI_EXPORT
140   std::shared_ptr<SketchAPI_Line> addLine(
141       const std::shared_ptr<GeomAPI_Pnt2d> & theStartPoint,
142       const std::shared_ptr<GeomAPI_Pnt2d> & theEndPoint);
143   /// Add line
144   SKETCHAPI_EXPORT
145   std::shared_ptr<SketchAPI_Line> addLine(const ModelHighAPI_Selection & theExternal);
146   /// Add line
147   SKETCHAPI_EXPORT
148   std::shared_ptr<SketchAPI_Line> addLine(const std::string & theExternalName);
149
150   /// Add rectangle
151   SKETCHAPI_EXPORT
152   std::shared_ptr<SketchAPI_Rectangle> addRectangle(
153       double theX1, double theY1, double theX2, double theY2);
154   /// Add rectangle
155   SKETCHAPI_EXPORT
156   std::shared_ptr<SketchAPI_Rectangle> addRectangle(
157       const std::shared_ptr<GeomAPI_Pnt2d> & theStartPoint,
158       const std::shared_ptr<GeomAPI_Pnt2d> & theEndPoint);
159
160   /// Add circle
161   SKETCHAPI_EXPORT
162   std::shared_ptr<SketchAPI_Circle> addCircle(
163       double theCenterX, double theCenterY,
164       double theRadius);
165   /// Add circle
166   SKETCHAPI_EXPORT
167   std::shared_ptr<SketchAPI_Circle> addCircle(
168       const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
169       double theRadius);
170   /// Add circle
171   SKETCHAPI_EXPORT
172   std::shared_ptr<SketchAPI_MacroCircle> addCircle(
173       double theCenterX, double theCenterY,
174       double thePassedX, double thePassedY);
175   /// Add circle
176   SKETCHAPI_EXPORT
177   std::shared_ptr<SketchAPI_MacroCircle> addCircle(
178       const std::shared_ptr<GeomAPI_Pnt2d>& theCenterPoint,
179       const std::shared_ptr<GeomAPI_Pnt2d>& thePassedPoint);
180   /// Add circle
181   SKETCHAPI_EXPORT
182   std::shared_ptr<SketchAPI_MacroCircle> addCircle(
183       double theX1, double theY1,
184       double theX2, double theY2,
185       double theX3, double theY3);
186   /// Add circle
187   SKETCHAPI_EXPORT
188   std::shared_ptr<SketchAPI_MacroCircle> addCircle(
189       const std::shared_ptr<GeomAPI_Pnt2d>& thePoint1,
190       const std::shared_ptr<GeomAPI_Pnt2d>& thePoint2,
191       const std::shared_ptr<GeomAPI_Pnt2d>& thePoint3);
192   /// Add circle
193   SKETCHAPI_EXPORT
194   std::shared_ptr<SketchAPI_Circle> addCircle(const ModelHighAPI_Selection & theExternal);
195   /// Add circle
196   SKETCHAPI_EXPORT
197   std::shared_ptr<SketchAPI_Circle> addCircle(const std::string & theExternalName);
198
199   /// Add arc
200   SKETCHAPI_EXPORT
201   std::shared_ptr<SketchAPI_Arc> addArc(
202       double theCenterX, double theCenterY,
203       double theStartX, double theStartY,
204       double theEndX, double theEndY,
205       bool theInversed);
206
207   /// Add arc
208   SKETCHAPI_EXPORT
209   std::shared_ptr<SketchAPI_Arc> addArc(
210       const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
211       const std::shared_ptr<GeomAPI_Pnt2d>& theStart,
212       const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
213       bool theInversed);
214
215   /// Add arc
216   SKETCHAPI_EXPORT
217   std::shared_ptr<SketchAPI_MacroArc> addArc(
218       double theStartX, double theStartY,
219       double theEndX, double theEndY,
220       double thePassedX, double thePassedY);
221
222   /// Add arc
223   SKETCHAPI_EXPORT
224   std::shared_ptr<SketchAPI_MacroArc> addArc(
225       const std::shared_ptr<GeomAPI_Pnt2d>& theStart,
226       const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
227       const std::shared_ptr<GeomAPI_Pnt2d>& thePassed);
228
229   /// Add arc
230   SKETCHAPI_EXPORT
231   std::shared_ptr<SketchAPI_MacroArc> addArc(
232       const ModelHighAPI_RefAttr& theTangentPoint,
233       double theEndX, double theEndY,
234       bool theInversed);
235
236   /// Add arc
237   SKETCHAPI_EXPORT
238   std::shared_ptr<SketchAPI_MacroArc> addArc(
239       const ModelHighAPI_RefAttr& theTangentPoint,
240       const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
241       bool theInversed);
242
243   /// Add arc
244   SKETCHAPI_EXPORT
245   std::shared_ptr<SketchAPI_Arc> addArc(const ModelHighAPI_Selection & theExternal);
246
247   /// Add arc
248   SKETCHAPI_EXPORT
249   std::shared_ptr<SketchAPI_Arc> addArc(const std::string & theExternalName);
250
251   /// Add projection
252   SKETCHAPI_EXPORT
253   std::shared_ptr<SketchAPI_Projection> addProjection(
254       const ModelHighAPI_Selection & theExternalFeature,
255       bool theKeepResult = false);
256
257   /// Add projection
258   SKETCHAPI_EXPORT
259   std::shared_ptr<SketchAPI_Projection> addProjection(const std::string & theExternalName,
260                                                       bool theKeepResult = false);
261
262   /// Add mirror
263   SKETCHAPI_EXPORT
264   std::shared_ptr<SketchAPI_Mirror> addMirror(
265       const ModelHighAPI_RefAttr & theMirrorLine,
266       const std::list<std::shared_ptr<ModelAPI_Object> > & theObjects);
267
268   /// Add translation
269   SKETCHAPI_EXPORT
270   std::shared_ptr<SketchAPI_Translation> addTranslation(
271       const std::list<std::shared_ptr<ModelAPI_Object> > & theObjects,
272       const ModelHighAPI_RefAttr & thePoint1,
273       const ModelHighAPI_RefAttr & thePoint2,
274       const ModelHighAPI_Integer & theNumberOfObjects,
275       bool theFullValue = false);
276
277   /// Add rotation
278   SKETCHAPI_EXPORT
279   std::shared_ptr<SketchAPI_Rotation> addRotation(
280       const std::list<std::shared_ptr<ModelAPI_Object> > & theObjects,
281       const ModelHighAPI_RefAttr & theCenter,
282       const ModelHighAPI_Double & theAngle,
283       const ModelHighAPI_Integer & theNumberOfObjects,
284       bool theFullValue = false);
285
286   /// Add split
287   SKETCHAPI_EXPORT
288   std::shared_ptr<ModelHighAPI_Interface> addSplit(
289       const ModelHighAPI_Reference& theFeature,
290       const std::shared_ptr<GeomAPI_Pnt2d>& thePositionPoint);
291
292   /// Add trim
293   SKETCHAPI_EXPORT
294   std::shared_ptr<ModelHighAPI_Interface> addTrim(
295       const ModelHighAPI_Reference& theFeature,
296       const std::shared_ptr<GeomAPI_Pnt2d>& thePositionPoint);
297
298   /// Set angle
299   SKETCHAPI_EXPORT
300   std::shared_ptr<ModelHighAPI_Interface> setAngle(
301       const ModelHighAPI_RefAttr & theLine1,
302       const ModelHighAPI_RefAttr & theLine2,
303       const ModelHighAPI_Double & theValue);
304
305   /// Set complementary angle
306   SKETCHAPI_EXPORT
307   std::shared_ptr<ModelHighAPI_Interface> setAngleComplementary(
308       const ModelHighAPI_RefAttr & theLine1,
309       const ModelHighAPI_RefAttr & theLine2,
310       const ModelHighAPI_Double & theValue);
311
312   /// Set backward angle (= 360 - angle)
313   SKETCHAPI_EXPORT
314   std::shared_ptr<ModelHighAPI_Interface> setAngleBackward(
315       const ModelHighAPI_RefAttr & theLine1,
316       const ModelHighAPI_RefAttr & theLine2,
317       const ModelHighAPI_Double & theValue);
318
319   /// Set coincident
320   SKETCHAPI_EXPORT
321   std::shared_ptr<ModelHighAPI_Interface> setCoincident(
322       const ModelHighAPI_RefAttr & thePoint1,
323       const ModelHighAPI_RefAttr & thePoint2);
324
325   /// Set collinear
326   SKETCHAPI_EXPORT
327   std::shared_ptr<ModelHighAPI_Interface> setCollinear(
328       const ModelHighAPI_RefAttr & theLine1,
329       const ModelHighAPI_RefAttr & theLine2);
330
331   /// Set distance
332   SKETCHAPI_EXPORT
333   std::shared_ptr<ModelHighAPI_Interface> setDistance(
334       const ModelHighAPI_RefAttr & thePoint,
335       const ModelHighAPI_RefAttr & thePointOrLine,
336       const ModelHighAPI_Double & theValue,
337       bool isSigned = false);
338
339   /// Set signed distance
340   SKETCHAPI_EXPORT
341   std::shared_ptr<ModelHighAPI_Interface> setSignedDistance(
342       const ModelHighAPI_RefAttr & thePoint,
343       const ModelHighAPI_RefAttr & thePointOrLine,
344       const ModelHighAPI_Double & theValue);
345
346   /// Set unsigned distance
347   SKETCHAPI_EXPORT
348   std::shared_ptr<ModelHighAPI_Interface> setUnsignedDistance(
349       const ModelHighAPI_RefAttr & thePoint,
350       const ModelHighAPI_RefAttr & thePointOrLine,
351       const ModelHighAPI_Double & theValue);
352
353   /// Set horizontal distance
354   SKETCHAPI_EXPORT
355   std::shared_ptr<ModelHighAPI_Interface> setHorizontalDistance(
356       const ModelHighAPI_RefAttr & thePoint1,
357       const ModelHighAPI_RefAttr & thePoint2,
358       const ModelHighAPI_Double & theValue);
359
360   /// Set vertical distance
361   SKETCHAPI_EXPORT
362   std::shared_ptr<ModelHighAPI_Interface> setVerticalDistance(
363       const ModelHighAPI_RefAttr & thePoint1,
364       const ModelHighAPI_RefAttr & thePoint2,
365       const ModelHighAPI_Double & theValue);
366
367   /// Set equal
368   SKETCHAPI_EXPORT
369   std::shared_ptr<ModelHighAPI_Interface> setEqual(
370       const ModelHighAPI_RefAttr & theObject1,
371       const ModelHighAPI_RefAttr & theObject2);
372
373   /// Set fillet
374   SKETCHAPI_EXPORT
375   std::shared_ptr<ModelHighAPI_Interface> setFillet(
376       const ModelHighAPI_RefAttr & thePoint);
377
378   /// Set fillet with additional radius constraint
379   SKETCHAPI_EXPORT
380   std::shared_ptr<ModelHighAPI_Interface> setFilletWithRadius(
381       const ModelHighAPI_RefAttr & thePoint,
382       const ModelHighAPI_Double & theRadius);
383
384   /// Set fixed
385   SKETCHAPI_EXPORT
386   std::shared_ptr<ModelHighAPI_Interface> setFixed(
387       const ModelHighAPI_RefAttr & theObject);
388
389   /// Set horizontal
390   SKETCHAPI_EXPORT
391   std::shared_ptr<ModelHighAPI_Interface> setHorizontal(
392       const ModelHighAPI_RefAttr & theLine);
393
394   /// Set length
395   SKETCHAPI_EXPORT
396   std::shared_ptr<ModelHighAPI_Interface> setLength(
397       const ModelHighAPI_RefAttr & theLine,
398       const ModelHighAPI_Double & theValue);
399
400   /// Set middle
401   SKETCHAPI_EXPORT
402   std::shared_ptr<ModelHighAPI_Interface> setMiddlePoint(
403       const ModelHighAPI_RefAttr & thePoint,
404       const ModelHighAPI_RefAttr & theLine);
405
406   /// Set parallel
407   SKETCHAPI_EXPORT
408   std::shared_ptr<ModelHighAPI_Interface> setParallel(
409       const ModelHighAPI_RefAttr & theLine1,
410       const ModelHighAPI_RefAttr & theLine2);
411
412   /// Set perpendicular
413   SKETCHAPI_EXPORT
414   std::shared_ptr<ModelHighAPI_Interface> setPerpendicular(
415       const ModelHighAPI_RefAttr & theLine1,
416       const ModelHighAPI_RefAttr & theLine2);
417
418   /// Set radius
419   SKETCHAPI_EXPORT
420   std::shared_ptr<ModelHighAPI_Interface> setRadius(
421       const ModelHighAPI_RefAttr & theCircleOrArc,
422       const ModelHighAPI_Double & theValue);
423
424   /// Set tangent
425   SKETCHAPI_EXPORT
426   std::shared_ptr<ModelHighAPI_Interface> setTangent(
427       const ModelHighAPI_RefAttr & theLine,
428       const ModelHighAPI_RefAttr & theCircle);
429
430   /// Set vertical
431   SKETCHAPI_EXPORT
432   std::shared_ptr<ModelHighAPI_Interface> setVertical(
433       const ModelHighAPI_RefAttr & theLine);
434
435   /// Set constraint value
436   SKETCHAPI_EXPORT
437   void setValue(
438       const std::shared_ptr<ModelHighAPI_Interface> & theConstraint,
439       const ModelHighAPI_Double & theValue);
440
441   /// Move point or sketch feature
442   SKETCHAPI_EXPORT
443   void move(const ModelHighAPI_RefAttr& theMovedEntity,
444             const std::shared_ptr<GeomAPI_Pnt2d>& theTargetPoint);
445
446   /// Move point or sketch feature
447   SKETCHAPI_EXPORT
448   void move(const ModelHighAPI_RefAttr& theMovedEntity,
449             double theTargetX, double theTargetY);
450
451   SKETCHAPI_EXPORT
452   std::shared_ptr<GeomAPI_Pnt2d> to2D(const std::shared_ptr<GeomAPI_Pnt>& thePoint);
453
454   // TODO(spo): rename to selectFaces() or faces() (or add faces() -> list to SWIG)
455   /// Select face
456   SKETCHAPI_EXPORT
457   std::list<ModelHighAPI_Selection> selectFace() const;
458
459   /// Dump wrapped feature
460   SKETCHAPI_EXPORT
461   virtual void dump(ModelHighAPI_Dumper& theDumper) const;
462
463 protected:
464   std::shared_ptr<ModelAPI_CompositeFeature> compositeFeature() const;
465
466 };
467
468 //! Pointer on Sketch object
469 typedef std::shared_ptr<SketchAPI_Sketch> SketchPtr;
470
471 /**\ingroup CPPHighAPI
472  * \brief Create Sketch feature
473  */
474 SKETCHAPI_EXPORT
475 SketchPtr addSketch(const std::shared_ptr<ModelAPI_Document> & thePart,
476                     const std::shared_ptr<GeomAPI_Ax3> & thePlane);
477
478 /**\ingroup CPPHighAPI
479  * \brief Create Sketch feature
480  */
481 SKETCHAPI_EXPORT
482 SketchPtr addSketch(const std::shared_ptr<ModelAPI_Document> & thePart,
483                     const ModelHighAPI_Selection & theExternal);
484
485 /**\ingroup CPPHighAPI
486  * \brief Create Sketch feature
487  */
488 SKETCHAPI_EXPORT
489 SketchPtr addSketch(const std::shared_ptr<ModelAPI_Document> & thePart,
490                     const std::string & theExternalName);
491
492 /**\ingroup CPPHighAPI
493  * \brief Create Sketch feature
494  */
495 SKETCHAPI_EXPORT
496 SketchPtr addSketch(const std::shared_ptr<ModelAPI_Document> & thePart,
497                     std::shared_ptr<ModelAPI_Object> thePlaneObject);
498
499 //--------------------------------------------------------------------------------------
500 //--------------------------------------------------------------------------------------
501 #endif /* SRC_SKETCHAPI_SKETCHAPI_SKETCH_H_ */