明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2187|回复: 7

[求助] 请帮忙写一个lisp获得pline线的分段长度

[复制链接]
发表于 2010-11-9 10:29 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-11-9 16:35:58 编辑

请帮忙写一个lisp获得pline线的分段长度,并把每个得到的数据,按顺序变成变量,第一段的长度为a,二段b,等等,最终的目的是想做一个等高矩形的命令,不需要对话框。每个矩形之间有一定的距离

本帖子中包含更多资源

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

x
发表于 2010-11-9 16:45 | 显示全部楼层
没有对话框的!
  1. (defun c:tt()
  2.   (setq osmode (getvar "osmode")
  3. cla (getvar "clayer"))
  4.   (setvar "osmode" 0)
  5.   (setq Height (getreal "\n输入高度:")
  6. jj (getreal "\n输入间距:"))
  7.   (princ "\n选择多段线")
  8.   (setq en (entsel))
  9.   (setq p0 (cadr en)
  10. en (car en)
  11. )
  12.   (setq la (cdr (assoc 8 (entget en))))
  13.   (setvar "clayer" la)
  14.   (setq pt (getpoint p0 "\n标注位置:"))
  15.   (setq endPara (vlax-curve-getEndParam en)
  16. n 0)
  17.   (repeat (fix endPara)
  18.     (setq d (distance (vlax-curve-getPointAtParam en n) (vlax-curve-getPointAtParam en (setq n (1+ n)))))
  19.     (command "_.rectang" pt (strcat "@" (rtos d 2) "," (rtos Height 2)))
  20.     (setq pt (polar pt 0 (+ d jj)))
  21.     )
  22.   (setvar "osmode" osmode)
  23.   (setvar "clayer" cla)
  24.   (princ)
  25.   )
发表于 2010-11-9 19:50 | 显示全部楼层
本帖最后由 作者 于 2010-11-10 8:38:44 编辑

有对话框的!
  1. (defun c:tt(/ jj height)
  2.   (defun gxl-chkreal (a *key*)
  3.         (setq a (read a))
  4.         (if (or (= 'INT (type a)) (= 'REAL (type a)))
  5.             (progn
  6.                (setq chk_flag t)
  7.                (setq a a)
  8.                );progn
  9.             (progn
  10.                (alert "\请输入实型数!")
  11.                (mode_tile *key* 2)
  12.                (setq chk_flag nil)
  13.                );progn
  14.            );if
  15.        )
  16. (setq fn (vl-filename-mktemp "aa.dcl"))
  17. (setq f (open fn "w"))
  18. (write-line "getdata:dialog{" f)
  19. (write-line   "label = " 【等高矩形】";" f)
  20. (write-line ":boxed_column {" f)
  21. (write-line "label = "";" f)
  22. (write-line ": edit_box {" f)
  23. (write-line "key = "height";" f)
  24.   (write-line "value = 500.00;" f)
  25. (write-line "label = "高度";" f)
  26. (write-line       "width = 20;" f)
  27. (write-line            "}" f)
  28. (write-line ": edit_box {" f)
  29. (write-line "key = "jj";" f)
  30.   (write-line "value = 30.00;" f)
  31. (write-line "label = "间隔";" f)
  32. (write-line       "width = 20;" f)
  33. (write-line           " }" f)
  34. (write-line "}" f)
  35. (write-line     "ok_cancel;" f)
  36. (write-line "}" f)
  37. (close f)
  38.     (setq dlg_code (load_dialog fn))
  39.     (new_dialog "getdata" dlg_code)
  40.   (setq height 500.0 jj 30.0)
  41.   (Action_tile "height" "(setq height (gxl-chkreal $value $key))")
  42.       (Action_tile "jj" "(setq jj (gxl-chkreal $value $key))")
  43.   (mode_tile "height" 2)
  44.     (setq ecode (start_dialog))
  45.      (if (= 1 ecode)
  46.        (progn
  47.   (setq osmode (getvar "osmode")
  48. cla (getvar "clayer"))
  49.   (setvar "osmode" 0)
  50.   (princ "\n选择多段线")
  51.   (while (not (and (setq en (entsel)) (= "LWPOLYLINE" (cdr (assoc 0 (entget (car en)))))))
  52.     (princ "\n你选择的不是多段线,请重新选择多段线")
  53.     )
  54.   (setq p0 (cadr en)
  55. en (car en)
  56. )
  57. (setq la (cdr (assoc 8 (entget en))))
  58.   (setvar "clayer" la)
  59.   (setq pt (getpoint p0 "\n标注位置:"))
  60.   (setq endPara (vlax-curve-getEndParam en)
  61. n 0)
  62.   (repeat (fix endPara)
  63.     (setq d (distance (vlax-curve-getPointAtParam en n) (vlax-curve-getPointAtParam en (setq n (1+ n)))))
  64.     (if (> d 0)
  65.       (progn
  66.     (command "_.rectang" pt (strcat "@" (rtos d 2) "," (rtos Height 2)))
  67.     (setq pt (polar pt 0 (+ d jj)))
  68.     )
  69.       )
  70.     )
  71.   (setvar "osmode" osmode)
  72.   (setvar "clayer" cla)
  73.   (princ)
  74.   )
  75.        )
  76.     (vl-file-delete  fn)
  77. (princ)
  78. )
 楼主| 发表于 2010-11-10 11:55 | 显示全部楼层

谢谢,万分感谢,

发表于 2011-6-7 13:21 | 显示全部楼层
非常好的程序!谢谢版主!
发表于 2011-6-9 15:44 | 显示全部楼层
谢谢楼主的启发,我有想法了
发表于 2011-6-9 20:09 | 显示全部楼层
很受启发 学习了!!!!
发表于 2023-6-27 17:58 | 显示全部楼层

这个无法运行,很奇怪啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 11:41 , Processed in 0.293548 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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