怎样生成一个顶点迭代器(MItMeshVertex)
最近修改一个maya中的jlCollisionDeformer工具,该工具有一个明显不足,变形后顶点分布太乱,无法满足生产需求。于是考虑对该变形后的顶点进行平滑处理。既然要做平滑处理就要获取当前点及与该点保持连接关系的点的坐标,再以此为基础代入平滑算法。
我的基本思路是利用maya.OpenMaya模块中现有的api来获得一个基于当前模型的顶点迭代器(MItMeshVertex)。然后利用迭代器内置方法来逐顶点的进行平滑。
第一次使用OpenMaya模块还是很不熟练,看了好几天的技术文档。废话不多说,直接上代码:
##############create a new MObject!#####################
vertexcount = self.newpoints.length()
inMeshFn.getVertices(mesh_counts,mesh_connect)
polycount = inMeshFn.numPolygons() tempMeshData = OpenMaya.MFnMeshData()
tempObject = OpenMaya.MObject()
tempObject = tempMeshData.create()
newObject = OpenMaya.MObject() MeshFs = OpenMaya.MFnMesh()
#create a DAG path newObject = MeshFs.create(vertexcount,polycount,inPoints,mesh_counts,mesh_connect,tempObject) Inmesh_vertex_iter = OpenMaya.MItMeshVertex(newObject)
第二行或者当前模型的顶点数量。
第三行获取了当前模型的顶点分布信息。
第四行获取了当前模型的多边形面数。
第六行为tempMeshData对象分配内存地址,该对象为MFnMeshData类型。
第七行为tempObject对象分配内存空间,该对象为MObject类型。
第八行利用tempMeshData对象的create()方法创建一个内存空间,并赋值给tempObject对象。这样tempObject对象就有了内存空间去存储对应信息了。
第九行为newObject对象分配内存地址,该对象为OpenMaya.MObject()。用于存储返回值。
第十一行为MeshFs对象分配内存地址,该对象为MFnMesh类型。
第十四行利用MFnMesh类的create方法创建一个新的MObject对象,返回给tempObject及newObject对象。
第十六行以newObject对象为参数,初始化MItMeshVertex对象,生成一个顶点迭代器,并返回给Inmesh_vertex_iter对象。
不得不说maya中构建顶点迭代器的方法很麻烦,但这样的方式可以保证程序的安全稳定高效,充分利用了内存的特质。本人目前看的OpenMaya技术文档还仅限几个类,该文如有不足还请指正。
有了这个迭代器我们就可以非常快速高效的植入平滑算法了,你可以通过这种方法多次迭代产生平滑度更高的pointsArray信息。
以上。
怎样生成一个顶点迭代器(MItMeshVertex)的更多相关文章
- python基础一 ------利用生成器生成一个可迭代对象
#利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态, ...
- 用php生成一个excel文件(原理)
1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...
- js生成一个不重复的ID的函数的进化之路
在MongoDB中的ObjectID,可以理解为是一个不会重复的ID,这里有个链接http://blog.csdn.net/xiamizy/article/details/41521025感兴趣可以去 ...
- 动态生成一个设定好特殊样式的Tlabel,快速生成代码
动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...
- 【代码笔记】iOS-通过颜色来生成一个纯色图片
一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...
- C# 如何生成一个时间戳
在程序中,常常会用到时间戳,如何生成一个时间戳呢? /// <summary> /// 获取时间戳 /// </summary> /// <returns>< ...
- ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 ...
- Bitmap文件格式+生成一个BMP文件
Bitmap的文件格式: #define UINT16 unsigned short #define DWORD unsigned int #define WORD short #define LON ...
- 今天网站后台登录页面需要生成一个二维码,然后在手机app上扫描这个二维码,实现网站登录的效果及其解决方案如下
要实现二维码登录,需要解决2个技术,1.需要js websocket 与后台php实现长连接技术 2.实现二维码生成技术 要实现这个功能第二个算是比较简单,只需要下载一个php的二维码生成器即可,但要 ...
随机推荐
- You Dream. We Test.
https://www.keysight.com/us/en/home.html https://www.ixiacom.com/ IXIA 被收,才发现她
- Swapping Characters CodeForces - 903E (字符串模拟)
大意: 给定k个字符串, 长度均为n, 求是否存在一个串S, 使得k个字符串都可以由S恰好交换两个字符得到. 暴力枚举交换的两个字符的位置, 计算出交换后与其他串不同字符的个数, 若为1或>2显 ...
- spring cloud(三)服务提供与调用
服务提供 我们假设服务提供者有一个hello方法,可以根据传入的参数,提供输出“hello xxx,this is first messge”的服务 1.pom包配置 创建一个springboot项目 ...
- 如何seo(搜索引擎优化)
Seo是指遵循搜索引擎的搜索原则,对网站结构.网页文字语言和站点间互动外交等进行合理规划部署,以改善网站在搜索引擎的搜索表现,从而增加客户发现并访问网站的可能性的一个过程.
- 用图片作为label,for属性IE下不起作用
IE浏览器存在一个BUG,当你使用label的for属性达到点击label使对应的表单元素聚焦,label中的内容为图片时,IE浏览器下不起作用. 例如: <input type="c ...
- 对TCP协议握手的理解(转)
reference:https://www.cnblogs.com/awkflf11/p/9191708.html 目录: 31.Tcp握手的一些问题? 21.Tcp三次握手及SYN攻击: 四次握手? ...
- git安装及基本用法
安装: 1先安装客户端,选择默认路径,直接下一步就可以了 2安装图形化客户端,选择默认路径安装完成 基本用法: 1同步coding上的文件 在桌面上点击鼠标右键,并选择Git Clone... 打开下 ...
- 不得不补:PHP的JSON, SQL
不管怎么说,还是得感谢慕课网,提供了很多免费的视频教学. 学习自: https://www.imooc.com/view/68 前端页面: <!DOCTYPE html> <html ...
- TensorFlow Training 优化函数
tf.train 提供了一组帮助训练模型的类和函数. 优化器 优化器基类提供了计算渐变的方法,并将渐变应用于变量.子类的集合实现了经典的优化算法,如 GradientDescent和Adagrad. ...
- Makefile中的%标记和系统通配符*的区别
Makefile中的%标记和系统通配符*的区别在于,*是应用在系统中的,%是应用在这个Makefile文件中的. (本文的测试环境是Windows7下使用MinGW提供的make.exe) 例如,如果 ...