smallpixel 发表于 2022-7-6 16:05:08

帮助完成此脚本

大家好,我是AutoLisp的新手
我的剧本很简单,我已经完成了99%的工作,
我的DWG文件中有很多文本,我想输出每个文本的XY坐标(向下查找脚本),然后获取文本的百分位并将其放入Z坐标(向下查找用于输出文本名称的脚本)
最后,我想将这些脚本结合起来,以这种格式输出某个文件中的所有数据,文本的X,Y,Centent(我们是Z分量)
 
///////用于导出文本名称的脚本////////
 
用于XY导出的脚本////////
 

(defun c:PO2TXT (/ file points c i) ;POints to TeXT
(setq file (open (getfiled "specify output file" "c:/" "TXT" 1) "w"))
(setq points (ssget) i 0)
(repeat (sslength points)
   (if (= "TEXT" (cdr (assoc 0 (entget (ssname points i)))))
   (setq c (cdr (assoc 10 (entget (ssname points i))))
    i (1+ i)
   )
   )
   (write-line
   (strcat (rtos (car c)) " , "
      (rtos (cadr c))
         ) file)
)
(close file)
(Princ)
)

Lee Mac 发表于 2022-7-6 16:11:56

这将写入内容:
 

(defun C:txtex (/ fl ss ssl index ent)
   (setq fl    (open "dtext.txt" "w")
   ss    (ssget "x" (list (cons 0 "TEXT,MTEXT")))
   ssl    (sslength ss)
   index    0
   ) ;_end setq
   (repeat ssl
   (setq ent (entget (ssname ss index)))
   (write-line (cdr (assoc 1 ent)) fl)
   (setq index (1+ index))
   ) ;_end repeat
   (close fl)
   (princ)
) ;_end defun

Lee Mac 发表于 2022-7-6 16:15:05

这将写入点:
 

(defun c:PO2TXT    (/ file points c i)
   (setq file (open (getfiled "Specify Output File" "c:/" "txt" 1) "w"))
   (setq points (ssget "X" (list (cons 0 "TEXT,MTEXT")))
   i   0
   ) ;_end setq
   (repeat (sslength points)
   (setq c    (cdr (assoc 10 (entget (ssname points i))))
         i    (1+ i)
   ) ;_end setq
   (write-line
       (strcat (rtos (car c))
         " , "
         (rtos (cadr c))
       ) ;_end strcat
       file
   ) ;_end write-line
   ) ;_end repeat
   (close file)
   (princ)
) ;_end defun

Lee Mac 发表于 2022-7-6 16:16:32

也许这能把他们联系起来?
 

(defun c:PO2TXT    (/ file points c vl i)
   (setq file (open (getfiled "Specify Output File" "c:/" "txt" 1) "w"))
   (setq points (ssget '((0 . "TEXT,MTEXT")))
   i   0
   ) ;_end setq
   (repeat (sslength points)
   (setq c   (cdr (assoc 10 (entget (ssname points i))))
         vl (cdr (assoc 1 (entget (ssname points i))))
         i   (1+ i)
   ) ;_end setq
   (write-line
       (strcat (rtos (car c))
         " , "
         (rtos (cadr c))
         "\t"
         vl
       ) ;_end strcat
       file
   ) ;_end write-line
   ) ;_end repeat
   (close file)
   (princ)
) ;_end defun

(所有三个都未经测试)

smallpixel 发表于 2022-7-6 16:22:22

我真的很感谢你的帮助,
我将深入研究代码并测试它们,

Lee Mac 发表于 2022-7-6 16:25:30

没问题smallpixel,很乐意帮忙。

Lee Mac 发表于 2022-7-6 16:31:02

LISPs已更新。-->他们没有包括多行文字-很抱歉
 
还有两种方法:
 
有一个LISP,用户可以在其中选择要打印到文件的文本:
 

(defun c:PO2TXT1    (/ file points c vl i)
   (setq file (open (getfiled "Specify Output File" "c:/" "txt" 1) "w"))
   (setq points (ssget '((0 . "TEXT,MTEXT")))
   i   0
   ) ;_end setq
   (repeat (sslength points)
   (setq c   (cdr (assoc 10 (entget (ssname points i))))
         vl (cdr (assoc 1 (entget (ssname points i))))
         i   (1+ i)
   ) ;_end setq
   (write-line
       (strcat (rtos (car c))
         " , "
         (rtos (cadr c))
         "\t"
         vl
       ) ;_end strcat
       file
   ) ;_end write-line
   ) ;_end repeat
   (close file)
   (princ)
) ;_end defun

Lee Mac 发表于 2022-7-6 16:32:06

或者使用LISP自动选择所有文本实体并打印它们:
 

(defun c:PO2TXT    (/ file points c vl i)
   (setq file (open (getfiled "Specify Output File" "c:/" "txt" 1) "w"))
   (setq points (ssget "X" (list (cons 0 "TEXT,MTEXT")))
   i   0
   ) ;_end setq
   (repeat (sslength points)
   (setq c   (cdr (assoc 10 (entget (ssname points i))))
         vl (cdr (assoc 1 (entget (ssname points i))))
         i   (1+ i)
   ) ;_end setq
   (write-line
       (strcat (rtos (car c))
         " , "
         (rtos (cadr c))
         "\t"
         vl
       ) ;_end strcat
       file
   ) ;_end write-line
   ) ;_end repeat
   (close file)
   (princ)
) ;_end defun

smallpixel 发表于 2022-7-6 16:36:25

你能告诉我你的电子邮件地址吗smallpixel@gmail.com
我想谢谢你。。。

Lee Mac 发表于 2022-7-6 16:42:30

恕我冒犯,你就不能在这里谢谢我吗?
页: [1] 2
查看完整版本: 帮助完成此脚本