机械CAD平时小作业-Lisp第2题.doc_第1页
机械CAD平时小作业-Lisp第2题.doc_第2页
机械CAD平时小作业-Lisp第2题.doc_第3页
机械CAD平时小作业-Lisp第2题.doc_第4页
机械CAD平时小作业-Lisp第2题.doc_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

平时小作业第2题一、题目2. 任选一零件图,编制AutoLISP程序实现自动生成。要求绘制标准图框,设置图层和线型。二、步骤1. 我选取了一张大二时的金工实习的零件图作为范本。图纸文件见附件。图1 AutoCAD图纸范本截图2. 编制Lisp程序绘制该图纸(不含标题栏,尺寸与标注)。Dwg文件见附件。图2 由lisp程序生成的图形三、编程难点1.关于线型问题AutoCAD的线型基于LIN文件,如果没有LIN文件是无法凭空显示线型的。经过多次尝试,我采用了 判断lin文件是否存在-创建临时lin文件用于装载线型-装载线型-删除临时文件 的思路。将临时lin文件放在C盘根目录下实属无奈之举,是多次尝试失败后妥协的选择,还好能够实现目的。经搜索,目前网络上能完美解决这个问题的帖子并不多。详见SetLineType函数。2.关于图层我修改了tk_th_txhj.LSP程序,并将图层设置为我自己的习惯。详见SetLayer函数。3.关于线段端点距离过近而导致绘制偏差的问题实践中发现有些线段绘制时,由于两点间距离过近,在lisp程序绘制时识别成了一个点。经多种尝试,解决办法为关掉对象捕捉。以下代码可以实现。 (command osnap none);关闭对象捕捉4.关于显示线宽默认的设置是不显示线宽的,如此而来则第一眼的效果不直观。以下代码可以实现显示线宽。 (setvar LWDISPLAY 1);设置系统变量显示线宽5.关于镜像在镜像时,我遇到了选择对象的问题。我使用之前得到的点平移过后,用”w”参数使得多余图元不被选中,顺利完成了镜像操作。6.关于剖面线过密的问题在生成lisp绘制的图形时,剖面线始终显得过密,而剖面线比例与全局比例均为1,问题显得十分棘手。经过大量的查阅之后,我发现问题出在我新建文件时默认模板选择了acad.dwt而不是acadiso.dwt,而acad.dwt是英制尺寸的模板,25.4mm=1in的比例下剖面线显示过密就情有可原了。换用acadiso.dwt模板后,问题解决。6.关于函数newp(p1 x y)以下为代码:(defun newp(p1 x y);由p1平移x,y方向组成新点 (list (+ (car p1) x) (+ (cadr p1) y) ) )在lisp程序的编写过程中,我发现点的坐标计算较为繁琐,利用polar极坐标运算有时会显得较繁,故而编写了这个newp函数。不知道Autodesk公司为何没有在lisp中加入一个这样实用的程序。四、源程序以下为完整源程序。使用/89750345.html提供的lsp源码着色显示转为htm文件产生颜色。源文件见附件。;xzy2.LSP;小作业第2题 By TomWillow;在tk_th_txhj.LSP基础上修改;新建线型函数,借助“C:temp_linetype.lin”临时文件创建线型(defun SetLineType () (setq fn C:/temp_linetype) (if (not (FindFile (strcat fn .lin);文件不存在 (progn (command -linetype c;创建线型 GB_Center C:/temp_linetype.lin Center _ _ _ _ 15,-1,1,-1 c GB_Hidden C:/temp_linetype.lin Hidden _ _ _ _ _ _ 5,-1 ) ) ) (command -linetype l;载入线型 GB_Center C:/temp_linetype.lin l GB_Hidden C:/temp_linetype.lin ) (vl-file-delete C:/temp_linetype.lin);layer命令详解;n:新建图层 图层名称;l:线型 HIDDEN已加载的线型名称 图层名称;c:颜色 颜色索引1红 2黄 3绿 4青 5蓝 6洋红 7白 图层名称;lw:线宽 线宽 图层名称;s:设定当前图层 图层名称(defun SetLayer ();图形环境 (SetLineType) (commandlayern 边框线n 粗实线n 细实线n 尺寸n 文字n 中心线n 虚线n 剖面线n 波浪线c 7边框线c 3粗实线c 3细实线c 1尺寸c 1文字c 2中心线c 4虚线c 6剖面线c 5波浪线l GB_Center 中心线l GB_Hidden 虚线lw0.35边框线lw0.35粗实线lw0.13细实线lw0.13尺寸lw0.13文字lw0.13中心线lw0.13虚线lw0.13剖面线lw0.13波浪线 )(defun DrawRect (l w p1 / p3);画矩形(长,宽,起始点) (setq p3 (list (+ (car p1) l) (+ (cadr p1) w);Xp1+l与Yp1+w组成p3点,即对角点 (command pline p1 (polar p1 0 l);p1l p3 (polar p1 (/ pi 2.0) w);p1w=p4 p1 )(defun th ();图号 (initget 1 0 1 2 3 4 5);输入控制:限制输入内容 (princ -可供选择的图框号有:0,1,2,3,4,5- ) (setqn0 (read;n0为选择的图号 (getkword n请根据零件几何尺寸的大小,选择合适的图号:) ) ) (setq tkl (1189 841 594 421 297 210 148) (setqtkc (nth n0 tkl);tkc外图框长度tkk (nth (1+ n0) tkl);tkk外图框宽度 ) (if (= n0 3);小于3号图纸则设置边距为10,否则为5 (setq ctk 10) (setq ctk 5) )(defun tk (/ pp);图框 (th);图号 (SetLayer) (setvar LWDISPLAY 1);设置系统变量显示线宽 (command layer s 细实线 );设置当前图层 (command limits (0 0) (list tkc tkk);将图框长宽组成新表 zoom a;缩放以显示全部 ) (DrawRect tkc tkk (0 0);画内框 (setq pp (list 25 ctk) (command layer s 边框线 );设置当前图层 (DrawRect (- tkc ctk 25) (- tkk (* 2 ctk) pp);画外框);(tk)(defun newp(p1 x y);由p1平移x,y方向组成新点 (list (+ (car p1) x) (+ (cadr p1) y) ) );下面开始绘制图形(defun draw1() (command osnap none);关闭对象捕捉 (command layer s 粗实线 ) (setq p1 (getpoint n请设置原点n) (command circle p1 5) (setq p2 (newp p1 -18 0) (setq p3 (newp p1 18 0) (command arc c p1 p2 p3) (setq p0 (newp p1 0 20) (setq p4 (newp p2 0 20) (setq p5 (newp p3 0 20) (command line p2 p4 p5 p3 ) (setq kl1 (newp p4 4.5 0);此处若不关闭捕捉则绘制出错 (setq kl2 (newp kl1 0 -12) (setq k0 (newp kl1 2 0) (setq kr1 (newp k0 2 0) (setq kr2 (newp kr1 0 -12) (setq k3 (newp k0 0 (- -12 (/ (* 2 (sqrt 3) 3) (command line kl1 kl2 k3 kr2 kr1 );画孔线 (setq mia (newp kl1 -1 3) (setq mib (newp kr2 2 -5) (command mirror w mia mib p0 p1 n);镜像粗孔线以供剖面 (command layer s 剖面线 bhatch p ansi31 1 0 (newp k3 0 -5) ;直接跟点则为指定内部点 ) (setq ml1 (newp kl1 -0.5 0) (setq mr1 (newp kr1 0.5 0);螺距0.5 (setq ml2 (newp ml1 0 -10) (setq mr2 (newp mr1 0 -10);装饰螺纹线 (command layer s 粗实线 line kl2 kr2 line ml2 mr2 layer s 细实线 line ml1 ml2 line mr1 mr2 ) (setq p0z (newp p1 0 23);中心线上端点 (setq p1z (newp p1 0 -21) (setq p2z (newp p2 -3 0) (setq p3z (newp p3 3 0) (setq k0z (newp k0 0 3) (setq k3z (newp k3 0 -3) (command layer s 中心线 ;画中心线 line p0z p1z line p2z p3z line k0z k3z ) (command erase w (newp mia 23 0) (newp mib 23 0) );删除右侧孔粗线 (command mirror w mia mib p0 p1 n);镜像左侧孔全部线条 )(defun draw2() (setq f01 (newp p1 0 -60);-60决定主俯视图距离 (setq f02 (newp f01 0 -10) (setq f1 (newp f01 -18 0) (setq f2 (newp f01 18 0) (setq f3 (newp f02 -18 0) (setq f4 (newp f02 18 0) (command layer s 粗实线 line f1 f2 f4 f3 f1 ) (setq f01z (newp f01 0 3) (setq f02z (newp f02 0 -3) (setq f13z (newp f1 -3 -5) (setq f24z (newp f2 3 -5) (setq c1 (newp f01 -11.5 -5) (command circle c1 2) (setq fa1 (newp f01 -5 0) (setq fa2 (newp f02 -5 0) (setq arc1 (polar c1 (* (/ 170 180) pi) 2.5) (command layer s 细实线 arc c c1 arc1 a 290 line fa1 fa2 ) (setq cz1 (newp c1 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论