明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 113|回复: 10

[提问] 帮忙看看到底哪里有问题?

  [复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

工作需要用chatGPT弄了个小插件,主要是把CAD里的单行文本提取到文本编辑器里修改,修改完成之后替换回CAD里,其余功能都正常,就是在CAD里选择之后到文本编辑器里的顺序颠倒了,比如CAD里是
1
2
3
4
到了文本编辑器里就变成了
4
3
2
1
虽然修改完保存后之后顺序是对的,但是实在是不方便修改,麻烦各位大佬帮忙修正下

(defun c:WBBJ ()
  ;; 提示用户选择多个单行文本
  (prompt "\nPlease select one or more single-line text objects: ")
  (setq textObjList (ssget '((0 . "TEXT")))) ;; 选择所有单行文本
  
  ;; 检查是否选择了文本
  (if textObjList
    (progn
      ;; 将选择集中的对象存储为列表
      (setq textObjArr (list))
      (setq i 0)
      (while (< i (sslength textObjList))
        (setq textObj (ssname textObjList i))
        (setq textObjArr (append textObjArr (list textObj)))
        (setq i (1+ i))
      )
      
      ;; 创建临时文件存储所有选中文本内容
      (setq tmpFile (strcat (getenv "TEMP") "\\cad_text.txt"))
      (setq fileHandle (open tmpFile "w"))
      
      ;; 遍历选择集,将每个文本内容逐行写入临时文件
      (foreach textObj textObjArr
        (setq textContent (cdr (assoc 1 (entget textObj))))
        (write-line textContent fileHandle)
      )
      
      (close fileHandle)
      
      ;; 打开系统自带的文本编辑器编辑文本
      (startapp "notepad.exe" tmpFile)
      
      ;; 提示用户修改文本并保存
      (prompt "\nPlease modify the text in the editor, save and close it, then press any key to continue...\n")
      (getstring) ;; 等待用户按下任意键
      
      ;; 重新打开临时文件读取修改后的文本
      (setq fileHandle (open tmpFile "r"))
      
      ;; 遍历选择集,逐行替换文本内容
      (foreach textObj textObjArr
        (setq newTextContent (read-line fileHandle))
        ;; 确保读取到了有效的文本内容
        (if newTextContent
          (progn
            ;; 替换CAD中的原文本
            (entmod (subst (cons 1 newTextContent) (assoc 1 (entget textObj)) (entget textObj)))
            (entupd textObj) ;; 更新对象
          )
          (prompt "\nError: Failed to read new text content.\n")
        )
      )
      
      (close fileHandle)
      (prompt "\nText replacement completed.\n")
    )
    (prompt "\nNo text objects selected.\n") ;; 如果没有选择文本,提示信息
  )
  (princ)
)



本帖子中包含更多资源

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

x
发表于 3 小时前 | 显示全部楼层
(setq textObjArr (append textObjArr (list textObj)))改为 (setq textObjArr (append (list textObj)  textObjArr))试试

评分

参与人数 1金钱 +10 收起 理由
wyy81061 + 10 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 3 小时前 | 显示全部楼层
13605 发表于 2024-10-22 14:55
(setq textObjArr (append textObjArr (list textObj)))改为 (setq textObjArr (append (list textObj)  t ...

太厉害了,一下子就搞定了,非常感谢
 楼主| 发表于 3 小时前 | 显示全部楼层
13605 发表于 2024-10-22 14:55
(setq textObjArr (append textObjArr (list textObj)))改为 (setq textObjArr (append (list textObj)  t ...

我又试了下,还是不太对,文本之类的可以,但是比如我有6行数字,这样改了之后在文本编辑器里顺序直接乱了

点评

文本和数字都是文本呀,我测试用的也是数字,改了能自动更新呢。是怎么乱的,颠倒了还是没有规律。  发表于 3 小时前
发表于 3 小时前 | 显示全部楼层
太厉害了,一下子就搞定了
 楼主| 发表于 3 小时前 | 显示全部楼层
这个是CAD附件

本帖子中包含更多资源

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

x
 楼主| 发表于 3 小时前 | 显示全部楼层
wyy81061 发表于 2024-10-22 15:21
我又试了下,还是不太对,文本之类的可以,但是比如我有6行数字,这样改了之后在文本编辑器里顺序直接乱 ...

我又发了个CAD附件,麻烦辛苦测试下

点评

你这个与图上顺序不一样是因为你文本生成的时间不是从上到下,所以你觉得乱了,还有我刚测试汉字好像要乱码。我猜应该是临时文件cad_text.txt的编码问题。  发表于 2 小时前
 楼主| 发表于 2 小时前 | 显示全部楼层
13605 发表于 2024-10-22 14:55
(setq textObjArr (append textObjArr (list textObj)))改为 (setq textObjArr (append (list textObj)  t ...

如果有时间的话,能不能麻烦帮我修改一下代码

点评

我给你发不了消息 加个QQ好友嘛,我慢慢跟着你的想法试一下修改,294790511  发表于 2 小时前
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-22 18:32 , Processed in 0.163679 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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