明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1320|回复: 13

[基础] 学习成果!!!!!

  [复制链接]
发表于 2023-8-22 17:44 | 显示全部楼层 |阅读模式
根据大神的建议拿工作中的实例进行研究学习,经过大神的指点结合自己的理解最终把这个视图给画出来了。在写这个程序的过程中有些困惑,首先1、图层在绘制过程中如何进行切换,我画的时候是根据课本上“(command-s "layer" "M" "02LH-加工-孔位" "c" 1 "" "")”一下再进行画。这样每次画图都需要写一段这个代码,实际编程中真正的图层切换也是这样的么?

2、有些程序我感觉是重复的,我这个画左孔、左圆、左方框还有右侧的,程序格式都是参考楼梯梯步格式,这个是不是可以编写一个共用的子程序,调用一下就行了,我研究了下没研究明白,有大神能给优化下看看么。
3、这个程序不是很大100来行,但是由于是用循环画圆孔,导致的执行起来卡顿。这个能优化么?
4、目前也看了一下各位大神给得代码,还是看不懂,不光代码看不懂,程序结构也看不懂,特别一些子程序。
还在不断的学习中,这次不知道能坚持多长时间

  1. ;;鼠标点选P1P2P3然后就画图如下图所示的图形
  2. ;;C槽高度默认是150,可以输入更改尺寸。
  3. ;;圆中心线是水平竖直的,没有按照平行两个alf1、alf2写的不影响效果。
  4. ;;孔线、圆、矩形完全是参考画楼梯的例题写的(谢谢"liuhe"大神的建议)
  5. ;;尽量画的尺寸不要超过1米,超过1米了就会很慢。目前不知道如何优化。
  6. (defun C:qq(/ p1 p2 p3 p4 p5 p6 P61 P62 P63 kx1 kx2 n1 n2 wk alf1 alf2 pp pn pn1 pn2 pnn pm pm1  pm2 pmm h v old quxian p6j1 p6j2 p6j3 p6j4 p6jm)
  7.   ;;;;;;;;;;;;;;;;;;;;;;;;;以下是计算点位;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8.   (setvar "CMDECHO" 0)                                                                     ;不显示命令操作
  9. (setq p1 (getpoint "\n输入沾灰面P1点:"))
  10. (setq p2 (getpoint p1"\n输入沾灰面P2点:"))
  11.   (grdraw p1 p2 6)                                                                         ;绘 (粉红色=6) 暂时线
  12. (setq p3 (getpoint p2"\n输入沾灰面P3点:"))
  13.   (grdraw p2 p3 6)                                                                         ;绘 (粉红色=6) 暂时线
  14. (setq h (getdist"\n输入C槽水平高度:"))
  15. (if (= h nil) (setq h 150))                                                                ;设置默认值
  16. (setq alf1 (angle p1 p2))                                                                  ;极角
  17. (setq alf2 (angle p3 p2))                                                                  ;极角
  18. (setq pm (polar p1 (+ alf1(* 1.5 pi))65))
  19. (setq p6 (polar p1 (+ alf1(* 1.5 pi))h))
  20. (setq pn (polar p3 (+ alf2(* 0.5 pi))65))
  21. (setq p4 (polar p3 (+ alf2(* 0.5 pi))h))
  22. (setq old(getvar 'osmode ))
  23. (setvar 'osmode 0)                                                                         ;关闭捕捉
  24. (setq pp (inters pm (polar pm (angle p1 p2) 1) pn (polar pn (angle p2 p3) 1) nil))         ;交点坐标
  25. (setq p5 (inters p6 (polar p6 (angle p1 p2) 1) p4 (polar p4 (angle p2 p3) 1) nil))         ;交点坐标
  26. (setq n1 (1- (fix(/ (distance p6 p5) 50))))                                                ;计算左孔位线数量
  27. (setq n2 (1- (fix(/ (distance p4 p5) 50))))                                                ;计算右孔位线数量
  28. (setq pm1 (polar p1 (+ alf1(* 1.5 pi))40))
  29. (setq pn1 (polar p3 (+ alf2(* 0.5 pi))40))  
  30.    ;;;;;;;;;;;;;;;;;;;;;;;;;以下是画轮廓;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31. (command-s "layer" "M" "02LH-加工-轮廓线" "c" 7 "" "")
  32.   (command-s "pline" p1 p2 p3 p4 P5  p6 "c")
  33.   (command-S "pline" P2 P5 "")
  34.   (command-s "pline" pm  PP pn  "")
  35.   (command-s "pline" pm  P6 p5 p4 pn  "")
  36.   (setq quxian(entlast))
  37.   (vla-Offset (vlax-ename->vla-object quxian) -8)
  38.   (entdel quxian)
  39. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;画左孔位线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  40. (setq p66 p6)
  41.   (repeat  n1
  42.    (setq p61 (polar p66  alf1 50))
  43.    (setq p62 (polar p61  (+ alf1(* 0.5 pi)) 20))
  44.    (setq p63 (polar p61  (+ alf1(* 1.5 pi)) 10))
  45.    (command-s "layer" "M" "02LH-加工-孔位" "c" 1 "" "")  
  46.    (command-s "pline" p62 p63 "")  
  47.    (setq p66 p61)  
  48.   )  
  49.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;画左矩形孔;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50. (setq p6j p6)
  51.   (repeat  n1
  52.    (setq p6jm (polar p6j  alf1 50))
  53.    (setq p6j1 (polar p6jm  (+ alf1 pi) 8.25))
  54.    (setq p6j2 (polar p6jm   alf1  8.25))
  55.    (setq p6j3 (polar p6j2  (+ alf1(* 0.5 pi)) 8))
  56.    (setq p6j4 (polar p6j1  (+ alf1(* 0.5 pi)) 8))
  57.    (command-s "layer" "M" "02LH-加工-轮廓线" "c" 7 "" "")  
  58.    (command-s "pline" p6j1 p6j2 p6j3 p6j4 "c")  
  59.    (command "SOLID" p6j1 p6j2 p6j4 p6j3 "")
  60.    (setq p6j p6jm)  
  61.   )  
  62.     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;画右矩形孔;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  63. (setq p4j p4)
  64.   (repeat  n2
  65.    (setq p4jm (polar p4j  alf2  50))
  66.    (setq p4j1 (polar p4jm   alf2 8.25))
  67.    (setq p4j2 (polar p4jm   alf2  -8.25))
  68.    (setq p4j3 (polar p4j2  (+ alf2(* 0.5 pi)) -8))
  69.    (setq p4j4 (polar p4j1  (+ alf2(* 0.5 pi)) -8))
  70.    (command-s "layer" "M" "02LH-加工-轮廓线" "c" 7 "" "")  
  71.    (command-s "pline" p4j1 p4j2 p4j3 p4j4 "c")  
  72.    (command "SOLID" p4j1 p4j2 p4j4 p4j3 "")
  73.    (setq p4j p4jm)  
  74.   )
  75.   
  76.   ;;;;;;;;;;;;;;;;;;;;;;;;;画右孔位线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  77.    (setq p44 p4)
  78.   (repeat  n2
  79.    (setq p41 (polar p44  alf2 50))
  80.    (setq p42 (polar p41  (+ alf2(* 0.5 pi)) 10))
  81.    (setq p43 (polar p41  (+ alf2(* 1.5 pi)) 20))
  82.    (command-s "layer" "M" "02LH-加工-孔位" "c" 1 "" "")  
  83.    (command-s "pline" p42 p43 "")
  84.    (setq p44 p41)  
  85.   )
  86.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画左圆并加中心线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  87.   (setq pmm pm1)
  88.   (repeat (+ 1 n1)
  89.    (setq pm2 (polar pmm  alf1 50))
  90.    (setq r 8.25)
  91.    (command-s "layer" "M" "02LH-加工-轮廓线" "c" 7 "" "")
  92.    (command-s "circle" pm2 r)
  93.     (zxx)
  94.    (setq pmm pm2)
  95.   )
  96.   
  97.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;画右圆并加中心线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  98.     (setq pn1 (polar p3 (+ alf2(* 0.5 pi))40))
  99.   (setq pnn pn1)
  100.   (repeat (+ 1 n2)
  101.    (setq pn2 (polar pnn  alf2 50))
  102.    (setq r 8.25)
  103.    (command-s "layer" "M" "02LH-加工-轮廓线" "c" 7 "" "")
  104.    (command-s "circle" pn2 r)
  105.    (zxx)
  106.    (setq pnn pn2)  
  107.   )
  108.   (setvar 'osmode old)
  109.   (prin1)
  110. )  

  111. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;圆画中心线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  112. (defun zxx()
  113.   (command-s "layer" "M" "02LH-加工-孔位" "c" 1 "" "")
  114.   (if (and(setq ename(entlast))
  115.     (setq elist(entget ename) )
  116.     (setq pt(cdr(assoc 10 elist)))
  117.     (setq dist(cdr(assoc 40 elist)))
  118.         )
  119.     (progn
  120.       (setq dist1 (+ dist 8))
  121.     (setq pt_up(polar pt(* 0.5 pi)dist1)  
  122.           pt_down(polar pt(* 1.5 pi)dist1)  
  123.           pt_left(polar pt pi dist1)
  124.           pt_right(polar pt 0 dist1)
  125.     )  
  126.       (command "._line" "none" pt_up "none" pt_down "")
  127.      (command "._line" "none" pt_left "none" pt_right "")
  128.      
  129.       
  130.     )
  131.    
  132.   )
  133.   
  134.   (princ)
  135. )
  136. (prompt "\n 运行命令<< qq>>")
  137. (princ)

本帖子中包含更多资源

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

x

评分

参与人数 4明经币 +5 收起 理由
tigcat + 1 很给力!
xyp1964 + 2 赞一个!
bssurvey + 1 很给力!
cghdy + 1 很给力!

查看全部评分

发表于 2023-8-23 08:34 | 显示全部楼层
  1. ;;167.1 [功能] Entmake直线
  2. (defun EntmakeLine (p1 p2)
  3.   (entmakeX (list '(0 . "LINE") (cons 10 p1) (cons 11 p2)))
  4. )
  5. ;;167.3 [功能] Entmake点表生成多段线
  6. (defun
  7. Make-LWPOLYLINE (lst / PT)
  8.   (entmakeX
  9.     (append
  10.       (list '(0 .
  11. "LWPOLYLINE")
  12.      '(100 . "AcDbEntity")
  13.      '(100 .
  14. "AcDbPolyline")
  15.      (cons 90 (length lst))
  16.       )
  17.       (mapcar
  18. '(lambda (pt) (cons 10 pt)) lst)
  19.     )
  20.   )
  21. )
1.图层创建不要重复,创建之前进行判断图层是否存在,如果存在就不要创建了

2.用entmakex  代替command   
3.  看葵花宝典的entmakex 函数 里面有很多案例
发表于 2023-8-23 10:42 | 显示全部楼层
同样刚入门断断续续在学习,楼主的问题解答不了,不过最近有个小经验分享下,开头结尾可以加上(command "undo" "be")和(command "undo" "e"),这样可以一步撤销到命令前。图层命令我一般是提前建立,然后用到的时候changelayer。
 楼主| 发表于 2023-8-23 18:11 | 显示全部楼层
zhangcan0515 发表于 2023-8-22 23:12
建议楼主把关闭捕捉写上去。不然在打开捕捉时候程序就发生错误。

关闭捕捉写了,前期画点的时候是打开的,后期程序运行就关了,然后运行完就又打开了。

本帖子中包含更多资源

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

x
发表于 2023-8-22 17:53 | 显示全部楼层
用entmake代替command可以明显提速
发表于 2023-8-22 23:12 | 显示全部楼层
建议楼主把关闭捕捉写上去。不然在打开捕捉时候程序就发生错误。
发表于 2023-8-23 08:37 | 显示全部楼层
写得挺好,下载下来学习一下。
发表于 2023-8-23 10:35 | 显示全部楼层
哥们厉害,学习一下
发表于 2023-8-23 13:06 | 显示全部楼层
;; 对话框版本


本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 10:08 , Processed in 0.361841 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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