sgiflag.h
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* 
  2.  *   sgiflag.h
  3.  *
  4.  */
  5. /* useful for lmdef, nurbssurface, nurbscurve, and more */
  6. #define ELEMENTS(x)    (sizeof(x)/sizeof(x[0]))
  7. /* Define nurbs surface properties */
  8. #define S_NUMPOINTS    4
  9. #define S_ORDER        4   /* cubic, degree 3 */
  10. #define S_NUMKNOTS    (S_NUMPOINTS + S_ORDER)
  11. #define S_NUMCOORDS    3
  12. #define T_NUMPOINTS 4
  13. #define T_ORDER        4 
  14. #define T_NUMKNOTS    (T_NUMPOINTS + T_ORDER)
  15. #define T_NUMCOORDS    3
  16. typedef GLfloat Knot;
  17. typedef GLfloat Point[3];
  18. typedef GLfloat TrimPoint[2];
  19. /* Trimming curves are either piecewise linear or nurbscurve */
  20. enum TrimType {PWL, CURVE};
  21. /* A trimming curve is made up of one or more trimming pieces.
  22.  * A trimming piece may be of PWL or CURVE. If a trim piece is PWL,
  23.  * it has at least two trim points, with each trim point composing
  24.  * the endpoints of the line segments. If a trim piece is CURVE, it
  25.  * has four trim points defining the cubic bezier trim.
  26.  */
  27. #define MAX_PIECES 20
  28. struct TrimPieceStruct {
  29.     enum TrimType type;             /* type of the trim              */
  30.     int points;                     /* # of points in the trim piece */
  31.     TrimPoint point[MAX_PIECES];    /* pointer to first trim point   */
  32. };
  33. typedef struct TrimPieceStruct TrimPiece;
  34. struct TrimCurveStruct {
  35.     int pieces;
  36.     TrimPiece *trim;
  37. };
  38. typedef struct TrimCurveStruct TrimCurve;
  39. struct teststruct {
  40.     int a, b, c[2];
  41. };
  42. typedef struct teststruct Test;
  43. /* function prototypes */
  44. static void interp(TrimPoint a, TrimPoint b, GLfloat d, TrimPoint result);
  45. static void join_trims(TrimPiece *trim1, TrimPiece *trim2, GLfloat radius);
  46. static void translate_trim(TrimPiece *trim, GLfloat tx, GLfloat ty);
  47. static void scale_trim(TrimPiece *trim, GLfloat sx, GLfloat sy);
  48. static void rotate_trim(TrimPiece *trim, GLfloat angle);
  49. static void copy_path(TrimCurve *src, TrimCurve **dst);
  50. static void init_trims(void);
  51. static void initialize(void);
  52. static void draw_nurb(GLboolean);
  53. static void draw_hull(Point cpoints[S_NUMPOINTS][T_NUMPOINTS]);
  54. static void dotrim(TrimCurve *curve);