/*************************************************************************** * Copyright (c) Yorik van Havre (yorik@uncreated.net) 2014 * * * * 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 * * * ***************************************************************************/ /* * Copyright (c) 2017 Zheng, Lei */ #include "PreCompiled.h" #ifndef _PreComp_ #endif #include "FeaturePathShape.h" #include "Command.h" #include #include #include #include #include #include #include #include #include #include #include #include "FeatureArea.h" using namespace Path; PROPERTY_SOURCE(Path::FeatureShape, Path::Feature) PARAM_ENUM_STRING_DECLARE(static const char *Enums,AREA_PARAMS_PATH) FeatureShape::FeatureShape() { ADD_PROPERTY(Sources,(0)); ADD_PROPERTY_TYPE(StartPoint,(Base::Vector3d()),"Path",App::Prop_None,"Path start position"); PARAM_PROP_ADD("Path",AREA_PARAMS_PATH_CONF); PARAM_PROP_SET_ENUM(Enums,AREA_PARAMS_PATH_CONF); } FeatureShape::~FeatureShape() { } App::DocumentObjectExecReturn *FeatureShape::execute(void) { Toolpath path; std::vector links = Sources.getValues(); if (links.empty()) { Path.setValue(path); return new App::DocumentObjectExecReturn("No shapes linked"); } const Base::Vector3d &v = StartPoint.getValue(); gp_Pnt pstart(v.x,v.y,v.z); std::list shapes; for (std::vector::iterator it = links.begin(); it != links.end(); ++it) { if (!(*it && (*it)->isDerivedFrom(Part::Feature::getClassTypeId()))) continue; const TopoDS_Shape &shape = static_cast(*it)->Shape.getShape().getShape(); if (shape.IsNull()) continue; shapes.push_back(shape); } AreaParams params; #define AREA_PROP_GET(_param) \ params.PARAM_FNAME(_param) = PARAM_FNAME(_param).getValue(); PARAM_FOREACH(AREA_PROP_GET,AREA_PARAMS_PATH_EXTRA) Area::toPath(path,shapes,¶ms,&pstart,NULL,PARAM_PROP_ARGS(AREA_PARAMS_PATH)); Path.setValue(path); return App::DocumentObject::StdReturn; } // Python Path Shape feature --------------------------------------------------------- namespace App { /// @cond DOXERR PROPERTY_SOURCE_TEMPLATE(Path::FeatureShapePython, Path::FeatureShape) template<> const char* Path::FeatureShapePython::getViewProviderName(void) const { return "PathGui::ViewProviderPathShape"; } /// @endcond // explicit template instantiation template class PathExport FeaturePythonT; }