70b25002dc
git-svn-id: https://triangle.svn.codeplex.com/svn@75033 0e2699bc-83d4-4a8f-98e7-55e24ab8c7a5
111 lines
3.3 KiB
C#
111 lines
3.3 KiB
C#
|
|
namespace TriangleNet.Rendering.GDI
|
|
{
|
|
using System.Drawing;
|
|
|
|
public class LayerRenderer : IRenderer
|
|
{
|
|
MeshRenderer meshRenderer;
|
|
FunctionRenderer functionRenderer;
|
|
|
|
public IRenderContext Context { get; set; }
|
|
|
|
public Graphics RenderTarget { get; set; }
|
|
|
|
public LayerRenderer()
|
|
{
|
|
meshRenderer = new MeshRenderer();
|
|
functionRenderer = new FunctionRenderer();
|
|
}
|
|
|
|
public void Render()
|
|
{
|
|
meshRenderer.Context = Context;
|
|
meshRenderer.RenderTarget = RenderTarget;
|
|
|
|
functionRenderer.Context = Context;
|
|
functionRenderer.RenderTarget = RenderTarget;
|
|
|
|
// 0 = mesh (filled)
|
|
// 1 = mesh (wireframe)
|
|
// 2 = polygon
|
|
// 3 = points
|
|
// 4 = voronoi overlay
|
|
// 5 = vector field
|
|
// 6 = contour lines
|
|
|
|
int i = 0;
|
|
|
|
foreach (var layer in this.Context.RenderLayers)
|
|
{
|
|
if (!layer.IsEmpty && layer.IsActive)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 0:
|
|
RenderFilledMesh(layer);
|
|
break;
|
|
case 1:
|
|
RenderMesh(layer);
|
|
break;
|
|
case 2:
|
|
RenderPolygon(layer);
|
|
break;
|
|
case 3:
|
|
RenderPoints(layer);
|
|
break;
|
|
case 4:
|
|
RenderVoronoi(layer);
|
|
break;
|
|
case 5:
|
|
case 6:
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
i++;
|
|
}
|
|
}
|
|
|
|
private void RenderFilledMesh(IRenderLayer layer)
|
|
{
|
|
if (layer.Partition != null)
|
|
{
|
|
meshRenderer.RenderElements(layer.Points.Data, layer.Indices.Data, 3, layer.Partition.Data);
|
|
}
|
|
else if (layer.Colors != null)
|
|
{
|
|
functionRenderer.Render(layer);
|
|
}
|
|
}
|
|
|
|
private void RenderMesh(IRenderLayer layer)
|
|
{
|
|
if (layer.Indices.Size == 3)
|
|
{
|
|
meshRenderer.RenderElements(layer.Points.Data, layer.Indices.Data, 3, null);
|
|
}
|
|
else
|
|
{
|
|
meshRenderer.RenderEdges(layer.Points.Data, layer.Indices.Data, Context.ColorManager.Line);
|
|
}
|
|
}
|
|
|
|
private void RenderPolygon(IRenderLayer layer)
|
|
{
|
|
meshRenderer.RenderSegments(layer.Points.Data, layer.Indices.Data, Context.ColorManager.Segment);
|
|
}
|
|
|
|
private void RenderPoints(IRenderLayer layer)
|
|
{
|
|
meshRenderer.RenderPoints(layer.Points.Data, layer.Points.Size, layer.Count);
|
|
}
|
|
|
|
private void RenderVoronoi(IRenderLayer layer)
|
|
{
|
|
meshRenderer.RenderEdges(layer.Points.Data, layer.Indices.Data, Context.ColorManager.VoronoiLine);
|
|
}
|
|
}
|
|
}
|