`
schi
  • 浏览: 203874 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

迭代所选的组件(component)

阅读更多
  我们已经知道如何对物体进行选择,但如果对象是component呢,我们怎么去使用api来选择点、边、面等等的component呢?
  在场景中创建一个多边形物体,然后选择它的点、边、面或UV,分开或一起选都行,在执行下面的代码
#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import maya.OpenMaya as om

# 创建选择列表
selList = om.MSelectionList()

# 获取当前所选物体
om.MGlobal.getActiveSelectionList(selList)

# 创建迭代器,对选择列表进行迭代
it = om.MItSelectionList(selList)
while not it.isDone():
    dagPath = om.MDagPath()     # 用来存储所选物体的路径
    component = om.MObject()    # 用来存储所选物体的组件的列表

    # 返回一个transform或shape节点的路径到dagPath
    # 返回物体的组件的列表,如果组件被选择的话
    it.getDagPath(dagPath, component)

    # 添加一个方法集来处理物体
    fn = om.MFnDependencyNode(dagPath.node())

    # 打印物体的名称
    print "\nObject: %s" % fn.name()

    # 如果组件的列表是有效的
    if not component.isNull():
        # 给组件列表创建一个geometry迭代器。
        # 它可以处理所有的组件,如边、面等
        itGeom = om.MItGeometry(dagPath, component)

        # 迭代所有点
        while not itGeom.isDone():
            # 获取它们的世界坐标
            point = itGeom.position(om.MSpace.kWorld)

            # 打印点的索引和坐标
            print "\t%d) %.3f %.3f %.3f" % (itGeom.index(),
                                            point.x, point.y, point.z)

            # 下一个
            itGeom.next()

    it.next()

你会得到类似这样的结果
引用
Object: pCubeShape1
    0) -0.500 -0.500 0.500
    1) 0.500 -0.500 0.500
    2) -0.500 0.500 0.500
    3) 0.500 0.500 0.500

Object: pCubeShape1
    4) -0.500 0.500 -0.500
    5) 0.500 0.500 -0.500
    6) -0.500 -0.500 -0.500
    7) 0.500 -0.500 -0.500

  如果你没有选择任何的component则只会得到所选物体的名称
引用
Object: pCubeShape1

  上面用到的是MItGeometry迭代器,它可以迭代物体的points/CV/vertices,包括mesh(多边形), nurbs surface, nurbs curve(曲线), subdivision surface(细分面) 以及 lattice(晶格)。那如果我们要迭代其它的component呢,如边、面等等。Maya里还有其它的迭代器,如MItMeshEdge、MItMeshPolygon、MItSurfaceCV等
  在maya中创建一个多边形和一条曲线,分别或同时选择曲线的点、多边形的边、多边形的面,分别对它们执行下面的代码
# 创建选择列表
selList = om.MSelectionList()

# 获取当前所选物体
om.MGlobal.getActiveSelectionList(selList)

# 创建迭代器,对选择列表进行迭代
it = om.MItSelectionList(selList)
while not it.isDone():
    dagPath = om.MDagPath()     # 用来存储所选物体的路径
    component = om.MObject()    # 用来存储所选物体的组件的列表

    # 返回一个transform或shape节点的路径到dagPath
    # 返回物体的组件的列表,如果组件被选择的话
    it.getDagPath(dagPath, component)

    # 添加一个方法集来处理物体
    fn = om.MFnDependencyNode(dagPath.node())

    # 打印物体的名称
    print "\nObject: %s" % fn.name()

    # 如果组件的列表是有效的
    if not component.isNull():
        if component.apiType() == om.MFn.kMeshComponent:
            itVertex = om.MItMeshVertex(dagPath, component)
            while not itVertex.isDone():
                # 获取它们的世界坐标
                point = itVertex.position(om.MSpace.kWorld)

                # 打印点的索引和坐标
                print "\t%d) %.3f %.3f %.3f" % (itVertex.index(),
                                                point.x, point.y, point.z)
                itVertex.next()

        elif component.apiType() == om.MFn.kCurveCVComponent:
            itCurve = om.MItCurveCV(dagPath, component)
            while not itCurve.isDone():
                # 获取它们的世界坐标
                point = itCurve.position(om.MSpace.kWorld)

                # 打印点的索引和坐标
                print "\t%d) %.3f %.3f %.3f" % (itCurve.index(),
                                                point.x, point.y, point.z)
                itCurve.next()

        elif component.apiType() == om.MFn.kMeshEdgeComponent:
            itEdge = om.MItMeshEdge(dagPath, component)
            while not itEdge.isDone():
                # 获取它们的世界坐标
                point = itEdge.center(om.MSpace.kWorld)

                # 打印点的索引和坐标
                print "\t%d) %.3f %.3f %.3f %s" % (itEdge.index(),
                                                point.x, point.y, point.z,
                                                ' smooth' if itEdge.isSmooth() else ' hard')
                itEdge.next()
                
        elif component.apiType() == om.MFn.kMeshPolygonComponent:
            itPoly = om.MItMeshPolygon(dagPath, component)
            while not itPoly.isDone():
                # 获取它们的世界坐标
                point = itPoly.center(om.MSpace.kWorld)

                # 打印点的索引和坐标
                print "\t%d) %.3f %.3f %.3f %s" % (itPoly.index(),
                                                point.x, point.y, point.z,
                                                ' planar' if itPoly.isPlanar() else ' non-planar')
                itPoly.next()
                
        # 还有一大堆的component我就不一一列出了

    it.next()

  你会得到类似的结果
引用
Object: pSphereShape1
381) 0.188 -0.969 -0.137  hard
401) 0.309 -0.921 -0.224  hard
421) 0.421 -0.850 -0.306  hard
441) 0.524 -0.758 -0.381  hard
461) 0.613 -0.647 -0.446  hard
481) 0.688 -0.521 -0.500  hard
501) 0.745 -0.382 -0.541  hard
521) 0.784 -0.233 -0.570  hard
541) 0.804 -0.078 -0.584  hard
561) 0.804 0.078 -0.584  hard
581) 0.784 0.233 -0.570  hard
601) 0.745 0.382 -0.541  hard
621) 0.688 0.521 -0.500  hard
641) 0.613 0.647 -0.446  hard
661) 0.524 0.758 -0.381  hard
681) 0.421 0.850 -0.306  hard
701) 0.309 0.921 -0.224  hard
721) 0.188 0.969 -0.137  hard
741) 0.063 -0.994 -0.046  hard
761) 0.063 0.994 -0.046  hard

Object: pTorusShape1
415) -2.374 -0.741 -2.727  smooth
435) -2.359 -0.594 -2.681  smooth
455) -2.331 -0.469 -2.595  smooth
475) -2.292 -0.378 -2.476  smooth
495) -2.247 -0.331 -2.336  smooth
515) -2.199 -0.331 -2.189  smooth
535) -2.154 -0.378 -2.050  smooth
555) -2.115 -0.469 -1.931  smooth
575) -2.087 -0.594 -1.844  smooth
595) -2.072 -0.741 -1.799  smooth
615) -2.072 -0.896 -1.799  smooth
635) -2.087 -1.043 -1.844  smooth
655) -2.115 -1.168 -1.931  smooth
675) -2.154 -1.258 -2.050  smooth
695) -2.199 -1.306 -2.189  smooth
715) -2.247 -1.306 -2.336  smooth
735) -2.292 -1.258 -2.476  smooth
755) -2.331 -1.168 -2.595  smooth
775) -2.359 -1.043 -2.681  smooth
795) -2.374 -0.896 -2.727  smooth

Object: pSphereShape1
137) 0.811 -0.380 0.413  planar
155) 0.435 -0.232 0.853  planar
156) 0.677 -0.232 0.677  planar
157) 0.853 -0.232 0.435  planar
174) 0.154 -0.078 0.970  planar
175) 0.446 -0.078 0.875  planar
176) 0.694 -0.078 0.694  planar
177) 0.875 -0.078 0.446  planar
193) -0.154 0.078 0.970  planar
194) 0.154 0.078 0.970  planar
195) 0.446 0.078 0.875  planar
196) 0.694 0.078 0.694  planar
197) 0.875 0.078 0.446  planar
212) -0.435 0.232 0.853  planar
213) -0.150 0.232 0.946  planar
214) 0.150 0.232 0.946  planar
215) 0.435 0.232 0.853  planar
216) 0.677 0.232 0.677  planar
217) 0.853 0.232 0.435  planar
231) -0.644 0.380 0.644  planar
232) -0.413 0.380 0.811  planar
233) -0.142 0.380 0.899  planar
234) 0.142 0.380 0.899  planar
235) 0.413 0.380 0.811  planar
236) 0.644 0.380 0.644  planar
237) 0.811 0.380 0.413  planar
251) -0.595 0.519 0.595  planar
252) -0.382 0.519 0.749  planar
253) -0.132 0.519 0.830  planar
254) 0.132 0.519 0.830  planar
255) 0.382 0.519 0.749  planar
256) 0.595 0.519 0.595  planar
257) 0.749 0.519 0.382  planar
271) -0.531 0.645 0.531  planar
272) -0.341 0.645 0.669  planar
273) -0.117 0.645 0.742  planar
274) 0.117 0.645 0.742  planar
275) 0.341 0.645 0.669  planar
276) 0.531 0.645 0.531  planar
292) -0.292 0.755 0.573  planar
293) -0.101 0.755 0.635  planar
294) 0.101 0.755 0.635  planar
295) 0.292 0.755 0.573  planar
312) -0.236 0.847 0.462  planar
313) -0.081 0.847 0.512  planar
314) 0.081 0.847 0.512  planar

Object: curveShape1
2) 6.073 0.000 -8.701
3) 11.819 0.000 -2.601
4) 10.852 0.000 9.138
5) 7.350 0.000 13.090
6) 3.782 0.000 14.419
0
1
分享到:
评论

相关推荐

    MX Component Version 3

    这个版本是该组件系列的第三个迭代,通常会包含前两个版本的改进、新功能和性能优化。在本文中,我们将深入探讨MX Component Version 3中的关键知识点。 1. **组件化设计**: MX Component Version 3的核心理念是...

    MX Component 3.16 安装包

    MX Component 3.16 是一个重要的软件组件集,它为开发者提供了丰富的功能,以便在各种应用程序中实现高效、稳定且灵活的开发。这个安装包是针对MX Component 3.16版本的,包含了所有必要的文件和资源,使得用户能够...

    HTML Component Library 3.9.zip

    HTML Component Library 3.9 是一个专为 Delphi 开发者设计的组件库,它包含了丰富的 HTML 和 Web 相关的组件,可以帮助开发者在 Delphi 应用程序中轻松地集成和展示 HTML 内容。这个版本号为 3.9,意味着它经过了多...

    TMS.component.Pack.v6.0.2.0

    TMS.component.Pack.v6.0.2.0是TMS公司推出的一款组件集合,专门针对软件开发提供了一系列功能丰富的组件,旨在提升开发效率和软件质量。 TMS.component.Pack.v6.0.2.0主要包含以下几个核心知识点: 1. 组件化开发...

    TMS_Component_pack_fullsource V5.7.1安装版

    【TMS_Component_pack_fullsource V5.7.1安装版】是一个专为IT开发者设计的组件包,提供了丰富的源代码支持。此版本是V5.7.1,意味着它是该系列产品的更新迭代,通常会包含错误修复、性能优化以及新增功能。TMS ...

    component base rails applications

    本书《Component-Based Rails Applications》主要介绍了如何使用Rails引擎(Rails Engine)进行基于组件的Rails应用开发,以及如何对应用程序的大型模块进行拆分和模块化。以下是书中一些核心知识点的详细说明: 1....

    树的构件与遍历---使用组合模式与迭代模式

    在树形结构中,每个节点都可以看作是一个组件,它可以包含其他节点(子组件)。通过组合模式,我们可以以统一的方式对待单个节点和包含多个节点的分支,简化了对树结构的操作。例如,在Java中,我们可以创建一个抽象...

    组件化架构Demo

    - **组件工程(Component Project)**:每个组件是一个独立的Gradle子项目,包含特定功能的代码和资源。 - **依赖管理**:通过Gradle的dependencies块定义组件间的依赖关系,遵循“声明式”依赖原则。 - **接口定义*...

    Barcode.VCL.Component.v1.8.6.48.FS

    这个组件包版本号为1.8.6.48,表明它经过了多次迭代和优化,以提供更稳定和高效的功能。VCL(Visual Component Library)是Delphi编程环境中的核心库,它包含了一系列用于构建用户界面的组件。这个条形码组件的引入...

    组合模式二叉树,前序、中序、后续,迭代器模式访问遍历

    在二叉树的例子中,每个节点都可以视为一个独立的组件(Component),可以包含子节点(Child),也可以是叶子节点(Leaf),没有子节点。这样,我们可以将整个树看作一个整体进行操作,而不必关心具体是单个节点还是...

    3D Component Finite Array For ANSYS HFSS

    随着技术的发展,ANSYS HFSS 2019 R3引入了一种新的迭代域分解基有限元技术——3D Component Finite Array(3D组件有限阵列),专门用于模拟具有非相同单元格的有限周期性结构。这项新技术显著提高了模拟速度,减少...

    MX Component 3.17T

    "MX Component 3.17T" 是一个针对专业用户设计的组件,主要适用于软件开发和工程领域。这个版本是3.17T,表明它是一个经过多次迭代和改进的成熟产品。MX Component 提供了丰富的功能,旨在提高开发效率,优化工作...

    iOS-组件化管理.zip

    在iOS开发中,组件化是一种将复杂应用拆分为多个独立、可重用模块的...通过组件化,我们可以实现更高效的代码复用,更快的迭代速度,以及更灵活的团队协作。对于大型iOS项目来说,组件化是必不可少的现代化开发策略。

    优秀的组件化编程.pdf

    - **企业级应用**: 在构建大型分布式系统时,组件化开发可以有效提高系统的模块化程度,便于后续的功能扩展和技术迭代。 - **移动应用开发**: 移动端应用同样可以从组件化开发中受益,尤其是在跨平台开发场景下,...

    MiTeC.System.Information.Component.Suite.V12.4.0.rar

    12. **源代码示例**:组件通常会提供示例代码,帮助开发者了解如何正确使用每个组件,快速实现所需功能。 总之,MiTeC System Information Component Suite V12.4.0 是 Delphi 开发者的强大工具,它简化了系统信息...

    前端开源库-component-helper

    **组件助手-component-helper** 在前端开发领域,组件化已经成为现代Web应用开发的重要模式。`component-helper` 是一个专为前端开发者设计的开源库,旨在帮助快速创建、构建、测试、服务和发布各种规模的项目,...

    component-editor:视觉组件编辑器(最初用于React组件)

    标准窗格(迭代器等) 导入组件的能力 内置库 从npm导出(?...) html(窗格?编辑器?) 更好的绩效管理 通过propTypes列出 自定义porps 已经定义了自定义道具 在模糊或enter命中时保存道具 将样式移至其他标签...

    TMS Component Pack v5.0.0.2 Full Source

    TMS Component Pack是一款由TMS Software公司开发的组件包,版本号为v5.0.0.2,它提供了丰富的控件和工具,旨在提高Delphi和C++Builder开发人员的工作效率。这个组件包涵盖了多种开发环境,包括D2005、D2006、D2007...

    票据和报表的打印COM组件

    首先,COM(Component Object Model)组件是一种微软的接口技术,用于构建可重用的软件组件。COM组件可以在不同的应用程序之间共享,使得开发人员可以利用已有的功能,而无需从头编写代码。在这个特定的组件中,COM...

Global site tag (gtag.js) - Google Analytics