2014-02-22 2 views
0

저는 PCL (포인트 클라우드 라이브러리)을 사용하는 것이 처음입니다. 내가 프로그램을 개방 할 때 QT 객체 클래스에서 PCL 포인트 클라우드를 선언하십시오.

class pcl_sys : public QThread 
{ 
    Q_OBJECT 
public: 
    explicit pcl_sys(); 
    ~pcl_sys(); 
    void stop(); 
    bool load_pcd_file(int type); 

signals: 

public slots: 

protected: 
    void run(); 

private: 
    pcl::PointCloud<pcl::PointXYZ>::Ptr *cloud_test; 

}; 

가 그럼 난 점 구름을 새로운 : :이처럼 개인적으로 QT 객체 클래스에서 점 구름을 선언하려고

pcl_sys::pcl_sys() 
{ 
    cloud_test=0; 
    cloud_test= new pcl::PointCloud<pcl::PointXYZ>::Ptr (new pcl::PointCloud<pcl::PointXYZ>); 
}  

을하지만 난 취소 할 때 내가 파일을로드하려고 할 때, QT는 포인트가 템플릿 cloud_test에 속하지 않는다는 것을 보여줍니다.

bool pcl_sys::load_pcd_file(int choice) 
{ 

    cloud_test->points.clear(); 
} 

이 문제를 어떻게 해결합니까? 고맙습니다.

답변

1

그는 cloud_test가 PointCloud :: Ptr 유형에 대한 포인터입니다. 그래서 get() 함수를 사용하여 몸체에 접근 한 다음 그것을 통해 포인트에 접근해야합니다.

pcl::PointCloud<pcl::PointXYZ>::Ptr *cloud_test; 
cloud_test= new pcl::PointCloud<pcl::PointXYZ>::Ptr (new pcl::PointCloud<pcl::PointXYZ>); 
if (!cloud_test) cloud_test->get()->points.clear(); 

중 하나를 사용할 수 있습니다. 아래에, cloud_test는 점 구름 ::의 PTR 유형 (안 참조 포인터)입니다 :

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_test ; 
cloud_test = pcl::PointCloud<pcl::PointXYZ>::Ptr (new pcl::PointCloud<pcl::PointXYZ>); 
cloud_test.get()->points.clear(); 

하거나 아래 점 구름 ::의 PTR 유형에 포인터로 부스트 :: shared_ptr을 사용할 수 있습니다 :

boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ>::Ptr> cloud_test; 
cloud_test = boost::make_shared <pcl::PointCloud<pcl::PointXYZ>::Ptr> (new pcl::PointCloud<pcl::PointXYZ>); 
cloud_test->get()->points.clear(); 

+0

질문이 하나 더 있습니다. 감사합니다. 그것은'points.clear();에 대해 작동합니다. 비트 조금 망쳤습니다. 지금 파일을로드 할 수 없습니다. 'pcl :: PointCloud :: Ptr을 사용했다면, 변환에주의를 기울여야한다. (pcl :: io :: loadPCDFile (fileName.toStdString(), cloud_test-> get() -> Ptr)' – KKyang

+0

cloud_test;'그러면 다음과 같은 함수를 사용해야합니다 :'pcl :: io :: loadPCDFile ("o.pcd", * (cloud_test-> get())),' –

+0

. 나는 이런 종류의 일에 열중하고 있습니다. – KKyang

0

PointCloud에 대한 새 포인터를 만드는 대신 cloud_test = new pcl::PointCloud<pcl::PointXYZ>을 그냥 수행하십시오.

+0

선언을 변경하고 포인트 클라우드를 'pcl :: PointCloud '로 변경하면 PCT 파일을로드 할 수 없기 때문에 QT가'cloud_test- > Ptr' – KKyang

+0

당신은'cloud_test = new pcl :: PointCloud :: Ptr (새로운 pcl :: PointCloud )'를'cloud_test = n ew pcl :: PointCloud '? 작동하지 않습니다. QT 5.2.1과 PCL 1.6.0을 사용하고 있습니다. – KKyang

관련 문제