明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: fan_zh

[讨论] 如何按按指定距离条件在线上批量布置图块

[复制链接]
发表于 2013-7-22 19:28:11 | 显示全部楼层
  1. ;;;可处理线段、弧、多段线、样条曲线
  2. ;;;将blockname替换为图块名


  3. (vl-load-com)
  4. (defun C:aaa ()
  5.   (setq cmdbak (getvar "cmdecho"))
  6.   (setvar "cmdecho" 0)
  7.   
  8.   (initget 7)
  9.   (setq len1 (getreal "\n输入端距: ")
  10.         )
  11.   (initget 7)
  12.   (setq len2 (getreal "\n输入最大间距:"))
  13.   
  14.   (setq ss nil)
  15.   (while (not ss)
  16.     (princ "\n选择曲线(线段/圆弧/多段线/样条曲线):")
  17.     (setq ss (ssget '((-4 . "<OR")
  18.                       (0 . "LINE")
  19.                       (0 . "ARC")
  20.                       (0 . "LWPOLYLINE")
  21.                       (0 . "POLYLINE")
  22.                       (0 . "SPLINE")
  23.                       (-4 . "OR>")
  24.                      )
  25.              )
  26.     )
  27.   )

  28.   (setq i 0)
  29.   (repeat (sslength ss)
  30.     (setq ent (ssname ss i))
  31.     (setq obj (vlax-ename->vla-object ent))
  32.     (setq obj_len (vlax-curve-getDistAtPoint
  33.                     obj
  34.                     (vlax-curve-getEndPoint obj)
  35.                   )
  36.     )
  37.     (if        (> (setq eff_len (- obj_len (* 2 len1))))
  38.       (progn
  39. ;;;        (setq eff_len (/ (fix (* eff_len 10000)) 10000))       ;如有误差,可使用此处消除误差
  40.         (setq n (1+ (fix (/ eff_len len2))))
  41.         (setq len len1)
  42.         (setq dlt (/ eff_len n))
  43.         (repeat        (1+ n)
  44.           (setq pnt (vlax-curve-getPointAtDist obj len))
  45.           (entmake (list '(0 . "insert")
  46.                          (cons 10 pnt)
  47.                          (cons 2 "blockname")
  48.                    )
  49.           )
  50.           (setq len (+ len dlt))
  51.         )
  52.       )
  53.     )
  54.     (setq i (1+ i))
  55.   )
  56.   (setvar "cmdecho" cmdbak)
  57.   (princ)
  58. )
发表于 2013-7-22 21:20:09 | 显示全部楼层
能不能改一下使块自动随曲线方向旋转???
发表于 2013-7-22 23:26:28 | 显示全部楼层
本帖最后由 victo_ept 于 2013-7-22 23:33 编辑
bai2000 发表于 2013-7-22 21:20
能不能改一下使块自动随曲线方向旋转???



程序还有点缺陷,块旋转角度只处理为-90~90,对于其他角度,需要进一步选择及判断

  1. ;;;可处理线段、弧、多段线、样条曲线
  2. ;;;将blockname替换为图块名


  3. (vl-load-com)
  4. (defun C:aaa ()
  5.   (setq cmdbak (getvar "cmdecho"))
  6.   (setvar "cmdecho" 0)

  7.   (initget 7)
  8.   (setq        len1 (getreal "\n输入端距: ")
  9.   )
  10.   (initget 7)
  11.   (setq len2 (getreal "\n输入最大间距:"))

  12.   (setq ss nil)
  13.   (while (not ss)
  14.     (princ "\n选择曲线(线段/圆弧/多段线/样条曲线):")
  15.     (setq ss (ssget '((-4 . "<OR")
  16.                       (0 . "LINE")
  17.                       (0 . "ARC")
  18.                       (0 . "LWPOLYLINE")
  19.                       (0 . "POLYLINE")
  20.                       (0 . "SPLINE")
  21.                       (-4 . "OR>")
  22.                      )
  23.              )
  24.     )
  25.   )

  26.   (setq i 0)
  27.   (repeat (sslength ss)
  28.     (setq ent (ssname ss i))
  29.     (setq obj (vlax-ename->vla-object ent))
  30.     (setq obj_len (vlax-curve-getDistAtPoint
  31.                     obj
  32.                     (vlax-curve-getEndPoint obj)
  33.                   )
  34.     )
  35.     (if        (> (setq eff_len (- obj_len (* 2 len1))))
  36.       (progn
  37. ;;;        (setq eff_len (/ (fix (* eff_len 10000)) 10000))       ;如有误差,可使用此处消除误差
  38.         (setq n (1+ (fix (/ eff_len len2))))
  39.         (setq len len1)
  40.         (setq dlt (/ eff_len n))
  41.         (repeat        (1+ n)
  42.           (setq pnt (vlax-curve-getPointAtDist obj len))
  43.           (setq para (vlax-curve-getParamAtDist obj len))
  44.           (setq deriv (vlax-curve-getFirstDeriv obj para))
  45.           (if (zerop (car deriv))
  46.             (setq ang (/ pi 2))
  47.             (setq ang (atan (/ (cadr deriv) (car deriv))))
  48.           )
  49.           (entmake (list '(0 . "insert")
  50.                          (cons 10 pnt)
  51.                          (cons 2 "blockname")
  52.                          (cons 50 ang)
  53.                    )
  54.           )
  55.           (setq len (+ len dlt))
  56.         )
  57.       )
  58.     )
  59.     (setq i (1+ i))
  60.   )
  61.   (setvar "cmdecho" cmdbak)
  62.   (princ)
  63. )


评分

参与人数 1明经币 +1 金钱 +20 收起 理由
fan_zh + 1 + 20

查看全部评分

 楼主| 发表于 2013-7-23 08:59:19 | 显示全部楼层
终于出现大侠了,马上试用
发表于 2013-7-23 12:50:28 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-7-23 12:52 编辑

我的这个,你可以参考一下,原来我也只是块
http://bbs.mjtd.com/thread-101674-1-1.html

我写的me
http://bbs.mjtd.com/thread-101300-1-1.html
 楼主| 发表于 2013-7-23 14:49:29 | 显示全部楼层
自贡黄明儒 发表于 2013-7-23 12:50
我的这个,你可以参考一下,原来我也只是块
http://bbs.mjtd.com/thread-101674-1-1.html

感谢,超级me无法加载,提示例表有缺陷,能检查一下吗?


点评

有隐藏部分  发表于 2013-7-23 14:57
仅供参考,你要将MC:ENTSEL1用entsel代替  发表于 2013-7-23 14:52
 楼主| 发表于 2013-7-23 15:00:13 | 显示全部楼层
fan_zh 发表于 2013-7-23 14:49
感谢,超级me无法加载,提示例表有缺陷,能检查一下吗?

改后还是不行啊
能找下原因吗,

见附件

本帖子中包含更多资源

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

x
发表于 2013-7-23 20:29:03 | 显示全部楼层
能不能改下:满足求:http://bbs.mjtd.com/thread-101459-1-1.html   的要求?
 楼主| 发表于 2013-7-24 12:43:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-28 01:34 , Processed in 0.168078 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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