保存“文本”及其坐标
你好我想保存“文本”及其坐标到txt文件。
我有一些剧本:
(defun c:TextToFIle( / *error* allText lenTxt idx fName txtFile dName
thisTxtObj thisText)
(vl-load-com)
(defun *error*(msg)
(if msg
(if txtFile
(progn
(close txtfile)
(setq txtFile nil)
(gc)
)
)
)
)
(setq allText(ssget"x"(list(cons 0 "Text"))))
(if allText
(progn
(princ(strcat(itoa(setq lenTxt(sslength allText)))" text objects to
export"))
(setq idx -1)
(setq fName(strcat(getvar"DwgPrefix")(setq
dName(vl-filename-base(getvar"Dwgname")))"-Text.txt"))
(setq txtFile(open fName "w"))
(repeat lenTxt
(setq thisTxtObj
(vlax-ename->vla-object(ssname allText (setq idx(1+ idx))))
thisText (vla-get-textstring thisTxtObj))
(write-line thisText txtFile)
);repeat
(close txtFile)
(setq txtFile nil)
(gc)
(princ"\nDone writing to file")
);progn
);if text
(princ)
)
它将所有“文本”保存到txt文件中。我也想保存它们的坐标。
类似这样:
十、 Y,文本
21233.13123、28402.37293、文本1
21224.2532528443.21432,文本2
等
对我的英语表示问候和抱歉 也许是这样的。。。
(setq thisTxtObj (vlax-ename->vla-object(ssname allText (setq idx(1+ idx))))
ipt (vlax-get thisTxtObj 'InsertionPoint)
xdata (rtos (car ipt))
ydata (rtos (cadr ipt))
thisText (vla-get-textstring thisTxtObj))
(write-line (strcat xdata ", " ydata ", " thisText) txtFile))
HTH公司
亨里克 欢迎来到CADTutor。
试试这个。。。
(defun c:Test (/ ss fl o)
;; Tharwat 21. Feb. 2014 ;;
(if (and (setq ss (ssget '((0 . "TEXT")(8 . "Dz 02,Dz 02 new"))))
(setq fl (strcat (getvar 'DWGPREFIX) (vl-filename-base (getvar 'DWGNAME)) ".txt"))
)
(progn
(setq o (open fl "w"))
(write-line (strcat "X," "\t" "Y," "\t" "Text") o)
((lambda (x / e p)
(while (setq e (ssname ss (setq x (1+ x))))
(setq p (cdr (assoc 10 (entget e))))
(write-line (strcat (rtos (car p) 2) "\t" (rtos (cadr p) 2) "\t" (cdr (assoc 1 (entget e)))) o)
))
-1)
(close o))
)
(if fl (startapp "Notepad" fl))
(princ)
)
这可能是一个基本的引擎。
文本对齐或旋转时会出现问题。ie是第10组或第11组所需的坐标:
(defun c:extxt (/ wf ss i en ed tx ip ap)
(setq wf (open (strcat (getvar "DWGPREFIX") "\\-TEXT.TXT") "w"))
(and (setq ss (ssget '((0 . "TEXT"))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en)
tx (cdr (assoc1 ed))
ip (cdr (assoc 10 ed))
ap (cdr (assoc 11 ed)))
(prin1 ip wf)
(princ " " wf)
(prin1 ap wf)
(princ " " wf)
(prin1 tx wf)
(write-line "" wf)
(setq i (1+ i))))
(close wf)
(prin1))
HTH-David
测试。图纸 非常感谢。我喜欢塔瓦特的剧本,但它有很大的问题。它没有选择功能。我必须有这个功能(最好有这个功能,包括使用隔离层)。
David Bethel,我希望我可以假设我不必使用“ap(cdr(assoc 11 ed))”。
不客气。
这不是什么大问题,选择集中只包括哪些层名称? “Dz 02”和“Dz 02 new” 我更新了上面的代码,试试看,然后告诉我 感谢上传脚本。我说得对吗,那个名字层不能有“#”符号?这样地:
(if (and (setq ss (ssget '((0 . "TEXT")(8 . "Layer #2")))) (8 . "*2")
页:
[1]