ブーストジオメトリポリゴンを使って計算を行う簡単なDLLがあります。 (ほとんどの交差点と相違点)DLLはC#コードとDelphiから呼び出され、他の場所から知っているので、結果をすべて処理できる配列に変換する必要があります。ブーストジオメトリポリゴンからポイントの座標を取得する
更新日: 私はコードを単純化して多少修正しました。新しいコードは全く違って見え、まったく異なるアプローチ(for_each_point
)を使用し、何らかの形でまだコンパイルされません。
私の新しいコード:
#include <vector>
#include <boost/range.hpp>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
using namespace boost::geometry;
typedef boost::geometry::model::point
<
double, 2, boost::geometry::cs::spherical_equatorial<boost::geometry::degree>
> spherical_point;
class PointAggregator {
private :
double *x, *y;
int count;
public :
PointAggregator(int size) {
x = (double*) malloc(sizeof(double) * size);
y = (double*) malloc(sizeof(double) * size);
count = 0;
}
~PointAggregator() {
free(x);
free(y);
}
inline void operator()(spherical_point& p) {
x[count] = get<0>(p);
y[count] = get<1>(p);
count++;
}
void GetResult(double *resultX, double *resultY) {
resultX = x;
resultY = y;
}
};
void VectorToArray(std::vector<model::polygon<spherical_point>> resultVector, double x[], double y[], int *count) {
int i = 0;
for (std::vector<model::polygon<spherical_point>>::iterator it = resultVector.begin(); it != resultVector.end(); ++it) {
if (boost::size(*it) >= 2) {
*count = boost::size(*it);
PointAggregator* pa = new PointAggregator(*count);
boost::geometry::for_each_point(*it, *pa);
pa->GetResult(x, y);
delete(pa);
break;
}
}
}
現在のコンパイルエラーは、次のとおりです。
- エラーC2039: 'type' を '後押し:: MPL :: eval_if_c' イテレータのメンバーではありません。 hpp 63
- エラーC3203: 'type':テンプレートパラメータ 'Iterator'のテンプレート引数として未定義クラステンプレートを使用できません。実際の型が必要ですdifference_type.hpp 25
- エラーC2955: 「後押し::タイプを」:「後押し:: iterator_differenceを」:クラステンプレートを使用すると、テンプレート引数リストdifference_type.hpp 25
- エラーC2955を必要とするクラステンプレートを使用すると、テンプレート引数リストdifference_type.hpp 26
が必要ですどの部分がコードのこの部分(私のファイル名はgeometry.cpp)と関係がないように見えますが、Boost Geometryを使用しているものはすべてコメントアウトされていますが、まだこれらのエラーが発生します...
Here is my bad code that I had previously (edited by sehe)
(私はC++とBoostの新機能ですので、私は基本的なコンセプトを一緒にインターネットから入れています) 多分簡単にポリゴンを繰り返すことはできませんし、些細な部分も見逃してしまったり、ポリゴンをリングとして使うことができない、または反復がちょうど私が彼らがいると思った方法ではない、または私は他に何が間違っているか分からない。私は何を間違えたのですか?
コンパイルエラーが発生していますか、ロジックエラーを探していますか?何があなたのために働いていないのですか? – sbrett
私のコードを更新しました。私はコンパイルできないので、私は物事をまったく意味論的にまったくやっているのかどうか分からないので、何らかのエラーを探しています。 – ytg
私のシステムで使っていたブーストバージョンは1.35だったので、SVNにあるものは何でも更新しました(私はすぐに1.48になると思います)。 私はboost :: geometryを持たないという問題を克服して、どんな種類のエラーが発生しているのかを正確に見ることができますが、それは面倒ですが、それほど多くはありません。私がboost_rangeであると考えるものの一部として定義されたboost :: sizeメソッドは、あなたのモデル:: polygonをどのように処理するか分からないようです。ブースト範囲参照を調べた後、range_beginなどの必要な機能について述べたことに気がつきました。 –
sbrett