#c #boost #intersection
Вопрос:
Я пытаюсь использовать поплавки вместо двойных со стандартным повышением.Метод пересечения геометрии. Но этот код вылетает, если я просто изменю все на плавающее уже в первом цикле. С двойным это работает без проблем. Это ошибка и код:
Необработанное исключение: Система.Исключение AccessViolationException: Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена
PINVOKE int PolylineIntersectionFloat(
float* polyline0, size_t polyline0_XYCount,
float* polyline1, size_t polyline1_XYCount,
float*amp; intersection, intamp; intersection_XYCount) {
//////////////////////////////////////////////////////////////////////////////////////////
/// Convert double array to Boost polygons
//////////////////////////////////////////////////////////////////////////////////////////
bg::model::polygon<boost::geometry::model::d2::point_xy<float>> polygon0;
bg::model::polygon<boost::geometry::model::d2::point_xy<float>> polygon1;
for (int i = 0; i < polyline0_XYCount; i = 2) {
double a = polyline0[i];
double b = polyline0[i 1];
bg::append(polygon0.outer(), bg::model::d2::point_xy<float>(a,b));
}
for (int i = 0; i < polyline1_XYCount; i = 2) {
bg::append(polygon1.outer(), bg::model::d2::point_xy<float>(polyline1[i], polyline1[i 1]));
}
//////////////////////////////////////////////////////////////////////////////////////////
/// Perform 2D Polygon Interserction
//////////////////////////////////////////////////////////////////////////////////////////
boost::geometry::correct(polygon0);
boost::geometry::correct(polygon1);
typedef bg::model::polygon<boost::geometry::model::d2::point_xy<float>> polygon;
std::deque<polygon> output;
bg::intersection(polygon0, polygon1, output);
//////////////////////////////////////////////////////////////////////////////////////////
/// Convert to Coordinate Array for Export
//////////////////////////////////////////////////////////////////////////////////////////
//std::ofstream myfile;
// myfile.open("C:\Users\petra\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\ngon\3.1.0\Test.txt");
// myfile << "Writing this to a file.n";
// myfile << "Number of Polygons" << output.size();
// BOOST_FOREACH(polygon constamp; p, output)
// {
// myfile << "Count" << p.outer().size();
// myfile << "Count*2" << p.outer().size()*2;
// }
//myfile.close();
if (output.size() == 0)
return 0;
BOOST_FOREACH(polygon constamp; p, output)
{
intersection_XYCount = p.outer().size() * 2;
intersection = new float[intersection_XYCount];
//Iterate Polygon Points
int j = 0;
for (auto it = boost::begin(bg::exterior_ring(p)); it != boost::end(bg::exterior_ring(p)); it)
{
float x = bg::get<0>(*it);
float y = bg::get<1>(*it);
intersection[j] = x;
intersection[j 1] = y;
j = 2;
}
return 1;
}
return 0;
}