maya崩溃自动保存路径_maya 使用swig将插件编译成pyd,无缝使用内置数据实现加速计算模块...

前言:

原本目的是想寻求一种方式来对cpu计算密集型代码部分进行加速替代,但是maya中mll插件的插件套路在传递参数上会占用大量的io,对于数据比较大的部分也会有相当消耗。如果全部写在c++部分又感觉缺乏灵活性,所以琢磨的一种可以在python中实现逻辑,pyd中实现算法的方式。

问题:

纯python api来编译pyd的计算模块会有大量的数据转换,比如获取模型所有的顶点会得到MFloatPointArray,获取所有SkinMesh的蒙皮权重会得到MDoubleArray,这些数据直接获取都很快,但是要把他们转换成python api所支持的数据格式就很麻烦,计算完成后还要转换回来,一旦模型面熟很高很耗费时间。作为一个懒人不能忍~

思路:

maya api 1.0使用swig做封装,借助swig解封PyObject指针的功能自动将python指针对象转换成maya内置的M数据类型。

流程:

  1. 下载swig,解压到本地,路径添加到添加到环境变量中
  2. 创建一个空的vs工程

7b53977c68dda1f80fac0c241cef777b.png

3. 添加一个文件compute.h,我们所有的代码都放这个头文件里面

223554b437a47c54775bad48767467c7.png

4. 针对所有平台,设置一下vs工程,方便代码提示

输出格式

596ad312ada78b45c854fec063f82063.png

包含目录,库目录

571f434a3cf9e2395580d07afef3ad49.png

依赖库,只用基本的数据类型

1039c30a0e91dfc42e4113c0b14e77d0.png

输出文件(带下划线,下面有解释)

44ed9e81b2e1150c8b7a743cf7c653ff.png

随便写一个累加的测试函数

// compute.h#pragma once
#include <maya/MIntArray.h>int testMIntArray(MIntArray input)
{int sum = 0;for (int i = 0; i < input.length(); i++){sum += input[i];}return sum;
}

编写swig的compute.i

%module TestMayaApi%{
#include "compute.h"
%}%include "compute.h"

添加到工程,设置一下生成事件,每次编译之前先生成包裹函数

8645381bc4e39155dd3587bed14ba68d.png

接下来编译就可以了

391ab26868d1abbb468ecff215e4476a.png

maya中测试:

import sys
sys.path.append('F:/swig_maya_test/swig_maya_test')
import TestMayaApiimport maya.OpenMaya as om
iList=om.MIntArray()
for i in range(100):iList.append(i)print TestMayaApi.testMIntArray(iList)

2202efb0e3fd3b8b1a9f0cf5c133168e.png

优化:

swig会生成两个文件py和pyd的,py是模块名,pyd是_模块名,要不然导入python模块会失败,要把pyd模块名的修改成TestMayaApi,只修改工程设置里面的输出文件是不行的,导入会报错,需要修改源码,这样我们只需要pyd就可以了。

  1. 先将输出文件修改

09bee8fb7dc7acccf5bfb17b6cbfe70a.png

2. 禁用生成事件,改为手动运行cmd

8dc18dc46711de301dceb0e5cbf72816.png

3. 将swig生成的compute_wrap.cxx添加进来,搜索替换模块名

每次运行swig都要重新生成替换。

e6f01a4e07e30819f00f77c935b7451a.png

重新生成后我们就不需要.py文件了,直接删掉,只保留TestMayaApi.pyd

返回值的坑:

c++函数不能直接返回maya内置类型,如果函数定义成这样,python中接受到的返回值是swig object指针,传递给其它python api时会出错

MIntArray testMIntArray(MIntArray input)

解决办法:

将参数传递改成引用类型,这样就可以直接修改数据,不用返回,和api 1.0大多数做法一致

void testMIntArrayMul(MIntArray input,int mul, MIntArray& output)
{output.setLength(input.length());for (int i = 0; i < input.length(); i++){output[i] = input[i] * mul;}
}

maya测试代码

import sys
sys.path.append('F:/swig_maya_test/swig_maya_test')
import TestMayaApiimport maya.OpenMaya as om
iList=om.MIntArray()
for i in range(100):iList.append(i)outList=om.MIntArray()
TestMayaApi.testMIntArrayMul(iList,2,outList)
print outList

f40d82e874c4b100e4e23936227a68b5.png

总结:

算是maya plugin和python api的之外的一种计算模块的方式,编译之后maya 2016以下版本可以共用一个pyd,其它版本可能要单独编译,没测试很全。好处就是用起来更舒服,不用转换数据,和python api无缝衔接,可以直接用MxxxArray,并且支持OpenMP多线程计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Slip.js – 在触摸屏上实现 Swipe 对列表重新排序

Slip.js 是一个很小的 JavaScript 库&#xff0c;用于实现对触摸屏的互动 Swipe 和对元素重新排序列表&#xff08;Reordering&#xff09;。Slip.js 没有任何的依赖&#xff0c;你可以通过自定义 DOM 事件实现重新排序交互。 您可能感兴趣的相关文章Pace.js – 页面加载进度自…

构建和运行Java 8支持

尚未提供对Java 8的Eclipse支持。 如果要使用它&#xff0c;则必须构建它。 Eclipsepedia的JDT Core / Java8页面包含有关使用Eclipse Java开发工具 &#xff08;JDT&#xff09;中不断发展的Java 8支持源来设置开发环境的说明。 说明中缺少一些内容&#xff1b; 待会儿我会回圈…

狄克斯特拉 Dijkstra 算法 C#实现

今天在看《算法图解》&#xff0c;看了加权最小路径算法&#xff0c;决定用代码实现一下。 首先是画有向图&#xff0c;在网上找了一下&#xff0c;有不错的开源软件graphviz,该源代码托管在GitLab上。该软件是一个图形可视化软件。 画了一个有向图如下&#xff1a; 画图用的代…

So Easy! 让开发人员更轻松的工具和资源

这篇文章给大家分享让开发人员生活更轻松的免费工具和资源。所以&#xff0c;如果你正在寻找一些为迅速解决每天碰到的设计和开发问题的工具和资源&#xff0c;不要再观望&#xff0c;试试这些工具吧。这些奇妙的工具不仅会加快您的生产&#xff0c;也让你的工作质量提升。 您可…

android linux截图库,Android中截图(surfaceView)源码

总结了一个方法&#xff0c;实现了在Android当前Activity的截图&#xff0c;本人测试确实通过了&#xff0c;不过有朋友说截出来的图是黑色的&#xff0c;不能看。我心想&#xff0c;这没有问题啊&#xff0c;相同的代码我就可以执行通过&#xff0c;并没有没有在意这个问题。可…

23套新鲜出炉的网站和手机界面 PSD 素材

Web 用户界面&#xff0c;移动用户界面和线框套件对设计师很有用&#xff0c;因为这些套件让他们使用快速和有效的方式复制用户界面。这些类型的工具包提供了一个基本的用户界面元素&#xff0c;用于它们需要制作的网站或软件模型。 在这篇文章中&#xff0c;我们展示的是自由和…

arcgis栅格邻域统计_ArcGIS 从基础到实战书正式出版,易智瑞技术总裁沙志友沙总推荐并亲自写序...

《ArcGIS 从基础到实战》书正式出版&#xff0c;易智瑞技术总裁沙志友沙总推荐并亲自写序&#xff0c;京东地址 https://item.jd.com/10025512034581.html第一章 ArcGIS基础和入门 11.1 ArcGIS 10.7 Desktop的安装 11.1.1 安装环境 11.1.2 安装步骤 21.1.3 注意的问…

WebLogic Classloader分析工具

WebLogic Server具有一个名为Classloader Analysis Tool的内置Web应用程序&#xff0c;您可以通过http&#xff1a;// localhost&#xff1a;7001 / wls-cat访问它 您需要使用为/ console Webapp配置的同一用户登录。 使用CAT&#xff0c;您可以检查应用程序在服务器中加载了哪…

Maplace.js – 小巧实用的 jQuery 谷歌地图插件

Maplace.js是一个小的显示谷歌地图的 jQuery 插件&#xff0c;帮助你把谷歌地图嵌入到你的网站&#xff0c;快速在地图位置上创建标记和控制菜单。它需要 jQuery 和谷歌地图 API v3 支持&#xff0c;所以这两个都需要引入到你的页面。它支持标记和自定义图标、缩放级别和自定义…

使用Spring Roo进行概念验证

在Keyhole期间&#xff0c;我参与了许多项目&#xff0c;其中客户要求我们重写旧系统&#xff0c;同时保留其现有数据库。 有时&#xff0c;它有助于快速演示如何使用当前技术来简化开发&#xff0c;测试和维护其代码。 我发现可以创建一个快速示例&#xff08;与当前项目相关…

z490 linux raid,华硕z490主板装win7系统及bios设置教程(支持10代usb驱动)

[文章导读]我们在组装电脑时&#xff0c;华硕主板可能是大家的首选&#xff0c;最近有网友问&#xff0c;我组装的华硕z490主板电脑怎么装win7系统呢&#xff0c;这里和大家说下&#xff0c;从华硕z490主板后默认是uefigpt引导模式&#xff0c;且官方没有出usb驱动&#xff0c;…

Ember Charts – 基于 Ember D3 的图表库

Ember Charts 是一个基于 Ember.js 和 D3.js 的图表库。它包括时间序列、柱状图、饼图、点图&#xff0c;很容易扩展和修改。这些图表组件代表图表交互性和演示的最佳实践&#xff0c;是高度可定制和可扩展的。您可以添加说明、标签、提示和鼠标悬停效果。 您可能感兴趣的相关文…

值得拥有!精心推荐几款超实用的 CSS 开发工具

当你开发一个网站或 Web 应用程序的时候&#xff0c;有合适的工具&#xff0c;绝对可以帮助您节省大量的时间。在这篇文章中&#xff0c;我为大家收集了超有用的 CSS 开发工具。 对于 Web 开发人员来说&#xff0c;找到有用的 CSS 开发工具&#xff0c;就像找到一个魔灯&#x…

matplotlib散点图笔记

定义: 由一组不连续的点完成的图形 散点图: 包含正相关性,负相关性和不相关性. 散点图生成函数: plt.scatter(x,y) 演示代码如下: import numpy as np import matplotlib.pyplot as plt open,closenp.loadtxt(‘000001.txt’,delimiter’,’,skiprows1,usecols(1,4),unpackTrue…

20款漂亮的长阴影 LOGO 设计作品【附免费生成工具】

长阴影&#xff08;Long Shadow&#xff09;概念来自于最新非常流行的扁平化设计&#xff08;Flat Design&#xff09;。扁平化设计趋势影响最大的是用户界面元素和图标&#xff0c;但它也开始蔓延到其他网页设计的其他部分。 长阴影其实就是扩展了对象的投影&#xff0c;感觉是…

c语言sqlist结构体,c语言里 sqlist

满意答案cielkong2018.08.12采纳率&#xff1a;43% 等级&#xff1a;9已帮助&#xff1a;463人c语言里 sqlist&#xff1f;//定义顺序表L的结构体typedef struct{Elemtype data[MaxSize]&#xff1b;int length;}SqList;//建立顺序表void CreateList(SqList * &L,ElemTy…

汇编语言实验三

1. 练习1 第1步&#xff0c;编写汇编源程序t1.asm, 源程序代码如图1-1所示。 (1) 运行程序&#xff0c;观察程序输出结果是什么&#xff1f; 2) 将 line4和line9种寄存器dl 的值分别修改为 0~9 中任何一个数字&#xff0c;重新汇编→ 连接→运行&#xff0c;观察结果的变化。 …

Java事实让您大吃一惊! (信息图)

随着Java 8计划在未来几天内发布 &#xff0c;我们正在寻找一些Java事实&#xff0c;这些事实将真正捕捉这种编程语言对世界的影响。 因此&#xff0c;我们决定创建一个简单的图表&#xff0c;描述有关Java历史的一些重要统计数据。 信息的主要来源是Oracle的Java时间轴 。 我…

15个创意示例教您如何自定义 404 错误页面

在这篇文章中&#xff0c;你会看到一组充满创意的404错误页面设计。我希望这个集合能够启发和帮助你设计自己的 404 错误页面。一个自定义的404错误页面将鼓励用户在您的网站上停留更长的时间。 404页面必须让访客容易理解&#xff0c;最好有有一些互动。你会看到下面的例子中一…

C语言反序输出英文句子,C++实现英文句子中的单词逆序输出的方法

本文实例讲述了C实现英文句子中的单词逆序输出的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;#include "stdafx.h"#include #include #include using namespace std;int main(int arc,char** argv){string str"I come from liaoning.";sta…