Example #1
0
        //--------------------------------------------------------------------
        // 選択中のパッチと接続可能なパッチの列挙
        //--------------------------------------------------------------------

        List <string> ConnectableRenderQueries(Dictionary <string, RenderQuery> renderQueryPool, List <RenderQuery> queries, PatchSkeleton refSkeleton)
        {
            List <PatchSkeletalMesh> smeshes = new List <PatchSkeletalMesh>();

            foreach (var q in queries)
            {
                smeshes.Add(q.patch);
            }

            var cmeshes = new List <string>();

            foreach (var kv in renderQueryPool)
            {
                smeshes.Add(kv.Value.patch);
                if (PatchConnector.CanConnect(smeshes, refSkeleton))
                {
                    cmeshes.Add(kv.Key);
                }
                smeshes.RemoveAt(smeshes.Count - 1);
            }

//            cmeshes.OrderBy(// TODO);

            return(cmeshes);
        }
Example #2
0
        // selectingPatchesをすべて結合する
        private void combineCToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string newKey = "combined" + combinedCount;

            HashSet <string> patchKeySet = new HashSet <string>();

            for (int i = 0; i < selectingQueries.Count; i++)
            {
                foreach (string k in selectingQueries[i].patchKeys)
                {
                    patchKeySet.Add(k);
                }
            }

            PatchSkeletalMesh newMesh = PatchConnector.Connect(selectingQueries.Select(q => q.patch).ToList(), refSkeleton, resources);


            PatchTree newTree = new PatchTree(null, null);

            if (newMesh == null)
            {
                return;
            }

            newMesh.Mesh.BeginDeformation();

            renderQueryPool.Add(newKey, new RenderQuery(newMesh, newTree, patchKeySet.ToList()));
            combinedCount++;


            foreach (var q in selectingQueries)
            {
                renderQueries.Remove(q);
            }
            renderQueries.Add(renderQueryPool[newKey]);

            selectingQueries.Clear();
        }
Example #3
0
        void DrawCanvas()
        {
            if (renderer == null)
            {
                return;
            }

            // renderer.rotateCamera = true;
            renderer.BeginDraw();

            bool canConnect = PatchConnector.CanConnect(selectingQueries.Select(q => q.patch).ToList(), refSkeleton);

            foreach (var query in renderQueries)
            {
                DXColor color = DXColor.White;
                if (selectingQueries.Contains(query)) // 選択中は赤くする
                {
                    if (canConnect)
                    {
                        color = DXColor.Green;
                    }
                    else
                    {
                        color = DXColor.Red;
                    }
                }

                if (CBoxDrawMesh.Checked)
                {
                    foreach (var key in query.patchKeys)
                    {
                        renderer.DrawMesh(query.patch.Mesh, key, resources, color, canvas.ClientSize, cameraPosition);
                    }
                }

                if (CBoxDrawPolygon.Checked)
                {
                    foreach (var key in query.patchKeys)
                    {
                        renderer.DrawWireframe(query.patch.Mesh, key, color, canvas.ClientSize, cameraPosition);
                    }
                }

                renderer.ClearDepthStencilView();
            }

            // 必ずメッシュの上に描画されるように、深度バッファをクリアする
            renderer.ClearDepthStencilView();

            if (CBoxDrawRefSkeleton.Checked)
            {
                foreach (var b in refSkeleton.bones)
                {
                    renderer.DrawLine(b.src.position, b.dst.position, 4, DXColor.Blue, canvas.ClientSize, cameraPosition);
                }

                foreach (var j in refSkeleton.joints)
                {
                    renderer.DrawPoint(j.position, 8, DXColor.Yellow, canvas.ClientSize, cameraPosition);
                }
            }

            renderer.ClearDepthStencilView();

            foreach (var query in selectingQueries)
            {
                if (CBoxDrawSkeleton.Checked)
                {
                    foreach (var b in query.patch.CopySkeleton().bones)
                    {
                        renderer.DrawLine(b.src.position, b.dst.position, 6, DXColor.Orange, canvas.ClientSize, cameraPosition);
                    }
                }
            }

            renderer.EndDraw();
        }