[QGIS Commit] r10442 - branches/vector_overlay_branch/src/core/pal

svn_qgis at osgeo.org svn_qgis at osgeo.org
Mon Mar 30 06:17:04 EDT 2009


Author: mhugent
Date: 2009-03-30 06:17:04 -0400 (Mon, 30 Mar 2009)
New Revision: 10442

Modified:
   branches/vector_overlay_branch/src/core/pal/pointset.h
Log:
Fix compilation under windows

Modified: branches/vector_overlay_branch/src/core/pal/pointset.h
===================================================================
--- branches/vector_overlay_branch/src/core/pal/pointset.h	2009-03-28 21:39:58 UTC (rev 10441)
+++ branches/vector_overlay_branch/src/core/pal/pointset.h	2009-03-30 10:17:04 UTC (rev 10442)
@@ -1,241 +1,242 @@
-/*
- *   libpal - Automated Placement of Labels Library
- *
- *   Copyright (C) 2008 Maxence Laurent, MIS-TIC, HEIG-VD
- *                      University of Applied Sciences, Western Switzerland
- *                      http://www.hes-so.ch
- *
- *   Contact:
- *      maxence.laurent <at> heig-vd <dot> ch
- *    or
- *      eric.taillard <at> heig-vd <dot> ch
- *
- * This file is part of libpal.
- *
- * libpal is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * libpal is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with libpal.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef _POINTSET_H
-#define _POINTSET_H
-
-#include <cfloat>
-
-#include <cmath>
-#include <stddef.h>
-#include <geos_c.h>
-
-#include "rtree.hpp"
-#include "linkedlist.hpp"
-
-namespace pal {
-
-    class Pal;
-    class Feat;
-    class Feature;
-    class Projection;
-    class LabelPosition;
-
-    typedef struct _cross {
-        int pt;
-        double d;
-        double x;
-        double y;
-        int seg;        // seg{0,1,2,3}
-        int nextCorner; // pt{0,1,2,3}
-        int way;
-
-    } Crossing;
-
-    class PointSet;
-
-    typedef struct _cHullBox {
-        double x[4];
-        double y[4];
-
-        double alpha;
-
-        double width;
-        double length;
-    } CHullBox;
-
-
-
-    inline bool ptrCrossingCompare (Crossing * a, Crossing * b) {
-        return a == b;
-    }
-
-    inline bool crossingDist (void *a, void *b) {
-        return ( (Crossing*) a)->d > ( (Crossing*) b)->d;
-    }
-
-
-    class PointSet {
-        friend class Feature;
-        friend class Pal;
-        friend class Layer;
-        friend class LabelPosition;
-        friend class PolygonCostCalculator;
-        friend class Problem;
-        friend bool pruneLabelPositionCallback (LabelPosition *lp, void *ctx);
-        //friend Feat *splitButterflyPolygon (Feat *f, int pt_a, int pt_b, double cx, double cy);
-        friend bool obstacleCallback (PointSet *feat, void *ctx);
-        friend bool extractFeatCallback (Feature*, void*);
-        friend void extractXYCoord (Feat *f);
-        friend LinkedList<Feat*> * splitGeom (GEOSGeometry *the_geom, const char *geom_id);
-        friend void releaseAllInIndex (RTree<PointSet*, double, 2, double> *obstacles);
-        friend bool releaseCallback (PointSet *pset, void *ctx);
-        friend bool filteringCallback (PointSet*, void*);
-    protected:
-        int nbPoints;
-        double *x;
-        double *y;   // points order is counterclockwise
-
-        int *status;   // -1 means inside the bbox, +1 means outside and 0 is either in either out
-        int *cHull;
-        int cHullSize;
-
-        int type;
-
-        //PointSet *parent;
-
-        PointSet* holeOf;
-        PointSet* parent;
-
-        PointSet (double x, double y);
-
-        PointSet (PointSet &ps);
-
-
-//public:
-        double xmin;
-        double xmax;
-        double ymin;
-        double ymax;
-
-        PointSet ();
-        PointSet (int nbPoints, double *x, double *y);
-        ~PointSet();
-
-        int getPath (int start, int stop, int *path_val);
-
-        PointSet *extractPath (int path, int nbPtPath, int nbBboxPt, double bbx[4], double bby[4], Crossing *start, Crossing *stop, int startPt);
-
-        PointSet* extractShape (int nbPtSh, int imin, int imax, int fps, int fpe, double fptx, double fpty);
-
-        PointSet *createProblemSpecificPointSet (double bbx[4], double bby[4], bool *outside, bool *inside);
-
-        CHullBox * compute_chull_bbox ();
-
-        /*
-         *  \brief Take each line in shape_toProcess and only keep inside bbox line parts
-         */
-        static void reduceLine (PointSet *line,
-                                LinkedList<PointSet*> *shapes_final,
-                                double bbx[4], double bby[4]);
-
-
-        /**
-         * \brief takes shapes from shapes_toProcess, compute intersection with bbox
-         * and puts new shapes into shapes_final
-         */
-        static void reducePolygon (PointSet* shape_toProcess,
-                                   LinkedList<PointSet*> *shapes_final,
-                                   double bbx[4], double bby[4]);
-
-
-        /*
-         * split a concave shape into several convex shapes
-         *
-         */
-        static void splitPolygons (LinkedList<PointSet*> *shapes_toProcess,
-                                   LinkedList<PointSet*> *shapes_final,
-                                   double xrm, double yrm, char *uid);
-
-
-
-        /**
-         * \brief return the minimum distance bw this and the point (px,py)
-         *
-         * compute the minimum distance bw the point (px,py) and this.
-         * Optionnaly, store the nearest point in (rx,ry) 
-         *
-         * @param px x coordinate of the point
-         * @param py y coordinate of the points
-         * @param rx pointer to x coorinates of the nearest point (can be NULL)
-         * @param ry pointer to y coorinates of the nearest point (can be NULL)
-         */
-        double getDist(double px, double py, double *rx, double *ry);
-
-
-
-        //double getDistInside(double px, double py);
-
-        void getCentroid (double &px, double &py);
-
-
-
-
-        /*
-         * Iterate on line by real step of dl on x,y points
-         * @param nbPoint # point in line
-         * @param x x coord
-         * @param y y coord
-         * @param d ??
-         * @param ad distance from pt0 to each point (ad0 = pt0->pt0)
-         * @param dl ??
-         * @param px current x coord on line
-         * @param py current y coord on line
-         */
-        inline void getPoint (double *d, double *ad, double dl,
-                              double *px, double *py) {
-            int i;
-            double dx, dy, di;
-            double distr;
-
-            i = 0;
-            if (dl >= 0) {
-                while (i < nbPoints && ad[i] <= dl) i++;
-                i--;
-            }
-
-            if (i < nbPoints - 1) {
-                if (dl < 0) {
-                    dx = x[nbPoints-1] - x[0];
-                    dy = y[nbPoints-1] - y[0];
-                    di = sqrt (dx * dx + dy * dy);
-                } else {
-                    dx = x[i+1] - x[i];
-                    dy = y[i+1] - y[i];
-                    di = d[i];
-                }
-
-                distr = dl - ad[i];
-                *px = x[i] + dx * distr / di;
-                *py = y[i] + dy * distr / di;
-            } else {  // just select last point...
-                *px = x[i];
-                *py = y[i];
-            }
-        }
-    };
-
-} // namespace pal
-
-#endif
-
+/*
+ *   libpal - Automated Placement of Labels Library
+ *
+ *   Copyright (C) 2008 Maxence Laurent, MIS-TIC, HEIG-VD
+ *                      University of Applied Sciences, Western Switzerland
+ *                      http://www.hes-so.ch
+ *
+ *   Contact:
+ *      maxence.laurent <at> heig-vd <dot> ch
+ *    or
+ *      eric.taillard <at> heig-vd <dot> ch
+ *
+ * This file is part of libpal.
+ *
+ * libpal is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * libpal is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with libpal.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifndef _POINTSET_H
+#define _POINTSET_H
+
+#include <cfloat>
+
+#include <cmath>
+#include <stddef.h>
+#include <geos_c.h>
+
+#include "rtree.hpp"
+#include "linkedlist.hpp"
+
+namespace pal {
+
+    class Pal;
+    class Feat;
+    class Feature;
+    class Projection;
+    class LabelPosition;
+
+    typedef struct _cross {
+        int pt;
+        double d;
+        double x;
+        double y;
+        int seg;        // seg{0,1,2,3}
+        int nextCorner; // pt{0,1,2,3}
+        int way;
+
+    } Crossing;
+
+    class PointSet;
+
+    typedef struct _cHullBox {
+        double x[4];
+        double y[4];
+
+        double alpha;
+
+        double width;
+        double length;
+    } CHullBox;
+
+
+
+    inline bool ptrCrossingCompare (Crossing * a, Crossing * b) {
+        return a == b;
+    }
+
+    inline bool crossingDist (void *a, void *b) {
+        return ( (Crossing*) a)->d > ( (Crossing*) b)->d;
+    }
+
+
+    class PointSet {
+        friend class Feature;
+        friend class Pal;
+        friend class Layer;
+        friend class LabelPosition;
+        friend class PolygonCostCalculator;
+        friend class Problem;
+        friend bool pruneLabelPositionCallback (LabelPosition *lp, void *ctx);
+        //friend Feat *splitButterflyPolygon (Feat *f, int pt_a, int pt_b, double cx, double cy);
+        friend bool obstacleCallback (PointSet *feat, void *ctx);
+        friend bool extractFeatCallback (Feature*, void*);
+        friend void extractXYCoord (Feat *f);
+        friend LinkedList<Feat*> * splitGeom (GEOSGeometry *the_geom, const char *geom_id);
+        friend void releaseAllInIndex (RTree<PointSet*, double, 2, double> *obstacles);
+        friend bool releaseCallback (PointSet *pset, void *ctx);
+        friend bool filteringCallback (PointSet*, void*);
+    /*protected*/ 
+public:
+        int nbPoints;
+        double *x;
+        double *y;   // points order is counterclockwise
+
+        int *status;   // -1 means inside the bbox, +1 means outside and 0 is either in either out
+        int *cHull;
+        int cHullSize;
+
+        int type;
+
+        //PointSet *parent;
+
+        PointSet* holeOf;
+        PointSet* parent;
+
+        PointSet (double x, double y);
+
+        PointSet (PointSet &ps);
+
+
+//public:
+        double xmin;
+        double xmax;
+        double ymin;
+        double ymax;
+
+        PointSet ();
+        PointSet (int nbPoints, double *x, double *y);
+        ~PointSet();
+
+        int getPath (int start, int stop, int *path_val);
+
+        PointSet *extractPath (int path, int nbPtPath, int nbBboxPt, double bbx[4], double bby[4], Crossing *start, Crossing *stop, int startPt);
+
+        PointSet* extractShape (int nbPtSh, int imin, int imax, int fps, int fpe, double fptx, double fpty);
+
+        PointSet *createProblemSpecificPointSet (double bbx[4], double bby[4], bool *outside, bool *inside);
+
+        CHullBox * compute_chull_bbox ();
+
+        /*
+         *  \brief Take each line in shape_toProcess and only keep inside bbox line parts
+         */
+        static void reduceLine (PointSet *line,
+                                LinkedList<PointSet*> *shapes_final,
+                                double bbx[4], double bby[4]);
+
+
+        /**
+         * \brief takes shapes from shapes_toProcess, compute intersection with bbox
+         * and puts new shapes into shapes_final
+         */
+        static void reducePolygon (PointSet* shape_toProcess,
+                                   LinkedList<PointSet*> *shapes_final,
+                                   double bbx[4], double bby[4]);
+
+
+        /*
+         * split a concave shape into several convex shapes
+         *
+         */
+        static void splitPolygons (LinkedList<PointSet*> *shapes_toProcess,
+                                   LinkedList<PointSet*> *shapes_final,
+                                   double xrm, double yrm, char *uid);
+
+
+
+        /**
+         * \brief return the minimum distance bw this and the point (px,py)
+         *
+         * compute the minimum distance bw the point (px,py) and this.
+         * Optionnaly, store the nearest point in (rx,ry) 
+         *
+         * @param px x coordinate of the point
+         * @param py y coordinate of the points
+         * @param rx pointer to x coorinates of the nearest point (can be NULL)
+         * @param ry pointer to y coorinates of the nearest point (can be NULL)
+         */
+        double getDist(double px, double py, double *rx, double *ry);
+
+
+
+        //double getDistInside(double px, double py);
+
+        void getCentroid (double &px, double &py);
+
+
+
+
+        /*
+         * Iterate on line by real step of dl on x,y points
+         * @param nbPoint # point in line
+         * @param x x coord
+         * @param y y coord
+         * @param d ??
+         * @param ad distance from pt0 to each point (ad0 = pt0->pt0)
+         * @param dl ??
+         * @param px current x coord on line
+         * @param py current y coord on line
+         */
+        inline void getPoint (double *d, double *ad, double dl,
+                              double *px, double *py) {
+            int i;
+            double dx, dy, di;
+            double distr;
+
+            i = 0;
+            if (dl >= 0) {
+                while (i < nbPoints && ad[i] <= dl) i++;
+                i--;
+            }
+
+            if (i < nbPoints - 1) {
+                if (dl < 0) {
+                    dx = x[nbPoints-1] - x[0];
+                    dy = y[nbPoints-1] - y[0];
+                    di = sqrt (dx * dx + dy * dy);
+                } else {
+                    dx = x[i+1] - x[i];
+                    dy = y[i+1] - y[i];
+                    di = d[i];
+                }
+
+                distr = dl - ad[i];
+                *px = x[i] + dx * distr / di;
+                *py = y[i] + dy * distr / di;
+            } else {  // just select last point...
+                *px = x[i];
+                *py = y[i];
+            }
+        }
+    };
+
+} // namespace pal
+
+#endif
+



More information about the QGIS-commit mailing list