明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 714|回复: 10

[提问] 如何批量提取图纸中的文字

[复制链接]
发表于 2024-1-29 18:57 | 显示全部楼层 |阅读模式
下面1所示


每个图的右下角是想提取的一些文字,比如文件编码(图2)

但是文件编码是在块里面,后面的编码是文字,
最后要实现的效果大概就是文件夹选中,然后得到文件夹里面所有图纸的文件编码

希望大佬给个思路,不限语言

本帖子中包含更多资源

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

x
发表于 2024-1-29 23:24 | 显示全部楼层
本帖最后由 vitalgg 于 2024-1-30 09:54 编辑

  1. (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))))
  2. (setq txt-flag "文件编码")
  3. (setq length-times 6);;序号长度相对标志文字长度的倍数
  4. (defun get-serial-by-flag(flag ents-txt / box4pt box)
  5.   (if (and ents-txt
  6.      flag)
  7.       (progn
  8.   (setq box4pt (text:box flag))
  9.   (setq txt-serails
  10.         (list:sort
  11.          (vl-remove-if-not
  12.     '(lambda(x / box1)
  13.        (if (setq box1 (entity:getbox x 0))
  14.            (inters
  15.       (setq pt-s (point:mid (nth 1 box4pt)(nth 2 box4pt)))
  16.       (polar pt-s
  17.              (angle (nth 0 box4pt)(nth 1 box4pt))
  18.              (* length-times (distance (nth 0 box4pt)(nth 1 box4pt))))
  19.       (car box1)
  20.       (cadr box1))))
  21.     ents-txt
  22.     )
  23.          '(lambda(x y / *error*)
  24.       (if (and x y)
  25.           (< (distance (entity:getdxf x 10)(entity:getdxf flag 10))
  26.        (distance (entity:getdxf y 10)(entity:getdxf flag 10))))))
  27.         )
  28.   (car (string:auto-split
  29.         (string:from-list
  30.          (mapcar '(lambda(x)
  31.         (entity:getdxf x 1))
  32.            txt-serails)
  33.          ""))))))
  34. (defun get-serial-in-blk (blkname / flags ss-in-blk ss-in-blks)
  35.   (setq ss-in-blk (block:ent-list blkname))
  36.   (setq txt-in-blk (pickset:get-sub
  37.      ss-in-blk
  38.      '((0 . "text"))))
  39.   (mapcar 'get-serial-by-flag
  40.     (setq flags (pickset:get-sub ss-in-blk (list (cons 1 txt-flag))))
  41.     (mapcar '(lambda(x)
  42.          txt-in-blk)
  43.       flags))
  44.   )
  45. (defun get-serial-in-space (/ ss-flags )
  46.   (setq ss-flags (pickset:to-list (ssget "x" (list (cons 1 txt-flag)))))
  47.   ;; 模型或布局空间
  48.   (mapcar 'get-serial-by-flag
  49.      ss-flags
  50.      (mapcar
  51.       '(lambda(x)
  52.          (pickset:to-list (ssget "x" (list '(0 . "text")
  53.              (cons 410 (entity:getdxf
  54.                   x
  55.                   410))))))
  56.       ss-flags
  57.       )))
  58. (defun get-serial (/  ss-flags)
  59.   "选择标志文字后面的英文字符"
  60.   (setq res-in-space (get-serial-in-space))
  61.   ;; 块内
  62.   (setq res-in-blk
  63.   (mapcar 'get-serial-in-blk (block:list)))
  64.   (append res-in-space (apply 'append res-in-blk))
  65.   )




本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-29 19:12 | 显示全部楼层
坐标啊,某个位置的坐标,然后获取文字
 楼主| 发表于 2024-1-29 19:37 | 显示全部楼层
烟盒迷唇 发表于 2024-1-29 19:12
坐标啊,某个位置的坐标,然后获取文字

坐标好像也不太好得到
发表于 2024-1-29 21:41 | 显示全部楼层
本帖最后由 弥勒 于 2024-1-29 21:43 编辑

;创建图层
(defun LL(str)
              (command "layer" "m" str "")
)

;取组码中的文字
(defun V#  (n e / pt_)
(if (not (listp e)) (setq e (entget e)))
(setq pt_ (cdr (assoc n e)))
(if (and (> n 9) (< n 34) (/= pt_ nil) ) (trans pt_ 0 1) (setq pt_ pt_) )
)



发表于 2024-1-29 22:34 | 显示全部楼层
本帖最后由 guosheyang 于 2024-1-29 22:35 编辑

表 是 table 还是 线画表   所有图的表 是否是一样大小的?
发表于 2024-1-30 09:46 | 显示全部楼层
标题栏一般是属性块,只要知道块名,沿块搜索,就可以找到需要的属性。
 楼主| 发表于 2024-1-30 10:34 | 显示全部楼层
guosheyang 发表于 2024-1-29 22:34
表 是 table 还是 线画表   所有图的表 是否是一样大小的?

表和最外层的图框一起是个块,但是需要的文字不是块属性里的,大小不一样
 楼主| 发表于 2024-1-30 10:35 | 显示全部楼层

大佬太强哩,还没看懂,待我试试行不行
发表于 2024-1-30 11:45 | 显示全部楼层

只支持单行文本。如果是其它的如多行文本,属性,天正文本等,需的修改选择过程。


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-3 06:27 , Processed in 7.026862 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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