节点和距离提取
大家好,请分享你的集体智慧。。。
在AutoCAD中,我有一系列由多段线连接的编号节点,这些线的长度(以米为单位)已插入。我需要将这些数据提取到txt文件或Excel中,格式为Node\u 1,Node\u 2,distance。
所以在屏幕抓图中,数据将是。。。
1,4,47
1,2,23
2,4,38
2,3,16
3,4,32
等
我有一个经过修改的例程,在v2007中(某种程度上)手动运行,但现在只在加载时给出了一个语法错误。
因为我有大约500个节点,所以单独选择它们几乎是可行的(如果真的很无聊!)
有谁能建议我如何在一次点击中做到这一点,或者指出所附lsp文件中的错误吗?
坦斯克
迈克
ps,不,这不是学生/家庭作业!!
nodes\u out。lsp 希望这个程序能满足您的需要。
(defun c:Test (/ dir fNme pts coords)
; THARWAT Oct. 31.2010
(defun *error* (msg)
(if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
(princ (strcat "\nError: " msg))
)
)
(vl-load-com)
(setq dir "D:\\My Folder")
(vl-mkdir dir)
(setq fNme (open "D:/My Folder/coordinates.txt" "w"))
(while
(setq pts (getpoint "\n Specify point :")
)
(setq coords
(write-line
(strcat (rtos (car pts) 2)
","
(rtos (cadr pts) 2)
","
(rtos (caddr pts) 2))
fNme)
)
)
(close fNme)
(princ)
)
塔瓦特 谢谢-这当然是一个开始,但并没有真正解决我的主要问题,即如何将多段线距离连接到它所经过的2个点-这就是我真正撕裂剩下的头发!
按照我的惯例(改编,我不记得从哪里来),我在每一行的末尾选取文本,然后是距离文本。这将3个值按正确顺序写入txt文件。遗憾的是,这在当前AutoCAD版本中不起作用。这也是一个真正的束缚,有大量的点,因为它真的很容易犯错误。
停止工作的代码是(向最初编写它的人道歉)。。。
(defun C:nod-out(/ FILE FUNC ENTITY ENTTYP TEXTMT)
(setq blank " ")
(if (= FNAME NIL)
(setq FNAME
(getfiled
"Select the text file for extract txt: "
"c:/"
"txt"
1))
(setq FUNC
(getstring
(strcat
"[data to be stored in "
FNAME
"]"
"/Change file/<press Enter or Right-click to proceed>:")))
)
(if (= FUNC "c")
(setq FUNC "C"))
(if (= FUNC "C")
(setq FNAME
(getfiled
"Select the text file for extract txt: "
"c:/"
"txt"
1)))
(while (/= FNAME NIL)
(setq ENTITY
(car
(entsel
"\nPress `Esc` to exit, or select NODE.")))
(if (/= ENTITY NIL)
(progn
(setq ENTTYP (cdr (assoc 0 (entget ENTITY))))
(if (wcmatch ENTTYP "*TEXT*")
(setq FILE (open FNAME "a"))
(progn
(setq TEXTMT (cdr (assoc 1 (entget ENTITY))))
(write-line TEXTMT FILE)
(prompt (strcat "\nLine- `" TEXTMT "` added to " FNAME))
)
(prompt "\nNOT A NODE POINT!")
)
)
(prompt "\nNo node selected")
(write-line blank file)
(close FILE)
)
)
)
迈克 这应该有助于事情的开始。。。
(defun c:Test (/ ss)
(if (setq ss (ssget '((0 . "LINE,*POLYLINE"))))
((lambda (i / pts lst)
(repeat i
(mapcar (function (lambda (a b) (setq lst (cons (list a b (distance a b)) lst))))
(setq pts (AT:GetVertices (ssname ss (setq i (1- i)))))
(cdr pts)
)
)
(mapcar 'print lst)
)
(sslength ss)
)
)
(princ)
)
(defun AT:GetVertices (e / p l)
;; Return point at each vertex of curve
;; e - curve to evaluate (Arc, Line, *Polyline, Spline)
;; Alan J. Thompson, 09.30.10
(if e
(if (eq (setq p (vlax-curve-getEndParam e)) (fix p))
(repeat (setq p (1+ (fix p)))
(setq l (cons (vlax-curve-getPointAtParam e (setq p (1- p))) l))
)
(list (vlax-curve-getStartPoint e) (vlax-curve-getEndPoint e))
)
)
)
如果需要进一步帮助,请发布示例图形。 谢谢所以,这里有一个示例图,希望能解释我想做什么。我对其进行了注释,以使其更加清晰。我在帖子中的第一篇帖子也解释了这一点。
感谢您的帮助!
论坛图纸 注意:教育邮票! 无需谨慎。。。我是讲师,不是学生!! 无关的一张教育邮票可能会毁掉其他绘画作品,尤其是制作作品。
我不担心做你的作业,我担心有人破坏了他们的图纸。 教育邮票是如何破坏其他绘画的?如果您打开了多个图形并打开了一个教育戳记,它是否也会将教育戳记添加到其他同样打开的图形中? 因为你大声喊叫
论坛图纸
页:
[1]
2