内容出自236329 - Digital Geometry Processing, Spring2013 - Announcements上的OpenMesh Assignment感觉比较好,适合刚开始学习的同学。

练习要求:

这次的练习主要是写两个函数,calc_valences()和color_coding(),函数主要完成了计算一个Vertex的valence以及根据这个valence给图形上色,其中vertex的valence是保存在customer的property中。

关键代码:

写的时候主要在两个地方出现问题,一个是将customer的property保存在mesh_上之后怎么找到PropertyHandle,以及代码的效率有点低,没有充分利用OpenMeshSTL的威力。
添加Property的时候增加一个Property的名字,再通过名字返回PropertyHandle像这样,然后根据valence的值给Mesh上色。

mesh_.add_property(Valence,"Valence");
void ValenceViewer::calc_valences()
{
// EXERCISE 1.2 /////////////////////////////////////////////////////////////
// Compute valence of every vertex of "mesh_" and store them in each vertex
// using for example custom attributes via dynamic customization
// (hint: use the Mesh::VertexIter iterator) // Implement something here
Mesh::VertexIter v_end=mesh_.vertices_end();
//Mesh::Scalar TempValence=0;
OpenMesh::VPropHandleT<int> Valence;
mesh_.add_property(Valence,"Valence");
for (Mesh::VertexIter v_it=mesh_.vertices_begin();v_it!=v_end;++v_it)
{
mesh_.property(Valence,v_it);
for (Mesh::VertexVertexIter vv_it=mesh_.vv_iter(v_it);vv_it;++vv_it)
{
mesh_.property(Valence,v_it)+=1;
}
//cout<<mesh_.property(Valence,v_it)<<endl;
}
/////////////////////////////////////////////////////////////////////////////
} //----------------------------------------------------------------------------- void
ValenceViewer::color_coding()
{
// EXERCISE 1.3 /////////////////////////////////////////////////////////////
// Implement a color visualization of your choice that shows the valence of
// each vertex of "mesh_".
// (hint: use Mesh::Color color type)
// Implement something here
Mesh::VertexIter v_end=mesh_.vertices_end();
//OpenMesh::VPropHandleT<int> Valence;
Mesh::Color Green= Mesh::Color(0,255,0);
Mesh::Color Red=Mesh::Color(255,0,0);
Mesh::Color Blue=Mesh::Color(0,0,255);
int Valence;
OpenMesh::VPropHandleT<int> vPH;
for (Mesh::VertexIter v_it=mesh_.vertices_begin();v_it!=v_end;++v_it)
{
mesh_.get_property_handle(vPH,"Valence");
Valence=mesh_.property(vPH,v_it.handle());
if (Valence>=4&&Valence<6)
{
mesh_.set_color(v_it.handle(),Blue);
}
else if (Valence>=7)
{
mesh_.set_color(v_it.handle(),Red);
}
else
{
mesh_.set_color(v_it.handle(),Green);
}
//mesh_.set_color(v_it.handle(),Green);
}
cout<<"Edge:"<<mesh_.n_edges()<<"Face"<<mesh_.n_faces()<<"Vertex"<<mesh_.n_vertices()<<endl;
/////////////////////////////////////////////////////////////////////////////
}

【OpenMesh】Training:Getting Started with OpenMesh的更多相关文章

  1. 【NLP】前戏:一起走进条件随机场(一)

    前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...

  2. 【NLP】蓦然回首:谈谈学习模型的评估系列文章(一)

    统计角度窥视模型概念 作者:白宁超 2016年7月18日17:18:43 摘要:写本文的初衷源于基于HMM模型序列标注的一个实验,实验完成之后,迫切想知道采用的序列标注模型的好坏,有哪些指标可以度量. ...

  3. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  4. 【scikit-learn】06:make_blobs聚类数据生成器

      版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/kevinelstri/article/ ...

  5. 【7】解决:移动端点击a链接出现蓝色边框

    [1]_blank : 浏览器总在一个新打开.未命名的窗口中载入目标文档. [2]title :  鼠标悬浮显示的文字. [3]href : 跳转到哪个链接.     a{    border: no ...

  6. 【OpenCV】边缘检测:Sobel、拉普拉斯算子

    推荐博文,博客.写得很好,给个赞. Reference Link : http://blog.csdn.net/xiaowei_cqu/article/details/7829481 一阶导数法:梯度 ...

  7. 【MavenWeb】初探:创建一个Maven Web项目

    第一步:创建一个Simple的Maven项目 直接点下一步,把name上面的几个部分填写好,直接Finish即可. 就可以看到如下的结构: 注意点1:如果按照网上的其他一些做法来创建,你会发现少了sr ...

  8. 【原创】Js:日期处理(日期格式必须【yyyy-mm-dd】才能转成long的毫秒!其他的不是【年-月-日】的格式,结果会是【NaN】)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. openstack【Kilo】汇总:包括20英文文档、各个组件新增功能及Kilo版部署

    OpenStack Kilo版本发布 20英文文档OpenStack Kilo版本文档汇总:各个操作系统安装部署.配置文档.用户指南等文档 Kilo版部署 openstack[Kilo]入门 [准备篇 ...

随机推荐

  1. Mybatis处理列名—字段名映射— 驼峰式命名映射

    规范命名,数据库字段名使用 : 下划线命名(user_id) 类属性使用 : 驼峰命名(userId) 配置mybatis 时,全局设置: <settings> <!-- 开启驼峰, ...

  2. 七 使用list和tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  3. 记录一下最近犯得sb的翻车错误

    首先是: 数据范围是long long范围,然后写了一个暴力,觉得过不去,于是开了int范围,最后写了个能骗过所有数据的骗分,然后没开longlong... 接着是: for(int i = l; i ...

  4. java getenv getProperties区别

    网上很多使用的是getProperties.说获得系统变量,但是其实不正确.getProperties中所谓的"system properties"其实是指"java s ...

  5. TCP 的那些事儿-1

    TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获.关于TCP这个协议的细节,我还是推荐你去 ...

  6. Redis学习篇(三)之Key相关操作

    KEYS 作用:返回所有的给定模式的key 语法:KEYS pattern 通配符: *: 任意个字符 ?: 任意一个字符 []: 匹配[]之间的字符 [a-z] [A-Z] \x: 匹配特殊字符 ? ...

  7. C和指针之学习笔记(3)

    第8章 数组 1.数组与指针 数组名是一个个元素的地址. int  a[10];  int  b[10];  int  *c; (1) c = & a[0]; &a[0]表示一个指向数 ...

  8. 【BZOJ 2957】 2957: 楼房重建 (线段树)

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1753  Solved: 841 Description 小A的楼房外有一大片施 ...

  9. [CF626F]Group Projects

    [CF626F]Group Projects 题目大意: 有一个长度为\(n(n\le200)\)的数列\(\{A_i\}\),将其划分成若干个子集,每个子集贡献为子集\(\max-\min\).求子 ...

  10. [bzoj1023][SHOI2008]cactus 仙人掌图 (动态规划)

    Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的回 ...