close
加入參考Kitware.mummy.Runtime.dll和Kitware.VTK.dll
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();
清空畫面
vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow;
vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();
foreach (vtkActor atr in vtkActors)
{
renderer.RemoveActor(atr);
}
renderer.ResetCamera();
renderWindowControl1.Invalidate();
畫藍線
// 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();
同時繪製紅線和藍線
// 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();
參考資料:
1.http://www.vtk.org/Wiki/VTK/Examples/CSharp/GeometricObjects/Line
全站熱搜
留言列表