明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2400|回复: 10

[讨论] 【已解决】批量写块WBLOCK,感谢阿甘大侠出手

[复制链接]
发表于 2021-7-28 10:01:21 | 显示全部楼层 |阅读模式
本帖最后由 tigcat 于 2021-8-2 20:47 编辑

背景:目前建筑图较多平面,为了灵活调用,其他专业需要将每个平面写块出来,命名为建筑-平面-1F、建筑-平面-2F……,如此往复劳动,大费周章,能不能用程序实现这么一个功能:每个平面套个图框(多段线,比如图层是TITLE),然后平面里面放置一个定位基点块(可以是个十字形或者什么,块名bbase_pt),放置一个图名文字(特殊图层,例如block_name),然后批量选择图层名TITLE的多段线,以cp方式把这个多段线内的图元写到一个指定的目录,图块名为,建筑-平面-block_name,基点为bbase_pt的基点。
如果能实现就好。哪位大侠能帮忙实现下呢?相信很多工程人都有作用。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-7-30 00:14:45 | 显示全部楼层
本帖最后由 print1985 于 2021-7-30 00:17 编辑

;批量写块-导出平面图
(defun c:xk ( / en-ss i jd-block jd-en jd-pt jd-ss pm-ss pst tk-layer tk-ss tm-en tm-layer tm-ss tm-text)
  (setq tk-layer "PUB_TITLE") ;定义图框图层
  (setq tm-layer "PUB_TITLE_图名") ;定义图名图层
  (setq jd-block "平面基点图块") ;定义基点块名
  (setq i 0)
  (princ "\n选择图框")
  (if (setq tk-ss (ssget (list '(0 . "LWPOLYLINE") (cons 8 tk-layer) '(43 . 0))))  ;选择线宽为0图框
    (progn
      (repeat (sslength tk-ss)
        (setq en-ss   (ssname tk-ss i)
              pst     (get-pl-ptlst en-ss) ;图框PL线点表
              pm-ss   (ssget "cp" pst) ;选择平面
              tm-ss   (ssget "cp" pst (list '(0 . "TEXT,MTEXT") (cons 8 tm-layer))) ;选择图名
              tm-en   (ssname tm-ss 0) ;图名图元名
              tm-text (cdr (assoc 1 (entget tm-en))) ;图名文字
              jd-ss   (ssget "cp" pst (list '(0 . "INSERT") (cons 2 jd-block))) ;选择图块
              jd-en   (ssname jd-ss 0) ;图块图元名
              jd-pt   (cdr (assoc 10 (entget jd-en))) ;图块基点坐标
        )
        (vl-cmdf "WBLOCK" tm-text "" jd-pt pm-ss "");写块-导出平面
        (vl-cmdf "oops");恢复删除的内容
        (setq i (1+ i))
      )
    )
  )
  (princ)
)

;取得多义线顶点表 来自明经
(defun get-pl-ptlst (plent / ptlst)
  (setq ptlst (vl-remove-if '(lambda (x) (/= 10 (car x)))(entget plent)))
  (mapcar 'cdr ptlst)
)

简单弄了下,其它功能你自己加吧
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2021-7-28 10:07:00 | 显示全部楼层
对了,写出的块不要包含定位基点块和定位图名文字。
发表于 2021-7-29 16:23:23 | 显示全部楼层
这个其实是管理问题,如果其他所有专业都需要切分图纸,那就该让建筑专业改变习惯,分图绘制
 楼主| 发表于 2021-7-29 19:08:49 来自手机 | 显示全部楼层
大家都很忙,都是为了生活奔波,不好要求别人改变
发表于 2021-7-29 23:16:36 | 显示全部楼层
编程的流程你都说了,难度好像不大,只是细节有点多,你应该可以自己做出来的,给你加油
 楼主| 发表于 2021-7-29 23:25:55 | 显示全部楼层
print1985 发表于 2021-7-29 23:16
编程的流程你都说了,难度好像不大,只是细节有点多,你应该可以自己做出来的,给你加油

哈哈,阿甘大侠来了,对我有点难度,我是初级阶段的选手,对文件读写的操作不熟悉。
 楼主| 发表于 2021-7-29 23:38:52 | 显示全部楼层
感觉差不太多,用个wblock命令,再找下写文件函数就行了
 楼主| 发表于 2021-7-30 00:30:47 | 显示全部楼层
print1985 发表于 2021-7-30 00:14
;批量写块-导出平面图
(defun c:xk ( / en-ss i jd-block jd-en jd-pt jd-ss pm-ss pst tk-layer tk-ss tm ...

感谢阿甘大侠,深夜帮忙写代码,剩下的没问题了。
发表于 2022-1-4 20:59:03 | 显示全部楼层
你好可以发个你描述的图纸吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 14:35 , Processed in 0.195671 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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