赞
踩
直接上代码:
dev_update_off () Filename := '1.txt'//点云数据的名称,.txt、.csv、.asc等格式的都可以 NumColumns := 3 //如果点云的每行数据有3个数字就写3 (只有xyz 的数据) count_seconds (Then) open_file (Filename, 'input', FileHandle) VecOutLine.clear() repeat fread_line (FileHandle, VecOutLine.at(VecOutLine.length()), IsEOF) until (IsEOF) convert_vector_to_tuple (VecOutLine, P) P := P[0:|P|-2] P := split(P, ' ') stop () * //最重要的就是理解这些正则运算符代表的意思。 * ^ 匹配字符串开头 * \ 转义字符 * \s 匹配空白字符 * * 允许前面的文字或 组0次或多次重复 * ()对子模式进行分组,并创建一个捕获组 * . 匹配除换行符以外的任何字符 * + 允许1次或多次重复 * ? 允许1次或者多次重复 * $ 匹配字符串的结尾(允许尾部换行符) Number := number(regexp_replace(P,'^\\s*0*(.+?)\\s*\n*$', '$1')) P := HNULL IndexIsString := find(type_elem(Number),H_TYPE_STRING) if (IndexIsString > -1) throw ('could not convert "' + Number[IndexIsString] + '" to a number') endif X := Number[[0:NumColumns:|Number|-1]] Y := Number[[1:NumColumns:|Number|-1]] Z := Number[[2:NumColumns:|Number|-1]] Number := HNULL close_file (FileHandle) count_seconds (Now) DurationSeconds := Now - Then Msg := 'opening file ' + Filename + ' in ' + DurationSeconds + 's' dev_inspect_ctrl (Msg) 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, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
使用这个方法读取点云,测试过160万个数据只需要30几秒左右。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。