2017-07-14 3 views
0

Ich bin neu in der Point Cloud-Bibliothek (PCL) und habe nur eingeschränktes C++ - Wissen darüber, wie Zeiger funktionieren. Während wir eine Datei aus einer Datei laden und sie visualisieren können (unter Verwendung des Tutorials this), wie können wir es von einer HTTP-URL lesen?Lesen von Dateien aus URL in C++ anstelle von lokalen Dateien mit der Point Cloud-Bibliothek

int main() { 
     pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>); 
     pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud); 

    pcl::visualization::CloudViewer viewer("Cloud Viewer"); 

    //blocks until the cloud is actually rendered 
    viewer.showCloud(cloud); 

    //use the following functions to get access to the underlying more advanced/powerful 
    //PCLVisualizer 

    while (!viewer.wasStopped()) 
    { 
    } 
    return 0; 
} 
+0

C++ hat keine nativen Einrichtungen eine Datei zu öffnen direkt aus eine HTTP-URL Sie müssen eine Bibliothek eines Drittanbieters verwenden. –

Antwort

0

Ich weiß nicht, ob PCL diese direkt den Fall ist, aber Sie können die cpr oder urdl C++ Bibliotheken entweder download the file zu einem lokalen temporären oder tatsächlich arbeiten auf einem Stream.

Urdl Beispiel:

// For urdl::url. 
#include <urdl/url.hpp> 

// etc...  

urdl::url url("http://somehost/path"); 
urdl::istream is("http://somehost/path"); 

und diese istream kann entweder direkt verwendet werden (wenn PCL unterstützt das), oder Sie können write the data on the stream to a file.

Beispielprogramm cpr mit (auch bekannt als C++ Anfragen, basierend auf der C-Bibliothek libcurl):

#include <cpr/cpr.h> 

int main(int argc, char** argv) { 
    auto r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"}, 
         cpr::Authentication{"user", "pass"}, 
         cpr::Parameters{{"anon", "true"}, {"key", "value"}}); 
    r.status_code;     // 200 
    r.header["content-type"];  // application/json; charset=utf-8 
    r.text;       // JSON text string 
} 

(von cpr des offiziellen Internetseite.)

+0

Danke. Das ist gut. Aber was ich tun muss, ist wahrscheinlich, es in das Gedächtnis zu kopieren und wenn es einmal fertig ist, es zu visualisieren. CURL sieht gut aus, aber wie verbindet man den iStream mit der Cloud? – Ariana

+1

@Ariana: Meine Antwort mit etwas schöner aktualisiert, Wrapping libcurl. Um Ihre Frage zu beantworten: Hoffentlich kann PCL seinen Input aus einem istream beziehen; ansonsten vielleicht aus einer C-Zeichenfolge (und dann können Sie wahrscheinlich etwas wie "r.text.begin()" im cpr-Beispiel verwenden). Wenn nicht, speichern Sie die Daten in einer Datei und verwenden Sie die gleiche Ladefunktion, die Sie in Ihrem Beispiel hatten. – einpoklum