You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk ACAD 2027图纸空间视口文本提取:含几何化文本

提取AutoCAD图纸空间视口内普通及几何化文本的Lisp方案

核心思路

针对需求,可通过Lisp脚本实现两步核心操作:

  • 精准筛选图纸空间指定视口内的所有对象
  • 分别处理普通文本(TEXT/MTEXT)与几何化文本(线条构成的字符):普通文本直接提取内容,几何化文本借助AutoCAD内置命令转换为可提取的文本对象后再获取内容

Lisp脚本示例

(defun c:ExtractViewportText (/ doc mspace pspace vp ent obj txtlst txtobj)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  ;; 切换到图纸空间
  (vla-put-ActiveSpace doc acPaperSpace)
  (princ "\n请选择目标视口: ")
  ;; 让用户选择视口对象
  (setq vp (car (entsel)))
  (if (and vp (eq (cdr (assoc 0 (entget vp))) "VIEWPORT"))
    (progn
      ;; 锁定视口防止操作偏移
      (vla-put-Locked (vlax-ename->vla-object vp) :vlax-true)
      ;; 进入视口模型空间
      (vla-put-ActiveSpace doc acModelSpace)
      (vla-ActiveViewport doc (vlax-ename->vla-object vp))
      ;; 选择视口内所有对象
      (setq ent (ssget "_X"))
      (if ent
        (progn
          (setq txtlst '())
          (repeat (sslength ent)
            (setq obj (vlax-ename->vla-object (ssname ent (setq i (1- i)))))
            (cond
              ;; 处理普通文本对象
              ((or (eq (vla-get-ObjectName obj) "AcDbText")
                   (eq (vla-get-ObjectName obj) "AcDbMText"))
               (setq txtlst (cons (vla-get-TextString obj) txtlst)))
              ;; 处理几何化文本(线条/多段线构成)
              ((or (eq (vla-get-ObjectName obj) "AcDbLine")
                   (eq (vla-get-ObjectName obj) "AcDbPolyline"))
               ;; 选中当前对象并调用RECOGNIZE命令转换为文本
               (sssetfirst nil (ssadd (vlax-vla-object->ename obj)))
               (command "_.RECOGNIZE")
               ;; 检查转换后的文本对象
               (setq txtobj (entlast))
               (if txtobj
                 (setq txtlst (cons (vla-get-TextString (vlax-ename->vla-object txtobj)) txtlst))))
            )
          )
          ;; 将提取的文本输出到文件
          (setq f (open "C:\\Viewport_Text_Output.txt" "w"))
          (foreach txt (reverse txtlst)
            (write-line txt f))
          (close f)
          (princ (strcat "\n已提取" (itoa (length txtlst)) "条文本,保存至C:\\Viewport_Text_Output.txt"))
        )
        (princ "\n视口内未检测到对象")
      )
      ;; 切回图纸空间并解锁视口
      (vla-put-ActiveSpace doc acPaperSpace)
      (vla-put-Locked (vlax-ename->vla-object vp) :vlax-false)
    )
    (princ "\n未选择有效的视口对象")
  )
  (princ)
)

使用说明

  1. 将上述代码保存为ExtractViewportText.lsp文件
  2. 在AutoCAD中输入APPLOAD命令,加载该Lisp文件
  3. 输入命令ExtractViewportText,按提示选择目标视口即可

注意事项

  1. 几何文本转换限制:RECOGNIZE命令对几何文本的识别依赖字符轮廓的规范性,若线条构成的字符变形严重,转换准确率会下降
  2. 文件路径修改:脚本中默认输出路径为C:\\Viewport_Text_Output.txt,可根据需求自行修改
  3. 视口锁定:脚本会临时锁定视口,操作完成后自动解锁,避免视口内对象偏移

补充方案

若RECOGNIZE命令无法满足几何文本的转换需求,可结合你已有的OCR方案,通过Lisp脚本将视口内的几何对象导出为高分辨率图片,再调用本地OCR工具提取文本:

  • 使用EXPORT命令将视口内对象导出为PNG/JPG格式(设置600DPI)
  • 通过Lisp的vl-shell-execute函数调用Python OCR脚本处理图片

内容的提问来源于stack exchange,提问作者ctgarvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:10:47