明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2245|回复: 31

[源码] DS助力,AI按段落行合并文字

  [复制链接]
发表于 2025-2-19 18:51:36 | 显示全部楼层 |阅读模式
本帖最后由 null. 于 2025-2-21 13:58 编辑

用于天正T3文字中西文断裂的文字合并,不影响原有段落。
  1. (defun c:TT3 (/ ss TextEntlist TextHigh TextEntlistNew currentEnt currentCenter otherEnt otherCenter dist mergedText)
  2.     ; 步骤1: 用ssget选中TEXT文字集合,得到ss选择集
  3.     (setq ss (ssget '((0 . "TEXT"))))
  4.     (if ss
  5.         (progn
  6.             ; 步骤2: 构建实体列表并统计字高频率
  7.             (setq TextEntlist '() freqTable '() maxCount 0 TextHigh 0)
  8.             (repeat (setq i (sslength ss))
  9.                 (setq ent (ssname ss (setq i (1- i))))
  10.                 (setq entData (entget ent))
  11.                 ; 提取基点、字高、文字内容
  12.                 (setq pt (cdr (assoc 10 entData))
  13.                       hgt (cdr (assoc 40 entData))
  14.                       txt (cdr (assoc 1 entData)))
  15.                 ; 更新字高频率表
  16.                 (if (setq entry (assoc hgt freqTable))
  17.                     (setq freqTable (subst (cons hgt (1+ (cdr entry))) entry freqTable))
  18.                     (setq freqTable (cons (cons hgt 1) freqTable))
  19.                 )
  20.                 ; 构建排序列表
  21.                 (setq TextEntlist (cons (list ent pt txt hgt) TextEntlist))
  22.             )
  23.             ; 确定最高频字高
  24.             (foreach entry freqTable
  25.                 (if (> (cdr entry) maxCount)
  26.                     (setq maxCount (cdr entry) TextHigh (car entry))
  27.                 )
  28.             )
  29.             (setq TextHigh (* TextHigh 0.7)) ; 缩小0.7倍
  30.          
  31.             ; 循环处理TextEntlist
  32.             (while TextEntlist
  33.                 (setq TextEntlistNew '())
  34.                 (setq currentEnt (car TextEntlist))
  35.                 (setq currentCenter (cadr currentEnt))
  36.                 (setq TextEntlist (cdr TextEntlist))
  37.                 (setq TextEntlistNew (cons currentEnt TextEntlistNew))

  38.                 ; 步骤3: 比较中心点Y坐标距离
  39.                 (foreach otherEnt TextEntlist
  40.                     (setq otherCenter (cadr otherEnt))
  41.                     (setq dist (abs (- (cadr currentCenter) (cadr otherCenter))))
  42.                     (if (< dist TextHigh)
  43.                         (progn
  44.                             (setq TextEntlistNew (cons otherEnt TextEntlistNew))
  45.                             (setq TextEntlist (vl-remove otherEnt TextEntlist))
  46.                         )
  47.                     )
  48.                 )

  49.                 ; 步骤4: 将TextEntlistNew按文字基点从左到右的文字连接图元文字
  50.                 (setq TextEntlistNew (vl-sort TextEntlistNew '(lambda (a b) (< (car (cadr a)) (car (cadr b))))))
  51.                 (setq mergedText "" currentobj nil)
  52.                 (foreach ent TextEntlistNew
  53.                   (if (null currentobj)(setq currentobj (vla-Copy  (<span style="background-color: rgb(255, 255, 255);">vlax-ename->vla-object</span> (car ent)))))
  54.                     (setq mergedText (strcat mergedText (caddr ent)))
  55.                 )

  56.                 (foreach ent TextEntlistNew
  57.                     (entdel (car ent))
  58.                 )
  59.               (vla-put-TextString currentobj   mergedText )

  60.                 ; 合并后的文字
  61.               (vla-put-TextString currentobj   mergedText )
  62.                
  63.             )
  64.         )
  65.     )
  66.     (princ)
  67. )
附件的内容和这个码是一样的。




本帖子中包含更多资源

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

x

点评

没有具体内容,不符合付费标准,撤消付费  发表于 2025-2-20 09:27
回复

使用道具 举报

 楼主| 发表于 2025-2-20 09:12:02 | 显示全部楼层
本帖最后由 null. 于 2025-2-20 09:53 编辑

演示,一键按行转,这是天正的原始T3,断裂的文字,它的中文和西文的不是一个水平点,程序自动判断是本行,还是另外一行。

转前


转后









本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-2-21 12:57:55 | 显示全部楼层
本帖最后由 怕怕吓一跳 于 2025-2-21 13:01 编辑

错误: no function definition: *EN2OBJ*
修正:把这个函数改成vlax-ename->vla-object
回复 支持 反对

使用道具 举报

发表于 2025-2-26 08:43:53 | 显示全部楼层
我也做了一个断行合并,一次只能合并单行,一次性框选合并多行感觉很难,并且也很实用的功能,厉害

点评

但难的东西,是把逻辑给AI后,就自动转换完成程序上的逻辑,花费的时间也不会太多,所以感觉事情便为简单和容易了。  发表于 2025-2-26 10:18
回复 支持 反对

使用道具 举报

发表于 3 天前 | 显示全部楼层
如果是天正文字分解后,存在一些线段图元的,用给出的程序就无法在识别修复了,应该要修改下吧

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-2-21 15:19:50 | 显示全部楼层
如果有奖,另找到了一小小的bug,就是最后多了一个语句:
(vla-put-TextString currentobj   mergedText )

                ; 合并后的文字
              (vla-put-TextString currentobj   mergedText )

点评

好吧,给了,申明一下,错的这些和AI没关系。我改的,人总会出错  发表于 2025-2-21 17:15
回复 支持 1 反对 0

使用道具 举报

发表于 2025-2-20 08:34:22 | 显示全部楼层
连个图都没有就收钱?
回复 支持 反对

使用道具 举报

发表于 2025-2-20 08:37:49 | 显示全部楼层
用AI助力的程序将来肯定会越来越多!
回复 支持 反对

使用道具 举报

发表于 2025-2-20 10:10:28 | 显示全部楼层
ds满天飞啊
回复 支持 反对

使用道具 举报

发表于 2025-2-20 12:53:02 来自手机 | 显示全部楼层
这还挺方便的
回复 支持 反对

使用道具 举报

发表于 2025-2-20 15:49:08 | 显示全部楼层
来凑个热闹
回复 支持 反对

使用道具 举报

发表于 2025-2-21 09:53:07 | 显示全部楼层
学习下是什么原理
回复 支持 反对

使用道具 举报

发表于 2025-2-21 12:02:50 | 显示全部楼层
学习一下ai
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-1 10:39 , Processed in 0.195134 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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