//-------------------------------------------------------------------- // 選択中のパッチと接続可能なパッチの列挙 //-------------------------------------------------------------------- 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); }
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(); }