From efdbc93e99f63c97e4970a5c6701a0ab3646ac13 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 4 Mar 2016 19:39:13 +0100 Subject: [PATCH] + create points with normals from mesh object --- src/Mod/Points/Gui/Command.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Mod/Points/Gui/Command.cpp b/src/Mod/Points/Gui/Command.cpp index e80aa0913834..34d5bf575c03 100644 --- a/src/Mod/Points/Gui/Command.cpp +++ b/src/Mod/Points/Gui/Command.cpp @@ -23,6 +23,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include @@ -43,6 +44,7 @@ #include #include "../App/PointsFeature.h" +#include "../App/Properties.h" #include "DlgPointsReadImp.h" #include "ViewProvider.h" @@ -198,13 +200,34 @@ void CmdPointsConvert::activated(int iMsg) std::vector normals; data->getPoints(vertexes, normals, 0.0f); if (!vertexes.empty()) { - App::Document* doc = (*it)->getDocument(); - Points::Feature* fea = static_cast(doc->addObject("Points::Feature", "Points")); + Points::Feature* fea = 0; + if (vertexes.size() == normals.size()) { + fea = static_cast(Base::Type::fromName("Points::FeatureCustom").createInstance()); + if (!fea) { + Base::Console().Error("Failed to create instance of 'Points::FeatureCustom'\n"); + continue; + } + Points::PropertyNormalList* prop = static_cast + (fea->addDynamicProperty("Points::PropertyNormalList", "Normal")); + if (prop) { + std::vector normf; + normf.resize(normals.size()); + std::transform(normals.begin(), normals.end(), normf.begin(), Base::toVector); + prop->setValues(normf); + } + } + else { + fea = new Points::Feature; + } + Points::PointKernel kernel; kernel.reserve(vertexes.size()); for (std::vector::iterator pt = vertexes.begin(); pt != vertexes.end(); ++pt) kernel.push_back(*pt); fea->Points.setValue(kernel); + + App::Document* doc = (*it)->getDocument(); + doc->addObject(fea, "Points"); } } }