welcome to my mini revit  

project             name: mini revit
project               role: main  developer
project     technique: vs 2005 ,c/c++,c#,MFC
project introduction: this is a design tool to help designers to build the mode of buildings . it has 2D building models ,3D view ,
undo redo ,add-on tools and journals .
project  core   code:

class ElementManager {
public:
 ElementManager();
 ~ElementManager();
 void Init(CAutodeskFinalProjectMiniRevitDoc *pDoc);
 // an external event happens, keep this module informed.
 int next_operation(COperation & operation);
 // undo/redo this operation
 int undo_redo_operation(COperation & operation);
 // auxiliary methods for undo_redo_operation(..)
 int undo_operation(COperation & op);
 int redo_operation(COperation & op);
 int execute_operation(COperation & op);
 // methods for traverse
 CElement * get_first(void);
 bool has_next(void);
 CElement * get_next(void);

 // get an Element via its id
 CElement * get_Element_via_ID(int elementID);
 // get "child" element of a specified element
 list <CElement *> get_child_elements(int elementID);
 CElement *FindHitElement(CPoint &pt);
 bool PickShow(CPoint pt, CPoint& ptBack);
public:
 // remove from the list, but not delete the element from memory,
 // return ptr to the element
 CElement * remove_from(int elementID);
 void add_new_elem_ref(CElement * elem_ptr);
 // clear all the elements
 void clear_list(void);
 
 CAutodeskFinalProjectMiniRevitDoc *m_pDoc;
 list<CElement *> elements;
 list<CElement *> all_elements;
 list<CElement *>::const_iterator iter;
 ElementID id_factory;
 COperationCollection * undo_redo_manager;
};

class ElementManager;
// base class for all elements
class CElement {
public:
 static CDC *pDrawDC;
 static ElementManager *pElementManager;
 int elementID; // not private, for faster access
 CPoint lastPt;
  TypeID typeID;
 CElement() { };
 CElement(int id_, TypeID typeID);
 virtual ~CElement() { }
 virtual bool is_hit(CPoint pt)  {return false;};
 virtual void draw2D(void)  {};
 virtual void changeColor(int nFlags){};
 virtual void biaoZhu(bool bRemove){};
 virtual int PtInTextRect(CPoint pt){return false;};
 virtual void Modify(int nLength,int nFlags,CElement *pParentElement=NULL){};
 virtual bool  PickMe(CPoint pt,CPoint &ptBack){return false;}
};
class CLine:public  CElement
{
public:
 COLORREF color;
 CPoint startPt,endPt;
 CRect textRect;
 CRect arcRect;
public:
 CLine(const CLine & line);
 CLine(CPoint startPt_,CPoint endPt_,COLORREF &s,int id_);
 void SetPos(CPoint startPt_,CPoint endPt_)
 {
  startPt=startPt_;
  endPt=endPt_;
 }
 virtual  bool is_hit(CPoint pt);////if the line is selected
 virtual void draw2D(); ///show it in the 2D view
 virtual void changeColor(int nFlags);///nFlags
 virtual void biaoZhu(bool bRemove);//show the biaozhu
 void SetColor(COLORREF &s);
 virtual int PtInTextRect(CPoint pt);
 virtual void Modify(int length,int nFlags,CElement *pParentElement=NULL);
  bool PickMe(CPoint pt,CPoint &ptBack);
  int IfXiFu(){
   if(IsEqual(startPt.x,endPt.x))
   {
    endPt.x=startPt.x;
    return 1;
   }
   if(IsEqual(startPt.y,endPt.y))
   {
    endPt.y=startPt.y;
    return 2;
   }
   return -1;
  }

};

class CCircle : public CElement {
public:
 CPoint center;
 double radius;
 CCircle(const CCircle & cir_)
  : center(cir_.center), radius(cir_.radius),
  CElement(cir_.elementID, cir_.typeID /* CIRCLE */) { }
 CCircle(CPoint centerPt_, double radius_, int id_)
  : center(centerPt_), radius(radius_), CElement(id_, CIRCLE) { }

};

class CRectangle : public CElement {
public:
 CPoint startPt, endPt;
 CRectangle(const CRectangle & rect_)
  : startPt(rect_.startPt), endPt(rect_.endPt),
  CElement(rect_.elementID, rect_.typeID /* RECTANGLE */) { }
 CRectangle(CPoint startPt_, CPoint endPt_, int id_)
  : startPt(startPt_), endPt(endPt_),
  CElement(id_, RECTANGLE) { }
};

class CWall : public CElement {
public:
 CWall(const CWall & wall_);
 CWall(CPoint startPt_, CPoint endPt_,int id_);
 void SetPos(CPoint startPt_,CPoint endPt_)
 {
  startPt=startPt_;
  endPt=endPt_;
 }
 virtual bool is_hit(CPoint pt)  ;
 virtual void draw2D(void)  ;
    virtual void changeColor(int nFlags);
 virtual void biaoZhu(bool bRemove);
 virtual int PtInTextRect(CPoint pt);

 virtual void Modify(int length,int nFlags,CElement *pParentElement=NULL);
  bool PickMe(CPoint pt,CPoint &ptBack);
  int IfXiFu(){
   if(IsEqual(startPt.x,endPt.x))
   {
    endPt.x=startPt.x;
    return 1;
   }
   if(IsEqual(startPt.y,endPt.y))
   {
    endPt.y=startPt.y;
    return 2;
   }
   return -1;
  }
public:
 static CString typeName;
 CPoint startPt, endPt;
 double dHeight, dThickness;
 Vec2 direction;
 CRect lengthRect,arcRect;
};

class CDoor : public CElement {
public:
 CDoor(); // empty ctor
 CDoor(const CDoor & door_);
 CDoor(CPoint & pt_, int id_, int hostID_);
 void SetPt(CPoint pt_);
 void SetParentID(int nID){
  hostID=nID;
 }
 virtual bool is_hit(CPoint pt)  ;
 virtual void draw2D(void)  ;
    virtual void changeColor(int nFlags);
 virtual void biaoZhu(bool bRemove);
 virtual int PtInTextRect(CPoint pt);
 virtual void Modify(int length,int nFlags,CElement *pParentElement=NULL);
 double LengthToWallStartPt();
 double GetWallLength();
 static CString typeName;
 int hostID;
 DPoint middlePt;
 double dWidth, dHeight;
 double relativePos;
 Vec2 direction;
 CRect textLeftRect,textRightRect;
};

class CWindow : public CElement {
public:
 CWindow(int id_)
  : CElement(id_, WINDOW) { } // empty ctor
 CWindow(const CWindow& wnd_);
 CWindow(CPoint & pt_, int id_, int hostID_);
 void SetPt(CPoint pt_);
 virtual bool is_hit(CPoint pt)  ;
 virtual void draw2D(void);
    virtual void changeColor(int nFlags);
 virtual void biaoZhu(bool bRemove);
 virtual int PtInTextRect(CPoint pt);
 virtual void Modify(int length,int nFlags,CElement *pParentElement=NULL);
 double LengthToWallStartPt();
 double GetWallLength();
 static CString typeName;
 int hostID;
 DPoint middlePt;
 double dWidth, dHeight,dLength;
 double dDistanceToLevel;
 double relativePos;
 Vec2 direction;
 CRect textLeftRect,textRightRect;
};

class CFurniture : public CElement {
public:
 CFurniture(componentProperty cp,CPoint pt_, int id_)
  : CElement(id_, COMPONENT) {
  furnitureName=cp.furnitureName;
  width=cp.nWidth;
  length=cp.nLength;
  width3D=cp.width3D;
  length3D=cp.length3D;
  height3D=cp.height3D;
  direction.x=0;
  direction.y=1;
  pt=pt_;
  for(int i=0;i<4;i++)
  {
   mat_ambient[i]=cp.mat_ambient[i];
   mat_diffuse[i]=cp.mat_diffuse[i];
   mat_specular[i]=cp.mat_specular[i];
  }
  mat_shininess[0]=cp.mat_shininess[0];
 }
 virtual bool is_hit(CPoint pt_);
 virtual void draw2D(void);
 virtual void Modify(int nLength,int nFlags,CElement *pParentElement=NULL);
 virtual void biaoZhu(bool bRemove);
 virtual int PtInTextRect(CPoint pt);
 virtual void changeColor(int nFlags);
 void Rotate();
 void SetPt(CPoint pt_)
 {
  pt=pt_;
 }
 string furnitureName;
 int width,length;
 float width3D,length3D,height3D;
 DPoint direction;
 CPoint pt;
 float mat_ambient[4];
 float mat_diffuse[4];
 float mat_specular[4];
 float mat_shininess[1];
};

 


 



 
Make a Free Website with Yola.