我课题项目中使用txt格式的点云,在halcon中想要可视化txt格式点云需要自行提取xyz
Halcon代码
Filename := 'D:/Program Files/Project/Temp/Skull.txt'
open_file(Filename,'input',file)
NumColumns := 3
VecOutLine.clear()
repeat
fread_line(file, oneline, IsEOF)
if(IsEOF == 1)
break
endif
if(oneline == ' ')
continue
endif
tuple_str_first_n (oneline, 0, Substring)
if(Substring == '#')
continue
endif
VecOutLine.at(VecOutLine.length()) := oneline
until (IsEOF)
convert_vector_to_tuple(VecOutLine, P)
P := split(P,' ')
Number := number(regexp_replace(P,'^\\s*0*(.+?)\\s*\n*$','$1'))
P := HNULL
X := Number[[0:NumColumns:|Number|-1]]
Y := Number[[1:NumColumns:|Number|-1]]
Z := Number[[2:NumColumns:|Number|-1]]
close_file(file)
gen_object_model_3d_from_points (X,Y,Z,ObjectModel3D)
X := HNULL
Y := HNULL
Z := HNULL
dev_get_window (WindowHandle)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut)
运行可以看到一个头骨
依然是导出程序,拖拽至vs已有的工程中,此次使用四中的项目添加一个按钮
直接给出button2的代码
private void button2_Click(object sender, EventArgs e)
{
HTuple hv_Filename = new HTuple(), hv_file = new HTuple();
HTuple hv_NumColumns = new HTuple(), hv_oneline = new HTuple();
HTuple hv_IsEOF = new HTuple(), hv_Substring = new HTuple();
HTuple hv_P = new HTuple(), hv_Number = new HTuple(), hv_X = new HTuple();
HTuple hv_Y = new HTuple(), hv_Z = new HTuple(), hv_ObjectModel3D = new HTuple();
HTuple hv_WindowHandle = new HTuple(), hv_PoseOut = new HTuple();
HTupleVector hvec_VecOutLine = new HTupleVector(1);
// Initialize local and output iconic variables
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = true;
openFileDialog.Title = "please choose an txt";
openFileDialog.Filter = "txt(*.txt)|*.txt";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
hv_Filename.Dispose();
hv_Filename = openFileDialog.FileName;
hv_file.Dispose();
HOperatorSet.OpenFile(hv_Filename, "input", out hv_file);
hv_NumColumns.Dispose();
hv_NumColumns = 3;
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hvec_VecOutLine.Clear();
}
do
{
hv_oneline.Dispose(); hv_IsEOF.Dispose();
HOperatorSet.FreadLine(hv_file, out hv_oneline, out hv_IsEOF);
if ((int)(new HTuple(hv_IsEOF.TupleEqual(1))) != 0)
{
break;
}
if ((int)(new HTuple(hv_oneline.TupleEqual(" "))) != 0)
{
continue;
}
hv_Substring.Dispose();
HOperatorSet.TupleStrFirstN(hv_oneline, 0, out hv_Substring);
if ((int)(new HTuple(hv_Substring.TupleEqual("#"))) != 0)
{
continue;
}
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hvec_VecOutLine[new HTuple(hvec_VecOutLine.Length)] = dh.Add(new HTupleVector(hv_oneline));
}
}
while ((int)(hv_IsEOF) == 0);
hv_P = hvec_VecOutLine.ConvertVectorToTuple();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
{
HTuple
ExpTmpLocalVar_P = hv_P.TupleSplit(
" ");
hv_P.Dispose();
hv_P = ExpTmpLocalVar_P;
}
}
hv_Number.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_Number = ((hv_P.TupleRegexpReplace(
"^\\s*0*(.+?)\\s*\n*$", "$1"))).TupleNumber();
}
hv_P.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_P = HTuple.TupleConstant(
"HNULL");
}
hv_X.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_X = hv_Number.TupleSelect(
HTuple.TupleGenSequence(0, (new HTuple(hv_Number.TupleLength())) - 1, hv_NumColumns));
}
hv_Y.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_Y = hv_Number.TupleSelect(
HTuple.TupleGenSequence(1, (new HTuple(hv_Number.TupleLength())) - 1, hv_NumColumns));
}
hv_Z.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_Z = hv_Number.TupleSelect(
HTuple.TupleGenSequence(2, (new HTuple(hv_Number.TupleLength())) - 1, hv_NumColumns));
}
HOperatorSet.CloseFile(hv_file);
hv_ObjectModel3D.Dispose();
HOperatorSet.GenObjectModel3dFromPoints(hv_X, hv_Y, hv_Z, out hv_ObjectModel3D);
hv_X.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_X = HTuple.TupleConstant(
"HNULL");
}
hv_Y.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_Y = HTuple.TupleConstant(
"HNULL");
}
hv_Z.Dispose();
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
hv_Z = HTuple.TupleConstant(
"HNULL");
}
if (HDevWindowStack.IsOpen())
{
hv_WindowHandle = HDevWindowStack.GetActive();
}
vtkPoints points = h2v_cloud(hv_ObjectModel3D);
show_cloud(points, 1, 0, 0, 2);
hv_PoseOut.Dispose();
}
}
catch (HalconException HDevExpDefaultException)
{
hv_Filename.Dispose();
hv_file.Dispose();
hv_NumColumns.Dispose();
hv_oneline.Dispose();
hv_IsEOF.Dispose();
hv_Substring.Dispose();
hv_P.Dispose();
hv_Number.Dispose();
hv_X.Dispose();
hv_Y.Dispose();
hv_Z.Dispose();
hv_ObjectModel3D.Dispose();
hv_WindowHandle.Dispose();
hv_PoseOut.Dispose();
hvec_VecOutLine.Dispose();
throw HDevExpDefaultException;
}
hv_Filename.Dispose();
hv_file.Dispose();
hv_NumColumns.Dispose();
hv_oneline.Dispose();
hv_IsEOF.Dispose();
hv_Substring.Dispose();
hv_P.Dispose();
hv_Number.Dispose();
hv_X.Dispose();
hv_Y.Dispose();
hv_Z.Dispose();
hv_ObjectModel3D.Dispose();
hv_WindowHandle.Dispose();
hv_PoseOut.Dispose();
hvec_VecOutLine.Dispose();
}
点击选择一个txt文件,稍等一会,点击一下窗口就可以显示点云