Update test app (new rendering code)

git-svn-id: https://triangle.svn.codeplex.com/svn@75034 0e2699bc-83d4-4a8f-98e7-55e24ab8c7a5
This commit is contained in:
SND\wo80_cp
2014-05-31 12:59:49 +00:00
parent 70b25002dc
commit ad3ab72a16
12 changed files with 132 additions and 122 deletions
+1 -7
View File
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace MeshExplorer
+1 -6
View File
@@ -1,12 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Windows.Forms;
namespace MeshExplorer
{
+24 -4
View File
@@ -16,7 +16,7 @@ namespace MeshExplorer
public void AddItem(string message, bool warning)
{
ILog<LogItem> log = Log.Instance;
var log = Log.Instance;
if (warning)
{
@@ -32,7 +32,7 @@ namespace MeshExplorer
{
listLog.Items.Clear();
ILog<LogItem> log = Log.Instance;
var log = Log.Instance;
foreach (var item in log.Data)
{
@@ -73,7 +73,26 @@ namespace MeshExplorer
private void listLog_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
if (e.KeyCode == Keys.C)
{
if (ModifierKeys == Keys.Control)
{
var selection = listLog.SelectedItems;
if (selection != null && selection.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (var item in selection)
{
GetRowText(sb, item);
}
Clipboard.SetText(sb.ToString());
}
}
}
else if (e.KeyCode == Keys.Delete)
{
if (ModifierKeys == Keys.Control)
{
@@ -110,7 +129,8 @@ namespace MeshExplorer
if (lvi != null)
{
sb.AppendLine(lvi.Text);
sb.Append(lvi.Text);
sb.Append("; ");
}
}
}
+46 -38
View File
@@ -5,13 +5,13 @@ using System.IO;
using System.Windows.Forms;
using MeshExplorer.Controls;
using MeshExplorer.IO;
using MeshRenderer.Core;
using TriangleNet;
using TriangleNet.Geometry;
using TriangleNet.Meshing;
using TriangleNet.Meshing.Algorithm;
using TriangleNet.Smoothing;
using TriangleNet.Tools;
using TriangleNet.Smoothing;
using TriangleNet.Rendering;
namespace MeshExplorer
{
@@ -25,7 +25,6 @@ namespace MeshExplorer
FormGenerator frmGenerator;
RenderManager renderManager;
RenderData renderData;
public FormMain()
{
@@ -41,12 +40,14 @@ namespace MeshExplorer
settings = new Settings();
renderManager = new RenderManager();
renderManager.CreateDefaultControl();
IRenderControl control = new TriangleNet.Rendering.GDI.RenderControl();
/*
if (!renderManager.CreateControl("MeshRenderer.SharpGL2.dll", new string[] { "SharpGL.dll" }))
if (!renderManager.TryCreateControl("Triangle.Rendering.SharpGL.dll",
new string[] { "SharpGL.dll" }, out control))
{
renderManager.CreateDefaultControl();
control = new TriangleNet.Rendering.GDI.RenderControl();
if (frmLog == null)
{
@@ -55,34 +56,47 @@ namespace MeshExplorer
frmLog.AddItem("Failed to initialize OpenGL.", true);
}
*/
var control = renderManager.RenderControl;
//*/
if (control != null)
{
this.splitContainer1.Panel2.Controls.Add(control);
// Initialize control
control.BackColor = Color.Black;
control.Dock = DockStyle.Fill;
control.Font = new Font("Consolas", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
control.Location = new System.Drawing.Point(0, 0);
control.Name = "renderControl1";
control.Size = new Size(703, 612);
control.TabIndex = 0;
control.Text = "meshRenderer1";
renderManager.Initialize();
InitializeRenderControl((Control)control);
renderManager.Initialize(control);
}
else
{
DarkMessageBox.Show("Ooops ...", "Failed to initialize renderer.");
}
renderData = new RenderData();
}
private void InitializeRenderControl(Control control)
{
this.splitContainer1.SuspendLayout();
this.splitContainer1.Panel2.Controls.Add(control);
var size = this.splitContainer1.Panel2.ClientRectangle;
// Initialize control
control.BackColor = Color.Black;
control.Dock = DockStyle.Fill;
control.Font = new Font("Consolas", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0)));
control.Location = new System.Drawing.Point(0, 0);
control.Name = "renderControl1";
control.Size = new Size(size.Width, size.Height);
control.TabIndex = 0;
control.Text = "renderControl1";
control.MouseClick += new MouseEventHandler(RenderControl_MouseClick);
this.splitContainer1.ResumeLayout();
}
private void RenderControl_MouseClick(object sender, MouseEventArgs e)
{
var pt = e.Location;
renderManager.Click(((float)pt.X), ((float)pt.Y), e.Button);
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
@@ -194,7 +208,7 @@ namespace MeshExplorer
// Handle window minimize and maximize
if (!isResizing)
{
renderManager.HandleResize();
renderManager.Resize();
}
}
@@ -205,7 +219,7 @@ namespace MeshExplorer
if (this.ClientSize != this.oldClientSize)
{
this.oldClientSize = this.ClientSize;
renderManager.HandleResize();
renderManager.Resize();
}
}
@@ -260,8 +274,7 @@ namespace MeshExplorer
menuToolsRcm.Enabled = false;
// Render input
renderData.SetInputGeometry(input);
renderManager.SetData(renderData);
renderManager.Set(input);
// Update window caption
this.Text = "Triangle.NET - Mesh Explorer - " + settings.CurrentFile;
@@ -270,9 +283,7 @@ namespace MeshExplorer
private void HandleMeshImport()
{
// Render mesh
renderData.SetMesh(mesh);
renderManager.SetData(renderData);
//renderManager.Initialize();
renderManager.Set(mesh, true);
// Update window caption
this.Text = "Triangle.NET - Mesh Explorer - " + settings.CurrentFile;
@@ -292,8 +303,7 @@ namespace MeshExplorer
private void HandleMeshUpdate()
{
// Render mesh
renderData.SetMesh(mesh);
renderManager.SetData(renderData);
renderManager.Set(mesh, false);
// Update Statistic view
statisticView.HandleMeshUpdate(mesh);
@@ -675,7 +685,6 @@ namespace MeshExplorer
else
{
RasterImage img = new RasterImage();
img.ColorScheme = ColorManager.LightScheme();
img.Export(this.mesh, export.ImageName, size);
}
}
@@ -696,7 +705,7 @@ namespace MeshExplorer
if (menuViewVoronoi.Checked)
{
renderManager.ShowVoronoi = false;
//renderManager.ShowVoronoi = false;
menuViewVoronoi.Checked = false;
return;
}
@@ -712,8 +721,7 @@ namespace MeshExplorer
voronoi = new Voronoi(mesh);
}
renderData.SetVoronoi(voronoi);
renderManager.SetData(renderData);
renderManager.Set(voronoi, false);
menuViewVoronoi.Checked = true;
}
+2 -1
View File
@@ -57,7 +57,8 @@ namespace MeshExplorer
private ITriangle FindTriangleAt(float x, float y)
{
// Get mesh coordinates
var p = renderControl.Zoom.ScreenToWorld(x, y);
var p = new System.Drawing.PointF(x, y);
renderControl.Zoom.ScreenToWorld(ref p);
topoControlView.SetPosition(p);
+27 -15
View File
@@ -12,15 +12,15 @@ namespace MeshExplorer.IO
using System.Drawing.Imaging;
using System.IO;
using TriangleNet;
using MeshRenderer.Core;
using MeshRenderer.Core.GDI;
using TriangleNet.Rendering;
using TriangleNet.Rendering.GDI;
/// <summary>
/// Writes an image of the mesh to disk.
/// </summary>
public class RasterImage
{
ColorManager colors = ColorManager.Default();
ColorManager colors = RasterImage.LightScheme();
public ColorManager ColorScheme
{
@@ -36,10 +36,6 @@ namespace MeshExplorer.IO
/// <param name="width">The desired width (pixel) of the image.</param>
public void Export(Mesh mesh, string filename, int width)
{
// Get mesh data -- TODO: Use RenderControl's RenderData
RenderData data = new RenderData();
data.SetMesh(mesh);
// Check file name
if (String.IsNullOrWhiteSpace(filename))
{
@@ -53,21 +49,21 @@ namespace MeshExplorer.IO
{
bitmap = new Bitmap(400, 200);
Graphics g = Graphics.FromImage(bitmap);
g.Clear(colors.Background);
g.Clear(Color.White);
string message = String.Format("Sorry, I won't render {0} points on such a small image!", mesh.Vertices.Count);
SizeF sz = g.MeasureString(message, SystemFonts.DefaultFont);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.DrawString(message, SystemFonts.DefaultFont, colors.Point,
g.DrawString(message, SystemFonts.DefaultFont, Brushes.Black,
200 - sz.Width / 2, 100 - sz.Height / 2);
g.Dispose();
}
else
{
var bounds = data.Bounds;
var bounds = mesh.Bounds;
// World margin on each side
float margin = (float)bounds.Height * 0.05f;
float scale = width / ((float)bounds.Width + 2 * margin);
@@ -76,16 +72,18 @@ namespace MeshExplorer.IO
bitmap = new Bitmap(width, target.Height, PixelFormat.Format32bppPArgb);
Zoom zoom = new Zoom();
zoom.Initialize(target, bounds);
Graphics g = Graphics.FromImage(bitmap);
g.Clear(colors.Background);
g.SmoothingMode = SmoothingMode.HighQuality;
MeshRenderer meshRenderer = new MeshRenderer(data, colors);
meshRenderer.Render(g, zoom);
var context = new RenderContext(new Projection(target), colors);
context.Add(mesh, true);
var renderer = new LayerRenderer();
renderer.Context = context;
renderer.RenderTarget = g;
renderer.Render();
g.Dispose();
}
@@ -97,5 +95,19 @@ namespace MeshExplorer.IO
bitmap.Save(filename, ImageFormat.Png);
}
public static ColorManager LightScheme()
{
var colors = new ColorManager();
colors.Background = Color.White;
colors.Point = new SolidBrush(Color.FromArgb(60, 80, 120));
colors.SteinerPoint = new SolidBrush(Color.DarkGreen);
colors.Line = new Pen(Color.FromArgb(150, 150, 150));
colors.Segment = new Pen(Color.SteelBlue);
colors.VoronoiLine = new Pen(Color.FromArgb(160, 170, 180));
return colors;
}
}
}
+3 -5
View File
@@ -40,10 +40,8 @@
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Controls\ColorScheme.cs" />
@@ -183,9 +181,9 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MeshRenderer.Core\MeshRenderer.Core.csproj">
<Project>{9C5040DA-C739-43A1-8540-E6BD3ED6DB55}</Project>
<Name>MeshRenderer.Core</Name>
<ProjectReference Include="..\Triangle.Rendering\Triangle.Rendering.csproj">
<Project>{41022e0e-bd0f-439e-bc3a-aabb1b43471b}</Project>
<Name>Triangle.Rendering</Name>
</ProjectReference>
<ProjectReference Include="..\Triangle\Triangle.csproj">
<Project>{F7907A0A-B75F-400B-9E78-BFAD00DB4D6B}</Project>
@@ -5,8 +5,8 @@ namespace MeshExplorer.Topology
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Windows.Forms;
using MeshRenderer.Core;
using TriangleNet;
using TriangleNet.Rendering;
public class TopologyRenderControl : Control
{
@@ -14,12 +14,12 @@ namespace MeshExplorer.Topology
private BufferedGraphics buffer;
private BufferedGraphicsContext context;
Zoom zoom;
Projection zoom;
TopologyRenderer renderer;
bool initialized = false;
public Zoom Zoom
public Projection Zoom
{
get { return zoom; }
}
@@ -33,7 +33,6 @@ namespace MeshExplorer.Topology
this.BackColor = Color.Black;
zoom = new Zoom(true);
context = new BufferedGraphicsContext();
}
@@ -44,11 +43,11 @@ namespace MeshExplorer.Topology
{
renderer = new TopologyRenderer(mesh);
zoom.Initialize(this.ClientRectangle);
zoom = new Projection(this.ClientRectangle);
//zoom.ClipMargin = 10.0f;
var b = mesh.Bounds;
zoom.Update(new BoundingBox((float)b.Left, (float)b.Right,
zoom.Initialize(new BoundingBox((float)b.Left, (float)b.Right,
(float)b.Bottom, (float)b.Top));
InitializeBuffer();
@@ -3,13 +3,13 @@ namespace MeshExplorer.Topology
{
using System;
using System.Drawing;
using MeshRenderer.Core;
using TriangleNet;
using TriangleNet.Geometry;
using TriangleNet.Rendering;
public class TopologyRenderer
{
Zoom zoom;
Projection zoom;
Mesh mesh;
PointF[] points;
@@ -50,7 +50,7 @@ namespace MeshExplorer.Topology
/// <summary>
/// Renders the mesh.
/// </summary>
public void Render(Graphics g, Zoom zoom)
public void Render(Graphics g, Projection zoom)
{
this.zoom = zoom;
@@ -142,7 +142,8 @@ namespace MeshExplorer.Topology
{
var brush = i == id ? Brushes.DarkRed : Point;
pt = zoom.WorldToScreen(points[i].X, points[i].Y);
pt = points[i];
zoom.WorldToScreen(ref pt);
g.FillEllipse(brush, pt.X - 10f, pt.Y - 10f, 20, 20);
pt.X -= i > 9 ? 7 : 4;
@@ -164,9 +165,9 @@ namespace MeshExplorer.Topology
p1 = points[tri.P1];
p2 = points[tri.P2];
p0 = zoom.WorldToScreen(p0.X, p0.Y);
p1 = zoom.WorldToScreen(p1.X, p1.Y);
p2 = zoom.WorldToScreen(p2.X, p2.Y);
zoom.WorldToScreen(ref p0);
zoom.WorldToScreen(ref p1);
zoom.WorldToScreen(ref p2);
g.DrawLine(Line, p0, p1);
g.DrawLine(Line, p1, p2);
@@ -193,9 +194,9 @@ namespace MeshExplorer.Topology
p1 = points[tri.P1];
p2 = points[tri.P2];
p0 = zoom.WorldToScreen(p0.X, p0.Y);
p1 = zoom.WorldToScreen(p1.X, p1.Y);
p2 = zoom.WorldToScreen(p2.X, p2.Y);
zoom.WorldToScreen(ref p0);
zoom.WorldToScreen(ref p1);
zoom.WorldToScreen(ref p2);
center = GetIncenter(p0, p1, p2);
center.X -= 5;
@@ -217,8 +218,8 @@ namespace MeshExplorer.Topology
p0 = points[edge.P0];
p1 = points[edge.P1];
p0 = zoom.WorldToScreen(p0.X, p0.Y);
p1 = zoom.WorldToScreen(p1.X, p1.Y);
zoom.WorldToScreen(ref p0);
zoom.WorldToScreen(ref p1);
g.DrawLine(Line, p0, p1);
}
@@ -235,8 +236,8 @@ namespace MeshExplorer.Topology
p0 = points[seg.P0];
p1 = points[seg.P1];
p0 = zoom.WorldToScreen(p0.X, p0.Y);
p1 = zoom.WorldToScreen(p1.X, p1.Y);
zoom.WorldToScreen(ref p0);
zoom.WorldToScreen(ref p1);
g.DrawLine(Segment, p0, p1);
}
@@ -251,8 +252,8 @@ namespace MeshExplorer.Topology
p0 = points[selection.Org().ID];
p1 = points[selection.Dest().ID];
p0 = zoom.WorldToScreen(p0.X, p0.Y);
p1 = zoom.WorldToScreen(p1.X, p1.Y);
zoom.WorldToScreen(ref p0);
zoom.WorldToScreen(ref p1);
g.DrawLine(SelectedEdge, p0, p1);
}
@@ -270,9 +271,9 @@ namespace MeshExplorer.Topology
p[1] = points[tri.P1];
p[2] = points[tri.P2];
p[0] = zoom.WorldToScreen(p[0].X, p[0].Y);
p[1] = zoom.WorldToScreen(p[1].X, p[1].Y);
p[2] = zoom.WorldToScreen(p[2].X, p[2].Y);
zoom.WorldToScreen(ref p[0]);
zoom.WorldToScreen(ref p[1]);
zoom.WorldToScreen(ref p[2]);
g.FillPolygon(SelectedTriangle, p);
}
+1 -7
View File
@@ -1,13 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Windows.Forms;
using TriangleNet;
using System.Diagnostics;
using TriangleNet.Geometry;
namespace MeshExplorer.Views
@@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TriangleNet;
using TriangleNet.Geometry;
+2 -8
View File
@@ -1,14 +1,8 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using TriangleNet;
using TriangleNet.Tools;
using TriangleNet.Geometry;
using TriangleNet.Tools;
namespace MeshExplorer.Views
{