MeshLab中主要插件类型有filter plugins, i/o plugins, edit plugins,这些插件实现了MeshLab的大部分功能。新加入的插件命名规则最好也遵循规范,可命名为:edit_something, filter_something, io_something,可以在插件中写入自定义的功能或操作,实现功能的扩展。MeshLab中插件的添加是在Qt Creator中完成的,之后再重新读入Visual Studio 中自己编写想要的功能函数。

假如现在要在edit中加入一个名为edit_pickcontour的插件,并在Edit菜单栏下加入带插件的按钮图标。

使用的是Qt 5.3.1, VS2010,MeshLab1.3.3

1. 在Qt Creator中添加名为edit_pickcontour的工程,完成相关配置

1.1 用 Qt Creator 打开 ...\meshlab\src 目录下的meshlab_full.pro 文件,MeshLab中的所有工程都在里面

1.2 选择文件>>新建文件或项目,弹出对话框中在项目栏中选择其他项目,创建一个空的Qt项目。把新的子工程命名为 edit_pickcontour,路径设置在...\meshlab\src下都可以,但为了方便文件管理,路径设置在 ...\meshlab\src\plugins_experimental 目录下,在该目录下会自动新建文件夹 edit_pickcontour 作为新建插件的创建路径。之后按照默认设置完成工程的创建。

创建好的edit_pickcontour 工程如下:

1.3鼠标右键单击子工程edit_pickcontour >> 添加新文件,选择C++ >> C++ Class,然后在该工程下创建一个EditPickContourPlugin类,继承自QObject,头文件和源文件名分别为:edit_pickcontour.h, edit_pickcontour.cpp, 路径为该工程的路径。

1.4 MeshLab提供了一个公用的shared.pri,里面包含了通用的插件编译配置,只需在edit_pickcontour.pro包含该文件即完成了插件编译的基本配置。在edit_pickcontour.pro中包含该文件:include (../../shared.pri),添加这条语句后会在工程中自动的生成 general 和shared 两个文件夹。

完成后可保存并退出。

2. 在VS2010中写入新插件的功能,并在菜单中加入该插件的按钮

2.1 在VS2010中用Qt5打开文件...\meshlab\src\meshlab_full.pro,之后会重新加载MeshLab中的各个子工程,加载完成后可以看到会出现新添加的插件edit_pickcontour

2.2 插件的接口类介绍

MeshLab中插件的接口主要是由...\meshlab\src\common\interfaces.h 提供,在interface.h中提供了各类插件与主界面的接口,每种类型的插件都定义了相应的类,包括:

io plugin:网格的输入输出。

filter plugin:网格基本算法的插件,包括网格简化、细分、曲率计算等。

render plugin:网格的渲染,包括边界、法向量等各方面的显示。

decorator plugin:主要是对MeshLab界面的设置,如背景颜色、网格的显示方式等。

edit plugin:主要实现对网格的交互操作,如测量距离、选点、选面等操作。

以edit plugin 的类为例,edit插件中主要是对网格曲面的交互操作,所以成员函数主要是鼠标的响应函数,若要添加交互功能,在这些鼠标的响应函数中加入功能代码,以实现期望的功能。

classMeshEditInterface:publicMeshCommonInterface{};

而与主界面的连接是通过相应的 factory 类实现的,factory 类的使用是为了使一个工程中可以有若干个功能在各自的文件中实现,并在主界面产生对应的功能按钮。

classMeshEditInterfaceFactory

{

public:

virtual~MeshEditInterfaceFactory(){}

//gets a list of actions available from this plugin

virtualQListactions()const=0;

//get the edit tool for the given action

virtualMeshEditInterface*getMeshEditInterface(QAction*)=0;

//get the description for the given action

virtualQStringgetEditToolDescription(QAction*)=0;

};

2.3对新加入的插件写入需要的功能

在 edit_pickcontour 这个工程中首先需要改写EditPickContourPlugin这个类,这个类需要继承 edit 的插件接口类MeshEditInterface。

classEditPickContourPlugin:publicQObject,

publicMeshEditInterface{ };

之后定义相关的成员函数与成员变量,在edit_pickcontour.cpp 中实现。

添加管理插件功能与主界面连接的 factory 类,命名为:

classEditPickContourFactory:publicQObject,

publicMeshEditInterfaceFactory{};

该类写在文件 edit_pickcontour_factory.h 中,形式比较固定。

// edit_pickcontour_factory.h

#ifndefEditPickContourFactoryPLUGIN_H

#defineEditPickContourFactoryPLUGIN_H

#include

#include

classEditPickContourFactory:publicQObject,publicMeshEditInterfaceFactory

{

Q_OBJECT

MESHLAB_PLUGIN_IID_EXPORTER(MESH_EDIT_INTERFACE_FACTORY_IID)

Q_INTERFACES(MeshEditInterfaceFactory)

public:

EditPickContourFactory();

virtual~EditPickContourFactory(){deleteeditPickContour;}

//gets a list of actions available from this plugin

virtualQListactions()const;

//get the edit tool for the given action

virtualMeshEditInterface*getMeshEditInterface(QAction*);

//get the description for the given action

virtualQStringgetEditToolDescription(QAction*);

private:

QListactionList;

QAction*editPickContour;

};

#endif

对应的是 edit_pickcontour_factory.cpp 中成员函数的实现:

// edit_pickcontour_factory.cpp

#include"edit_pickcontour_factory.h"

#include"edit_pickcontour.h"

EditPickContourFactory::EditPickContourFactory()

{

editPickContour=newQAction("Pick Contour Tool",this);

actionList<

foreach(QAction*editAction,actionList)

editAction->setCheckable(true);

}

QListEditPickContourFactory::actions()const

{

returnactionList;

}

MeshEditInterface*EditPickContourFactory::getMeshEditInterface(QAction*action)

{

if(action==editPickContour)

{

returnnewEditPickContourPlugin();

}elseassert(0);//should never be asked for an action that isnt here

}

QStringEditPickContourFactory::getEditToolDescription(QAction*)

{

returnEditPickContourPlugin::Info();

}

MESHLAB_PLUGIN_NAME_EXPORTER(EditPickContourFactory);

之后编译edit_pickcontour 这个工程,再调试运行 MeshLab ,就能在主界面看到这个工程的菜单按钮。

相关参考:

如何把meshlab中的圆环去掉_MeshLab中插件的添加过程相关推荐

  1. 如何把meshlab中的圆环去掉_MeshLab中配准点云

    import:PLY, STL, OFF, OBJ, 3DS, COLLADA, PTX, V3D, PTS, APTS, XYZ, GTS, TRI, ASC, X3D, X3DV, VRML, A ...

  2. 如何把meshlab中的圆环去掉_如何设计一座太空城?

    整整半个世纪前的今天,1969年7月20日,执行阿波罗11号计划的美国宇航员阿姆斯特朗和奥尔德林登上月球.而同一年,伍德斯托克音乐节的舞台前聚集了几十万名追求和平与爱的青年.在神奇的1969年,人类文 ...

  3. java去字符串中空行_java去掉文本中多余的空格与空行实例代码

    前言 最近因为工作的需要,在开发一个小型的圈子系统.功能类似一个简化的微博.用户可以在圈子里发帖子,回复帖子,点赞等等.项目上线不久就发现有很多用户在圈子里发广告,手段之丰富令人叹为观止啊.产品大哥昨 ...

  4. c语言滤去所有非数字字符,Python: 去掉字符串中的非数字(或非字母)字符

    >>> crazystring = 'dade142.;!0142f[.,]ad' 只保留数字 >>> filter(str.isdigit, crazystrin ...

  5. php 去掉数组相同元素,php怎么去掉数组中重复的元素

    php去掉数组中重复的元素的方法:可以通过内置函数array_unique()来实现.array_unique()函数可以移除数组中重复的值并返回过滤后的数组.如果数组中存在多个相同元素,则只保留第一 ...

  6. zencart分类页产品页去掉url中的id号

    最近公司新上的网站被seo指出要修改url,去掉url中产品id.由于我们用的是zencart框架,装了 Ultimate SEO URLs 插件,所以在网上应该有这方面的资料,本文主要参考资料: 原 ...

  7. IOS使用正则表达式去掉html中的标签元素,获得纯文本

    IOS使用正则表达式去掉html中的标签元素,获得纯文本 content是根据网址获得的网页源码字符串 NSRegularExpression *regularExpretion=[NSRegular ...

  8. 怎么去掉 IDEA 中 XML 显示的屎黄色

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 在编写mybatis的xml中会出现大面积黄色背景提示,看 ...

  9. C# 使用正则表达式去掉字符串中的数字

    C# 使用正则表达式去掉字符串中的数字 /// <summary> /// 去掉字符串中的数字 /// </summary> /// <param name=" ...

最新文章

  1. 【摘自】人民日款网友感悟
  2. WCF 第九章 诊断 系列文章
  3. 高等数学-微分方程知识点
  4. Python编程核心内容 ---- Function(函数)
  5. 云炬随笔20171205
  6. sklearn数据集操作API
  7. Java知识整理——垃圾回收
  8. linux执行指定程序的命令,linux 下使用指定的用户来执行命令
  9. python 简单web音频_Python Twisted web服务器音频fi
  10. java五子棋判断_JAVA 五子棋 判断输赢的代码实现
  11. express学习 - (1)环境配置与第一个express项目
  12. 【 马哥教育内部文档】-RPM制作指南
  13. nginx gif伪装php,nginx空白图片(empty_gif模块)
  14. CSSCSS3基础教程
  15. 搭配Online|原光辉调研沁水县文物保护和城市建设工作
  16. Uniapp之API promise化
  17. 多维tensor/numpy array的拼接(np.stack, torch.cat)
  18. Jaeger知识点补充
  19. THORChain被盗:黑客资金溯源报告
  20. 用JAVA实现简单的WORD转PDF 亲测有效

热门文章

  1. 边伯贤计算机系文,EXO◆『150920|搬文』边伯贤反攻记【中长/甜】
  2. 数据结构与算法-Part6——数组与广义表
  3. VLC更改设置,播放本地H264和H265流媒体文件和播放帧率
  4. 51单片机c语言基本结构,51单片机的内部组成及应用原理解析
  5. (装双系统无法识别硬盘问题)Windows 10 SATA Controller Mode 改为AHCI
  6. 计算机丢失quili.dll怎么处理,科技知识:台电p76平板电脑刷机教程
  7. DM单机数据库部署维护常见问题总结
  8. WITS数据库中国双边进口关税数据环境规制综合指数
  9. OpenCV(12)-OpenCV的机器学习
  10. 电脑黑屏提示missing operating system怎么办