00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GOP_EdgeGroupParser_h__
00021 #define __GOP_EdgeGroupParser_h__
00022
00023 #include "GOP_API.h"
00024 #include <GEO/GEO_PrimType.h>
00025
00026 #include "GOP_Parser.h"
00027 #include "GOP_EdgeAdhocGroup.h"
00028
00029
00030 #define CHAR_EDGE 'e'
00031 #define CHAR_POINT 'p'
00032 #define CHAR_RANGE_DELIM '-'
00033 #define CHAR_SEC_DELIM '.'
00034 #define CHAR_OPEN_BRACKET '['
00035 #define CHAR_CLOSE_BRACKET ']'
00036 #define CHAR_OPEN_BRACE '{'
00037 #define CHAR_CLOSE_BRACE '}'
00038 #define CHAR_UV_DELIM ','
00039 #define CHAR_WILDCARD '*'
00040
00041
00042 #define ST_COLLPOINT 1
00043 #define ST_COLLPRIM 2
00044 #define ST_COLLSEC 3
00045 #define ST_COLLNAME 4
00046 #define ST_COLLEU 5
00047 #define ST_COLLEV 6
00048 #define ST_COLLPTGROUP 7
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 class GU_Detail;
00061 class GOP_Manager;
00062 class GEO_Primitive;
00063
00064 class GOP_API GOP_EdgeGroupParser : public GOP_Parser
00065 {
00066 public:
00067 GOP_EdgeGroupParser(GOP_Manager *manager, const GU_Detail &gdp,
00068 const UT_String &str,
00069 unsigned int mask = GEOFACE|GEOHULL,
00070 bool strict = true,
00071 int prim_offset = 0, int point_offset = 0);
00072
00073
00074
00075
00076 static void buildGroupToken(const GU_Detail *gdp,
00077 const GB_EdgeGroup *edgegrp,
00078 UT_String &token,
00079 int prim_offset=0, int pt_offset=0);
00080
00081
00082
00083 bool addEdge(const GEO_Point *ppt0, const GEO_Point *ppt1,
00084 const GEO_Primitive *pprim);
00085 private:
00086
00087 virtual void init();
00088 virtual void finish();
00089 virtual bool dispatch(char c);
00090
00091
00092 virtual void handleStart();
00093 virtual void handleError();
00094
00095 void handleCollectPoint();
00096 void handleCollectPrim();
00097 void handleCollectSec();
00098 void handleCollectName();
00099 void handleCollectEdgeU();
00100 void handleCollectEdgeV();
00101 void handleCollectPointGroup();
00102
00103
00104 bool myOpenBracket;
00105 bool myAllSpaces;
00106 bool myRangeStarted;
00107 int myLastPoint;
00108 int myIndexStart;
00109 int myPrimIndex;
00110 int mySecIndex;
00111 int myU;
00112 unsigned int myMask;
00113
00114
00115 bool addEdge(int p0, int p1, int prim=-1);
00116 bool addPoint(int p0);
00117 bool addAllPrimEdges(int prim);
00118 bool addAllPrimEdges(GEO_Primitive &prim);
00119 bool addPrimEdge(int edge, int prim);
00120 bool addPrimEdgeRange(int edge_first, int edge_last,
00121 int prim);
00122 bool addPrimRange(int prim_first, int prim_last);
00123 bool addHullEdge(int r, int c, int prim);
00124 bool addPrimGroup(const char *name);
00125
00126 const GU_Detail &myGdp;
00127 GB_EdgeGroup *myEdgeGroup;
00128 GOP_Manager *myManager;
00129 bool myStrictFlag;
00130 int myPrimOffset;
00131 int myPointOffset;
00132 };
00133
00134
00135 #endif