Fixed issue #9774,
Added higher precision primitives (decimal type, 128bit), Fixed mesh import not including holes, Some minor changes to UI and rendering git-svn-id: https://triangle.svn.codeplex.com/svn@71221 0e2699bc-83d4-4a8f-98e7-55e24ab8c7a5
This commit is contained in:
@@ -22,12 +22,28 @@ namespace MeshRenderer.Core.GDI
|
||||
RenderData data;
|
||||
ColorManager renderColors;
|
||||
|
||||
// If true, even geometry parts outside of bounds will be rendered.
|
||||
bool ignoreBounds;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MeshRenderer" /> class.
|
||||
/// </summary>
|
||||
public MeshRenderer(RenderData data)
|
||||
{
|
||||
this.data = data;
|
||||
|
||||
int featureCount = data.Points.Length;
|
||||
|
||||
if (data.MeshEdges != null)
|
||||
{
|
||||
featureCount += data.MeshEdges.Length;
|
||||
}
|
||||
else if (data.Triangles != null)
|
||||
{
|
||||
featureCount += 2 * data.Triangles.Length;
|
||||
}
|
||||
|
||||
this.ignoreBounds = featureCount < 1000;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -106,7 +122,7 @@ namespace MeshRenderer.Core.GDI
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
k = 2 * i;
|
||||
if (zoom.ViewportContains(pts[k], pts[k + 1]))
|
||||
if (ignoreBounds || zoom.ViewportContains(pts[k], pts[k + 1]))
|
||||
{
|
||||
pt = zoom.WorldToScreen(pts[k], pts[k + 1]);
|
||||
g.FillEllipse(renderColors.Point, pt.X - 1.5f, pt.Y - 1.5f, 3, 3);
|
||||
@@ -118,7 +134,7 @@ namespace MeshRenderer.Core.GDI
|
||||
for (; i < n; i++)
|
||||
{
|
||||
k = 2 * i;
|
||||
if (zoom.ViewportContains(pts[k], pts[k + 1]))
|
||||
if (ignoreBounds || zoom.ViewportContains(pts[k], pts[k + 1]))
|
||||
{
|
||||
pt = zoom.WorldToScreen(pts[k], pts[k + 1]);
|
||||
g.FillEllipse(renderColors.SteinerPoint, pt.X - 1.5f, pt.Y - 1.5f, 3, 3);
|
||||
@@ -140,9 +156,10 @@ namespace MeshRenderer.Core.GDI
|
||||
k1 = 2 * data.Triangles[3 * i + 1];
|
||||
k2 = 2 * data.Triangles[3 * i + 2];
|
||||
|
||||
if (zoom.ViewportContains(pts[k0], pts[k0 + 1]) ||
|
||||
if (ignoreBounds ||
|
||||
(zoom.ViewportContains(pts[k0], pts[k0 + 1]) ||
|
||||
zoom.ViewportContains(pts[k1], pts[k1 + 1]) ||
|
||||
zoom.ViewportContains(pts[k2], pts[k2 + 1]))
|
||||
zoom.ViewportContains(pts[k2], pts[k2 + 1])))
|
||||
{
|
||||
p0 = zoom.WorldToScreen(pts[k0], pts[k0 + 1]);
|
||||
p1 = zoom.WorldToScreen(pts[k1], pts[k1 + 1]);
|
||||
@@ -168,8 +185,9 @@ namespace MeshRenderer.Core.GDI
|
||||
k0 = 2 * data.MeshEdges[2 * i];
|
||||
k1 = 2 * data.MeshEdges[2 * i + 1];
|
||||
|
||||
if (zoom.ViewportContains(pts[k0], pts[k0 + 1]) ||
|
||||
zoom.ViewportContains(pts[k1], pts[k1 + 1]))
|
||||
if (ignoreBounds ||
|
||||
(zoom.ViewportContains(pts[k0], pts[k0 + 1]) ||
|
||||
zoom.ViewportContains(pts[k1], pts[k1 + 1])))
|
||||
{
|
||||
p0 = zoom.WorldToScreen(pts[k0], pts[k0 + 1]);
|
||||
p1 = zoom.WorldToScreen(pts[k1], pts[k1 + 1]);
|
||||
@@ -192,8 +210,9 @@ namespace MeshRenderer.Core.GDI
|
||||
k0 = 2 * data.Segments[2 * i];
|
||||
k1 = 2 * data.Segments[2 * i + 1];
|
||||
|
||||
if (zoom.ViewportContains(pts[k0], pts[k0 + 1]) ||
|
||||
zoom.ViewportContains(pts[k1], pts[k1 + 1]))
|
||||
if (ignoreBounds ||
|
||||
(zoom.ViewportContains(pts[k0], pts[k0 + 1]) ||
|
||||
zoom.ViewportContains(pts[k1], pts[k1 + 1])))
|
||||
{
|
||||
p0 = zoom.WorldToScreen(pts[k0], pts[k0 + 1]);
|
||||
p1 = zoom.WorldToScreen(pts[k1], pts[k1 + 1]);
|
||||
|
||||
@@ -224,19 +224,18 @@ namespace MeshRenderer.Core.GDI
|
||||
}
|
||||
else if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
/*
|
||||
// Just in case ...
|
||||
timer.Stop();
|
||||
|
||||
var nfi = System.Globalization.CultureInfo.InvariantCulture.NumberFormat;
|
||||
|
||||
PointF c = zoom.ScreenToWorld((float)e.X / this.Width, (float)e.Y / this.Height);
|
||||
coordinate = String.Format("X:{0} Y:{1}",
|
||||
c.X.ToString(Util.Nfi),
|
||||
c.Y.ToString(Util.Nfi));
|
||||
c.X.ToString(nfi),
|
||||
c.Y.ToString(nfi));
|
||||
|
||||
this.Invalidate();
|
||||
|
||||
timer.Start();
|
||||
* */
|
||||
}
|
||||
|
||||
base.OnMouseClick(e);
|
||||
|
||||
@@ -154,7 +154,6 @@ namespace MeshRenderer.Core
|
||||
/// </summary>
|
||||
public void SetVoronoi(IVoronoi voro, int infCount)
|
||||
{
|
||||
|
||||
int i, n = voro.Points.Length;
|
||||
|
||||
// Copy points
|
||||
|
||||
Reference in New Issue
Block a user