void cloud_visualixer::add_cloud(const PointCloud & cloud){ const double *x, *y, *z; num_vertices = cloud.pointcount(); num_per_vertex = 6; num_vertex_points = 3; x = &cloud.x(); y = &cloud.y(); z = &cloud.z(); vertices = new GLfloat[num_vertices*num_per_vertex]; for (unsigned int i=0; i<num_vertices; i++){ vertices[i*num_per_vertex] = x[i]; vertices[i*num_per_vertex + 1] = y[i]; vertices[i*num_per_vertex + 2] = z[i]; } num_elements = num_vertices; num_per_element = 1; elements = new GLuint[num_elements]; for (unsigned int i=0; i<num_vertices; i++){ elements[i] = i; } if (cloud.RGB_present()){ const rgb48 * RGB = &cloud.RGB(); for (unsigned int i=0; i<num_vertices; i){ vertices[i*num_per_vertex + 3] = RGB[i].R/65,535; vertices[i*num_per_vertex + 4] = RGB[i].G/65,535; vertices[i*num_per_vertex + 5] = RGB[i].B/65,535; } } else { //rgb ptcolor; for (unsigned int i=0; i<num_vertices; i++){ //ptcolor = color_ramp.get_ramp_color((cloud->z[i]-cloud->zmin)/(cloud->zmax - cloud->zmin)); vertices[i*num_per_vertex + 3] = 0.0; vertices[i*num_per_vertex + 4] = 0.0; vertices[i*num_per_vertex + 5] = 1.0; } } model_centroid[0] = (cloud.xmax() + cloud.xmin())/2.0; model_centroid[1] = (cloud.ymax() + cloud.ymin())/2.0; model_centroid[2] = (cloud.zmax() + cloud.zmin())/2.0; xmax = cloud.xmax(); ymax = cloud.ymax(); zmax = cloud.zmax(); xmin = cloud.xmin(); ymin = cloud.ymin(); zmin = cloud.zmin(); // default color by Z colorby = new float[num_vertices]; for (auto i=0; i<num_vertices; i++){ colorby[i] = z[i]; } colorby_max = zmax; colorby_min = zmin; return; }