Download src/Mod/PartDesign/App/FeatureBase.cpp from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 3.93 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/PartDesign/App/FeatureBase.cpp
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/src/Mod/PartDesign/App/FeatureBase.cpp
-
curl -L -o FeatureBase.cpp https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/PartDesign/App/FeatureBase.cpp
3.93 kB
| /*************************************************************************** | |
| * Copyright (c) 2017 Stefan Tröger <stefantroeger@gmx.net> * | |
| * * | |
| * This file is part of the FreeCAD CAx development system. * | |
| * * | |
| * This library is free software; you can redistribute it and/or * | |
| * modify it under the terms of the GNU Library General Public * | |
| * License as published by the Free Software Foundation; either * | |
| * version 2 of the License, or (at your option) any later version. * | |
| * * | |
| * This library is distributed in the hope that it will be useful, * | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of * | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * | |
| * GNU Library General Public License for more details. * | |
| * * | |
| * You should have received a copy of the GNU Library General Public * | |
| * License along with this library; see the file COPYING.LIB. If not, * | |
| * write to the Free Software Foundation, Inc., 59 Temple Place, * | |
| * Suite 330, Boston, MA 02111-1307, USA * | |
| * * | |
| ***************************************************************************/ | |
| namespace PartDesign | |
| { | |
| PROPERTY_SOURCE(PartDesign::FeatureBase, PartDesign::Feature) | |
| FeatureBase::FeatureBase() | |
| { | |
| BaseFeature.setScope(App::LinkScope::Global); | |
| BaseFeature.setStatus(App::Property::Hidden, false); | |
| } | |
| Part::Feature* FeatureBase::getBaseObject(bool) const | |
| { | |
| return nullptr; | |
| } | |
| short int FeatureBase::mustExecute() const | |
| { | |
| if (BaseFeature.isTouched()) { | |
| return 1; | |
| } | |
| return PartDesign::Feature::mustExecute(); | |
| } | |
| App::DocumentObjectExecReturn* FeatureBase::execute() | |
| { | |
| if (!BaseFeature.getValue()) { | |
| return new App::DocumentObjectExecReturn( | |
| QT_TRANSLATE_NOOP("Exception", "BaseFeature link is not set") | |
| ); | |
| } | |
| if (!BaseFeature.getValue()->isDerivedFrom<Part::Feature>()) { | |
| return new App::DocumentObjectExecReturn( | |
| QT_TRANSLATE_NOOP("Exception", "BaseFeature must be a Part::Feature") | |
| ); | |
| } | |
| auto shape = Part::Feature::getTopoShape( | |
| BaseFeature.getValue(), | |
| Part::ShapeOption::ResolveLink | Part::ShapeOption::Transform | |
| ); | |
| if (shape.isNull()) { | |
| return new App::DocumentObjectExecReturn( | |
| QT_TRANSLATE_NOOP("Exception", "BaseFeature has an empty shape") | |
| ); | |
| } | |
| Shape.setValue(shape); | |
| return StdReturn; | |
| } | |
| void FeatureBase::trySetBaseFeatureOfBody() | |
| { | |
| if (auto body = getFeatureBody()) { | |
| if (BaseFeature.getValue() && body->BaseFeature.getValue() | |
| && body->BaseFeature.getValue() != BaseFeature.getValue()) { | |
| body->BaseFeature.setValue(BaseFeature.getValue()); | |
| } | |
| } | |
| } | |
| void FeatureBase::onChanged(const App::Property* prop) | |
| { | |
| // the BaseFeature property should track the Body BaseFeature and vice-versa | |
| if (prop == &BaseFeature) { | |
| trySetBaseFeatureOfBody(); | |
| } | |
| PartDesign::Feature::onChanged(prop); | |
| } | |
| void FeatureBase::onDocumentRestored() | |
| { | |
| // if the base is not part of a body then show its placement property again | |
| auto body = getFeatureBody(); | |
| if (!body) { | |
| Placement.setStatus(App::Property::Hidden, false); | |
| } | |
| PartDesign::Feature::onDocumentRestored(); | |
| } | |
| } // namespace PartDesign | |