乐筑天下

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

[编程交流] 多段线lisp布线的点

[复制链接]

9

主题

46

帖子

37

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 15:53:25 | 显示全部楼层 |阅读模式
我想知道是否有人是新手或有一个计算多段线点数(垂直)的例程,
加上x,y,z坐标并将其保存为。txt文件或excel之类的??
任何帮助都将不胜感激。
 
 
艾米丽
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:03:26 | 显示全部楼层
试试这个。。。完成后,文件名将打印到命令行:
 
  1. (defun c:pts2file (/ pts e file openf)
  2. (vl-load-com)
  3. (if (and (setq e (car (entsel)))
  4.       (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  5.       (setq pts (mapcar 'cdr
  6.                 (vl-remove-if-not
  7.                   (function (lambda (pt) (= (car pt) 10)))
  8.                   (entget e)
  9.                 )
  10.             )
  11.       )
  12.       (setq file (strcat (getvar 'dwgprefix)
  13.                  (getvar 'dwgname)
  14.                  "__points.txt"
  15.              )
  16.       )
  17.       (setq openf (open file "w"))
  18.      )
  19.    (progn
  20.      (foreach pt pts
  21.    (write-line (vl-prin1-to-string pt) openf)
  22.      )
  23.      (close openf)
  24.    )
  25. )
  26. (princ file)
  27. (princ)
  28. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:07:17 | 显示全部楼层
下面是一个旧例程,用于提取PLINE路径点和包含的弧段:
  1. ;;;Returns ECS Point Values Of PLINE
  2. (defun findpath (en / pl ed sp_flg cl_flg bf nl i vp bf vf pl_flg)
  3. (and (/= (type en) 'ENAME)
  4.       (princ "\n*** FindPath Error *** ")
  5.       (exit))
  6. (if (= "LWPOLYLINE" (cdr (assoc 0 (entget en))))
  7.      (command "_.CONVERTPOLY" "_Heavy" en ""))
  8. (setq ed (entget en))
  9. (and (/= "POLYLINE" (cdr (assoc 0 ed)))
  10.       (princ "\n*** POLYLINEs Only *** ")
  11.       (exit))
  12. (setq pl_flg (cdr (assoc 70 ed)))
  13. (and (= (logand pl_flg 1) 1)
  14.       (setq cl_flg T))
  15. (and (= (logand pl_flg 4) 4)
  16.       (setq sp_flg T))
  17. (and (or (= (logand pl_flg 16) 16)
  18.           (= (logand pl_flg 64) 64))
  19.       (princ "\nInvalid POLYLINE Mesh")
  20.       (exit))
  21. (while (/= "SEQEND" (cdr (assoc 0 (entget (entnext en)))))
  22.         (setq en (entnext en)
  23.               ed (entget en)
  24.               vp (cdr (assoc 10 ed))
  25.               bf (cdr (assoc 42 ed))
  26.               vf (cdr (assoc 70 ed)))
  27.         (cond; ((= "SEQEND" (cdr (assoc 0 (entget (entnext en)))))
  28.              ;  (setq pl (cons vp pl)))
  29.               ((and (/= bf 0.0)
  30.                     (/= "SEQEND" (cdr (assoc 0 (entget (entnext en))))))
  31.                (add_arc vp (cdr (assoc 10 (entget (entnext en)))) bf))
  32.               ((and (/= bf 0.0)
  33.                     cl_flg
  34.                     (= "SEQEND" (cdr (assoc 0 (entget (entnext en))))))
  35.                (add_arc vp (last pl) bf))
  36.               ((and (= bf 1.0)
  37.                     (not cl_flg)
  38.                     (= "SEQEND" (cdr (assoc 0 (entget (entnext en))))))
  39.                (princ))
  40.               ((and sp_flg
  41.                     (= bf 0.0)
  42.                     (= (logand vf  8))
  43.                (setq pl (cons vp pl)))
  44.               ((and (not sp_flg)
  45.                     (= bf 0.0)
  46.                     (/= (logand vf  8))
  47.                (setq pl (cons vp pl)))))
  48. (if (and cl_flg
  49.           (not (equal (car pl) (last pl))))
  50.      (setq pl (cons (last pl) pl)))
  51. (setq i 0)
  52. (while (< i (length pl))
  53.         (while (equal (nth i pl) (nth (1+ i) pl) 0.0001)
  54.                (setq i (1+ i)))
  55.         (and (nth i pl)
  56.              (setq nl (cons (nth i pl) nl)))
  57.         (setq i (1+ i)))
  58.   nl)
  59. (defun add_arc (sp ep bulge / alist x1 x2 y1 y2 cotbce
  60.                ce ra sa ea ia inc qty na temp)
  61. (setq x1 (car sp);;Modified Bulge
  62.        x2 (car ep);;Conversion By
  63.        y1 (cadr sp);;Duff Kurland
  64.        y2 (cadr ep);;Autodesk, Inc.
  65.    cotbce (/ (- (/ 1.0 bulge) bulge) 2.0)
  66.        ce (list (/ (+ x1 x2 (- (* (- y2 y1) cotbce))) 2.0)
  67.                 (/ (+ y1 y2    (* (- x2 x1) cotbce) ) 2.0)
  68.                 (caddr sp))
  69.        ra (distance ce sp)
  70.        sa (atan (- y1 (cadr ce)) (- x1 (car ce)))
  71.        ea (atan (- y2 (cadr ce)) (- x2 (car ce))))
  72. (if (minusp sa)
  73.      (setq sa (+ sa (* 2.0 pi))))
  74. (if (minusp ea)
  75.      (setq ea (+ ea (* 2.0 pi))))
  76. (if (minusp bulge)
  77.      (setq temp sa sa ea ea temp))
  78. (if (> sa ea)
  79.      (setq ia (+ (- (* pi 2.0) sa) ea))
  80.      (setq ia (- ea sa)))
  81. (setq qty (abs (fix (/ ia (/ pi 16)))))
  82. (if (< qty 2)
  83.      (setq qty 2))
  84. (setq na sa
  85.       inc (/ (abs ia) qty))
  86. (repeat (1+ qty)
  87.      (setq alist (cons (polar ce na ra) alist)
  88.               na (+ sa inc)
  89.               sa na))
  90. (if (not (equal sp (car alist) 0.0001))
  91.      (setq alist (reverse alist)))
  92. (foreach a alist
  93.      (setq pl (cons a pl))))

然后,您可以将列表pl导出到ascii文件-David
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:14:46 | 显示全部楼层
这将是一个导出类型的例程-大卫
 
  1. [b][color=BLACK]([/color][/b]defun c:fpth [b][color=FUCHSIA]([/color][/b]/ s ss ppl fn wf[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not ss[b][color=MAROON])[/color][/b]
  3.             [b][color=MAROON]([/color][/b]> [b][color=GREEN]([/color][/b]sslength ss[b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.          [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect 1 PLINE"[/color][b][color=NAVY])[/color][/b]
  5.          [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"*POLYLINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]setq s [b][color=NAVY]([/color][/b]ssname ss 0[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  7. [b][color=FUCHSIA]([/color][/b]setq ppl [b][color=NAVY]([/color][/b]findpath s[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not fn[b][color=MAROON])[/color][/b]
  9.             [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]snvalid fn[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]setq fn [b][color=MAROON]([/color][/b]getstring [color=#2f4f4f]"\nOutput File Name:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  11. [b][color=FUCHSIA]([/color][/b]setq wf [b][color=NAVY]([/color][/b]open [b][color=MAROON]([/color][/b]strcat fn [color=#2f4f4f]".DAT"[/color][b][color=MAROON])[/color][/b] [color=#2f4f4f]"w"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  12. [b][color=FUCHSIA]([/color][/b]write-line [color=#2f4f4f]"[b][color=NAVY]([/color][/b]setq path_list '[b][color=MAROON]([/color][/b]"[/color] wf[b][color=MAROON])[/color][/b]
  13. [b][color=MAROON]([/color][/b]foreach p ppl
  14.   [b][color=GREEN]([/color][/b]write-line
  15.    [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"[b][color=RED]([/color][/b]"[/color] [b][color=PURPLE]([/color][/b]rtos [b][color=TEAL]([/color][/b]car p[b][color=TEAL])[/color][/b] 2 12[b][color=PURPLE])[/color][/b] [color=#2f4f4f]" "[/color]
  16.                [b][color=PURPLE]([/color][/b]rtos [b][color=TEAL]([/color][/b]cadr p[b][color=TEAL])[/color][/b] 2 12[b][color=PURPLE])[/color][/b] [color=#2f4f4f]" "[/color]
  17.                [b][color=PURPLE]([/color][/b]rtos [b][color=TEAL]([/color][/b]caddr p[b][color=TEAL])[/color][/b] 2 12[b][color=PURPLE])[/color][/b] [color=#2f4f4f]"[b][color=RED])[/color][/b]"[/color][b][color=BLUE])[/color][/b] wf[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  18. [b][color=MAROON]([/color][/b]write-line [color=#2f4f4f]"[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]"[/color] wf[b][color=FUCHSIA])[/color][/b]
  19. [b][color=FUCHSIA]([/color][/b]close wf[b][color=FUCHSIA])[/color][/b]
  20. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:17:47 | 显示全部楼层
另一个:
 
  1. 4

键入要调用的vWrite
回复

使用道具 举报

9

主题

46

帖子

37

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 16:20:57 | 显示全部楼层
杰出的
 
非常感谢大家的帮助,
 
艾米丽:D
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 16:31:35 | 显示全部楼层
大家好!!
 
我刚在谷歌上找到这篇文章,所以这是我在这里的第一篇文章。我不知道你们以前有没有为此烦恼过,但希望有人能帮上忙。
 
如何生成生成所有选定三维多段线顶点的lisp?
回复

使用道具 举报

15

主题

68

帖子

53

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
76
发表于 2022-7-5 16:35:08 | 显示全部楼层
 
李,
 
对于CAD2002,例程不适用于多段线,仅适用于LWDOLYLINE。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 16:37:13 | 显示全部楼层
现在这里有一个变体。。。这将首先要求您提供点编号系列,即101102103,用于描述“TBM”,然后是文件名
我写这篇文章的时候,我必须导出一个逗号圈定的全站仪点文件。。。
 
试试看。。。这是如果你想选择点(但实际上你不需要用上面的代码c“)
 
[code](defun c:wc(/cdwg cms cutl pt\u nm pt\u ds pt\u fn fso file ptw pn vl wtxt ptwo)(vl load com)(setq cdwg(vla get activedocument(vlax get acad object))cms(vla get modelspace cdwg)cutl(vla get utility cdwg))(setq pt\u nm(vla getinteger cutl“\n输入点号:”)pt\u ds(strcase(vla GetString cutl 1”\n输入描述号:“))pt\u fn(strcat(vla get path cdwg)“\”(vla GetString cutl 1“\n输入文件名:“)”.txt“)fso(vlax create object“Scripting.FileSystemObject”)文件(vlax invoke方法fso’CreateTextFile pt\u fn 8:vlax true))(而不是(vl-catch-all-error-p(vl catch all apply)(函数(lambda()(setq ptw(vla getpoint cutl ptwo“\n点击坐标点:”)))(setq pn vl(vlax safearray->list(vlax variant value ptw))wtxt(strcat(itoa pt\u nm)”,“pt\u ds”,“(rtos(car pn vl)2 3)”,“(rtos(cadr pn vl)2 3)”,“(rtos(caddr pn vl)2 3))(vlax invoke file'Writeline wtxt)(setq pt\u nm(1+pt\u nm)ptwo ptw ptw nil));while(vlax release object fso)(vlax invoke file'close))(提示“\n>>>…点文件导出已加载。键入WC以运行。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:46:48 | 显示全部楼层
 
也许是这个?
 
http://lee-mac.com/ptmanager.html
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 20:01 , Processed in 0.540759 second(s), 72 queries .

© 2020-2025 乐筑天下

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