九、DAG hierarchy
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的更多相关文章
- spark 源码分析之十九 -- DAG的生成和Stage的划分
上篇文章 spark 源码分析之十八 -- Spark存储体系剖析 重点剖析了 Spark的存储体系.从本篇文章开始,剖析Spark作业的调度和计算体系. 在说DAG之前,先简单说一下RDD. 对RD ...
- spark 源码分析之十九 -- Stage的提交
引言 上篇 spark 源码分析之十九 -- DAG的生成和Stage的划分 中,主要介绍了下图中的前两个阶段DAG的构建和Stage的划分. 本篇文章主要剖析,Stage是如何提交的. rdd的依赖 ...
- 十、DG
1.DG是dependency graph,我认为是依赖图,和DAG(有向无环图)的区别:DAG用来做场景管理,每个node代表的不是tranform就是shape,有父子关系. DG是代表了每个实体 ...
- Spark 源码分析系列
如下,是 spark 源码分析系列的一些文章汇总,持续更新中...... Spark RPC spark 源码分析之五--Spark RPC剖析之创建NettyRpcEnv spark 源码分析之六- ...
- spark 源码分析之二十一 -- Task的执行流程
引言 在上两篇文章 spark 源码分析之十九 -- DAG的生成和Stage的划分 和 spark 源码分析之二十 -- Stage的提交 中剖析了Spark的DAG的生成,Stage的划分以及St ...
- spark shuffle的写操作之准备工作
前言 在前三篇文章中,spark 源码分析之十九 -- DAG的生成和Stage的划分 剖析了DAG的构建和Stage的划分,spark 源码分析之二十 -- Stage的提交 剖析了TaskSet任 ...
- spark源码分析以及优化
第一章.spark源码分析之RDD四种依赖关系 一.RDD四种依赖关系 RDD四种依赖关系,分别是 ShuffleDependency.PrunDependency.RangeDependency和O ...
- B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN
B4及之后:为谷歌软件定义WAN的可用性和扩展管理层次化.划分和不对称 本文为SIGCOMM 2018会议论文,由谷歌提供. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
随机推荐
- Array 、 Dictionary 、 Object 3大数据结构 以及 for ... in for each的研究
Array:存储方式-------索引存储 (要求key是大于等于0的整数) Dictionary.Object:存储方式---------索引存储 区别:可以说它们的 key 都 对应 各自的引用, ...
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
- Windowns的GVIM添加markdown语法支持
gvim 7.4中其实也是有对markdown的语法文件,但格式支持并不全面,如行业代码``就没有实现. 修改方案: 从github下载plasticboy的markdown语法版本,windowns ...
- 2016年中国大学生程序设计竞赛(合肥)-重现赛1009 HDU 5969
最大的位或 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- Java笔记4-do while循环,break,修饰符,方法的调用
do while循环语法:do{ //循环体}while(条件表达式); 注:它是先执行循环体,后再判断的循环结构. 如:int i = 0;do{ System.out.println(" ...
- 给table行换色
<script language="javascript"> //假设Table的ID为angel $("#angel tr").click(fun ...
- position置顶或某固定位置 兼容ie6ie7
用absolute来模拟fixed效果: /*相当于正常的position:fixed;top:0 */.sl_fixed_top{bottom:auto;top:0;_bottom:auto;_to ...
- codeforces105d Bag of mice ——概率DP
Link: http://codeforces.com/problemset/problem/148/D Refer to: http://www.cnblogs.com/kuangbin/archi ...
- codeforces298c
link:http://codeforces.com/problemset/problem/298/C 这道题目可以看出来我智商确实拙计 #include <iostream> #incl ...
- 【转载】MATLB绘图
原文地址:http://www.cnblogs.com/hxsyl/archive/2012/10/10/2718380.html 作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供 ...