2013-06-15 14 views

risposta

3

Dal PCL sembra utilizzare un galleggiante [4] per memorizzare i punti, quando si specifica PCL: PointXYZ, si dovrà copiare ogni elemento singolarmente (non testato):

pc.points.resize(v.size()); 
for(size_t i=0; i<v.size(); ++i) 
    pc.points[i].getVector3fMap() = v[i].cast<float>(); 

se è stato utilizzato un vector4d invece e assicurato che l'ultimo coefficiente di ogni elemento sia 0, potresti fare una memcpy o anche uno swap (con un po 'di inganno).

+0

Quindi vuoi dire, se avessi 'std: : vector > 'invece, potrei semplicemente chiamare' pc-> points = container'? –

+0

ah ... mi mancava che la tua domanda originale usasse un doppio. Hai bisogno di un cast qui (risposta aggiornata). E no, usare Vector3f non avrebbe ancora il giusto layout di memoria. Vector4f lo farebbe, ma anche in quel caso avevi bisogno di alcuni trucchi per assegnare direttamente il contenitore. – Jakob

-1

nuvola di punti:

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); 

vettoriale:

std::vector<pcl::PointCloud<pcl::PointXYZ>, Eigen::aligned_allocator<pcl::PointXYZ> > vectorOfPointCloud; 

push-back per aggiungere nuvole di punti in un vettore:

vectorOfPointCloud.push_back(*cloud); 
Problemi correlati