明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2813|回复: 5

[已解答] 求大神指导,我想设置一个循环,可以选择多个圆弧,最后同时得到圆弧每个属性...

[复制链接]
发表于 2014-1-13 17:52:57 | 显示全部楼层 |阅读模式
本帖最后由 Gu_xl 于 2014-1-14 07:46 编辑

(defun c:wyb ()

    (princ "\n功能:依次选取多个圆弧对象,最后在CAD内创建一个表格,将每个圆弧的属性参数放入表中。")

    (setvar "cmdecho" 0)

    (setq os (getvar "osmode"))

    (setvar "osmode" 0)



  (if (and

;;entsel函数返回值包含两个元素,第一个元素是用户所选对象的图元名,第二个元素是用户选择对象时指定的拾取点的坐标值

        ;;cadr函数返回表的第二个元素

;;entget获得对象(图元)的定义数据

;;member搜索表中是否包含某表达式,并从该表达式的第一次出现处返回表的其余部分

(setq en (entsel "\n请选择圆弧对象: "))

      (setq pt (cadr en))  ;获取拾取点坐标

      (setq ent (entget (car en))) ;获取图元的定义数据

      (member '(0 . "ARC") ent) ;;判断选取的实体是不是圆弧

      ;;(princ "\nok")

      (setq PT (vlax-curve-getclosestpointto (vlax-ename->vla-object (car en)) PT));;将 AutoLISP 类型的对象名转换为 VLA 对象,并返回圆弧上离指定点最近的点(在 WCS 上)

           

    )

(progn   

   

   

    (setq pt1 (getpoint pt "\n请点取圆弧属性参数表格放置位置"))   

    (setq w1 (getdist "\n 第一列宽度<30>: "))

    (if (null w1) (setq w1 30.0))   

    (setq w2 (getdist "\n 第二列宽度<17>: "))

    (if (null w2) (setq w2 17.0))   

    (setq w3 (getdist "\n 第三列宽度<17>: "))

    (if (null w3) (setq w3 17.0))

    (setq w4 (getdist "\n 第四列宽度<17>: "))

    (if (null w4) (setq w4 17.0))

    (setq hh (getdist "\n 每行高度<7>: "))

    (if (null hh) (setq hh 7.0))

    (setq pt2 (polar pt1 0 w1))

    (setq pt3 (polar pt2 0 w2))

    (setq pt4 (polar pt3 0 w3))   

    (setq pt5 (polar pt4 0 w4))   

    (setq pt6 (polar pt5 (* pi 1.5) hh))

    (setq pt7 (polar pt4 (* pi 1.5) hh))

    (setq pt8 (polar pt3 (* pi 1.5) hh))

    (setq pt9 (polar pt2 (* pi 1.5) hh))

    (setq pt10 (polar pt1 (* pi 1.5) hh))

    (command "pline" pt1 pt5 pt6 pt10 "c")

    ;;pline命令,画线是按照点的顺序依次相连的

    (command "line" pt2 pt9 "")

    (command "line" pt3 pt8 "")

    (command "line" pt4 pt7 "")

    (command "text" "m" (inters pt1 pt9 pt10 pt2) (/ hh 2) 0 "偏角")

    (command "text" "m" (inters pt2 pt8 pt9 pt3) (/ hh 2) 0 "R(米)")

    (command "text" "m" (inters pt3 pt7 pt8 pt4) (/ hh 2) 0 "T(米)")

    (command "text" "m" (inters pt4 pt6 pt7 pt5) (/ hh 2) 0 "L(米)")   



     ;;==================

   ;;获取圆弧属性参数

   ;;转角、半径、切线长、弧长等

  (setq ang (- (cdr (assoc 51 ent)) (cdr (assoc 50 ent))))

   (if (< ang 0)

  (setq ang (+ pi pi ang))

   )

   ;;半径

   (setq r (cdr (assoc 40 ent)))

   ;;切线长

   (setq ttt (* (/ (sin (* 0.5 ang)) (cos (* 0.5 ang))) r))

   ;;长度

     (setq lll (* r ang))



    (setq pt1 pt10 pt2 pt9 pt3 pt8 pt4 pt7 pt5 pt6)

    (setq pt10 (polar pt1 (* pi 1.5) hh))

    (setq pt9 (polar pt2 (* pi 1.5) hh))

    (setq pt8 (polar pt3 (* pi 1.5) hh))

    (setq pt7 (polar pt4 (* pi 1.5) hh))

    (setq pt6 (polar pt5 (* pi 1.5) hh))

    (command "pline" pt5 pt6 pt10 pt1 "c")

    (command "line" pt2 pt9 "")

    (command "line" pt3 pt8 "")

    (command "line" pt4 pt7 "")

    (command "text" "m" (inters pt1 pt9 pt10 pt2) (/ hh 2) 0 (angtos ang 1 5))

    (command "text" "m" (inters pt2 pt8 pt9 pt3) (/ hh 2) 0 (rtos r 2 3))

    (command "text" "m" (inters pt3 pt7 pt8 pt4) (/ hh 2) 0 (rtos ttt 2 3))

    (command "text" "m" (inters pt4 pt6 pt7 pt5) (/ hh 2) 0 (rtos lll 2 3))



  (setq pt1 pt10 pt2 pt9 pt3 pt8 pt4 pt7 pt5 pt6)

    (setq pt10 (polar pt1 (* pi 1.5) hh))

    (setq pt9 (polar pt2 (* pi 1.5) hh))

    (setq pt8 (polar pt3 (* pi 1.5) hh))

    (setq pt7 (polar pt4 (* pi 1.5) hh))

    (setq pt6 (polar pt5 (* pi 1.5) hh))

    (command "pline" pt5 pt6 pt10 pt1 "c")

    (command "line" pt2 pt9 "")

    (command "line" pt3 pt8 "")

    (command "line" pt4 pt7 "")

    (command "text" "m" (inters pt1 pt9 pt10 pt2) (/ hh 2) 0 (angtos ang 1 5))

    (command "text" "m" (inters pt2 pt8 pt9 pt3) (/ hh 2) 0 (rtos r 2 3))

    (command "text" "m" (inters pt3 pt7 pt8 pt4) (/ hh 2) 0 (rtos ttt 2 3))

    (command "text" "m" (inters pt4 pt6 pt7 pt5) (/ hh 2) 0 (rtos lll 2 3))



        

   ))

(setvar "osmode" os)

   )









该贴已经同步到 鼻祖wq的微博
发表于 2014-1-13 19:34:50 | 显示全部楼层
(defun c:wyb ( / a ang b en ent hh i l lll os  pt1 pt10 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 r ss ttt w1 w2 w3 w4)

    (princ "\n功能:依次选取多个圆弧对象,最后在CAD内创建一个表格,将每个圆弧的属性参数放入表中。")

    (setvar "cmdecho" 0)

    (setq os (getvar "osmode"))

    (setvar "osmode" 0)

(setq ss (ssget '((0 . "ARC"))))
(if ss
        (repeat (setq i (sslength ss))
            (setq l (cons  (ssname ss (setq i (1- i))) l))
        )
    )
(foreach en l
  
  (if (and

;;entsel函数返回值包含两个元素,第一个元素是用户所选对象的图元名,第二个元素是用户选择对象时指定的拾取点的坐标值

        ;;cadr函数返回表的第二个元素

;;entget获得对象(图元)的定义数据

;;member搜索表中是否包含某表达式,并从该表达式的第一次出现处返回表的其余部分
        en


      (setq ent (entget en)) ;获取图元的定义数据

      (member '(0 . "ARC") ent) ;;判断选取的实体是不是圆弧


           

    )

(progn   


   

    (setq pt1 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) (Vlax-Get (Vlax-Ename->Vla-Object en) 'EndPoint) (Vlax-Get (Vlax-Ename->Vla-Object en) 'StartPoint)))   
    (setq w1 30.0)
    (setq w2 17.0)
    (setq w3 17.0)
    (setq w4 17.0)
    (setq hh 7.0)

    (setq pt2 (polar pt1 0 w1))

    (setq pt3 (polar pt2 0 w2))

    (setq pt4 (polar pt3 0 w3))   

    (setq pt5 (polar pt4 0 w4))   

    (setq pt6 (polar pt5 (* pi 1.5) hh))

    (setq pt7 (polar pt4 (* pi 1.5) hh))

    (setq pt8 (polar pt3 (* pi 1.5) hh))

    (setq pt9 (polar pt2 (* pi 1.5) hh))

    (setq pt10 (polar pt1 (* pi 1.5) hh))

    (command "pline" pt1 pt5 pt6 pt10 "c")

    ;;pline命令,画线是按照点的顺序依次相连的

    (command "line" pt2 pt9 "")

    (command "line" pt3 pt8 "")

    (command "line" pt4 pt7 "")

    (command "text" "m" (inters pt1 pt9 pt10 pt2) (/ hh 2) 0 "偏角")

    (command "text" "m" (inters pt2 pt8 pt9 pt3) (/ hh 2) 0 "R(米)")

    (command "text" "m" (inters pt3 pt7 pt8 pt4) (/ hh 2) 0 "T(米)")

    (command "text" "m" (inters pt4 pt6 pt7 pt5) (/ hh 2) 0 "L(米)")   



     ;;==================

   ;;获取圆弧属性参数

   ;;转角、半径、切线长、弧长等

  (setq ang (- (cdr (assoc 51 ent)) (cdr (assoc 50 ent))))

   (if (< ang 0)

  (setq ang (+ pi pi ang))

   )

   ;;半径

   (setq r (cdr (assoc 40 ent)))

   ;;切线长

   (setq ttt (* (/ (sin (* 0.5 ang)) (cos (* 0.5 ang))) r))

   ;;长度

     (setq lll (* r ang))



    (setq pt1 pt10 pt2 pt9 pt3 pt8 pt4 pt7 pt5 pt6)

    (setq pt10 (polar pt1 (* pi 1.5) hh))

    (setq pt9 (polar pt2 (* pi 1.5) hh))

    (setq pt8 (polar pt3 (* pi 1.5) hh))

    (setq pt7 (polar pt4 (* pi 1.5) hh))

    (setq pt6 (polar pt5 (* pi 1.5) hh))

    (command "pline" pt5 pt6 pt10 pt1 "c")

    (command "line" pt2 pt9 "")

    (command "line" pt3 pt8 "")

    (command "line" pt4 pt7 "")

    (command "text" "m" (inters pt1 pt9 pt10 pt2) (/ hh 2) 0 (angtos ang 1 5))

    (command "text" "m" (inters pt2 pt8 pt9 pt3) (/ hh 2) 0 (rtos r 2 3))

    (command "text" "m" (inters pt3 pt7 pt8 pt4) (/ hh 2) 0 (rtos ttt 2 3))

    (command "text" "m" (inters pt4 pt6 pt7 pt5) (/ hh 2) 0 (rtos lll 2 3))



  (setq pt1 pt10 pt2 pt9 pt3 pt8 pt4 pt7 pt5 pt6)

    (setq pt10 (polar pt1 (* pi 1.5) hh))

    (setq pt9 (polar pt2 (* pi 1.5) hh))

    (setq pt8 (polar pt3 (* pi 1.5) hh))

    (setq pt7 (polar pt4 (* pi 1.5) hh))

    (setq pt6 (polar pt5 (* pi 1.5) hh))

    (command "pline" pt5 pt6 pt10 pt1 "c")

    (command "line" pt2 pt9 "")

    (command "line" pt3 pt8 "")

    (command "line" pt4 pt7 "")

    (command "text" "m" (inters pt1 pt9 pt10 pt2) (/ hh 2) 0 (angtos ang 1 5))

    (command "text" "m" (inters pt2 pt8 pt9 pt3) (/ hh 2) 0 (rtos r 2 3))

    (command "text" "m" (inters pt3 pt7 pt8 pt4) (/ hh 2) 0 (rtos ttt 2 3))

    (command "text" "m" (inters pt4 pt6 pt7 pt5) (/ hh 2) 0 (rtos lll 2 3))



        

   )))

(setvar "osmode" os)

   )
 楼主| 发表于 2014-1-13 21:07:55 | 显示全部楼层
cable2004 发表于 2014-1-13 19:34
(defun c:wyb ( / a ang b en ent hh i l lll os  pt1 pt10 pt2 pt3 pt4 pt5 pt6 pt7 pt8 pt9 r ss ttt w1  ...

大神!首先非常感谢您了!竟然帮我改了,但是这个程序结果与我想要的还是有点偏差,我希望最后所有曲线的属性都写在一张表里面,共4列,第一行是表头,写着偏角、r、t、l;后面各行依次写着所选取的曲线的属性参数。不知道这个能不能实现,求大神指教!再次非常感谢!
发表于 2014-1-14 09:02:28 | 显示全部楼层
  1. (defun c:wyb ( / ang en ent hh lll os pb p1 p2 p3 p4 p5 p6 p7 p8 p9 r ss ttt w1 w)
  2. (defun midp (pp1 pp2) (mapcar '(lambda (a b) (/ (+ a b) 2)) pp1 pp2))
  3. (princ "\n功能:依次选取多个圆弧对象,最后在CAD内创建一个表格,将每个圆弧的属性参数放入表中。")
  4. (setvar "cmdecho" 0)
  5. (setq os (getvar "osmode"))
  6. (setvar "osmode" 0)
  7. (setq ss (list))
  8. (while (setq s1 (entsel "\n请选择圆弧对象: "))
  9.   (setq ss (cons (car s1) ss))
  10. )
  11. (setq pb (getpoint "\n表格起点: "))
  12. (setq w1 30.0 w 17.0 hh 7.0)
  13. (setq p1 (polar pb 0 w1))
  14. (setq p2 (polar p1 0 w))
  15. (setq p3 (polar p2 0 w))   
  16. (setq p4 (polar p3 0 w))   
  17. (setq p9 (polar pb (* pi 1.5) hh))
  18. (setq p5 (polar p1 (* pi 1.5) hh))
  19. (setq p6 (polar p2 (* pi 1.5) hh))
  20. (setq p7 (polar p3 (* pi 1.5) hh))
  21. (setq p8 (polar p4 (* pi 1.5) hh))
  22. ;画表头
  23. (command "pline" pb p4 p8 p9 "c")
  24. (command "line" p1 p5 "" "line" p2 p6 "" "line" p3 p7 "")
  25. (command "text" "m" (midp pb p5) (/ hh 2) 0 "偏角")
  26. (command "text" "m" (midp p1 p6) (/ hh 2) 0 "R(米)")
  27. (command "text" "m" (midp p2 p7) (/ hh 2) 0 "T(米)")
  28. (command "text" "m" (midp p3 p8) (/ hh 2) 0 "L(米)")
  29. (setq ss (reverse ss))
  30. (foreach en ss
  31.   (if (and (setq ent (entget en)) ;获取图元的定义数据
  32.        (member '(0 . "ARC") ent) ;;判断选取的实体是不是圆弧
  33.       ) (progn
  34.    ;;==================
  35.    ;;获取圆弧属性参数: 转角、半径、切线长、弧长等
  36.   (setq r (cdr(assoc 40 ent)) ;;半径
  37.            st (cdr(assoc 50 ent))
  38.            ed (cdr(assoc 51 ent)))
  39.   (setq ang (- ed st))
  40.   (if (< ang 0) (setq ang (+ pi pi ang)))
  41.   (setq ttt (* (/ (sin (* 0.5 ang)) (cos (* 0.5 ang))) r)) ;;切线长
  42.   (setq lll (* r ang)) ;;长度
  43.   (setq pb p9 p1 p5 p2 p6 p3 p7 p4 p8)
  44.   (setq p9 (polar pb (* pi 1.5) hh))
  45.   (setq p5 (polar p1 (* pi 1.5) hh))
  46.   (setq p6 (polar p2 (* pi 1.5) hh))
  47.   (setq p7 (polar p3 (* pi 1.5) hh))
  48.   (setq p8 (polar p4 (* pi 1.5) hh))
  49.   (command "pline" pb p4 p8 p9 "c")
  50.   (command "line" p1 p5 "" "line" p2 p6 "" "line" p3 p7 "")
  51.   (command "text" "m" (midp pb p5) (/ hh 2) 0 (angtos ang 1 5))
  52.   (command "text" "m" (midp p1 p6) (/ hh 2) 0 (rtos r 2 3))
  53.   (command "text" "m" (midp p2 p7) (/ hh 2) 0 (rtos ttt 2 3))
  54.   (command "text" "m" (midp p3 p8) (/ hh 2) 0 (rtos lll 2 3))
  55. ))
  56. )
  57. (setvar "osmode" os)
  58. )
 楼主| 发表于 2014-1-14 11:08:54 | 显示全部楼层
ZZXXQQ 发表于 2014-1-14 09:02

不错!非常感谢!
发表于 2014-3-14 22:25:23 | 显示全部楼层
这个很有用,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 08:52 , Processed in 0.191123 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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