Salome HOME
Issue #2560: Fix Python dump, fix indentation.
[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
119   theDumper << aBase << " = model.addInterpolation(" << aPartName << ", "
120             << anAttrBaseObjects << ", ";
121
122   AttributeStringPtr useTangentsAttr = useTangents();
123   std::string useTangents = useTangentsAttr->value();
124   if (!useTangents.empty()) {
125     AttributeSelectionPtr anAttrStartTangent =
126       aBase->selection(BuildPlugin_Interpolation::TANGENT_START_ID());
127     AttributeSelectionPtr anAttrEndTangent =
128       aBase->selection(BuildPlugin_Interpolation::TANGENT_END_ID());
129
130     theDumper << anAttrStartTangent << ", " << anAttrEndTangent << ", ";
131   }
132
133   theDumper << closed() << ", " << reorder() << ")" << std::endl;
134 }
135
136 //==================================================================================================
137 InterpolationPtr addInterpolation(const std::shared_ptr<ModelAPI_Document>& thePart,
138                                   const std::list<ModelHighAPI_Selection>& theBaseObjects,
139                                   const bool theIsClosed,
140                                   const bool theIsToReorder)
141 {
142   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(BuildAPI_Interpolation::ID());
143   return InterpolationPtr(new BuildAPI_Interpolation(aFeature,
144                                                      theBaseObjects,
145                                                      theIsClosed,
146                                                      theIsToReorder));
147 }
148
149 //==================================================================================================
150 InterpolationPtr addInterpolation(const std::shared_ptr<ModelAPI_Document>& thePart,
151                                   const std::list<ModelHighAPI_Selection>& theBaseObjects,
152                                   const ModelHighAPI_Selection& theStartTangent,
153                                   const ModelHighAPI_Selection& theEndTangent,
154                                   const bool theIsClosed,
155                                   const bool theIsToReorder)
156 {
157   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(BuildAPI_Interpolation::ID());
158   return InterpolationPtr(new BuildAPI_Interpolation(aFeature,
159                                                      theBaseObjects,
160                                                      theStartTangent,
161                                                      theEndTangent,
162                                                      theIsClosed,
163                                                      theIsToReorder));
164 }
165
166 //==================================================================================================
167 void BuildAPI_Interpolation::execIfBaseNotEmpty()
168 {
169   if (baseObjects()->size() > 0)
170     execute();
171 }