DAG 节点有两种,Transformation/shape。

shape节点是transformation的子节点。 transformation节点包括position, rotation, scale, parents infromation.

A dag path 代表从root node到shape node 所经历的一个transform的集合。

instancing:当transform或者shape节点有多个父节点的时候,他们被认为instanced。例如一颗树上的很多个树叶,可以共用一个shape节点,如图:

leaf是shape节点。

Transform3 and the Leaf is instanced (it has two parents). The two valid DAG paths in this example are: Transform 1 - Transform 3 - Leaf and Transform 2 - Transform 3 - Leaf.

For example:

MFnDagNode—has methods for determining the number of parents, and the parents of a node.

MFnTransform—is the function set for operating on transform nodes (derived from MFnDagNode) and has methods to get and set transformation, such as rotation, translation, or scale.

MFnNurbsSurface—is one of many types of function sets which operate on the many types of shape nodes (also derived fromMFnDagNode, but not derived from MFnTransform) and has methods to get and set the CVs of the surface, etc.

DAG path: 节点间用|隔开,每个instance node可以有多条路径。

DAG paths and worldspace operations in the API

DAG path represents how a shape is inserted into the scene, a DAG path must be used when attempting any world space operation via the API.

Almost all of the classes that contains methods that will return an MObject for a node also contain methods that will return DAG paths so you can get an MDagPath handle to the desired node. As well, all the MFn classes can be constructed with either an MObject or anMDagPath. 但如果是用MObject来构建MFn,则不能使用world space的操作。

The MDagPathrepresents paths as a stack of nodes with the root node being on the bottom of the stack. The push() and pop() methods allow nodes along the path to be added or removed from the representation.

These methods do not add and remove nodes from the actual DAG but only from the representation constructed by theMDagPath class.

The MDagPath class allows these transformations to be returned using theinclusiveMatrix() and exclusiveMatrix() classes.

每条路径的变换矩阵可以有两种方式:inclusive matrix是包括最后一个节点的Matrix, exclusiveMatrix()不包括最后一个节点。

For example, if a path is defined as:

|RootTransform|Transform1|Transform2|Shape

the inclusive matrix down to Transform2 would be the accumulation of RootTransform, Transform1, and Transform2. The exclusive matrix would contain the accumulation of only RootTransform and Transform1.

1. 为什么要将shape node加入DAG path

selection操作返回的是选择到物体的shape节点的父tranform节点,

MGlobal::getActiveSelectionList()返回的MDagPath是shape node前的transform节点,用extendToShape()函数。

Function set对应MDagPath路径上最后一个节点,如果是shape就应该用shape的function set, 是transform就用tranform的function set。

2. 一个transform node只有一个shape node,除了下面情况:

|Transform1|Shape1 is the original historical object while |Transform1|Shape1a is the actual object visible in any interactive window. |Transform1|Shape1 is also called an intermediate object.This is important later when working with the dependency graph.

3. Dag walking example:

这个例子,iterating through DAG either a depth first  or breadth first manner。是file translator的基础。

九、DAG hierarchy的更多相关文章

  1. spark 源码分析之十九 -- DAG的生成和Stage的划分

    上篇文章 spark 源码分析之十八 -- Spark存储体系剖析 重点剖析了 Spark的存储体系.从本篇文章开始,剖析Spark作业的调度和计算体系. 在说DAG之前,先简单说一下RDD. 对RD ...

  2. spark 源码分析之十九 -- Stage的提交

    引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...

  3. 十、DG

    1.DG是dependency graph,我认为是依赖图,和DAG(有向无环图)的区别:DAG用来做场景管理,每个node代表的不是tranform就是shape,有父子关系. DG是代表了每个实体 ...

  4. Spark 源码分析系列

    如下,是 spark 源码分析系列的一些文章汇总,持续更新中...... Spark RPC spark 源码分析之五--Spark RPC剖析之创建NettyRpcEnv spark 源码分析之六- ...

  5. spark 源码分析之二十一 -- Task的执行流程

    引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及St ...

  6. spark shuffle的写操作之准备工作

    前言 在前三篇文章中,spark 源码分析之十九 -- DAG的生成和Stage的划分 剖析了DAG的构建和Stage的划分,spark 源码分析之二十 -- Stage的提交 剖析了TaskSet任 ...

  7. spark源码分析以及优化

    第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...

  8. B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN

    B4及之后:为谷歌软件定义WAN的可用性和扩展管理层次化.划分和不对称 本文为SIGCOMM 2018会议论文,由谷歌提供. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎 ...

  9. 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...

随机推荐

  1. IE下只读INPUT键入BACKSPACE 后退问题(readonly='true')

    在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jquery代码修正之 $("input[readOnly]" ...

  2. c语言 四种方法调用数组

      #include <stdio.h> /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * * ...

  3. swiper的使用

    最近要用html5制作可以一屏一屏向上滑动的页面,发现大家使用swiper插件的较多,所以试了试,发现做出来的效果还不错,喜欢的朋友可以参考一下自己动手做啦. 1.首先我们要引入4个文件: <h ...

  4. python数据结构与算法——图的最短路径(Floyd-Warshall算法)

    使用Floyd-Warshall算法 求图两点之间的最短路径 不允许有负权边,时间复杂度高,思路简单 # 城市地图(字典的字典) # 字典的第1个键为起点城市,第2个键为目标城市其键值为两个城市间的直 ...

  5. TCP链接时主动close时可能的rst报文

    阿里核心系统团队博客http://csrd.aliapp.com/?p=1055记录了主动关闭TCP socket时,可能不发fin包,而是发rst的问题. 其原因是主动关闭socket时,若接收bu ...

  6. java中,去除空白的方法

    有时候,我们页面传过来的值,或者做excel导入时填入的值都需要去掉像空格一样的一些特殊字符,下面这个方法可去掉像制表符,换行键,回车,空格或者不在ACSII中 的特殊字符 /** * 去除字符串开始 ...

  7. 项目中如果管理前端文件CSS和JS

    如何管理CSS和JS文件,一直是前端一个热门的话题.下面将简单分享一下使用心得,欢迎大家吐槽.拍砖和提供更好的实现方式. 一.管理CSS文件,本博客将讨论less管理. iReset.less.iBu ...

  8. php部分---创建连接数据库类

    class DBDA { public $host="localhost"; public $uid="root"; public $pwd="123 ...

  9. Codeforces Round #157 (Div. 2)

    A. Little Elephant and Chess 模拟. B. Little Elephant and Magic Square 枚举左上角,计算其余两个位置的值,在\(3\times 3\) ...

  10. Linux简介

    一.Linux发展史 Linux出现之前,还有一个叫Minix的家伙(Andrew S. Tanenbaum教授为了教学买了Unix系统,参考其代码,但没有任何的代码抄袭,自己写了Minix系统,并开 ...