Ich habe eine einfache DLL, die Berechnungen mit Boost-Geometrie-Polygonen durchführt. (Meistens Kreuzungen und Unterschiede.) Da die DLL höchstwahrscheinlich aus C # -Code und aus Delphi aufgerufen wird und wer von wo sonst weiß, sollte ich das Ergebnis in Arrays konvertieren, die alles verarbeiten kann.
UPDATE:
Ich hatte meinen Code vereinfacht und etwas korrigiert. Der neue Code sieht komplett anders aus, verwendet einen völlig anderen Ansatz ( for_each_point
) und kompiliert irgendwie immer noch nicht.
Mein neuer Code:
%Vor%Die aktuellen Kompilierungsfehler sind:
Welche nicht so aussehen, als hätten sie etwas mit diesem Teil des Codes zu tun (mein Dateiname ist geometry.cpp), aber alles andere, was Boost Geometry verwendet, ist auskommentiert und ich bekomme immer noch diese Fehler, also ...
Hier ist mein schlechter Code, den ich vorher hatte (bearbeitet von sehe)
(Ich bin neu in C ++ und Boost, so dass ich vielleicht ein grundlegendes Konzept verpasst habe, während ich Code aus dem Internet zusammenstellte.) Ich nehme an, dass ich einfach nicht so einfach durch ein Polygon iterieren kann, und ich habe den nicht-trivialen Teil verpasst, oder dass ein Polygon nicht als Ring verwendet werden kann, oder Iterationen sind einfach nicht so, wie ich dachte, oder ich habe keine Idee, was sonst noch falsch sein kann. Was habe ich falsch gemacht?
Ich habe ein paar Dinge gefunden, die behoben werden mussten:
Hier ist eine Version, die kompiliert:
%Vor%Ok, ich denke, ich habe das, wonach Sie suchen. Ich verstehe immer noch nicht ganz, warum du nach diesem Bereich von Punkten suchst, von denen ich anspreche, dass sie größer oder gleich 2 sind, aber ich habe herausgefunden, wie man ihn kompiliert, wenn man mindestens boost :: size () benutzt.
Als Erstes merke, dass der erste Parameter der Funktion
ist %Vor%ist ein std :: -Vektor, der Instanzen des Typs model :: polygon enthält.
Dies bedeutet, dass wenn Sie Ihren Iterator dereferenzieren ... definiert als
%Vor%Der rvalue ist ein Modell :: Polygon.
boost :: model :: polygon ist NICHT an und für sich Boost.Range kompatibel. boost :: model :: polygon ist ein Typ mit 5 Elementfunktionen ....
%Vor%Dies bedeutet, dass Ihr * es (dh ein Modell :: Polygon) darauf beschränkt ist, nur diese Funktionen aufzurufen.
Es sieht so aus, als ob Sie entweder den äußeren Ring oder einen der inneren Ringe jedes Polygons im Vektor (nicht sicher, welcher, innerer oder äußerer) greifen und sehen, ob der Bereich von was auch immer in diesem Ring ist größer als oder gleich 2.
Um dies zu tun, müssen wir noch mehr mpl und typedef machen.
%Vor%Um das Ganze zu vervollständigen und es "funktionierend" zu machen, habe ich beschlossen, anzunehmen, dass du den "äußeren" Ring für dein Bereichslimit konditional willst.
Hier ist für mich Code kompilieren, auf gcc 4.1.1 mit Boost 1.48. Ich überlasse es, ob die Logik für jemand anderen richtig ist.
%Vor%Tags und Links c++ boost boost-geometry