Пример #1
0
        private static BoneGraph makeBoneGraph(IPXPmx pmx)
        {
            BoneGraph boneGraph = new BoneGraph();

            foreach (IPXBone bone in pmx.Bone)
            {
                Node boneNode = makeBoneNode(bone);
                ///////////
                // 4 種類のエッジを作成する
                // (1) 親 -> 子 (type=親子)
                // (2) 付与親 -> 子 (type=付与親)
                // (2) IKボーン -> IKターゲットボーン (type=IKターゲット)
                // (3) IKボーン -> IKリンクボーン (type=IKリンク)

                boneGraph.addNode(boneNode); // 4種に当てはまらないボーン用

                // (1)
                IPXBone parentBone = bone.Parent;
                if (null != parentBone)
                {
                    Node     parentNode = makeBoneNode(parentBone);
                    EdgeInfo info       = new EdgeInfo(boneNode, "親子");
                    boneGraph.addEdge(parentNode, info);
                }
                // (2)
                if (null != bone.AppendParent &&
                    (bone.IsAppendRotation || bone.IsAppendTranslation))
                {
                    Node     appendNode = makeBoneNode(bone.AppendParent);
                    EdgeInfo info       = new EdgeInfo(boneNode, "付与親");
                    info.setAttr(
                        "weight",
                        string.Format("{0:F3}", bone.AppendRatio));
                    boneGraph.addEdge(appendNode, info);
                }
                // (3), (4)
                if (bone.IsIK && null != bone.IK)
                {
                    if (null != bone.IK.Target)
                    {
                        Node     targetNode = makeBoneNode(bone.IK.Target);
                        EdgeInfo targetInfo = new EdgeInfo(
                            targetNode, "IKターゲット");
                        boneGraph.addEdge(boneNode, targetInfo);
                    }
                    foreach (IPXIKLink ikLink in bone.IK.Links)
                    {
                        Node     linkNode = makeBoneNode(ikLink.Bone);
                        EdgeInfo linkInfo = new EdgeInfo(
                            linkNode, "IKリンク");
                        boneGraph.addEdge(boneNode, linkInfo);
                    }
                }
            }
            return(boneGraph);
        }
Пример #2
0
 internal void addEdge(Node fromNode, EdgeInfo info)
 {
     this.addNode(fromNode);
     this.addNode(info.toNode);
     this.directedEdges[fromNode].Item2.Add(info);
 }
Пример #3
0
 internal static string determineStyle(EdgeInfo info)
 {
     return(styleLegend[info.type]);
 }