茶壶文档.docVIP

  • 3
  • 0
  • 约4.96千字
  • 约 9页
  • 2015-08-11 发布于山西
  • 举报
CAD 工程名称:CAD 工程作者:杨志(信计0701) 主要功能: 1、在顶视图(XY平面)画4个圆,在每一个圆上取36个控制点,在每个圆取一个相应点,利用样条插值获取31个点(含之前的4个点),画出三维图像。 2、利用STL的栈,实现撤消和返回的功能。 工程简介: 顶视图画圆: pDoc-RNum记录圆的个数,当圆的个数小于等于4时OnLButtonDown获取圆心位置存放在Point3 roundpoint[4]中。 OnLButtonUp获取点point,求出半径float radius[4];每隔10度获取一个控制点,存放在CArrayPoint3,Point3 PtDate中。 获取壶嘴。画完4个圆之后,OnLButtonDblClk 选中第四个圆的一个控制点,OnLButtonDown获取壶嘴的位置。 左视图: 每画完一个圆,左视图DrawLeft()画出此圆的36个控制点,OnLButtonDown选中一个圆的36个控制点,OnMouseMove移动鼠标,OnLButtonUp获取移动后的位置,PtDate[]把原来的点改成新的点坐标,在前视图,顶视图和三维视图根据新的点重新画图。 前视图:(同左视图) 撤消操作: Mesh中声明Round类,如下: class Round { public: CArrayPoint3,Point3 ptarrray; Point3 roundpoint[4]; //圓心 float radius[4]; //半径 int roundNum; //圆的个数 int roundNo; //圆的编号 BOOL ISOVER; Round() { for (int i=0;i4;i++) { roundpoint[i].x=0; roundpoint[i].y=0; roundpoint[i].z=0; radius[i]=0; } roundNum=0; roundNo=0; ISOVER=FALSE; } Round(const Round rd) { for (int i=0;i4;i++) { roundpoint[i].x=rd.roundpoint[i].x; roundpoint[i].y=rd.roundpoint[i].y; roundpoint[i].z=rd.roundpoint[i].z; radius[i]=rd.radius[i]; } ptarrray.Copy(rd.ptarrray); roundNum=rd.roundNum; roundNo=rd.roundNo; ISOVER=rd.ISOVER; } const Round operator=(const Round rd) { for (int i=0;i4;i++) { roundpoint[i].x=rd.roundpoint[i].x; roundpoint[i].y=rd.roundpoint[i].y; roundpoint[i].z=rd.roundpoint[i].z; radius[i]=rd.radius[i]; } ptarrray.Copy(rd.ptarrray); roundNum=rd.roundNum; roundNo=rd.roundNo; ISOVER=rd.ISOVER; return *this; } }; 定义栈stackRound roundStack,用于存放每次操作的点。在画圆过程OnLButtonUp把PtDate的点COPY()到栈中,在画壶嘴时把点COPY()到栈中。 单击撤消按钮时执行下面函数: void CMy3DMAXDoc::OnBack() { // TODO: Add your command handler code here if (mesh.roundStack.size()==1) { AfxMessageBox(已空!); return; } else if (!mesh.roundStack.empty()) { //将要弹出的round保存到redoStack中 Round roundPop=mesh.roundStack.top(); mesh.redoStack.push(roundPop); // mesh.roundStack.pop();

文档评论(0)

1亿VIP精品文档

相关文档