close

image

加入參考Kitware.mummy.Runtime.dll和Kitware.VTK.dll

image_thumb7

image

public partial class Form1 : Form
{
private Kitware.VTK.RenderWindowControl renderWindowControl1;
List<vtkActor> vtkActors = new List<vtkActor>();
public Form1()
{
InitializeComponent();
renderWindowControl1 = new RenderWindowControl();
splitContainer1.Panel2.Controls.Add(renderWindowControl1);
renderWindowControl1.Show();
renderWindowControl1.Dock = DockStyle.Fill;

}

畫線副程式

p0: 第一個點

p1: 第二個點

lineWidth: 線寬度

pColor: 線顏色

private void drawLine(double[] p0, double[] p1, int lineWidth, IntPtr pColor)
{
// Create a line.
vtkLineSource lineSource = vtkLineSource.New();

lineSource.SetPoint1(p0[0], p0[1], p0[2]);
lineSource.SetPoint2(p1[0], p1[1], p1[2]);

// Visualize
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(lineSource.GetOutputPort());
vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
actor.GetProperty().SetLineWidth(lineWidth);
actor.GetProperty().SetColor(pColor);
vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow;
vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();
renderer.SetBackground(0.2, 0.3, 0.4);
renderer.AddActor(actor);
vtkActors.Add(actor);
renderer.ResetCamera();
}

畫紅線

// Create two points, P0 and P1
double[] p0 = new double[] { 1.0, 0.0, 0.0 };
double[] p1 = new double[] { 0.0, 1.0, 0.0 };
int lineWidth = 4;
double[] Color = new double[3] { 1.0, 0, 0 };
IntPtr pColor = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3);
Marshal.Copy(Color, 0, pColor, 3);
drawLine(p0, p1, lineWidth, pColor);
renderWindowControl1.Invalidate();

image

清空畫面

vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow;
vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();
foreach (vtkActor atr in vtkActors)
{
renderer.RemoveActor(atr);
}
renderer.ResetCamera();
renderWindowControl1.Invalidate();

image

畫藍線

// Create two points, P0 and P1
double[] p0 = new double[] { 0.0, 0.0, 0.0 };
double[] p1 = new double[] { 1.0, 1.0, 0.0 };
int lineWidth = 4;
double[] Color = new double[3] { 0.0, 0, 1.0 };
IntPtr pColor = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3);
Marshal.Copy(Color, 0, pColor, 3);
drawLine(p0, p1, lineWidth, pColor);
renderWindowControl1.Invalidate();

image

同時繪製紅線和藍線

// Create two points, P0 and P1
double[] p0 = new double[] { 1.0, 0.0, 0.0 };
double[] p1 = new double[] { 0.0, 1.0, 0.0 };
int lineWidth = 4;
double[] Color = new double[3] { 1.0, 0, 0 };
IntPtr pColor = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3);
Marshal.Copy(Color, 0, pColor, 3);
drawLine(p0, p1, lineWidth, pColor);
double[] p2 = new double[] { 0.0, 0.0, 0.0 };
double[] p3 = new double[] { 1.0, 1.0, 0.0 };
lineWidth = 8;
Color[0] = 0; Color[1] = 0; Color[2] = 1.0;
Marshal.Copy(Color, 0, pColor, 3);
drawLine(p2, p3, lineWidth, pColor);
renderWindowControl1.Invalidate();

image


參考資料:

1.http://www.vtk.org/Wiki/VTK/Examples/CSharp/GeometricObjects/Line

arrow
arrow
    全站熱搜

    me1237guy 發表在 痞客邦 留言(0) 人氣()