我有一個簡單的DLL,使用Boost Geometry多邊形進行一些計算。 (主要是交集和差異)。由於DLL很可能會從C#代碼和Delphi中調用,並且誰知道從哪裏得到,我應該將結果轉換爲一切都可以處理的數組。獲取Boost Geometry多邊形中點的座標
更新: 我已簡化並稍微糾正了我的代碼。新代碼看起來完全不同,使用完全不同的方法(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: '類型':不是 '提振:: MPL :: eval_if_c' 迭代中的一員。 hpp 63
- 錯誤C3203:'type':未專用的類模板不能用作模板參數'Iterator'的模板參數,期望實際類型difference_type.hpp 25
- 錯誤C2955: '的boost ::類型':使用類模板需要模板參數列表difference_type.hpp 25
- 錯誤C2955: '提高:: iterator_difference':使用類模板需要模板參數列表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 ::幾何,看看你得到什麼樣的錯誤,這是混亂的,但有沒有那麼多。從我可以看出來的角度來看,boost :: size方法被定義爲我認爲是boost_range的一部分,似乎並不知道如何處理你的model :: polygon。看了升壓範圍參考後,我注意到它提到了所需的功能,如range_begin。 –
sbrett