mikek7 发表于 2022-7-6 09:46:57

节点和距离提取

大家好,
 
请分享你的集体智慧。。。
 
在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

Tharwat 发表于 2022-7-6 09:50:54

希望这个程序能满足您的需要。
 

(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)
)

 
塔瓦特

mikek7 发表于 2022-7-6 09:55:26

谢谢-这当然是一个开始,但并没有真正解决我的主要问题,即如何将多段线距离连接到它所经过的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)
   )
   )
)
 
迈克

alanjt 发表于 2022-7-6 09:59:48

这应该有助于事情的开始。。。
 
(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))
   )
)
)
 
如果需要进一步帮助,请发布示例图形。

mikek7 发表于 2022-7-6 10:02:15

谢谢所以,这里有一个示例图,希望能解释我想做什么。我对其进行了注释,以使其更加清晰。我在帖子中的第一篇帖子也解释了这一点。
 
感谢您的帮助!
论坛图纸

alanjt 发表于 2022-7-6 10:07:00

注意:教育邮票!

mikek7 发表于 2022-7-6 10:11:04

无需谨慎。。。我是讲师,不是学生!!

alanjt 发表于 2022-7-6 10:14:48

无关的一张教育邮票可能会毁掉其他绘画作品,尤其是制作作品。
 
我不担心做你的作业,我担心有人破坏了他们的图纸。

Organic 发表于 2022-7-6 10:19:23

教育邮票是如何破坏其他绘画的?如果您打开了多个图形并打开了一个教育戳记,它是否也会将教育戳记添加到其他同样打开的图形中?

pBe 发表于 2022-7-6 10:22:42

因为你大声喊叫
论坛图纸
页: [1] 2
查看完整版本: 节点和距离提取