明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2682|回复: 11

[经验] (command ".line" 和entmake (list '(0 . "line") ...

  [复制链接]
发表于 2015-7-1 18:28:20 | 显示全部楼层 |阅读模式
关于 (command ".line" p1 p2 "") 和(entmake (list '(0 . "line") (cons 10 p1) (cons...
本来也不想说,但是又不得不说的事情。
今天有陌生人发过来一串lisp,请我帮忙看看。于是我认真拜读了一下代码
  1. ;;;加载线型
  2.   (SETQ exsitly (TBLSEARCH "LTYPE" "CENTER"))
  3.   (IF (= exsitly nil)
  4.     (COMMAND ".Linetype" "l" "CENTER2" "acadiso.lin" "")
  5.     (PRINC)
  6.   )
  7. ;;draw slot hole  
  8. (defun C:HH (/ op di ip p1 p2 p3 p4 pt1 pt2 pt3 pt4 ent1 ent2 ent3 ent4 rot)  
  9.    (setq slot nil)
  10.   (setvar "CMDECHO" 0)  
  11.    (initget 1)  
  12.    (setq ip (getpoint "\nSpecify base point指定基点:"))  
  13.    (initget 1)  
  14.    (setq op (getdist "\nSpecify slot hole diameter指定槽孔直径: "))  
  15.    (initget 1)  
  16.    (setq di (getdist "\nSpecify slot hole length指定槽孔长度度: "))  
  17.    (initget 128 "Vertical垂直 Horizontal水平")  
  18.    (setq rot (getkword "\nSpecify the slot direction指定槽方向 [Vertical垂直/Horizontal水平] : "))  

  19.   (if (= rot "Vertical垂直")  
  20.     (progn  
  21.       (setq pt1 (list (- (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))  
  22.             pt2 (list (- (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))  
  23.             pt3 (list (+ (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))  
  24.             pt4 (list (+ (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))  
  25.         p1 (polar ip 0 op)  
  26.         p2 (polar ip (* pi 0.5) (+ (* 0.5 op) (* 0.5 di)))  
  27.         p3 (polar ip pi op)  
  28.         p4 (polar ip (* pi 1.5) (+ (* 0.5 op) (* 0.5 di))))  
  29.          
  30.     )  
  31. )  
  32. (if (= rot "Horizontal水平")  
  33.     (progn  
  34.       (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  35.             pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  36.             pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  37.             pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  38.         p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))  
  39.         p2 (polar ip (* pi 0.5) op)  
  40.         p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))  
  41.         p4 (polar ip (* pi 1.5) op))  
  42.     )  
  43. )  
  44.   (if (= rot nil)  
  45.     (progn  
  46.       (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  47.             pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  48.             pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  49.             pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  50.         p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))  
  51.         p2 (polar ip (* pi 0.5) op)  
  52.         p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))  
  53.         p4 (polar ip (* pi 1.5) op))  
  54.     )  
  55. )  
  56.    
  57.    (setvar "osmode" 0)  
  58.    (setvar "cecolor" "bylayer")  
  59.    (setvar "celtype" "bylayer")  
  60.    (command ".line" pt1 pt2 "")  
  61.    (setq ent1 (entlast))  
  62.    (command ".line" pt3 pt4 "")  
  63.    (setq ent2 (entlast))  
  64.    (command ".fillet" pt1 pt3)  
  65.    (setq ent3 (entlast))  
  66.    (command ".fillet" pt2 pt4)  
  67.    (setq ent4 (entlast))  
  68.    (command ".pedit" ent1 "" "join" ent2 ent3 ent4 "" "")
  69.    (setvar "celtype" "CENTER2")  
  70.    (command ".line" p1 p3 "")  
  71.    (setq ent5 (entlast))  
  72.    (command ".line" p2 p4 "")  
  73.    (setvar "cecolor" "bylayer")  
  74.    (setvar "celtype" "bylayer")  
  75.    (setvar "osmode" 679)  
  76.   (setvar "filletrad" 0)  

  77. (prin1)  
  78.   )
  79. 大师看看哪里的问题啊
本人真的不是大师,也就是个lisp学徒。本着学习交流的态度,我回复如下:
  1. 一大堆的
  2.    (setvar "osmode" 0)  
  3.    (setvar "cecolor" "bylayer")  
  4.    (setvar "celtype" "bylayer")  
  5.    (command ".line" pt1 pt2 "")  
  6.    (setq ent1 (entlast))  
  7.    (command ".line" pt3 pt4 "")  
  8.    (setq ent2 (entlast))  
  9.    (command ".fillet" pt1 pt3)  
  10.    (setq ent3 (entlast))  
  11.    (command ".fillet" pt2 pt4)  
  12.    (setq ent4 (entlast))  
  13.    (command ".pedit" ent1 "" "join" ent2 ent3 ent4 "" "")
  14.    (setvar "celtype" "CENTER2")  
  15.    (command ".line" p1 p3 "")  
  16.    (setq ent5 (entlast))  
  17.    (command ".line" p2 p4 "")  
  18.    (setvar "cecolor" "bylayer")  
  19.    (setvar "celtype" "bylayer")  
  20.    (setvar "osmode" 679)  
  21.   (setvar "filletrad" 0)  
  22. 看着就头疼,你可以修改成这个试试
  23.    (entmake
  24. (list
  25.    '(0 . "LWPOLYLINE")
  26.    '(100 . "AcDbEntity")
  27.    '(100 . "AcDbPolyline")
  28.    '(90 . 4)
  29.    '(70 . 1)
  30.    (cons 10 pt1) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)
  31.    (cons 10 pt2) '(40 . 0.0) '(41 . 0.0) '(42 . -1.0)
  32.    (cons 10 pt4) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0)
  33.    (cons 10 pt3) '(40 . 0.0) '(41 . 0.0) '(42 . -1.0)
  34. ))
  35. (entmake (list '(0 . "line") (cons 10 p1) (cons 11 p3)))
  36. (entmake (list '(0 . "line") (cons 10 p2) (cons 11 p4)))
  1. 这一大串,看着也头疼,你可以用cond来试试
  2. (if (= rot "Vertical垂直")  
  3.     (progn  
  4.       (setq pt1 (list (- (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))  
  5.             pt2 (list (- (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))  
  6.             pt3 (list (+ (car ip)(/ op 2)) (- (cadr ip) (/ (- di op) 2)))  
  7.             pt4 (list (+ (car ip)(/ op 2)) (+ (cadr ip) (/ (- di op) 2)))  
  8.         p1 (polar ip 0 op)  
  9.         p2 (polar ip (* pi 0.5) (+ (* 0.5 op) (* 0.5 di)))  
  10.         p3 (polar ip pi op)  
  11.         p4 (polar ip (* pi 1.5) (+ (* 0.5 op) (* 0.5 di))))  
  12.          
  13.     )  
  14. )  
  15. (if (= rot "Horizontal水平")  
  16.     (progn  
  17.       (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  18.             pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  19.             pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  20.             pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  21.         p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))  
  22.         p2 (polar ip (* pi 0.5) op)  
  23.         p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))  
  24.         p4 (polar ip (* pi 1.5) op))  
  25.     )  
  26. )  
  27.   (if (= rot nil)  
  28.     (progn  
  29.       (setq pt1 (list (- (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  30.             pt2 (list (+ (car ip)(/ (- di op) 2)) (- (cadr ip)(/ op 2)))  
  31.             pt3 (list (- (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  32.             pt4 (list (+ (car ip)(/ (- di op) 2)) (+ (cadr ip)(/ op 2)))  
  33.         p1 (polar ip 0 (+ (* 0.5 op) (* 0.5 di)))  
  34.         p2 (polar ip (* pi 0.5) op)  
  35.         p3 (polar ip pi (+ (* 0.5 op) (* 0.5 di)))  
  36.         p4 (polar ip (* pi 1.5) op))  
  37.     )  
  38. )  
我问了一下这位高人一句:“你自己写的代码?”
得到一句答复“难不成  是你写的?”
首先,我不是这专业不会写这串代码,也没写过这个代码,其次,这样的态度,你叫别人怎么帮你?


在这里,我要说的是,在学习工作中,如果想得到自己的目的,说话做事要讲究方式方法,要会拿捏分寸。
(command ".line" p1 p2 "") 和(entmake (list '(0 . "line")都能实现绘制一条线,但是什么时候用什么方式,要看情况。


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-7-1 19:25:06 | 显示全部楼层
坐个沙发,或许他忘了吃药。一笑而过吧[em0]
发表于 2015-7-1 20:07:34 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-7-1 20:48:57 | 显示全部楼层
xyp1964 发表于 2015-7-1 20:07

我晕, 楼主发这个贴子是讲command与entmake 的比较, 这也拿出来秀 ,难道槽孔必须要水平或垂直吗?

点评

别晕!水平或垂直属于前提,否则跑题……  发表于 2015-7-2 21:17
发表于 2015-7-1 23:37:39 | 显示全部楼层
天热,息熄火。程序语言是死的,人是活的。
发表于 2015-7-2 14:51:03 | 显示全部楼层
标题与内容不符,吐槽贴。。。
发表于 2015-7-2 17:43:04 来自手机 | 显示全部楼层
语文是体育老师教的?!来自: Android客户端
发表于 2015-7-6 15:50:50 | 显示全部楼层
entmake 的效率确实高很多
发表于 2015-7-6 19:31:21 | 显示全部楼层
对于小程序 (command ) 与 (entmake ) 那个顺手用那个,不用太刻意追求

点评

没错,看情况而定,大数据批量化处理建议用entmake~  发表于 2015-7-7 00:03
发表于 2015-7-7 08:28:39 | 显示全部楼层
瞬间让你觉得自己好贱吧,呵呵,杀伤力太大,也是醉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-21 19:53 , Processed in 0.257526 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表