明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 478|回复: 15

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

  [复制链接]
发表于 2024-10-22 14:43:45 | 显示全部楼层 |阅读模式

工作需要用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
发表于 2024-10-22 14:55:07 | 显示全部楼层
(setq textObjArr (append textObjArr (list textObj)))改为 (setq textObjArr (append (list textObj)  textObjArr))试试

评分

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

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2024-10-24 13:21:50 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun dxf(code e)(cdr(assoc code(entget e))))
  3.   (defun SubUpd(e c v)(entmod(subst(cons c v)(assoc c(entget e))(entget e)))(entupd e))
  4.   (defun ss2list(ss)(mapcar'cadr(vl-remove-if-not'(lambda(x)(equal(type(cadr x))'ENAME))(ssnamex ss))))
  5.   (prompt "\n选择文本: ")
  6.   (if (setq ss (ssget '((0 . "TEXT"))))
  7.     (progn
  8.       (setq lst  (ss2list ss)
  9.             lst (vl-sort lst '(lambda (x y) (> (cadr (DXF 10 x)) (cadr (DXF 10 y)))))
  10.             txt (strcat (getenv "TEMP") "\\cad_text.txt")
  11.             fn  (open txt "w")
  12.       )
  13.       (foreach a lst
  14.         (write-line (cdr (assoc 1 (entget a))) fn)
  15.       )
  16.       (close fn)
  17.       (startapp "notepad.exe" txt)
  18.       (prompt "\n修改...\n")
  19.       (getstring)
  20.       (setq fn (open txt "r"))
  21.       (foreach a lst
  22.         (if (setq tx (read-line fn))
  23.           (SubUpd a 1 tx)
  24.         )
  25.       )
  26.       (close fn)
  27.     )
  28.   )
  29.   (princ)
  30. )

评分

参与人数 1明经币 +1 收起 理由
panliang9 + 1 院长出手,就是最终话了!

查看全部评分

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

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

点评

文本和数字都是文本呀,我测试用的也是数字,改了能自动更新呢。是怎么乱的,颠倒了还是没有规律。  发表于 2024-10-22 15:25
 楼主| 发表于 2024-10-22 15:13:44 | 显示全部楼层
13605 发表于 2024-10-22 14:55
(setq textObjArr (append textObjArr (list textObj)))改为 (setq textObjArr (append (list textObj)  t ...

太厉害了,一下子就搞定了,非常感谢
发表于 2024-10-22 15:30:31 | 显示全部楼层
太厉害了,一下子就搞定了
 楼主| 发表于 2024-10-22 15:30:53 | 显示全部楼层
这个是CAD附件

本帖子中包含更多资源

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

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

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

点评

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

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

点评

我给你发不了消息 加个QQ好友嘛,我慢慢跟着你的想法试一下修改,294790511  发表于 2024-10-22 15:57
发表于 2024-10-23 17:41:56 | 显示全部楼层
这个程序有想法,不错!
 楼主| 发表于 2024-10-24 08:42:36 | 显示全部楼层
本帖最后由 wyy81061 于 2024-10-24 08:44 编辑
panliang9 发表于 2024-10-23 17:41
这个程序有想法,不错!

谢谢,楼上的兄弟已经帮我搞定了,其实主要是觉得CAD里编辑太慢了,在别处编辑好直接复制过来更方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:01 , Processed in 0.204099 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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