2017-02-16 18 views
1

私はC++を書く方法はわかりませんが、LiDARポイントクラウドからポイント形状の検出を使用して建物の形状を導出しようとしています。これらの例を使ってファイルから点と法線を読み取ると、CGALは形状を検出します。プログラムは平面形状のみを検出するように設定されています。ポイント設定形状検出:平面形状をファイルに保存

プレーンシェイプをファイルに保存して、他のソフトウェアで使用できるようにしたいと思います。しかし、私はそれがどのように達成できるかの例を見つけることができませんでした。私が使用するテストプログラムはefficient_RANSAC_parameters.cppコードに基づいています。検出されたすべての図形を反復処理するときには、その部分があります。プレーンシェイプをファイルに書き込む何かを追加することは可能でしょうか?オフフォーマットは、ポリゴンをファイルに保存するための一般的でシンプルな方法(CGAL)であることがわかります。そのため、良いファイル形式になる可能性があります。あなたは平面形状オブジェクト if(Plane* plane = dynamic_cast<Plane*>(it->get())){..}したらあなたが平面形状から得ることができることを見ることができるユーザーマニュアルでexample

+0

オフはメッシュを表現するために使用されます。ここでは、プレーンを保存して別のソフトウェアで使用する必要があります。フォーマットは、他のソフトウェアが読み取ることができるものによって課されます。 – sloriot

+0

私は、他のソフトウェアでのOFFのための十分なサポートがあることに気付きました。しかし、他の非バイナリ形式であればOKです。テキスト処理を使って他の形式を派生させることができます。私は仕事ができるファイルを持っていたいと思う。行ごとにテキストファイルに形状座標を書き込む方法は私にとってはうまくいくでしょう。 –

答えて

0

を使用する点と、正常、または係数を得ることができ、そこからCGAL::Plane_3を、オブジェクト飛行機。

+0

ありがとうございましたが、私の問題は、プレーンのプロパティをファイルに書き込む方法がわからないことでした。しかし、私は助けを見つけた、私の答えは以下を参照してください。 –

1

C++を書く方法を知っている同僚がこの問題を解決するのに役立っています。彼は次のことを考え出した:

while (it != shapes.end()) { 
    if (Plane* plane = dynamic_cast<Plane*>(it->get())) 
    { 
    std::cout << "PLANE_" << count++ << "[" << std::endl; 
    const std::vector<size_t> indices = it->get()->indices_of_assigned_points(); 
    std::vector<size_t>::const_iterator iti = indices.begin(); 
    while (iti != indices.end()) { 
     // Retrieves point 
     Point_with_normal pw = *(points.begin() + (*iti)); 
     Kernel::Point_3 p = pw.first; 
     std::cout << "POINT[" << p.x() << "," << p.y() << "," << p.z() << "]" << std::endl; 
     // Proceeds with next point. 
     iti++; 
    } 
    std::cout << "]" << std::endl; 
    } 
    // Proceeds with next detected shape. 
    it++; 
} 

このブロックは、efficient_RANSAC_parameters.cppの例のループを置き換えることができます。出力は次のようになります。

PLANE_0[ 
POINT[34.96,584.49,0.47] 
POINT[34.97,585.24,0.54] 
POINT[34.88,584.51,0.49] 
POINT[34.98,584.75,0.49] 
] 

これは私に作用するものです。私の場合、sedを使用してこの出力をSQL挿入クエリに変換して、後続の処理のためにリレーショナルデータベースにデータを転送することができます。