mirror of
https://gitlab.univ-nantes.fr/E164955Z/ptrans.git
synced 2026-08-30 00:00:26 +08:00
124 lines
5.0 KiB
C++
124 lines
5.0 KiB
C++
//##########################################################################
|
|
//# #
|
|
//# CLOUDCOMPARE PLUGIN: ExamplePlugin #
|
|
//# #
|
|
//# This program is free software; you can redistribute it and/or modify #
|
|
//# it under the terms of the GNU General Public License as published by #
|
|
//# the Free Software Foundation; version 2 of the License. #
|
|
//# #
|
|
//# This program 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 General Public License for more details. #
|
|
//# #
|
|
//# COPYRIGHT: XXX #
|
|
//# #
|
|
//##########################################################################
|
|
|
|
// First:
|
|
// Replace all occurrences of 'ExamplePlugin' by your own plugin class name in this file.
|
|
// This includes the resource path to info.json in the constructor.
|
|
|
|
// Second:
|
|
// Open ExamplePlugin.qrc, change the "prefix" and the icon filename for your plugin.
|
|
// Change the name of the file to <yourPluginName>.qrc
|
|
|
|
// Third:
|
|
// Open the info.json file and fill in the information about the plugin.
|
|
// "type" should be one of: "Standard", "GL", or "I/O" (required)
|
|
// "name" is the name of the plugin (required)
|
|
// "icon" is the Qt resource path to the plugin's icon (from the .qrc file)
|
|
// "description" is used as a tootip if the plugin has actions and is displayed in the plugin dialog
|
|
// "authors", "maintainers", and "references" show up in the plugin dialog as well
|
|
|
|
#include <QtGui>
|
|
|
|
#include "SegmenterPlugin.h"
|
|
|
|
// Default constructor:
|
|
// - pass the Qt resource path to the info.json file (from <yourPluginName>.qrc file)
|
|
// - constructor should mainly be used to initialize actions and other members
|
|
SegmenterPlugin::SegmenterPlugin( QObject *parent )
|
|
: QObject( parent )
|
|
, ccStdPluginInterface( ":/CC/plugin/SegmenterPlugin/info.json" )
|
|
, m_action( nullptr )
|
|
{
|
|
}
|
|
|
|
// This method should enable or disable your plugin actions
|
|
// depending on the currently selected entities ('selectedEntities').
|
|
void SegmenterPlugin::onNewSelection( const ccHObject::Container &selectedEntities )
|
|
{
|
|
if ( m_action == nullptr )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// If you need to check for a specific type of object, you can use the methods
|
|
// in ccHObjectCaster.h or loop and check the objects' classIDs like this:
|
|
//
|
|
// for ( ccHObject *object : selectedEntities )
|
|
// {
|
|
// if ( object->getClassID() == CC_TYPES::VIEWPORT_2D_OBJECT )
|
|
// {
|
|
// // ... do something with the viewports
|
|
// }
|
|
// }
|
|
|
|
// For example - only enable our action if something is selected.
|
|
m_action->setEnabled( !selectedEntities.empty() );
|
|
}
|
|
|
|
// This method returns all the 'actions' your plugin can perform.
|
|
// getActions() will be called only once, when plugin is loaded.
|
|
QList<QAction *> SegmenterPlugin::getActions()
|
|
{
|
|
// default action (if it has not been already created, this is the moment to do it)
|
|
if ( !m_action )
|
|
{
|
|
// Here we use the default plugin name, description, and icon,
|
|
// but each action should have its own.
|
|
m_action = new QAction( getName(), this );
|
|
m_action->setToolTip( getDescription() );
|
|
m_action->setIcon( getIcon() );
|
|
|
|
// Connect appropriate signal
|
|
connect( m_action, &QAction::triggered, this, &SegmenterPlugin::doAction );
|
|
}
|
|
|
|
return { m_action };
|
|
}
|
|
|
|
// This is an example of an action's method called when the corresponding action
|
|
// is triggered (i.e. the corresponding icon or menu entry is clicked in CC's
|
|
// main interface). You can access most of CC's components (database,
|
|
// 3D views, console, etc.) via the 'm_app' variable (see the ccMainAppInterface
|
|
// class in ccMainAppInterface.h).
|
|
void SegmenterPlugin::doAction()
|
|
{
|
|
if ( m_app == nullptr )
|
|
{
|
|
// m_app should have already been initialized by CC when plugin is loaded
|
|
Q_ASSERT( false );
|
|
|
|
return;
|
|
}
|
|
|
|
/*** HERE STARTS THE ACTION ***/
|
|
|
|
// Put your code here
|
|
// --> you may want to start by asking for parameters (with a custom dialog, etc.)
|
|
|
|
// This is how you can output messages
|
|
// Display a standard message in the console
|
|
m_app->dispToConsole( "[ExamplePlugin] Hello world!", ccMainAppInterface::STD_CONSOLE_MESSAGE );
|
|
|
|
// Display a warning message in the console
|
|
m_app->dispToConsole( "[ExamplePlugin] Warning: example plugin shouldn't be used as is", ccMainAppInterface::WRN_CONSOLE_MESSAGE );
|
|
|
|
// Display an error message in the console AND pop-up an error box
|
|
m_app->dispToConsole( "Example plugin shouldn't be used - it doesn't do anything!", ccMainAppInterface::ERR_CONSOLE_MESSAGE );
|
|
|
|
/*** HERE ENDS THE ACTION ***/
|
|
}
|