DistancePointToLine
VTKExamples/CSharp/SimpleOperations/DistancePointToLine
Description¶
This example computes the distance from a point to a line.
Code¶
DistancePointToLine.cs
using System; using System.Runtime.InteropServices; using System.Diagnostics; using Kitware.VTK; void DistancePointToLine() { double[] lineP0 = new double[] { 0.0, 0.0, 0.0 }; double[] lineP1 = new double[] { 2.0, 0.0, 0.0 }; double[] p0 = new double[] { 1.0, 0, 0 }; double[] p1 = new double[] { 1.0, 2.0, 0 }; // Don't worry, fortunately only a few functions in ActiViz.NET need // Marshaling between Managed and Unmanaged Code IntPtr pP0 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3); IntPtr pP1 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3); IntPtr pLineP0 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3); IntPtr pLineP1 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3); Marshal.Copy(p0, 0, pP0, 3); Marshal.Copy(p1, 0, pP1, 3); Marshal.Copy(lineP0, 0, pLineP0, 3); Marshal.Copy(lineP1, 0, pLineP1, 3); double dist0 = vtkLine.DistanceToLine(pP0, pLineP0, pLineP1); Console.WriteLine("Dist0: " + dist0); double dist1 = vtkLine.DistanceToLine(pP1, pLineP0, pLineP1); Console.WriteLine("Dist1: " + dist1); double parametricCoord = 0.0; // must be initialized because this var is passed by reference double[] closest = new double[3]; IntPtr pClosest = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3); Marshal.Copy(closest, 0, pClosest, 3); dist0 = vtkLine.DistanceToLine(pP0, pLineP0, pLineP1, ref parametricCoord, pClosest); Marshal.Copy(pClosest, closest, 0, 3); Console.WriteLine( "Dist0: " + dist0 + " closest point: " + closest[0] + " " + closest[1] + " " + closest[2] + " parametricCoord: " + parametricCoord); dist1 = vtkLine.DistanceToLine(pP1, pLineP0, pLineP1, ref parametricCoord, pClosest); Marshal.Copy(pClosest, closest, 0, 3); Console.WriteLine( "Dist1: " + dist1 + " closest point: " + closest[0] + " " + closest[1] + " " + closest[2] + " parametricCoord: " + parametricCoord); Marshal.FreeHGlobal(pP0); Marshal.FreeHGlobal(pP1); Marshal.FreeHGlobal(pLineP0); Marshal.FreeHGlobal(pLineP1); Marshal.FreeHGlobal(pClosest); }