Files
Triangle.NET/Triangle.NET/TestApp/FormTopology.cs
T
SND\wo80_cp f674161dff More code reorganization (6)
git-svn-id: https://triangle.svn.codeplex.com/svn@75300 0e2699bc-83d4-4a8f-98e7-55e24ab8c7a5
2014-08-27 16:43:48 +00:00

116 lines
3.0 KiB
C#

using System;
using System.Windows.Forms;
using MeshExplorer.Topology;
using TriangleNet;
using TriangleNet.Geometry;
using TriangleNet.Meshing;
using TriangleNet.Tools;
using TriangleNet.Topology;
namespace MeshExplorer
{
public partial class FormTopology : Form
{
Mesh mesh;
QuadTree tree;
Otri current;
public FormTopology()
{
InitializeComponent();
}
private void FormTopology_Load(object sender, EventArgs e)
{
var mesher = new GenericMesher();
mesh = (Mesh)mesher.StructuredMesh(new Rectangle(0.0, 0.0, 4.0, 4.0), 4, 4);
renderControl.Initialize(mesh);
topoControlView.PrimitiveCommandInvoked += PrimitiveCommandHandler;
current = default(Otri);
}
void PrimitiveCommandHandler(object sender, GenericEventArgs<string> e)
{
if (current.Triangle != null)
{
InvokePrimitive(e.Argument);
}
}
private void renderControl_MouseClick(object sender, MouseEventArgs e)
{
var p = e.Location;
var size = renderControl.Size;
var tri = FindTriangleAt(((float)p.X) / size.Width, ((float)p.Y) / size.Height);
current.Triangle = (Triangle)tri;
renderControl.Update(current);
topoControlView.SetTriangle(current.Triangle);
}
private ITriangle FindTriangleAt(float x, float y)
{
// Get mesh coordinates
var p = new System.Drawing.PointF(x, y);
renderControl.Zoom.ScreenToWorld(ref p);
topoControlView.SetPosition(p);
if (tree == null)
{
tree = new QuadTree(mesh, 5, 2);
}
return tree.Query(p.X, p.Y);
}
private void InvokePrimitive(string name)
{
if (name == "sym")
{
current.Sym();
}
else if (name == "lnext")
{
current.Lnext();
}
else if (name == "lprev")
{
current.Lprev();
}
else if (name == "onext")
{
current.Onext();
}
else if (name == "oprev")
{
current.Oprev();
}
else if (name == "dnext")
{
current.Dnext();
}
else if (name == "dprev")
{
current.Dprev();
}
else if (name == "rnext")
{
current.Rnext();
}
else if (name == "rprev")
{
current.Rprev();
}
renderControl.Update(current);
topoControlView.SetTriangle(current.Triangle);
}
}
}