HDK
|
#include "GQ_API.h"
#include "GQ_Point.h"
#include <UT/UT_VectorTypes.h>
#include <UT/UT_SmallObject.h>
#include <GA/GA_Edge.h>
#include <iosfwd>
Go to the source code of this file.
Classes | |
class | GQ_Edge |
struct | GQ_Edge::MacroIterStruct |
Macros | |
#define | GQ_BRIDGE 0x00010000 |
#define | GQ_INTERSECT 0x00020000 |
#define | GQ_INSIDE 0x00040000 |
#define | GQ_OUTSIDE 0x00080000 |
#define | GQ_VISIT 0x00100000 |
#define | GQ_DELETE 0x00200000 |
#define | GQ_NEW 0x00400000 |
#define | GQ_GLUE 0x00800000 |
#define | GQ_SELECTED 0x01000000 |
#define | GQ_SPAREPTR 0x02000000 |
#define | GQ_VTXBOUNDARY 0x04000000 |
#define | GQ_EDGE 0x08000000 |
#define | GQ_CORNER 0x10000000 |
#define | FOR_QUAD_EDGES(elem, edge, nedges, dir) |
#define | FOR_QUAD_EDGES_STRUCT(elem, localname, dir) |
#define | Q_RotN(e, n) |
A single quad edge is stored as a GQ_Edge[4] block. More... | |
#define | Q_ROT(e) (Q_RotN(e, 1)) |
#define | Q_SYM(e) (Q_RotN(e, 2)) |
#define | Q_IROT(e) (Q_RotN(e, 3)) |
#define | Q_ONEXT(e) ((e)->myNext) |
#define | Q_OPREV(e) (Q_ROT( Q_ONEXT( Q_ROT(e)))) |
#define | Q_DNEXT(e) (Q_SYM( Q_ONEXT( Q_SYM(e)))) |
#define | Q_DPREV(e) (Q_IROT( Q_ONEXT( Q_IROT(e)))) |
#define | Q_LNEXT(e) (Q_ROT( Q_ONEXT( Q_IROT(e)))) |
#define | Q_LPREV(e) (Q_SYM( Q_ONEXT(e))) |
#define | Q_RNEXT(e) (Q_IROT( Q_ONEXT( Q_ROT(e)))) |
#define | Q_RPREV(e) (Q_ONEXT( Q_SYM(e))) |
#define | Q_ORG(e) ((e)->myData) |
#define | Q_DEST(e) (Q_ORG( Q_SYM(e))) |
#define | Q_LEFT(e) (Q_ORG( Q_IROT(e))) |
#define | Q_RIGHT(e) (Q_ORG( Q_ROT(e))) |
#define FOR_QUAD_EDGES | ( | elem, | |
edge, | |||
nedges, | |||
dir | |||
) |
Traverse all the edges which access point 'elem'. 'edge' will be set to each edge in turn. 'nedges' will be set to the number of edges accessed. We set our current edge to one of the edges that falls off the point, then we can go from each edge to the onext edge (see notes at onext, oprev, etc in diagram above and comments below). Eventually, you will get back to the original edge. You can use the same macro for faces, but for clarity you might want to change the name of the next pointer to be lnext (next edge on left face).
#define FOR_QUAD_EDGES_STRUCT | ( | elem, | |
localname, | |||
dir | |||
) |
Exactly like FOR_QUAD_EDGES, but using a local instance of an unnamed struct to hold the iteration variables.
NB: Because of a Visual Studio bug, we cannot use an unnamed struct as intended.
Example: FOR_QUAD_EDGES_STRUCT(face, scan, lnext) fprintf(stderr, " edge[%d] = %p\n", scan.i, scan.edge);
#define Q_RotN | ( | e, | |
n | |||
) |