Files
Triangle.NET/Triangle.NET/TestApp/Rendering/MeshRenderer.cs
T
SND\wo80_cp 4c7ca69e27 Test app improvements
git-svn-id: https://triangle.svn.codeplex.com/svn@67941 0e2699bc-83d4-4a8f-98e7-55e24ab8c7a5
2012-06-09 21:18:51 +00:00

151 lines
4.3 KiB
C#

// -----------------------------------------------------------------------
// <copyright file="MeshRenderer.cs" company="">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------
namespace MeshExplorer.Rendering
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using TriangleNet;
/// <summary>
/// Renders a mesh.
/// </summary>
public class MeshRenderer
{
Zoom zoom;
RenderData data;
RenderColors renderColors;
public MeshRenderer(RenderData data)
{
this.data = data;
}
private void RenderPoints(Graphics g)
{
PointF pt;
PointF[] pts = data.Points;
int i, n;
// Draw input points
n = data.NumberOfInputPoints;
for (i = 0; i < n; i++)
{
if (zoom.ViewportContains(pts[i]))
{
pt = zoom.WorldToScreen(pts[i]);
g.FillEllipse(renderColors.Point, pt.X - 1.5f, pt.Y - 1.5f, 3, 3);
}
}
// Draw Steiner points
n = pts.Length;
for (; i < n; i++)
{
if (zoom.ViewportContains(pts[i]))
{
pt = zoom.WorldToScreen(pts[i]);
g.FillEllipse(renderColors.SteinerPoint, pt.X - 1.5f, pt.Y - 1.5f, 3, 3);
}
}
}
private void RenderTriangles(Graphics g)
{
PointF p0, p1, p2;
PointF[] pts = data.Points;
var triangles = data.Triangles;
// Draw triangles
foreach (var tri in triangles)
{
if (zoom.ViewportContains(pts[tri.P0]) ||
zoom.ViewportContains(pts[tri.P1]) ||
zoom.ViewportContains(pts[tri.P2]))
{
p0 = zoom.WorldToScreen(pts[tri.P0]);
p1 = zoom.WorldToScreen(pts[tri.P1]);
p2 = zoom.WorldToScreen(pts[tri.P2]);
g.DrawLine(renderColors.Line, p0, p1);
g.DrawLine(renderColors.Line, p1, p2);
g.DrawLine(renderColors.Line, p2, p0);
}
}
}
private void RenderEdges(Graphics g)
{
PointF p0, p1;
PointF[] pts = data.Points;
var edges = data.Edges;
// Draw edges
foreach (var edge in edges)
{
if (zoom.ViewportContains(pts[edge.P0]) ||
zoom.ViewportContains(pts[edge.P1]))
{
p0 = zoom.WorldToScreen(pts[edge.P0]);
p1 = zoom.WorldToScreen(pts[edge.P1]);
g.DrawLine(renderColors.Line, p0, p1);
}
}
}
private void RenderSegments(Graphics g)
{
PointF p0, p1;
PointF[] pts = data.Points;
var segments = data.Segments;
foreach (var seg in segments)
{
if (zoom.ViewportContains(pts[seg.P0]) ||
zoom.ViewportContains(pts[seg.P1]))
{
p0 = zoom.WorldToScreen(pts[seg.P0]);
p1 = zoom.WorldToScreen(pts[seg.P1]);
g.DrawLine(renderColors.Segment, p0, p1);
}
}
}
public void Render(Graphics g, Zoom zoom, RenderColors renderColors)
{
this.renderColors = renderColors;
this.zoom = zoom;
if (data.Edges != null)
{
this.RenderEdges(g);
}
else if (data.Triangles != null)
{
this.RenderTriangles(g);
}
if (data.Segments != null)
{
this.RenderSegments(g);
}
if (data.Points != null)
{
this.RenderPoints(g);
}
}
}
}