吧主,只能求教你了,能帮我把后面做标记的代码用C#翻译一下吗?
vtk吧
全部回复
仅看楼主
level 4
int i;
//定义立方体的顶点坐标
static float x[8][3]={{0,0,0}, {1,0,0}, {1,1,0}, {0,1,0},
{0,0,1}, {1,0,1}, {1,1,1}, {0,1,1}};
//定义单元,每4个顶点建立一个四边形单元,共计6个单元
static vtkIdType pts[6][4]={{0,1,2,3}, {4,5,6,7}, {0,1,5,4},{1,2,6,5}, {2,3,7,6}, {3,0,4,7}};/************求助******/
//创建对象
vtkPolyData *cube = vtkPolyData::New();
vtkPoints *points = vtkPoints::New();
vtkCellArray *polys = vtkCellArray::New();
//存储标量值
vtkFloatArray *scalars = vtkFloatArray::New();
//存储顶点
for(i=0;i<8;i++)points->InsertPoint(i,x[i]);
//设定单元
for(i=0;i<6;i++)polys->InsertNextCell(4,pts[i]); /********************************求助******************************/
//设定每个顶点的标量值
for(i=0;i<8;i++)scalars->InsertTuple1(i,i);
//创建多边形数据
cube->SetPoints(points);
//设定单元类型为多边形
cube->SetPolys(polys);
//设定每个顶点的标量值
cube->GetPointData()->SetScalars(scalars);
points->Delete();
polys->Delete();
scalars->Delete();
2014年12月23日 08点12分 1
level 4
弱弱地问一句:vtkIdType 是什么类型?我这没有这个类型啊。
2014年12月23日 08点12分 2
level 12
vtkIdType是VTK自定义的类型~~~~
2014年12月25日 01点12分 3
可是C#配置vtk之后,没有这个类型。。。。
2014年12月25日 01点12分
level 12
vtkidlist中保存的就是这个东西
2014年12月25日 01点12分 4
level 12
给你贴个demo吧~
先是C++版本:
#include <vtkPolyData.h>
#include <vtkSTLReader.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
int main ( int argc, char *argv[] )
{
if ( argc != 2 )
{
cout << "Required parameters: Filename" << endl;
return EXIT_FAILURE;
}
std::string inputFilename = argv[1];
vtkSmartPointer<vtkSTLReader> reader =
vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName(inputFilename.c_str());
reader->Update();
// Visualize
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(reader->GetOutputPort());
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(.3, .6, .3); // Background color green
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
2014年12月25日 01点12分 5
level 12
对应的C#版本:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using Kitware.VTK;
namespace ActiViz.Examples {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void renderWindowControl1_Load(object sender, EventArgs e) {
try {
ReadSTL();
}
catch(Exception ex) {
MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK);
}
}
private void ReadSTL() {
// Path to vtk data must be set as an environment variable
// VTK_DATA_ROOT = "C:\VTK\vtkdata-5.8.0"
vtkTesting test = vtkTesting.New();
string root = test.GetDataRoot();
string filePath = System.IO.Path.Combine(root, @"Data\42400-IDGH.stl");
vtkSTLReader reader = vtkSTLReader.New();
reader.SetFileName(filePath);
reader.Update();
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(reader.GetOutputPort());
vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
// get a reference to the renderwindow of our renderWindowControl1
vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow;
// renderer
vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();
// set background color
renderer.SetBackground(0.2, 0.3, 0.4);
// add our actor to the renderer
renderer.AddActor(actor);
}
}
}
2014年12月25日 01点12分 6
[太开心]
2014年12月25日 01点12分
level 4
吧主好人!我认真研究研究。[太开心]
2014年12月25日 01点12分 8
恩,C++转C#语法so easy,一点一点来,有问题再来[哈哈]~
2014年12月25日 01点12分
level 7
是这样的,要转换的!
贴代码:
IntPtr ptr = Marshal.AllocHGlobal(pts[i].Length * Marshal.SizeOf(typeof(float)));
Marshal.Copy(pts[i], 0, ptr, pts[i].Length);
polys.InsertNextCell(i, ptr);
2015年01月25日 01点01分 9
[疑问]
2015年01月26日 01点01分
回复
nice_joy�¸�
:我试了,通过!
2015年01月26日 02点01分
@yusiyu_1987 赞一下~[吐舌]
2015年01月26日 10点01分
@rabbitbride 吧主在不,能加你QQ吗?
2015年01月26日 10点01分
1