php网站开发防注入,公司介绍简短范文,wordpress图片上传卡住,上海外贸网站建设最近研究了下用pcl读取点云数据#xff0c;又做了个C#的dll#xff0c;方便读取#xff0c;同样这个dll基于pcl 最新版本1.13.1版本开发。 上次做的需要先得到点云长度#xff0c;再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下又做了个C#的dll方便读取同样这个dll基于pcl 最新版本1.13.1版本开发。 上次做的需要先得到点云长度再获取数据。这次这个定义了一个PointCloudXYZ类来存数据。将下面的dll拷贝到可执行目录下引用Q_PclSharp.dll使用
Dll下载链接
链接https://pan.baidu.com/s/1H7ig8YXJDTscprVDydjuJA 提取码6xha 具体使用方法 1. 引用Q_PclSharp.dll 并使用命名空间 using Q_PclSharp;
2. PointCloudXYZ cloudXYZ new PointCloudXYZ();
3. IO.loadPlyFile(filePath, cloud.PointCloudXYZPointer);
装个VTK把读到的数据显示出来
测试效果 测试代码
using Kitware.VTK;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Q_PclSharp;namespace TestCSdll
{public partial class Form1 : Form{PointCloudXYZ cloud new PointCloudXYZ();public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog ofd new OpenFileDialog();if (ofd.ShowDialog() DialogResult.OK){ cloud.Clear();IO.loadPlyFile(ofd.FileName, cloud.PointCloudXYZPointer);vtkPoints points vtkPoints.New();for (int i 0; i cloud.Size; i){points.InsertNextPoint(cloud.GetX(i), cloud.GetY(i), cloud.GetZ(i));}vtkUnsignedCharArray colors_rgb GetRGB(cloud);vtkPolyData polydata vtkPolyData.New();polydata.SetPoints(points);polydata.GetPointData().SetScalars(colors_rgb);vtkVertexGlyphFilter glyphFilter vtkVertexGlyphFilter.New();glyphFilter.SetInputConnection(polydata.GetProducerPort());vtkPolyDataMapper mapper vtkPolyDataMapper.New();mapper.SetInputConnection(glyphFilter.GetOutputPort());vtkActor actor vtkActor.New();actor.SetMapper(mapper);vtkRenderer render renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();for (int i 0; i render.GetActors().GetNumberOfItems(); i){var item render.GetActors().GetItemAsObject(i);render.RemoveActor((vtkActor)item);item.Dispose();}render.AddActor(actor);render.ResetCamera();this.Refresh();}}vtkUnsignedCharArray GetRGB(PointCloudXYZ cloud){vtkUnsignedCharArray colors_rgb vtkUnsignedCharArray.New();double[] minmax new double[6];cloud.GetMinMaxXYZ(minmax);double z minmax[5] - minmax[4];double z_median z / 2;colors_rgb.SetNumberOfComponents(3);double r 0, g 0, b 0;for (int i 0; i cloud.Size; i){ if ((cloud.GetZ(i) - minmax[4]) z_median){ r (255 * ((cloud.GetZ(i) - minmax[4] - z_median) / z_median)); ;g (255 * (1 - ((cloud.GetZ(i) - minmax[4] - z_median) / z_median)));b 0;colors_rgb.InsertNextTuple3(r, g, b);}else{r 0;g (255 * ((cloud.GetZ(i) - minmax[4]) / z_median));b (255 * (1 - ((cloud.GetZ(i) - minmax[4]) / z_median)));colors_rgb.InsertNextTuple3(r, g, b);}}return colors_rgb;}}
}