乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 94|回复: 16

[编程交流] 节点和距离提取

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 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,不,这不是学生/家庭作业!!
104658aqqooog0iold0qg5.jpg
nodes\u out。lsp
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 09:50:54 | 显示全部楼层
希望这个程序能满足您的需要。
 
  1. (defun c:Test (/ dir fNme pts coords)
  2. ; THARWAT Oct. 31.2010
  3. (defun *error* (msg)
  4.   (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  5.    (princ (strcat "\nError: " msg))
  6. )
  7. )
  8. (vl-load-com)
  9. (setq dir "D:\\My Folder")
  10. (vl-mkdir dir)
  11. (setq fNme (open "D:/My Folder/coordinates.txt" "w"))
  12.    (while
  13.      (setq pts (getpoint "\n Specify point :")
  14.        )
  15.    (setq coords
  16.       (write-line
  17.              (strcat (rtos (car pts) 2)
  18.              ","
  19.                  (rtos (cadr pts) 2)
  20.                  ","
  21.             (rtos (caddr pts) 2))
  22.          fNme)
  23.      )
  24.      )
  25.    (close fNme)
  26. (princ)
  27. )

 
塔瓦特
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:55:26 | 显示全部楼层
谢谢-这当然是一个开始,但并没有真正解决我的主要问题,即如何将多段线距离连接到它所经过的2个点-这就是我真正撕裂剩下的头发!
 
按照我的惯例(改编,我不记得从哪里来),我在每一行的末尾选取文本,然后是距离文本。这将3个值按正确顺序写入txt文件。遗憾的是,这在当前AutoCAD版本中不起作用。这也是一个真正的束缚,有大量的点,因为它真的很容易犯错误。
 
停止工作的代码是(向最初编写它的人道歉)。。。
 
  1. (defun C:nod-out  (/ FILE FUNC ENTITY ENTTYP TEXTMT)
  2.   (setq blank " ")
  3. (if (= FNAME NIL)
  4.    (setq FNAME
  5.           (getfiled
  6.             "Select the text file for extract txt: "
  7.             "c:/"
  8.             "txt"
  9.             1))
  10.    (setq FUNC
  11.           (getstring
  12.             (strcat
  13.               "[data to be stored in "
  14.               FNAME
  15.               "]"
  16.               "/Change file/<press Enter or Right-click to proceed>:")))
  17.    )
  18. (if (= FUNC "c")
  19.    (setq FUNC "C"))
  20. (if (= FUNC "C")
  21.    (setq FNAME
  22.           (getfiled
  23.             "Select the text file for extract txt: "
  24.             "c:/"
  25.             "txt"
  26.             1)))
  27. (while (/= FNAME NIL)
  28.    (setq ENTITY
  29.           (car
  30.             (entsel
  31.               "\nPress `Esc` to exit, or select NODE.")))
  32.    (if (/= ENTITY NIL)
  33.      (progn
  34.        (setq ENTTYP (cdr (assoc 0 (entget ENTITY))))
  35.        (if (wcmatch ENTTYP "*TEXT*")
  36.   (setq FILE (open FNAME "a"))
  37.          (progn
  38.            (setq TEXTMT (cdr (assoc 1 (entget ENTITY))))
  39.            (write-line TEXTMT FILE)
  40.            (prompt (strcat "\nLine- `" TEXTMT "` added to " FNAME))
  41.            )
  42.          (prompt "\nNOT A NODE POINT!")
  43.          )
  44.        )
  45.      (prompt "\nNo node selected")
  46.   (write-line blank file)
  47.      (close FILE)
  48.      )
  49.    )
  50. )

 
迈克
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:59:48 | 显示全部楼层
这应该有助于事情的开始。。。
 
  1. (defun c:Test (/ ss)
  2. (if (setq ss (ssget '((0 . "LINE,*POLYLINE"))))
  3.    ((lambda (i / pts lst)
  4.       (repeat i
  5.         (mapcar (function (lambda (a b) (setq lst (cons (list a b (distance a b)) lst))))
  6.                 (setq pts (AT:GetVertices (ssname ss (setq i (1- i)))))
  7.                 (cdr pts)
  8.         )
  9.       )
  10.       (mapcar 'print lst)
  11.     )
  12.      (sslength ss)
  13.    )
  14. )
  15. (princ)
  16. )
  17. (defun AT:GetVertices (e / p l)
  18. ;; Return point at each vertex of curve
  19. ;; e - curve to evaluate (Arc, Line, *Polyline, Spline)
  20. ;; Alan J. Thompson, 09.30.10
  21. (if e
  22.    (if (eq (setq p (vlax-curve-getEndParam e)) (fix p))
  23.      (repeat (setq p (1+ (fix p)))
  24.        (setq l (cons (vlax-curve-getPointAtParam e (setq p (1- p))) l))
  25.      )
  26.      (list (vlax-curve-getStartPoint e) (vlax-curve-getEndPoint e))
  27.    )
  28. )
  29. )

 
如果需要进一步帮助,请发布示例图形。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:02:15 | 显示全部楼层
谢谢所以,这里有一个示例图,希望能解释我想做什么。我对其进行了注释,以使其更加清晰。我在帖子中的第一篇帖子也解释了这一点。
 
感谢您的帮助!
论坛图纸
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:07:00 | 显示全部楼层
注意:教育邮票!
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:11:04 | 显示全部楼层
无需谨慎。。。我是讲师,不是学生!!
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:14:48 | 显示全部楼层
无关的一张教育邮票可能会毁掉其他绘画作品,尤其是制作作品。
 
我不担心做你的作业,我担心有人破坏了他们的图纸。
回复

使用道具 举报

44

主题

542

帖子

502

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
220
发表于 2022-7-6 10:19:23 | 显示全部楼层
教育邮票是如何破坏其他绘画的?如果您打开了多个图形并打开了一个教育戳记,它是否也会将教育戳记添加到其他同样打开的图形中?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 10:22:42 | 显示全部楼层
因为你大声喊叫
论坛图纸
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 00:12 , Processed in 0.421787 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表