]> SALOME platform Git repositories - modules/shaper.git/blob - src/BuildAPI/BuildAPI_Interpolation.cpp
Salome HOME
Issue #2560: Add Interpolation feature to Build plugin for creation a curve by the...
[modules/shaper.git] / src / BuildAPI / BuildAPI_Interpolation.cpp
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 #include "BuildAPI_Interpolation.h"
22
23 #include <ModelHighAPI_Dumper.h>
24 #include <ModelHighAPI_Tools.h>
25
26 //==================================================================================================
27 BuildAPI_Interpolation::BuildAPI_Interpolation(const std::shared_ptr<ModelAPI_Feature>& theFeature)
28 : ModelHighAPI_Interface(theFeature)
29 {
30   initialize();
31 }
32
33 //==================================================================================================
34 BuildAPI_Interpolation::BuildAPI_Interpolation(const FeaturePtr& theFeature,
35                     const std::list<ModelHighAPI_Selection>& theBaseObjects,
36                     const ModelHighAPI_Selection& theStartTangent,
37                     const ModelHighAPI_Selection& theEndTangent,
38                     const bool theIsClosed,
39                     const bool theIsToReorder)
40 : ModelHighAPI_Interface(theFeature)
41 {
42   if(initialize()) {
43     setUseTangents(true);
44     setTangents(theStartTangent, theEndTangent);
45     setClosed(theIsClosed);
46     setReorder(theIsToReorder);
47     setBase(theBaseObjects);
48   }
49 }
50
51 //==================================================================================================
52 BuildAPI_Interpolation::BuildAPI_Interpolation(const FeaturePtr& theFeature,
53   const std::list<ModelHighAPI_Selection>& theBaseObjects,
54   const bool theIsClosed,
55   const bool theIsToReorder)
56   : ModelHighAPI_Interface(theFeature)
57 {
58   if (initialize()) {
59     setClosed(theIsClosed);
60     setReorder(theIsToReorder);
61     setUseTangents(false);
62     setBase(theBaseObjects);
63   }
64 }
65
66 //==================================================================================================
67 BuildAPI_Interpolation::~BuildAPI_Interpolation()
68 {
69 }
70
71 //==================================================================================================
72 void BuildAPI_Interpolation::setBase(const std::list<ModelHighAPI_Selection>& theBaseObjects)
73 {
74   fillAttribute(theBaseObjects, mybaseObjects);
75
76   execute();
77 }
78
79 //==================================================================================================
80 void BuildAPI_Interpolation::setClosed(const bool theIsClosed)
81 {
82   fillAttribute(theIsClosed, myclosed);
83
84   execIfBaseNotEmpty();
85 }
86
87 void BuildAPI_Interpolation::setReorder(const bool theIsToReorder)
88 {
89   fillAttribute(theIsToReorder, myreorder);
90
91   execIfBaseNotEmpty();
92 }
93
94 void BuildAPI_Interpolation::setUseTangents(const bool theIsToUseTangents)
95 {
96   fillAttribute(theIsToUseTangents ? "true" : "", myuseTangents);
97
98   execIfBaseNotEmpty();
99 }
100
101 void BuildAPI_Interpolation::setTangents(const ModelHighAPI_Selection& theStartTangent,
102                                          const ModelHighAPI_Selection& theEndTangent)
103 {
104   fillAttribute(theStartTangent, mystartTangent);
105   fillAttribute(theEndTangent, myendTangent);
106
107   execIfBaseNotEmpty();
108 }
109
110 //==================================================================================================
111 void BuildAPI_Interpolation::dump(ModelHighAPI_Dumper& theDumper) const
112 {
113   FeaturePtr aBase = feature();
114   std::string aPartName = theDumper.name(aBase->document());
115
116   AttributeSelectionListPtr anAttrBaseObjects =
117     aBase->selectionList(BuildPlugin_Interpolation::BASE_OBJECTS_ID());
118   AttributeSelectionPtr anAttrStartTangent =
119     aBase->selection(BuildPlugin_Interpolation::TANGENT_START_ID());
120   AttributeSelectionPtr anAttrEndTangent =
121     aBase->selection(BuildPlugin_Interpolation::TANGENT_END_ID());
122
123   theDumper << aBase << " = model.addInterpolation(" << aPartName << ", "
124             << anAttrBaseObjects << ", ";
125
126   if (anAttrStartTangent->isInitialized() && anAttrEndTangent->isInitialized()) {
127     theDumper << anAttrStartTangent << ", " << anAttrEndTangent << ", ";
128   }
129
130   theDumper << closed() << ", " << reorder() << ")" << std::endl;
131 }
132
133 //==================================================================================================
134 InterpolationPtr addInterpolation(const std::shared_ptr<ModelAPI_Document>& thePart,
135                                   const std::list<ModelHighAPI_Selection>& theBaseObjects,
136                                   const bool theIsClosed,
137                                   const bool theIsToReorder)
138 {
139   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(BuildAPI_Interpolation::ID());
140   return InterpolationPtr(new BuildAPI_Interpolation(aFeature,
141                                                      theBaseObjects,
142                                                      theIsClosed,
143                                                      theIsToReorder));
144 }
145
146 //==================================================================================================
147 InterpolationPtr addInterpolation(const std::shared_ptr<ModelAPI_Document>& thePart,
148                                   const std::list<ModelHighAPI_Selection>& theBaseObjects,
149                                   const ModelHighAPI_Selection& theStartTangent,
150                                   const ModelHighAPI_Selection& theEndTangent,
151                                   const bool theIsClosed,
152                                   const bool theIsToReorder)
153 {
154   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(BuildAPI_Interpolation::ID());
155   return InterpolationPtr(new BuildAPI_Interpolation(aFeature,
156                                                      theBaseObjects,
157                                                      theStartTangent,
158                                                      theEndTangent,
159                                                      theIsClosed,
160                                                      theIsToReorder));
161 }
162
163 //==================================================================================================
164 void BuildAPI_Interpolation::execIfBaseNotEmpty()
165 {
166   if (baseObjects()->size() > 0)
167     execute();
168 }