明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8204|回复: 30

求一个批量建块的程序!

  [复制链接]
发表于 2014-8-5 15:37 | 显示全部楼层 |阅读模式
1明经币

选取上面的图元,自动生成下面的一个个独立的块,块名随机就可以了!




哪位大师有空帮看下!谢谢!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

论坛上有,我不记得在那页了,你自己找下
发表于 2014-8-5 15:37 | 显示全部楼层
论坛上有,我不记得在那页了,你自己找下
  1. (defun c:gk (/ ss lst-ename lst-b x y ss-c)
  2.   (vl-load-com)
  3.   (setvar "CMDECHO" 0)
  4. ;;;选择多线段对象
  5.   (setq ss (ssget '((0 . "LWPOLYLINE"))))
  6. ;;; 定义将选择集转化为对象图元名列表
  7.   (defun ss-enamelst (ss)
  8.     (vl-remove-if-not
  9.       '(lambda (x) (equal (type x) 'ename))
  10.       (mapcar 'cadr (ssnamex SS))
  11.     )
  12.   )
  13. ;;;end defun

  14. ;;; 将多线段选择集转化为图元名列表
  15.   (setq lst-ename (ss-enamelst ss))
  16. ;;; 通过 ssget "WP" 将多线段和多线段内部的对象(可以再加上过滤,过滤掉非园)组成一个表
  17.   (setq
  18.     lst-b
  19.      (mapcar '(lambda (x)
  20.     (progn
  21. ;;; 多线段端点列表内部窗选
  22.       (setq  ss-c (ssget "WP"
  23.             (apply
  24.               'append
  25.               (mapcar '(lambda (y)
  26.              (if (eq (car y) 10)
  27.                (list (cdr y))
  28.              )
  29.                  )
  30.                 (entget x)
  31.               )
  32.             )
  33.            )
  34.       )
  35. ;;;判断选择集是否存在。也可以加入其它的判断
  36.       (if (null ss-c)
  37.         (list x)
  38.         (append (list x) (ss-enamelst ss-c))
  39.       )
  40.     )      ;end progn
  41.         )        ;end lambda
  42.        lst-ename
  43.      )
  44.   )
  45. ;;;生成无名块并删除原有对象
  46.   (mapcar '(lambda (x)
  47.        (progn
  48.          (entmakenonameblock x (cdr (assoc 10 (entget (car x)))))
  49.          (mapcar '(lambda  (y)
  50.         (vl-cmdf "erase" y "")
  51.       )
  52.            x
  53.          )
  54.        )
  55.      )
  56.     lst-b
  57.   )


  58.   (prin1)
  59. )
  60. ;;;; 图元列表生成无名快
  61. (defun entmakenonameblock (lst pt / i name)
  62.   (entmake
  63.     (list '(0 . "block") '(2 . "*U") '(70 . 1) (cons 10 pt))
  64.   )
  65.   (mapcar '(lambda (x) (entmake (cdr (entget x)))) lst)
  66.   (setq name (entmake '((0 . "ENDBLK"))))
  67.   (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
  68.   name
  69. )

评分

参与人数 2明经币 +2 收起 理由
xiaolong1487 + 1 很给力!
maiko + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-9-12 18:23 | 显示全部楼层
asd19400 发表于 2014-9-4 13:33
论坛上有,我不记得在那页了,你自己找下

非常感谢!这个只对多段线有用,还要修改下!谢谢
回复

使用道具 举报

发表于 2014-9-27 16:09 | 显示全部楼层
xiaolong1487 发表于 2014-9-12 18:23
非常感谢!这个只对多段线有用,还要修改下!谢谢

自己先闭合撒,一步操作就搞定了
回复

使用道具 举报

 楼主| 发表于 2014-9-29 16:11 | 显示全部楼层
谢谢 !
解决问题了!
回复

使用道具 举报

发表于 2014-9-29 20:45 | 显示全部楼层
xiaolong1487 发表于 2014-9-29 16:11
谢谢 !
解决问题了!

怎么搞定的,分享下方法
回复

使用道具 举报

 楼主| 发表于 2014-9-30 09:32 | 显示全部楼层
asd19400 发表于 2014-9-29 20:45
怎么搞定的,分享下方法

就用的您的方法,谢谢!
回复

使用道具 举报

发表于 2014-10-30 17:46 | 显示全部楼层
(vl-load-com)
(defun Makeunnameblk (entss / boundingbox pois cenpoi)
  (defun boundingbox (ss / i ent obj pta ptb dwcorn upcorn ptlist x y)
    (setq i 0
          dwcorn nil
          upcorn nil
    )
    (repeat (sslength ss)
      (setq ent (ssname ss i))
      (setq obj (vlax-ename->vla-object ent))
      (vla-GetBoundingBox obj 'pta 'ptb)
      (setq dwcorn (cons (vlax-safearray->list pta) dwcorn))
      (setq upcorn (cons (vlax-safearray->list ptb) upcorn))
      (setq i (1+ i))
    )
    (setq ptlist (append dwcorn upcorn))
    (setq x (mapcar 'car ptlist))
    (setq y (mapcar 'cadr ptlist))
    (list (list (apply 'min x) (apply 'min y))
          (list (apply 'max x) (apply 'max y))
    )
  )
  (if entss
    (progn
      (setq pois (boundingbox entss))
      (command"cutclip" entss "")
      (command"pasteblock" (car pois))
    )
  )
  (command "change" (entlast) "" "P" "la" "0" ""
           "change" (entlast) "" "P" "c" "bylayer" "")
;;;;给块重命名
   (setq ent (entget (entlast)))
   (setq name (cdr (assoc 2 ent))) ;取得块名name
   (setq blkname (strcat "K_" (rtos (* (getvar "cdate") 1e8))));给块名设定时间
   (command "-rename" "b" name blkname)
   (princ (strcat "\n新图块 <" blkname "> 绘制完成. "))
)

(defun c:tt5(/ entss)
   (princ "快速建块(块基点为左下点)")
   (setq entss (ssget))
   (makeunnameblk entss)
  (princ)
)

回复

使用道具 举报

发表于 2014-10-30 17:51 | 显示全部楼层
(vl-load-com)
(defun c:bb1(/ co s1 ent)
  (setq co (getvar "QAFLAGS"))
  (setvar "QAFLAGS" 0)
  (princ "快速建块\n请选择对象:")
  (if (setq s1 (ssget))
    (progn
      (vl-cmdf "copybase" (setq pt(getpoint"\n指定块基点:")) s1 "" "pasteblock" pt)
      (command "_.ERASE" s1 "")
    )
    (princ "\n未选择任何对象 *退出*")
  )
  (setq ent (entget (entlast)))
  (setq blkname (cdr (assoc 2 ent)))
  (command "change" (entlast) "" "P" "la" "0" ""
           "change" (entlast) "" "P" "c" "bylayer" "")
  (princ (strcat "\n新图块 <" blkname "> 绘制完成. "))
  (setvar "QAFLAGS" co)
  (princ)
)

回复

使用道具 举报

发表于 2014-10-30 23:16 | 显示全部楼层
楼上的都是高手啊
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 19:24 , Processed in 0.275192 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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