《CAD程序设计》课程设计指导书.doc
《《CAD程序设计》课程设计指导书.doc》由会员分享,可在线阅读,更多相关《《CAD程序设计》课程设计指导书.doc(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、CAD程序设计课程设计指 导 书环境与建筑工程学院测绘教研室CAD程序设计课程设计大纲课程类别:比修 学 时:1周课程性质:实践教学 开课学期:第7学期开课专业:测绘工程先修课程: AutoCAD,计算机高级语言一、 课程设计的基本目的与任务本课程设计是测绘工程的专业技术实践课。本实践课的主要目的和任务是:(1)、掌握Visual Lisp程序设计的方法;(2)掌握Visual Lisp操纵AutoCAD的程序设计方法;(3)掌握在 Visual LISP 中使用AutoCAD ActiveX 对象的方法;(4)掌握在 Visual LISP 中使用可编程对话框制作用户界面的方法;(5)掌握自
2、定义 AutoCAD界面的方法。二、 教学基本要求课程设计的进行方式是在教师指导下由学生独立完成的。每个学生都应该明确设计任务和要求,并拟定设计计划,注意掌握进度,按时完成。设计分段进行,每一阶段的设计都要认真检查,没有原则错误时才能继续进行下一段设计,以保证设计质量,循序完成设计任务。设计过程中要独立思考、深入钻研,主动地、创造性地进行设计,反对照抄照搬或依赖教师。要求设计态度严肃认真,有错必改,反对敷衍塞责,容忍错误存在。只有这样才能保证课程设计,达到教学基本要求,在设计思想、设计方法和设计技能等方面得到良好的训练。三、 课程设计的内容(1) 通过资料查阅和学习了解Visual Lisp程
3、序设计的方法;(2) 设计程序算法、绘制流程图;(3) 建立AutoCAD菜单、工具条、按钮;(4) 设计程序的用户界面;(5) 编写程序代码、调试程序;(6) 编写课程设计报告。四、 课程设计的学时分配 教学内容学时地点1、集中学习半天教室资料查阅与学习,讨论1天图书馆、实验室设计程序算法、绘制流程图2天实验室建立AutoCAD菜单、工具条、按钮半天实验室设计程序的用户界面1天实验室编写程序代码、调试程序1天实验室编写课程设计报告1天教室注:课程设计总结论文业余时间完成。五、 课程设计总结论文要求(1) 综述;(2) 设计程序算法、绘制流程图;(3) 建立AutoCAD菜单、工具条、按钮的方
4、法;(4) 设计程序的用户界面;(5) 设计总结。(6) 附录:源程序六、 参考题目(1) 判断一个点是否在闭合多边形的里面,该多边形的边界是由线段和园弧组成。(2) 判断一个闭合多段线是否交叉,该多段线是由线段和园弧组成。(3) 用多段线生成Hatch实体的边界线。(4) 设计一个程序解决汉诺塔问题:有三根柱子,分别为A、B、C,A柱上有一叠按大小顺序叠好的盘子,要求每次只能移动一个盘子,盘子的大小顺序不能改变,且盘子不能离开这三根柱子,将A柱上的盘子全部移到C柱。(5) 设计一个程序将指定区域外的图形剪断,并将区域内的图形保存到一个文件中。七、 主要参考资料AutoCAD 2004 命令参
5、考AutoCAD 2004 自定义手册软件工程AutoLISP Developers GuideAutoLISP ReferenceDXF 参考ActiveX 和 VBA 开发人员指南ActiveX and VBA Reference计算机图形学几个Visual Lisp程序设计实例第一个实例:判断一指定点与某个三角形的关系(用autolisp实现)判断一指定点与某个三角形的关系:1.在三角形三边上;2.在三角形内;3.在三角形外算法:一.输入的数据假设三角形的三顶点为:p1 p2 p3指定点为:p0二.作辅助线1.从p1 p2 p3中选择一点pt使之与p0不相同,三角形的其余点为pta,pt
6、b2.以pt和p0作一射线(p0端无限延长)RL,以pta和ptb作一构造线(两端无限延长)XL3.求RL和XL的交点。三.判断两辅助线是否平行4.如果无交点,则p0在三角形外;如果有交点,则设交点为xp四.判断p0是否在三角形的三边上5.如果xp等于p0,则进一步判断: 如p0在线段(pta-ptb)外,则p0在三角形外;否则p0;在三角形的三边上6.如果xp等于pta,则进一步判断:如p0在线段(pt-pta)外,则p0在三角形外;否则p0;在三角形的三边上7.如果xp等于ptb,则进一步判断:如p0在线段(pt-ptb)外,则p0在三角形外;否则p0;在三角形的三边上五.判断p0是否在三
7、角形外8.如果xp在线段(pta-ptb)外,则p0在三角形外9.如果p0在线段(pt-xp)外,则p0在三角形外10.以上条件都不满足,则p0在三角形内实现方案1.定义一函数GetTrianglePoints,获取三角形的三顶点表lst 2.获取指定点p03.调整顶点表lst使其第一点与p0不相等4.以p0和lst中的第一点组成一构造线,再以lst中的第二,第三点组成另一构造线并求得其交点xp.如无交点,则p0在三角形外out=15.定义一函数IsOutLine(p p1 p2),用以判断一个点p是否在另外两个点p1 p2组成得线段外6.如果xp与p0相等,作进一步处理调用IsOutLine
8、判断p0是否在线段(cadr lst)-(caddr lst)外如p0在该线段外,则p0在三角形外out=1;否则p0在三角形的三边上out=27.如果xp与lst中的第二点相等,作进一步处理调用IsOutLine判断p0是否在线段(car lst)-(cadr lst)外如p0在该线段外,则p0在三角形外out=1;否则p0在三角形的三边上out=28.如果xp与lst中的第三点相等,作进一步处理调用IsOutLine判断p0是否在线段(car lst)-(caddr lst)外如p0在该线段外,则p0在三角形外out=1;否则p0在三角形的三边上out=29.调用IsOutLine判断xp
9、是否在线段(cadr lst)-(caddr lst)外如xp在该线段外,则p0在三角形外out=110.调用IsOutLine判断p0是否在线段(car lst)-xp)外如xp在该线段外,则p0在三角形外out=111. 则p0在三角形内out=2 12. 显示对话框输出处理结果源程序如下:;5.定义一函数IsOutLine(p p1 p2),用以判断一个点p是否在另外两个点p1 p2组成得线段外;如p是在p1 p2所组成的线段外,则返回 t,否则 nil ;(DEFUN IsOutLine (p p1 p2 / rt) (IF (EQUAL (CAR p1) (CAR p2) MaxEr
10、ror) (PROGN (SETQ rt (IsOutTwoDouble (CADR p) (CADR p1) (CADR p2) ) (PROGN (SETQ rt (IsOutTwoDouble (CAR p) (CAR p1) (CAR p2) ) ) rt);判断实数r0是否在r1 r2所组成的区间外;如r0是在r1 r2所组成的线段外,则返回 t,否则 nil ;(DEFUN IsOutTwoDouble (r0 r1 r2 / tmp rt) (IF ( r1 r2) (SETQ tmp r1 r1 r2 r2 tmp ) ) (IF (OR ( r0 r2) (SETQ rt T
11、) ;(setq rt nil) ) rt);.定义一函数GetTrianglePoints,获取三角形的三顶点表lst;如用户选择的是一闭合三角形,返回三顶点表,否则返回nil;(DEFUN GetTrianglePoints (/ ent lst itm ptlst i) (SETQ ent (ENTSEL 选择一闭合三角形:) (IF (AND ent (= LWPOLYLINE (CDR (ASSOC 0 (SETQ lst (ENTGET (CAR ent) ) ) (PROGN (SETQ i 0) (WHILE (SETQ itm (NTH i lst)(WHILE (AND i
12、tm (/= 10 (CAR itm) (SETQ i (1+ i) (SETQ itm (NTH i lst)(IF itm (SETQ ptlst (APPEND ptlst (LIST (CDR itm)(SETQ i (1+ i) ) ) ) (IF (OR (= ptlst nil) (/= (LENGTH ptlst) 3) nil ptlst );主函数; Out 1-外 2-线上 3-内;(DEFUN c:IsOutTriangle (/ lst p0 MaxError xp Out str) (SETVAR cmdecho 0) (SETQ MaxError 0.000000
13、1);1.调用函数GetTrianglePoints,获取三角形的三顶点表lst; (SETQ lst (GetTrianglePoints);2.获取指定点p0; (WHILE (AND lst (SETQ p0 (GETPOINT n请输入指定点:) (SETQ out nil) ;将三维p0变成二维p0; (SETQ p0 (LIST (CAR p0) (CADR p0);3.调整顶点表lst使其第一点与p0不相等; (IF(EQUAL p0 (CAR lst) MaxError) (SETQ lst (APPEND (CDR lst) (LIST (CAR lst) );4.以p0和l
14、st中的第一点组成一构造线,再以lst中的第二,第三点组成另一构造线;并求得其交点xp.如无交点,则p0在三角形外out=1 ; (IF(= (SETQ xp (INTERS (CAR lst) p0 (CADR lst) (CADDR lst) nil) nil) (SETQ out 1) );6.如果xp与p0相等,作进一步处理;调用IsOutLine判断p0是否在线段(cadr lst)-(caddr lst)外 ;如p0在该线段外,则p0在三角形外out=1;否则p0在三角形的三边上out=2; (IF(AND (= out nil) (EQUAL xp p0 MaxError) (P
15、ROGN(IF (IsOutLine p0 (CADR lst) (CADDR lst) (SETQ out 1) (SETQ out 2) ) );7.如果xp与lst中的第二点相等,作进一步处理;调用IsOutLine判断p0是否在线段(car lst)-(cadr lst)外;如p0在该线段外,则p0在三角形外out=1;否则p0在三角形的三边上out=2; (IF(AND (= out nil) (EQUAL xp (CADR lst) MaxError) (PROGN(IF (IsOutLine p0 (CAR lst) (CADR lst) (SETQ out 1) (SETQ o
16、ut 2) ) );8.如果xp与lst中的第三点相等,作进一步处理;调用IsOutLine判断p0是否在线段(car lst)-(caddr lst)外;如p0在该线段外,则p0在三角形外out=1;否则p0在三角形的三边上out=2; (IF(AND (= out nil) (EQUAL xp (CADDR lst) MaxError) (PROGN(IF (IsOutLine p0 (CAR lst) (CADDR lst) (SETQ out 1) (SETQ out 2) ) );9.调用IsOutLine判断xp是否在线段(cadr lst)-(caddr lst)外;如xp在该线
17、段外,则p0在三角形外out=1; (IF(AND (= out nil) (IsOutLine xp (CADR lst) (CADDR lst) (SETQ out 1) );10.调用IsOutLine判断p0是否在线段(car lst)-xp)外;如xp在该线段外,则p0在三角形外out=1; (IF(AND (= out nil) (IsOutLine p0 (CAR lst) xp) (SETQ out 1) );11. 则p0在三角形内out=2; (IF(= out nil) (SETQ str 内) ) (IF(= out 1) (SETQ str 外) ) (IF(= ou
18、t 2) (SETQ str 的边线上) );12. 显示对话框输出处理结果; (ALERT (STRCAT 指定点在选定的三角形 str) ) (SETVAR cmdecho 1) (PRINC)(PRINC n要执行本程序,请输入命令:IsOutTriangle)第二个实例:判断一指定点与某个区域的关系(用active实现)源程序如下:(vl-load-com)(defun InorOut (/ ent pt obj minpt maxpt ptout objlineptlst n i xp Param Deriv Online p1p2 ) (setvar cmdecho 0) (set
19、q ent (entsel n选择一闭合图形) (if ent (progn (setq ent (car ent) (setq obj (vlax-ename-vla-object ent) (if (not (vlax-curve-isClosed obj)(progn (vlax-release-object obj) (setq obj nil) ) ) ) (if obj (while (setq pt (getpoint n输入测试点=) (setq Online nil) (vla-getBoundingBox obj minpt maxpt) (setq ptout (vlax
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAD程序设计 CAD 程序设计 课程设计 指导书
限制150内