Skip to content

Commit

Permalink
add command to merge point clouds
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed May 8, 2017
1 parent 164b8c7 commit 0ad2e47
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
44 changes: 44 additions & 0 deletions src/Mod/Points/Gui/Command.cpp
Expand Up @@ -31,6 +31,7 @@

#include <Base/Exception.h>
#include <Base/Matrix.h>
#include <App/Application.h>
#include <App/Document.h>
#include <Gui/Application.h>
#include <Gui/Document.h>
Expand Down Expand Up @@ -314,6 +315,48 @@ bool CmdPointsPolyCut::isActive(void)
return getSelection().countObjectsOfType(Points::Feature::getClassTypeId()) > 0;
}

DEF_STD_CMD_A(CmdPointsMerge)

CmdPointsMerge::CmdPointsMerge()
:Command("Points_Merge")
{
sAppModule = "Points";
sGroup = QT_TR_NOOP("Points");
sMenuText = QT_TR_NOOP("Merge point clouds");
sToolTipText = QT_TR_NOOP("Merge several point clouds into one");
sWhatsThis = QT_TR_NOOP("Merge several point clouds into one");
sStatusTip = QT_TR_NOOP("Merge several point clouds into one");
}

void CmdPointsMerge::activated(int iMsg)
{
Q_UNUSED(iMsg);

App::Document* doc = App::GetApplication().getActiveDocument();
doc->openTransaction("Merge point clouds");
Points::Feature* pts = static_cast<Points::Feature*>(doc->addObject("Points::Feature", "Merged Points"));
Points::PointKernel* kernel = pts->Points.startEditing();

std::vector<App::DocumentObject*> docObj = Gui::Selection().getObjectsOfType(Points::Feature::getClassTypeId());
for (std::vector<App::DocumentObject*>::iterator it = docObj.begin(); it != docObj.end(); ++it) {
const Points::PointKernel& k = static_cast<Points::Feature*>(*it)->Points.getValue();
std::size_t numPts = kernel->size();
kernel->resize(numPts + k.size());
for (std::size_t i=0; i<k.size(); ++i) {
kernel->setPoint(i+numPts, k.getPoint(i));
}
}

pts->Points.finishEditing();
doc->commitTransaction();
updateActive();
}

bool CmdPointsMerge::isActive(void)
{
return getSelection().countObjectsOfType(Points::Feature::getClassTypeId()) > 1;
}

void CreatePointsCommands(void)
{
Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager();
Expand All @@ -322,4 +365,5 @@ void CreatePointsCommands(void)
rcCmdMgr.addCommand(new CmdPointsTransform());
rcCmdMgr.addCommand(new CmdPointsConvert());
rcCmdMgr.addCommand(new CmdPointsPolyCut());
rcCmdMgr.addCommand(new CmdPointsMerge());
}
4 changes: 3 additions & 1 deletion src/Mod/Points/Gui/Workbench.cpp
Expand Up @@ -76,7 +76,9 @@ Gui::MenuItem* Workbench::setupMenuBar() const
root->insertItem(item, pnts);

pnts->setCommand("&Points");
*pnts << "Points_Convert" << "Separator" << "Points_Import" << "Points_Export" << "Separator" << "Points_PolyCut";
*pnts << "Points_Convert" << "Separator" << "Points_Import"
<< "Points_Export" << "Separator" << "Points_PolyCut"
<< "Points_Merge";
return root;
}

0 comments on commit 0ad2e47

Please sign in to comment.