meshlab/web/filter.html
2006-10-09 09:15:40 +00:00

154 lines
12 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Meshlab Development</title>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<meta name="author" content="Paolo Cignoni">
<meta name="keywords" content="mesh 3d processing meshlab scanning">
<meta name="description" content="Course Web page">
<meta name="robots" content="all">
<link media="all" rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<div id="leftcontent">
<h1>MeshLab: Development page : Create a Filter-plugin</h1>
<br>
<h2><span style="FONT-WEIGHT: bold">How to</span></h2>
<p>
To create a new filter plug-in the first step is to considerate that you must
implement the "MeshFilterInterface", you can find it in<span style="FONT-STYLE: italic"> "meshlab/interfaces.h".</span></p>
<p><span style="FONT-STYLE: italic"></span>Then you create a new class filter which
must inherit from the interface and from QObject. This involves you specifying
the two keywords
<br>
<span style="FONT-WEIGHT: bold; FONT-STYLE: italic">Q_OBJECT</span><br>
<span style="FONT-WEIGHT: bold; FONT-STYLE: italic">Q_INTERFACES(MeshFilterInterface)</span><br>
before the method declaration to permit the moc'ing phases.</p>
<p>It is essential to import of the mesh definition found in "meshlab/meshmodel.h".<br>
<br>
Then you implement the following four pure virtual methods:<br>
<br>
<span style="FONT-WEIGHT: bold; FONT-STYLE: italic">virtual const QString ST(FilterType filter);</span>
// Return a string that explane the filter's behaviour<br>
<span style="FONT-WEIGHT: bold; FONT-STYLE: italic">virtual const ActionInfo &amp;Info(QAction *);</span><br>
<span style="FONT-WEIGHT: bold; FONT-STYLE: italic">virtual const PluginInfo &amp;Info();</span><br>
<span style="FONT-WEIGHT: bold; FONT-STYLE: italic">virtual bool applyFilter(QAction * </span><span style="FONT-STYLE: italic">/*filter*/</span><span style="FONT-WEIGHT: bold; FONT-STYLE: italic">, MeshModel &amp; </span><span style="FONT-STYLE: italic">/*m*/</span><span style="FONT-WEIGHT: bold; FONT-STYLE: italic">, FilterParameter &amp; </span><span style="FONT-STYLE: italic">/*par*/</span><span style="FONT-WEIGHT: bold; FONT-STYLE: italic">, vcg::CallBackPos* </span><span style="FONT-STYLE: italic">/*cb*/</span><span style="FONT-WEIGHT: bold; FONT-STYLE: italic">);</span>
// Discriminate on the filter to apply by the action name. Its parameters are:<br>
||&nbsp;&nbsp;&nbsp; * The Filter Action<br>
|| &nbsp;&nbsp; * The Mesh
<br>
|| &nbsp;&nbsp; * The Filter Parameters
<br>
|| &nbsp;&nbsp; * The Call-Back function to update the progress-bar<br>
<br style="FONT-WEIGHT: bold">
<span style="FONT-WEIGHT: bold">Important:</span><br>
Before performing a filter function call it is good practice to check that the
characteristics of the mesh (topology, normal, texture and so on) are up to
date, otherwise you should call the specific method.</p>
<br>
<p><span style="FONT-WEIGHT: bold">Download:</span><br>
You can download here a sample code <a href="http://meshlab.sourceforge.net/samplePlugins.zip">
FilterPlugins.zip</a></p>
<h2><span style="FONT-STYLE: italic"></span>Example of filter plug-in</h2>
<p><span style="FONT-STYLE: italic"></span><span style="FONT-WEIGHT: bold; TEXT-DECORATION: underline"> Example.h</span></p>
<p><span style="FONT-STYLE: italic">#ifndef EXAMPLEPLUGIN_H</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#define EXAMPLEPLUGIN_H</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include &lt;QObject&gt;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include &lt;QStringList&gt;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include &lt;QList&gt;</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">class ExampleMeshFilterPlugin : public QObject, public MeshFilterInterface</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">{</span><br style="FONT-STYLE: italic">
<br>
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; Q_OBJECT</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; Q_INTERFACES(MeshFilterInterface)</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">public:</span><br style="FONT-STYLE: italic">
<br>
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; ExampleMeshFilterPlugin();</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; virtual const ActionInfo &amp;Info(QAction *);</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; virtual const PluginInfo &amp;Info();</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; virtual QString ST(FilterType filter);</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; virtual bool applyFilter(QAction *filter, MeshModel &amp;m, FilterParameter &amp;par, vcg::CallBackPos * cb);</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">};</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#endif</span><br>
</p>
<p><br>
<br>
<span style="FONT-WEIGHT: bold; TEXT-DECORATION: underline">Example.cpp</span><br>
<br>
<span style="FONT-STYLE: italic">#include &lt;QtGui&gt;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include &lt;stdlib.h&gt;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include "meshfilter.h"</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include &lt;vcg/complex/trimesh/clean.h&gt;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">#include &lt;vcg/complex/trimesh/smooth.h&gt;</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">ExampleMeshFilterPlugin::ExampleMeshFilterPlugin()&nbsp;<br>
{</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; actionList &lt;&lt; new QAction("ExampleFilter", this);</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">}</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">QString ExampleMeshFilterPlugin::ST(FilterType filter)&nbsp;<br>
{</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; switch(filter){</span><br style="FONT-STYLE: italic">
<br>
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "TYPE":&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return QString("...");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp;}</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp;return QString("error");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">}</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">const ActionInfo &amp;ExampleMeshFilterPlugin::Info(QAction *action) </span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">{</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp; ActionInfo ai; </span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic"></span><span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; if( action-&gt;text() == tr("ExampleFilter") )</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ai.Help = tr("explain yuor method");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ai.ShortHelp = tr("For tooltip");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp; return ai;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;}</span><br style="FONT-STYLE: italic">
<br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">const PluginInfo &amp;ExampleMeshFilterPlugin::Info() </span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">{</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp; static PluginInfo ai; </span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp; ai.Date=tr("__DATE__");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;ai.Version = tr("Current version");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;ai.Author = ("Yuor name");</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp; return ai;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;}</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">bool ExampleMeshFilterPlugin::applyFilter(QAction *filter, MeshModel &amp;m, FilterParameter &amp;par, vcg::CallBackPos *cb) </span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">{</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; if(filter-&gt;text() == tr("ExampleFilter") )</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //call my filter method</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">&nbsp;&nbsp;&nbsp; return true;</span><br style="FONT-STYLE: italic">
<span style="FONT-STYLE: italic">}</span><br style="FONT-STYLE: italic">
<br>
<span style="FONT-STYLE: italic">Q_EXPORT_PLUGIN(ExampleMeshFilterPlugin)</span><br>
<br>
</p>
<br>
<span style="FONT-STYLE: italic">
<dl>
</dl>
</span></div>
<div id="rightcontent">
<br>
<a href="https://sourceforge.net/projects/meshlab/">
<span style="FONT-STYLE: italic"></span><img src="http://sourceforge.net/sflogo.php?group_id=149444&amp;type=2" alt="SourceForge.net Logo"
border="0" height="37" width="125"></a>
<p class="menu"><a href="http://meshlab.sourceforge.net">Main Page&nbsp;</a></p>
<p class="menu"><a href="https://sourceforge.net/project/showfiles.php?group_id=149444">Download</a></p>
<p class="menu"><a href="http://cvs.sourceforge.net/viewcvs.py/meshlab/">CVS</a></p>
<p class="menu"><a href="https://sourceforge.net/pm/?group_id=149444">TASK</a></p>
<p class="menu"><a href="https://sourceforge.net/projects/meshlab/">SF project page</a></p>
</div>
</body>
</html>