Salome HOME
1b3f10dccf78ec83039ab1541ecbb41ad7285c4e
[modules/shaper.git] / src / FeaturesAPI / FeaturesAPI_BooleanCut.cpp
1 // Copyright (C) 2014-2022  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 email : webmaster.salome@opencascade.com
18 //
19
20 #include "FeaturesAPI_BooleanCut.h"
21
22 #include <ModelHighAPI_Dumper.h>
23 #include <ModelHighAPI_Selection.h>
24 #include <ModelHighAPI_Tools.h>
25
26
27 static const double DEFAULT_FUZZY = 1.e-5;
28
29
30 //==================================================================================================
31 FeaturesAPI_BooleanCut::FeaturesAPI_BooleanCut(const std::shared_ptr<ModelAPI_Feature>& theFeature)
32 : ModelHighAPI_Interface(theFeature)
33 {
34   initialize();
35 }
36
37 //==================================================================================================
38 FeaturesAPI_BooleanCut::FeaturesAPI_BooleanCut(
39   const std::shared_ptr<ModelAPI_Feature>& theFeature,
40   const std::list<ModelHighAPI_Selection>& theMainObjects,
41   const std::list<ModelHighAPI_Selection>& theToolObjects,
42   const ModelHighAPI_Double& theFuzzy)
43 : ModelHighAPI_Interface(theFeature)
44 {
45   if(initialize()) {
46     bool aUseFuzzy = (theFuzzy.value() > 0);
47     ModelHighAPI_Double aFuzzy = (aUseFuzzy ? theFuzzy : ModelHighAPI_Double(DEFAULT_FUZZY));
48     fillAttribute(theMainObjects, mymainObjects);
49     fillAttribute(theToolObjects, mytoolObjects);
50     fillAttribute(aUseFuzzy, myuseFuzzy);
51     fillAttribute(aFuzzy, myfuzzyParam);
52
53     execute(false);
54   }
55 }
56
57 //==================================================================================================
58 FeaturesAPI_BooleanCut::~FeaturesAPI_BooleanCut()
59 {
60 }
61
62
63 //==================================================================================================
64 void FeaturesAPI_BooleanCut::setMainObjects(const std::list<ModelHighAPI_Selection>& theMainObjects)
65 {
66   fillAttribute(theMainObjects, mymainObjects);
67
68   execute();
69 }
70
71 //==================================================================================================
72 void FeaturesAPI_BooleanCut::setToolObjects(const std::list<ModelHighAPI_Selection>& theToolObjects)
73 {
74   fillAttribute(theToolObjects, mytoolObjects);
75
76   execute();
77 }
78
79 //==================================================================================================
80 void FeaturesAPI_BooleanCut::setUseFuzzy(bool theUseFuzzy)
81 {
82   fillAttribute(theUseFuzzy, myuseFuzzy);
83
84   execute();
85 }
86
87 //==================================================================================================
88 void FeaturesAPI_BooleanCut::setFuzzyValue(const ModelHighAPI_Double& theFuzzy)
89 {
90   fillAttribute(theFuzzy, myfuzzyParam);
91
92   execute();
93 }
94
95 //==================================================================================================
96 void FeaturesAPI_BooleanCut::dump(ModelHighAPI_Dumper& theDumper) const
97 {
98   FeaturePtr aBase = feature();
99
100   theDumper << aBase << " = model.addCut";
101
102   const std::string& aDocName = theDumper.name(aBase->document());
103   AttributeSelectionListPtr anObjects =
104     aBase->selectionList(FeaturesPlugin_BooleanCut::OBJECT_LIST_ID());
105   AttributeSelectionListPtr aTools =
106     aBase->selectionList(FeaturesPlugin_BooleanCut::TOOL_LIST_ID());
107   bool aUseFuzzy = aBase->boolean(FeaturesPlugin_BooleanCut::USE_FUZZY_ID())->value();
108   double aFuzzy = aBase->real(FeaturesPlugin_BooleanCut::FUZZY_PARAM_ID())->value();
109
110   theDumper << "(" << aDocName << ", " << anObjects << ", " << aTools;
111
112   if (aUseFuzzy)
113     theDumper << ", fuzzyParam = " << aFuzzy;
114
115   if (!aBase->data()->version().empty())
116     theDumper << ", keepSubResults = True";
117
118   theDumper << ")" << std::endl;
119 }
120
121 //==================================================================================================
122 BooleanCutPtr addCut(const std::shared_ptr<ModelAPI_Document>& thePart,
123                      const std::list<ModelHighAPI_Selection>& theMainObjects,
124                      const std::list<ModelHighAPI_Selection>& theToolObjects,
125                      const ModelHighAPI_Double& fuzzyParam,
126                      const bool keepSubResults)
127 {
128   std::shared_ptr<ModelAPI_Feature> aFeature = thePart->addFeature(FeaturesAPI_BooleanCut::ID());
129   if (!keepSubResults)
130     aFeature->data()->setVersion("");
131   return BooleanCutPtr(new FeaturesAPI_BooleanCut(aFeature, theMainObjects, theToolObjects, fuzzyParam));
132 }