- 浏览: 205936 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
悲梦天下:
楼主,有些视频到一半就没声音了,怎么破!!!
python视频教程 更新22(完) -
schi:
啊,我太傻了,都想到使用uv了,可以有更简单的方法,只要把uv ...
Get Reversed Normal Faces(获取反法线面) [原理] -
schi:
相对Pillow和PySide而言,显示图片opengl就显得 ...
display an image with pyopengl and Pillow -
schi:
我也是今天才偶然想到的,我以后可能用不着了,所有分享给有需要的 ...
Get Reversed Normal Faces(获取反法线面) [原理] -
baiyanbin:
支持楼主原创,关注楼主博客有一阵子了,国内认真认真搞技术的太少 ...
python视频教程 更新22(完)
不知道大家还记不记得之前的helixCmd,这个helix2Cmd是从C++转成python的版本,与helixCmd不同的是它不是创建曲线,而是更改曲线,使给定的曲线变成helix曲线,并且支持返回和重做。
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ This example takes a curve and changes it into a helix. """ import sys import math import maya.OpenMaya as om import maya.OpenMayaMPx as ompx kPluginCmdName = 'spHelix2' kPitchFlag = "-p" kPitchLongFlag = "-pitch" kRadiusFlag = "-r" kRadiusLongFlag = "-radius" # command class Helix2(ompx.MPxCommand): def __init__(self): super(Helix2, self).__init__() self.__fDagPath = om.MDagPath() self.__fComponent = om.MObject() self.__fCVs = om.MPointArray() self.__radius = 4.0 self.__pitch = 0.5 def doIt(self, args): """ doIt用来完成所有的准备工作,最后才执行实际工作. """ argData = om.MArgDatabase(self.syntax(), args) if argData.isFlagSet(kPitchFlag): self.__pitch = argData.flagArgumentDouble(kPitchFlag, 0) if argData.isFlagSet(kRadiusFlag): self.__radius = argData.flagArgumentDouble(kRadiusFlag, 0) # Get the first selected curve from the selection list. # 获取所选的nurbsCurve曲线 slist = om.MSelectionList() om.MGlobal.getActiveSelectionList(slist) mitList = om.MItSelectionList(slist, om.MFn.kNurbsCurve) # 如果所选物体不是nurbsCurve曲线,引发错误 if mitList.isDone(): sys.stderr.write('doIt: no curve has been selected\n') raise mitList.getDagPath(self.__fDagPath, self.__fComponent) return self.redoIt() def redoIt(self): """ redoIt来完成实际的工作 """ curveFn = om.MFnNurbsCurve(self.__fDagPath) # 获取曲线的cv数 numCVs = curveFn.numCVs() # 获取所有cv点的坐标 curveFn.getCVs(self.__fCVs) # 定义新的cv点的坐标 points = om.MPointArray(self.__fCVs) for i in range(numCVs): # Maya python API不支持列表直接赋值,需要使用set() #points[i] = om.MPoint(self.__radius * math.cos(i), #self.__pitch * i, #self.__radius * math.sin(i)) points.set(om.MPoint(self.__radius * math.cos(i), self.__pitch * i, self.__radius * math.sin(i)), i) # 将新的cv点坐标,赋予曲线 curveFn.setCVs(points) # 更新曲线 curveFn.updateCurve() return om.MStatus.kSuccess def undoIt(self): """ undoIt用来还原nurbsCurve曲线 """ curveFn = om.MFnNurbsCurve(self.__fDagPath) curveFn.setCVs(self.__fCVs) curveFn.updateCurve() self.__fCVs.clear() return om.MStatus.kSuccess def isUndoable(self): return True def cmdCreator(): return ompx.asMPxPtr(Helix2()) def syntaxCreator(): syntax = om.MSyntax() syntax.addFlag(kPitchFlag, kPitchLongFlag, om.MSyntax.kDouble) syntax.addFlag(kRadiusFlag, kRadiusLongFlag, om.MSyntax.kDouble) return syntax def initializePlugin(mobject): mplugin = ompx.MFnPlugin(mobject, 'Mack Stone', '1.0', 'Any') try: mplugin.registerCommand(kPluginCmdName, cmdCreator, syntaxCreator) except: sys.stderr.write('Failed to register command: %s\n' % kPluginCmdName) raise def uninitializePlugin(mobject): mplugin = ompx.MFnPlugin(mobject) try: mplugin.deregisterCommand(kPluginCmdName) except: sys.stderr.write('Failed to unregister comman: %s\n' % kPluginCmdName) raise
使用方法:
在插件面板加载helix2cmd.py,创建或选择一条曲线,执行命令
import maya.cmds as cmds cmds.spHelix2() # 或 cmds.spHelix2(r=3.0, p=2.0)
或
spHelix2; // 或 spHelix2 -r 5.0 -p 2.0;
但需要注意的是如果你输入的参数不是浮点值,如输入3,而不是3.0,可能会导致该参数失效而使用上一次的参数,不知道为什么,可能是maya python API对数据的转换还不够健全,或是数据类型十分敏感。
你可以在maya安装目录下的devkit/plug-ins找到helix2Cmd.cpp
。
在线版
http://download.autodesk.com/us/maya/2011help/API/helix2_cmd_8cpp-example.html
最后是pymel的版本,再次感受到pymel的强大
#!/usr/bin/env python # -*- coding: UTF-8 -*- import math from pymel.core import * def helix2(r=4, p=0.5): # 获取所选物体 objs = ls(sl=1, long=1) if not objs: return False # 获取物体的shape shape = objs[0].getChildren()[0] # 如果所选物体不是nurbsCurve曲线,引发错误 if not isinstance(shape, nodetypes.NurbsCurve): raise Exception('No curve has been selected or must select nurbsCurve first.') # 获取曲线的cv数 numCVs = shape.numCVs() # 获取所有cv点的坐标 CVs = shape.getCVs() # 定义新的cv点的坐标 newCVs = CVs for i in range(numCVs): newCVs[i] = dt.Point(r * math.cos(i), p * i, r * math.sin(i)) # 将新的cv点坐标,赋予曲线 shape.setCVs(newCVs) # 更新曲线 shape.updateCurve() return "Curve %s is turn to helix" % objs[0]
希望对你们有帮助
发表评论
-
uv重叠(uv overlap)
2014-06-28 22:28 5385两年多前我需要解决uv重叠的问题,当时觉得是一个挺有挑 ... -
GPU, Python and Maya
2013-06-27 17:32 3154Here an example how to use pyop ... -
sierpinski triangle 2d maya plug-in(with python API 2.0)
2012-11-07 16:55 2347因为python API 2.0可用的类很少,OpenMaya ... -
sierpinski triangle 2d in maya(with python API 2.0)
2012-10-22 20:41 2038在国庆前我刚好完成手上的工作,有两三天的空闲,于是就去 ... -
mel,cmds,python API哪个更快?
2012-09-13 14:37 3965昨天偶然的跟同事谈论 ... -
Maya Python API 2.0 - MGlobal
2012-08-31 18:07 2318MGlobal是一个静态类,提供通用的API涵数. 包括获取m ... -
Maya Python API 2.0 - MSelectionList
2012-07-09 14:03 2549从Maya2012开始我们迎来了新的Python API, ... -
createDynamicCache v0.1
2011-01-09 13:57 1708createDynamicCache是我的第二个maya ... -
geomShader
2010-09-29 14:26 1282geomShader.py是使用API编写maya材质的简单的 ... -
run time dynamic node
2010-09-14 23:51 1083大概一个月前我就写好了,但一直没时间整理,这个节点和我以前写的 ... -
scanDagCmd
2010-09-14 21:09 1622scanDag命令以depth first(深度优先)或bre ... -
迭代所选的组件(component)
2010-04-26 21:36 1722我们已经知道如何对物体进行选择,但如果对象是compone ... -
API中的选择操作
2010-04-25 18:06 1697我们已经知道如何使用API获取当前所选物体,但单是获取当前 ... -
使用API获取当前所选物体
2010-03-03 20:28 1936获取当前所选物体,是在编写工具时经常用到的,我们来看看API和 ... -
circleNode.py
2009-11-23 21:12 1801自定义节点 使用方法 在脚本编辑器中的python面板执行c ... -
basicObjectSet.py
2009-11-18 20:14 1201这是一个自定义节点和命令都同时存在的一个例子。 basi ... -
animCubeNode.py
2009-11-13 22:54 1414一个节点例子。该节点有一个time输入属性用来连接时间或设置关 ... -
zoomCameraCmd
2009-11-08 14:57 1084helixCmd是一个带命令参数的命令,但执行之后是无法撤销的 ... -
sineNode.py
2009-10-29 21:03 1255前面的helloWorldCmd.py和helixCmd.py ... -
helixCmd.py
2009-10-25 22:13 2054之前的helloWorldCmd.py只是 ...
相关推荐
联想thinkpad helix2 平板电脑 bios编程器直接读取芯片备份固件
2. **3D模型的插入**:在WPF中,3D模型通常以`Model3D`对象的形式存在,可以被插入到3D场景的`Model3DGroup`中。HelixToolkit提供便捷的方法来添加和管理这些3D模型,确保它们在视图中正确显示。 3. **3D模型的旋转...
2. 下载并运行 Helix Server 的安装程序。安装过程中,你需要指定授权文件的位置。 3. 阅读并接受许可协议,然后选择合适的安装路径。默认情况下,服务器会将流媒体文件存储在安装目录下,但建议安装完成后更改此...
HelixToolkit是一个开源的3D图形工具库,专为WPF应用程序设计,其提供了一系列用于3D建模和渲染的组件。HelixToolkit.WPF1.Adorners是一组用于在HelixToolkit渲染环境中增加装饰性的组件,它们可以增强用户的交互...
**WPF 3D工厂 HelixToolkit:深入理解与实践** 在Windows Presentation Foundation(WPF)平台上,构建3D图形应用程序是一项技术性极强的工作。Helix Toolkit是为WPF设计的一个开源库,它提供了丰富的3D图形组件和...
WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀项目及源码 helixtoolkit-8c0d58aa0295WPF21个优秀...
Helix Toolkit是一个用于在WPF(Windows Presentation Foundation)应用程序中创建和显示3D图形的开源工具库。但官方提供文档过于简单,故整理一下文档供用户参考。该工具库提供了一系列用于处理3D图形的控件、工具...
helix server 9 破解版 流媒体视频服务器
2. **选择解码模块**:在Helix框架中,仅使用MP3解码相关的部分,避免引入不必要的模块。 3. **定制构建系统**:可能需要修改构建脚本,使其适应STM32的编译环境。 4. **处理依赖**:Helix可能有额外的库依赖,需要...
Helix MP3 解码器是一种开源的音频解码库,支持 MPEG-1、MPEG-2 和 MPEG-2.5 Layer 3(即 MP3)的音频格式。由于其支持多种位速率、可变位速率(VBR)和可选音频采样率等特点,被广泛应用于各种消费电子设备和数字...
2. **导入源代码**:将要分析的源代码添加到项目中,Helix QAC会自动扫描并构建代码依赖关系图。 3. **选择规则集**:从内置的规则库中选择或创建自定义规则集,这些规则将用于检查代码。 4. **配置分析参数**:根据...
2. **创建3D视图**:在XAML布局文件中,添加一个`HelixViewport3D`控件,这将作为3D场景的容器。 ```xml <helix:HelixViewport3D x:Name="viewport" /> ``` 3. **后台导入模型**:在C#代码中,使用`Task.Run`...
### Helix QAC 用户使用手册(Windows)关键知识点解析 #### 一、Helix QAC 简介 Helix QAC 是一款专为软件开发过程中进行静态代码分析而设计的强大工具,它能够帮助开发者在编码阶段即发现并修复潜在的质量问题及...
### HelixToolkit.WPF知识点详解 #### 一、Adorners(装饰器) ##### 1.1 RectangleAdorner **定义**: 这是一种特殊的装饰器,用于在用户进行矩形缩放操作时,在矩形中心显示十字准线,帮助用户更准确地控制缩放...
Helix.Server.12的破解文件,无限制
2. **光照与阴影**:Helix Toolkit提供了多种光照模型,如点光源、方向光和聚光灯,以及基于像素的阴影处理,使3D场景更加逼真。 3. **相机控制**:库内包含了交互式的相机系统,允许用户自由地旋转、平移和缩放3D...
2. 配置文件:`vi /usr/local/helix/etc/helix-server.conf` 在配置文件中,你需要设置服务器监听的IP地址和端口,以及数据存储路径等参数。 示例配置: ``` server-name = "My Helix Server" server-port = ...