fengyu6913 发表于 2024-5-27 09:25:10

求LISP程序:修改块 内文字,块 名自动修改为与文字同名

求LISP程序:修改块 内文字,块 名自动修改为与文字同名,如图中所述,谢谢大佬

xtjd 发表于 2024-5-27 09:25:11




vitalgg 发表于 2024-5-27 10:09:46

本帖最后由 vitalgg 于 2024-5-27 10:10 编辑


块内文字内容不同,不可能是同一个块的。所以直接改这个块的名字就可以了。
但是可能会有冲突。如块名已经存在。文字内有不可用的字符如 :/\ 等。

(progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
(defun rename-by-text ()
(prompt "请选择块参照")
(setq blkrefs (pickset:to-list (ssget '((0 . "INSERT")))))
(prompt (strcat "选中了" (itoa (length blkrefs)) "个块参照。"))
(foreach blkref blkrefs
    ;;取块内文字内容
    (setq ens-in-blk (block:ent-list (entity:getdxf blkref 2)))
    (while
      (and
      (setq en (car ens-in-blk))
      (not (eq (entity:getdxf en 0) "TEXT")))
      (setq ens-in-blk (cdr ens-in-blk)))
    (if
      (and
      (setq en (car ens-in-blk))
      (eq (entity:getdxf en 0) "TEXT"))
      (vla-put-name
      (block:get-obj-by-name (entity:getdxf blkref 2))
      (entity:getdxf en 1)))))



另:你这可以直接改成属性定义啊。

kozmosovia 发表于 2024-5-27 10:43:59

属性用字段就是了,将来直接改块名自动映射到属性。不需要一行代码
https://www.bilibili.com/video/B ... id_from=333.999.0.0

fengyu6913 发表于 2024-5-27 14:23:20

xtjd 发表于 2024-5-27 09:25


感谢大佬帮忙解决

白山茶 发表于 2024-6-3 07:23:02

xtjd 发表于 2024-5-27 09:25


大佬,用不了了,不知道为啥,提示错误。

阿猪蛋 发表于 2024-6-3 08:33:58

感谢大佬帮忙解决
页: [1]
查看完整版本: 求LISP程序:修改块 内文字,块 名自动修改为与文字同名