明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1800|回复: 3

[基础] 冬至有点冷,给菜鸟送菜,标水平垂直角

[复制链接]
发表于 2014-12-22 22:06:06 | 显示全部楼层 |阅读模式
刚写玩的,抛砖引玉

你有更好的请奉献出来

标水平角
  1. ;wzg 356 于20141221
  2. (defun c:tt1 ( / PickSegEndPt en enl enl2 p1 p2 p3 p4
  3.           p1p2 d14 gr gr-model gr-value tmp)
  4. ;;多段线所点击子段的两端点列表,from 明经
  5. (defun PickSegEndPt (obj p / pp n)
  6.   (setq  pp (vlax-curve-getclosestpointto obj (trans p 1 0))
  7.         n  (fix (vlax-curve-getparamatpoint obj pp)))
  8.   (list  (vlax-curve-getPointAtParam obj n)
  9.         (vlax-curve-getPointAtParam obj (1+ n)))
  10. )
  11. ;;循环选则直到选中符合过滤的实体为止
  12. (while
  13.   (not
  14.     (and
  15.       (setq en (entsel "\n选择直线..."))
  16.       (or  (= (cdr (assoc 0 (setq enl(entget(car en))))) "POLYLINE")
  17.         (= (cdr (assoc 0 enl)) "LWPOLYLINE")
  18.         (= (cdr (assoc 0 enl)) "LINE")
  19.       )
  20.     )
  21.   )  
  22. )
  23. (if  (= (cdr (assoc 0 enl)) "LINE")
  24.   (setq p1 (cdr (assoc 10 enl))
  25.     p2 (cdr (assoc 11 enl))
  26.   )
  27.   (progn
  28.     (setq p1p2(PickSegEndPt (car en) (cadr en)))
  29.     (setq p1 (car p1p2)
  30.       p2 (cadr p1p2)
  31.     )
  32.   )
  33. )
  34. (if (>
  35.   (distance (setq p4(cadr(grread 5))) p1)
  36.   (distance p4 p2)
  37.   )
  38.   (setq tmp p2
  39.         p2  p1
  40.         p1 tmp
  41.   )
  42. )
  43. (setq p3 (polar p1 0 (distance p1 p4)))
  44. (setvar "cmdecho" 0)
  45. (command "_dimangular" "" "non" p1 "non" p2 "non" p3 "non" p4)
  46. (setq enl(entget(setq en (entlast))))
  47. (command "_line" "non" p1 "non" p3 "")
  48. (setq enl2(entget(entlast)))
  49. (setq gr 0 gr-model 0 gr-value 0 );;gr-model必须归零
  50. (while (/= gr-model 3) ;鼠标左键
  51.   (setq gr (grread T 8)   
  52.       gr-model (car gr)   
  53.       gr-value (cadr gr);鼠标位置
  54.   )      
  55.   (if  (and gr (=  gr-model 5));鼠标移动
  56.     (progn
  57.       (setq d14 (distance p1 gr-value))      
  58.       (if (> (car gr-value)(car p1))
  59.           (setq p3 (polar p1 0 d14))
  60.           (setq p3 (polar p1 pi d14))
  61.       )
  62.       (setq p2 (polar p1 (angle p1 p2) d14))      
  63.       (setq enl (subst (cons 14 p3) (assoc 14 enl) enl)
  64.           enl (subst (cons 13 p2) (assoc 13 enl) enl)
  65.           enl (subst (cons 10 gr-value) (assoc 10 enl) enl)         
  66.           enl2 (subst (cons 11 p3) (assoc 11 enl2) enl2)
  67.       )
  68.       (entmod enl)      
  69.       (entmod enl2)      
  70.     )
  71.   )
  72. )
  73. (setvar "cmdecho" 1)
  74. (princ (strcat"\n角度=" (rtos (/ (* (cdr (assoc 42 (entget en)))180) pi) 2 2) "°"))
  75. (PRINC)
  76. )
  1. ;;;标垂直角
  2. ;;;wzg 356 于20141221
  3. (defun c:tt2 ( / PickSegEndPt en enl enl2 p1 p2 p3 p4
  4.             p1p2 d14 gr gr-model gr-value tmp)
  5. ;;多段线所点击子段的两端点列表
  6. (defun PickSegEndPt (obj p / pp n)
  7.   (setq  pp (vlax-curve-getclosestpointto obj (trans p 1 0))
  8.         n  (fix (vlax-curve-getparamatpoint obj pp)))
  9.   (list  (vlax-curve-getPointAtParam obj n)
  10.         (vlax-curve-getPointAtParam obj (1+ n)))
  11. )
  12. ;;循环选则直到选中符合过滤的实体为止
  13. (while
  14.   (not
  15.     (and (setq en (entsel "\n选择直线..."))
  16.       (setq enl(entget(car en)))
  17.       (or  (= (cdr (assoc 0 enl)) "POLYLINE")
  18.         (= (cdr (assoc 0 enl)) "LWPOLYLINE")
  19.         (= (cdr (assoc 0 enl)) "LINE")
  20.       )
  21.     )
  22.   )  
  23. )
  24. (if  (= (cdr (assoc 0 enl)) "LINE")
  25.   (setq p1 (cdr (assoc 10 enl))
  26.     p2 (cdr (assoc 11 enl))
  27.   )
  28.   (progn
  29.     (setq p1p2(PickSegEndPt (car en) (cadr en)))
  30.     (setq p1 (car p1p2)
  31.       p2 (cadr p1p2)
  32.     )
  33.   )
  34. )
  35. (if (>
  36.   (distance (setq p4(cadr(grread 5))) p1)
  37.   (distance p4 p2)
  38.   )
  39.   (setq tmp p2
  40.         p2  p1
  41.         p1 tmp
  42.   )
  43. )
  44. (setq p3 (polar p1 (* pi 0.5) (distance p1 p4)))
  45. (setvar "cmdecho" 0)
  46. (command "_dimangular" "" "non" p1 "non" p2 "non" p3 "non" p4)
  47. (setq enl(entget(setq en (entlast))))
  48. (command "_line" "non" p1 "non" p3 "")
  49. (setq enl2(entget(entlast)))
  50. (setq gr 0 gr-model 0 gr-value 0 );;gr-model必须归零
  51. (while (/= gr-model 3) ;鼠标左键
  52.   (setq gr (grread T 8)   
  53.       gr-model (car gr)   
  54.       gr-value (cadr gr);鼠标位置
  55.   )      
  56.   (if  (and gr (=  gr-model 5));鼠标移动
  57.     (progn
  58.       (setq d14 (distance p1 gr-value))      
  59.       (if (> (cadr gr-value)(cadr p1))
  60.           (setq p3 (polar p1 (* pi 0.5) d14))
  61.           (setq p3 (polar p1 (* pi -0.5) d14))
  62.       )
  63.       (setq p2 (polar p1 (angle p1 p2) d14))      
  64.       (setq enl (subst (cons 14 p3) (assoc 14 enl) enl)
  65.           enl (subst (cons 13 p2) (assoc 13 enl) enl)
  66.           enl (subst (cons 10 gr-value) (assoc 10 enl) enl)
  67.           enl2 (subst (cons 11 p3) (assoc 11 enl2) enl2)
  68.       )
  69.       (entmod enl)
  70.       (entmod enl2)
  71.     )
  72.   )
  73. )
  74. (setvar "cmdecho" 1)
  75. (princ (strcat"\n角度=" (rtos (/ (* (cdr (assoc 42 (entget en)))180) pi) 2 2) "°"))
  76. (PRINC)
  77. )

评分

参与人数 1明经币 +1 收起 理由
lucas_3333 + 1 神马都是浮云

查看全部评分

"觉得好,就打赏"
    共1人打赏
发表于 2014-12-22 22:50:28 | 显示全部楼层
感谢楼主分享! 网络不行不能评分,奇怪同一台电脑,用公司的网络没问题,家里的网络就不能评分,上传图片
 楼主| 发表于 2014-12-22 23:36:44 | 显示全部楼层
lucas_3333 发表于 2014-12-22 22:50
感谢楼主分享! 网络不行不能评分,奇怪同一台电脑,用公司的网络没问题,家里的网络就不能评分,上传图片

有你看很荣幸了,我今年才学lsp。
以前有用过你的程序,指点为感!
发表于 2014-12-23 08:13:22 | 显示全部楼层
wzg356 发表于 2014-12-22 23:36
有你看很荣幸了,我今年才学lsp。
以前有用过你的程序,指点为感!

这样说太谦虚啦,我也是初学者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 12:27 , Processed in 0.181319 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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