内容出自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. 【LOJ】 #2132. 「NOI2015」荷马史诗

    题解 k叉哈夫曼树,但是没有了二叉那样的最后一定能合并成一个树根的优秀性质,我们就不断模拟操作看看到了哪一步能用的节点数< k,然后先拿这些节点数合并起来 然后就可以k个k个合并了,大小一样先拿 ...

  2. 使用STL sort对字符串按字典序排序

    使用string数组 #include<iostream> #include<string> #include<algorithm> using namespace ...

  3. 用于浏览器本地存储的js插件 - jStorage

    简介 jStorage是一个跨浏览器的将key-value类型的数据存储到浏览器本地存储的js插件——jStorage支持所有主流浏览器,PC机(甚至包括是IE6)和移动终端均可用.此外,jStora ...

  4. Wannafly挑战赛7 E - 珂朵莉与GCD

    题目描述 给你一个长为n的序列a m次查询 每次查询一个区间的所有子区间的gcd的和mod1e9+7的结果 输入描述: 第一行两个数n,m之后一行n个数表示a之后m行每行两个数l,r表示查询的区间 输 ...

  5. Android之 解析XML文件(1)—— Pull解析

    (以下文章基本照抄<第一行代码>) 解析XML文件有很多方法,这里主要讲Pull解析和SAX解析.这篇文章主要是讲Pull解析. 一.Pull解析参考代码 先上代码: private vo ...

  6. Java变量和运算符

    1.变量 变量概述 什么是变量?变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:你家里的大衣柜是容器,用来装载衣裤:饭盒是容器,用来装载饭菜.那么变量是 ...

  7. 第10天-JavaScript正则表达式

    正则有什么用 给定的字符串是否符合正则表达式的过滤逻辑 通过正则表达式,从字符串中获取我们想要的特定部分 替换字符串满足正则表达式的字符 例如:验证邮箱.手机号.银行卡.采集器(爬虫).中奖信息133 ...

  8. 工厂bean和bean工厂

    FactoryBean(工厂bean):是bean的加工工厂,是对已知Bean的加工,是一个接口,要实现三个方法: ① Object getObject()可以对bean进行加工添加功能. ② Cla ...

  9. javascript类型系统

    前面的话 除了对象之外,数组Array类型可能是javascript中最常用的类型了.而且,javascript中的数组与其他多数语言中的数组有着相当大的区别.本文将介绍javascript中的数组A ...

  10. Number lengths FZU - 1050

    N! (N factorial) can be quite irritating and difficult to compute for large values of N. So instead ...