示例#1
0
        private static void plugin_main(
            IPXPmx pmx, IPEViewConnector view, IPEFormConnector form)
        {
            StreamWriter writer = makeWriter();

            using (writer) {
                makeIndexDict(pmx);
                makeBone2BodiesDict(pmx);
                BoneGraph g = makeBoneGraph(pmx);
                updateNodeAttrs(g);
                toDot(g, writer);
            }
            return;
        }
示例#2
0
 public override void Run(IPERunArgs args)
 {
     try {
         IPEPluginHost    host    = args.Host;
         IPEConnector     connect = host.Connector;
         IPEViewConnector view    = host.Connector.View;
         IPEFormConnector form    = host.Connector.Form;
         IPXPmx           pmx     = connect.Pmx.GetCurrentState();
         plugin_main(pmx, view, form);
         connect.View.PMDView.UpdateView();
     } catch (Exception ex) {
         MessageBox.Show(
             ex.Message, "エラー", MessageBoxButtons.OK,
             MessageBoxIcon.Exclamation);
     }
 }
示例#3
0
        private static void plugin_main(
            IPXPmx pmx, IPEViewConnector view, IPEFormConnector form)
        {
            StreamWriter writer = makeWriter();

            using (writer) {
                int[] selectedBodies = view.PmxView.GetSelectedBodyIndices();
                int[] selectedJoints = view.PmxView.GetSelectedJointIndices();

                makeIndexDict(pmx);
                JointGraph g = makeJointGraph(pmx);

                NodeSet subNodes      = new NodeSet();
                NodeSet selectedNodes = new NodeSet();
                // pmxvewの選択情報は選択解除しても残ってしまうので
                // form の情報で判断する
                if (form.SelectedJointIndex >= 0)
                {
                    foreach (int i in selectedJoints)
                    {
                        Node jointNode = makeJointNode(pmx.Joint[i]);
                        selectedNodes.Add(jointNode);
                        subNodes.UnionWith(
                            g.getConnectedNodes(jointNode));
                    }
                }
                if (form.SelectedBodyIndex >= 0)
                {
                    foreach (int i in selectedBodies)
                    {
                        Node bodyNode = makeBodyNode(pmx.Body[i]);
                        selectedNodes.Add(bodyNode);
                        subNodes.UnionWith(
                            g.getConnectedNodes(bodyNode));
                    }
                }
                if (selectedNodes.Count > 0)
                {
                    toDot(g, writer, subNodes, selectedNodes);
                }
                else
                {
                    toDot(g, writer);
                }
                return;
            }
        }
示例#4
0
        private static void plugin_main(
            IPXPmx pmx, IPEViewConnector view, IPEFormConnector form)
        {
            int selected_m = form.SelectedMaterialIndex;

            //int selected_v = form.SelectedVertexIndex;
            int [] selected_vs = view.PMDView.GetSelectedVertexIndices();
            if (selected_m >= 0)
            {
                IList <IPXFace> faces    = pmx.Material[selected_m].Faces;
                V2FDict         ref_dict = makeRefDict(faces);
                List <int>      filtered = new List <int>();
                foreach (int selected_v in selected_vs)
                {
                    if (selected_v >= 0 && ref_dict.ContainsKey(selected_v))
                    {
                        filtered.Add(selected_v);
                    }
                }
                if (selected_vs.Length > 0 && filtered.Count <= 0)
                {
                    MessageBox.Show(
                        "選択した頂点は選択した材質に含まれていません");
                }
                List <int> vlist;
                if (filtered.Count > 0)
                {
                    vlist = selectConnectedBorderWrapper(filtered, ref_dict);
                }
                else     // all
                {
                    vlist = selectAllBorder(ref_dict);
                }
                var vedit = view.PMDViewHelper.VertexEdit;
#if USE_MEM_SLOT
                vedit.SetVertexMemory(MEMORY_SLOT, vlist.ToArray());
#endif
                view.PMDView.SetSelectedVertexIndices(vlist.ToArray());
            }
            else
            {
                throw new System.Exception("材質を選択してください");
            }
        }
示例#5
0
        public override void Run(IPERunArgs args)
        {
            try {
                IPEPluginHost    host    = args.Host;
                IPEConnector     connect = host.Connector;
                IPEViewConnector view    = host.Connector.View;
                IPEFormConnector form    = host.Connector.Form;
                IPXPmx           pmx     = connect.Pmx.GetCurrentState();

                // 頂点辞書の使いまわしは出来ない様なので、作り直し
                v_dicted = -1;
                v_dict   = new Dictionary <IPXVertex, int>();
                // 頂点リストも更新しておく
                all_vertex_list = pmx.Vertex;

                plugin_main(pmx, view, form);

                connect.View.PMDView.UpdateView();
            } catch (Exception ex) {
                MessageBox.Show(
                    ex.Message, "エラー", MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation);
            }
        }