Boost Geometry ポリゴンを使用していくつかの計算を行う単純な 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': 'boost::mpl::eval_if_c' iterator.hpp 63 のメンバーではありません
- error C3203: 'type': 特殊化されていないクラス テンプレートは、テンプレート パラメーター 'Iterator' のテンプレート引数として使用できません。実際の型が必要です difference_type.hpp 25
- エラー C2955: 'boost::type': クラス テンプレートを使用するには、テンプレート引数リストが必要です difference_type.hpp 25
- エラー C2955: 'boost::iterator_difference': クラス テンプレートを使用するには、テンプレート引数リストの difference_type.hpp 26 が必要です
コードのこの部分とは何の関係もないように見えるもの (私のファイル名は geometry.cpp) ですが、Boost Geometry を使用する他のすべてがコメント アウトされており、これらのエラーが引き続き発生するため、...
これは私が以前に持っていた私の悪いコードです(seheによって編集されました)
(私は C++ と Boost を初めて使用するので、インターネットからコードをまとめる際にいくつかの基本的な概念を見逃している可能性があります。) 簡単に多角形を反復処理できず、重要な部分を見逃していたと思います。ポリゴンをリングとして使用できないか、反復が思ったとおりでないか、他に何が間違っているのかわかりません。私は何を間違えましたか?