SweepLineEvent.h

00001 /**********************************************************************
00002  * $Id: SweepLineEvent.h 1820 2006-09-06 16:54:23Z mloskot $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2005-2006 Refractions Research Inc.
00008  * Copyright (C) 2001-2002 Vivid Solutions Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************/
00016 
00017 #ifndef GEOS_GEOMGRAPH_INDEX_SWEEPLINEEVENT_H
00018 #define GEOS_GEOMGRAPH_INDEX_SWEEPLINEEVENT_H
00019 
00020 #include <string>
00021 
00022 // Forward declarations
00023 namespace geos {
00024         namespace geomgraph {
00025                 namespace index {
00026                         class SweepLineEventOBJ;
00027                 }
00028         }
00029 }
00030 
00031 namespace geos {
00032 namespace geomgraph { // geos::geomgraph
00033 namespace index { // geos::geomgraph::index
00034 
00035 //class SweepLineEventLessThen; // needed ??
00036 
00037 class SweepLineEvent{
00038 friend class SweepLineEventLessThen;
00039 
00040 public:
00041 
00042         enum {
00043                 INSERT_EVENT = 1,
00044                 DELETE_EVENT
00045         };
00046 
00047         SweepLineEvent(void* newEdgeSet, double x,
00048                         SweepLineEvent *newInsertEvent,
00049                         SweepLineEventOBJ *newObj);
00050 
00051         virtual ~SweepLineEvent();
00052 
00053         bool isInsert() { return insertEvent==NULL; }
00054 
00055         bool isDelete() { return insertEvent!=NULL; }
00056 
00057         SweepLineEvent* getInsertEvent() { return insertEvent; }
00058 
00059         int getDeleteEventIndex() { return deleteEventIndex; }
00060 
00061         void setDeleteEventIndex(int newDeleteEventIndex) {
00062                 deleteEventIndex=newDeleteEventIndex;
00063         }
00064 
00065         SweepLineEventOBJ* getObject() const { return obj; }
00066 
00067         int compareTo(SweepLineEvent *sle);
00068 
00069         std::string print();
00070 
00071         void* edgeSet;    // used for red-blue intersection detection
00072 
00073 protected:
00074 
00075         SweepLineEventOBJ* obj;
00076 
00077 private:
00078 
00079         double xValue;
00080 
00081         int eventType;
00082 
00083         SweepLineEvent *insertEvent; // null if this is an INSERT_EVENT event
00084 
00085         int deleteEventIndex;
00086 };
00087 
00088 class SweepLineEventLessThen {
00089 public:
00090         bool operator()(const SweepLineEvent *f, const SweepLineEvent *s) const
00091         {
00092                 if (f->xValue<s->xValue) return true;
00093                 if (f->xValue>s->xValue) return false;
00094                 if (f->eventType<s->eventType) return true;
00095                 return false;
00096         }
00097 };
00098 
00099 
00100 
00101 } // namespace geos.geomgraph.index
00102 } // namespace geos.geomgraph
00103 } // namespace geos
00104 
00105 #endif
00106 
00107 /**********************************************************************
00108  * $Log$
00109  * Revision 1.2  2006/03/15 17:17:42  strk
00110  * Added missing forward declarations
00111  *
00112  * Revision 1.1  2006/03/14 12:55:56  strk
00113  * Headers split: geomgraphindex.h, nodingSnapround.h
00114  *
00115  **********************************************************************/
00116 

Generated on Fri Mar 27 04:53:02 2009 for GEOS by  doxygen 1.5.4