VertexFilter.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:2k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. //###############################################################
  2. // VertexFilter.h
  3. // Matt Ginzton, Kari Pulli
  4. // Thu Jul  2 18:29:04 PDT 1998
  5. // 
  6. // Interface for creating a filtered copy of mesh geometry data
  7. //###############################################################
  8. #ifndef _VERTEXFILTER_H_
  9. #define _VERTEXFILTER_H_
  10. class Pnt3;
  11. class TbObj;
  12. #include <vector.h>
  13. #include "Bbox.h"
  14. #include "Xform.h"
  15. #include "Projector.h"
  16. // in general, use this to create a specific type of VertexFilter,
  17. // but only access things at the VertexFilter level:
  18. class VertexFilter* filterFromSelection (TbObj* ms,
  19.  const class Selection& sel);
  20. struct ScreenPnt {
  21.   ScreenPnt (int x, int y) { this->x = x; this->y = y; };
  22.   ScreenPnt (const ScreenPnt& p) { this->x = p.x; this->y = p.y; };
  23.   ScreenPnt () { x = y = 0; };
  24.   int x; int y;
  25. };
  26. class VertexFilter {
  27.  public:
  28.   VertexFilter();
  29.   virtual ~VertexFilter();
  30.   virtual bool accept (const Pnt3& pt) const = 0;
  31.   virtual bool accept (const Bbox &) const = 0;
  32.   virtual void invert() = 0;
  33.   virtual VertexFilter* transformedClone (const Xform<float>& xf) const
  34.     { return NULL; };
  35. };
  36. class ScreenBox: public VertexFilter {
  37.  protected:
  38.   int    xmin, xmax, ymin, ymax;
  39.   Projector projector;
  40.   bool   inverted;
  41.  public:
  42.   ScreenBox (TbObj *ms, int x1, int x2, int y1, int y2);
  43.   ScreenBox (const ScreenBox* source);
  44.   bool accept (const Pnt3& crd) const;
  45.   bool accept (const Bbox& box) const;
  46.   bool acceptFully (const Bbox& box) const;
  47.   void invert();
  48.   virtual VertexFilter* transformedClone (const Xform<float>& xf) const;
  49.   const Projector& getProjector (void) const { return projector; }
  50. };
  51. class ScreenPolyLine: public ScreenBox {
  52.  private:
  53.   unsigned char* pixels;
  54.   int width, height;
  55.  public:
  56.   ScreenPolyLine (TbObj* ms, const vector<ScreenPnt>& pts);
  57.   ScreenPolyLine (const ScreenPolyLine* source);
  58.   ~ScreenPolyLine();
  59.   bool accept (const Pnt3& crd) const;
  60.   bool accept (const Bbox& box) const { return ScreenBox::accept (box); };
  61.   virtual VertexFilter* transformedClone (const Xform<float>& xf) const;
  62. };
  63. #endif