找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4100|回复: 30

[求助]:如何一次性获取多义线的所有顶点

[复制链接]
发表于 2004-6-16 16:51:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如题,最好可以复制到excel或者写字板中,向各位请教!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-16 17:12:13 | 显示全部楼层
其实,list可以取得的
但是你如果只要数值就比较麻烦
看看我这个lisp可以帮助你不?
是写成txt的纯文本文件!
还要说明的是我这个只有x,y坐标没有z的。不知楼主是用做什么的
要是需要z的我可以修改!


[PHP]
(defun c:zb()
  (setvar "cmdecho"0)
  (setq ffn (getfiled "保存坐标" "" "txt" 1))
  (setq ff (open ffn "w"))
  (close ff)
  (princ "\n选取对象...")
  (setq ss (ssget))
  (setq i 0)
  (setvar "pdmode" 33)
  (repeat (sslength ss)
    (setq ssn (ssname ss i))
    (setq endata (entget ssn))
    (setq n 0)
    (repeat (length endata)
      (setq pp (nth n endata))
      (setq key (car pp))
      (if (= key 10)
        (progn
          (setq x (cadr pp))
          (setq y (caddr pp))
          (command "point" (list x y))
          (setq ff (open ffn "a"))
          (princ (rtos x 2 0) ff)
          (princ " " ff)
          (princ (rtos y 2 0) ff)
          (princ "\n" ff)
          (close ff)
          )
        )
      (setq n (1+ n))
      )
    (setq ff (open ffn "a"))
    (princ "End\n" ff)
    (close ff)
    (setq i (1+ i))
    )
  (princ (strcat "\n文件写至=> " ffn))
  (prin1)
  )
[/PHP]

点评

版主,能用vba写一个吗?  详情 回复 发表于 2014-11-24 11:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-16 19:31:51 | 显示全部楼层
斑竹果然高手!
这个东东真不错!
但不知楼主用这个作什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-16 19:57:56 | 显示全部楼层
呵呵,这个东西是我在用桥梁博士输入截面的时候用的,哪里可以利用点的坐标自己输入截面计算,但是一个一个输入比较麻烦,我就做了这个东东,没有想到也有人需要!就贴上来了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-16 20:06:07 | 显示全部楼层
键盘命令:ZB
网速太慢,斑竹可以把这两个帖子和在一起.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-16 23:36:59 | 显示全部楼层
呵呵,这个东西是我在用桥梁博士输入截面的时候用的,哪里可以利用点的坐标自己输入截面计算,但是一个一个输入比较麻烦,我就做了这个东东,没有想到也有人需要!就贴上来了!

呵呵,惭愧,我也是搞桥的,不过不会自己写程序,汗~~~~~~


斑主,您的程序我下了,运行很好,可以实现坐标输出,但是好像输出的都是整数,能否改一下程序,可以手工(或者程序内部指定)小数点后面保留小数的位数.再者,如果可以输入z坐标那这个lisp就很完美啦,请斑主帮忙,不甚感激!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-17 05:46:38 | 显示全部楼层
贴个简化点的"
(defun c:test ()
  (setq a (car (entsel)))
  (setq pts (acet-geom-vertex-list a))
  (setq n 0)
  (setq fn (open "coord5.txt" "w"))
  (write-line "PolyLine Coordinates: " fn)
  (write-line "*******************************" fn)
  (while (< n (length pts))
    (write-line  (strcat (itoa n) "   " (rtos (car (nth n pts)))
                 "   " (rtos (cadr (nth n pts)))"   " (rtos (last (nth n pts)))) fn)
    (setq n (1+ n))
  )
  (close fn)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-17 13:36:46 | 显示全部楼层
今天由于比较忙所以一直没有来看帖子,不好意思,由于pline画成的线是二维的,所以不能提供z轴的数值,需要提供的话应该用spline画的线,这个我现在还没有时间做,晚一点给你,至于需要可以调整精度的,这个没有问题。

还想问一句,不知道你需要用这个做什么?z轴也需要?

改好了,spline的是有z坐标的,pline是没有z坐标的。

[PHP]
(defun c:zb3()
  (setvar "cmdecho"0)
  (setq q (getint "小数点后的位数: "))
  (setq ffn (getfiled "保存坐标" "" "txt" 1))
  (setq ff (open ffn "w"))
  (close ff)
  (princ "\n选取对象...")
  (setq ss (ssget))
  (setq i 0)
  (setvar "pdmode" 33)
  (repeat (sslength ss)
    (setq ssn (ssname ss i))
    (setq endata (entget ssn))
    (setq kind (cdr (assoc 0 endata)))   
    (setq n 0)
    (if (= kind "SPLINE")
      (progn
        (repeat (length endata)
      (setq pp (nth n endata))
      (setq key (car pp))      
      (if (= key 11)
        (progn
          (setq x (cadr pp))
          (setq y (caddr pp))
          (setq z (cadddr pp))
          (command "point" (list x y z))
          (setq ff (open ffn "a"))
          (princ (rtos x 2 q) ff)
          (princ " " ff)
          (princ (rtos y 2 q) ff)
          (princ " " ff)
          (princ (rtos z 2 q) ff)
          (princ "\n" ff)
          (close ff)
          )
        )
      (setq n (1+ n))
      ))
      (progn       
    (repeat (length endata)
      (setq pp (nth n endata))
      (setq key (car pp))      
      (if (= key 10)
        (progn
          (setq x (cadr pp))
          (setq y (caddr pp))          
          (command "point" (list x y))            
          (setq ff (open ffn "a"))
          (princ (rtos x 2 q) ff)
          (princ " " ff)
          (princ (rtos y 2 q) ff)          
          (princ "\n" ff)
          (close ff)
          )
        )
      (setq n (1+ n))
      )
    ))
    (setq ff (open ffn "a"))
    (princ "End\n" ff)
    (close ff)
    (setq i (1+ i))
    )
  (princ (strcat "\n文件写至=> " ffn))
  (prin1)
  )

[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-17 14:15:35 | 显示全部楼层
什么时候才能学会编程啊啊啊啊啊!郁闷
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-17 22:08:23 | 显示全部楼层
"还想问一句,不知道你需要用这个做什么?z轴也需要~~~"

呵呵,有点贪心了~~~~想找斑主要个完美的程序!

再次谢谢斑主,向斑主学习编程的知识和助人为乐的高尚品格!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 07:04:36 | 显示全部楼层
最初由 maplesu 发布
[B]...spline的是有z坐标的,pline是没有z坐标的。... [/B]


不是吧??

                 POLYLINE  Layer: "external"
                            Space: Model space
                   at point, X=   1.0000  Y=   1.0000  Z=   1.1110
              ......
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 08:28:10 | 显示全部楼层
最初由 lsjjm 发布
[B]

不是吧??

                 POLYLINE  Layer: "external"
                            Space: Mode... [/B]



这个地方可能是我没有说清楚,虽然可以显示出z坐标,但是在autolisp中取得对象数据以后,表示点的顶点坐标的群码为10的项目中只有x,y坐标没有z的。而且在cad中pline是一个二维的,用pline是画不出三维的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 09:14:47 | 显示全部楼层
最初由 maplesu 发布
[B]..在cad中pline是一个二维的,用pline是画不出三维的![/B]


1楼的原问并没有特别指定是二维pline, 而且在3楼再次要求 " 如果可以输入z坐标那这个lisp就很完美啦" . !
用pline画不出三维的来, 难道不能用其他的命令?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 09:38:11 | 显示全部楼层
其实是因为我只学了autolisp(而且时间不长),我认为autolisp没有办法解决这个问题,看了你那个程序了,用你那个函数是可以求得z。还是你的比较好,但是我不知道那个函数的真正意义,可以告诉我吗?还有那个函数你是在那里查到的呢?
你不介意我改改你的程序吧,我想可以利用选择集来循环操作,还有就是可以指定保存文件的路径和名称!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 10:58:37 | 显示全部楼层
用VBA提取三维多段线的顶点坐标到EXCEL,并保存在C:\1.xls。
  1. Sub PL()
  2. On Error Resume Next
  3. Dim pnt As Variant
  4. Dim ent As AcadEntity
  5. ThisDrawing.Utility.GetEntity ent, pnt, "请选择一条三维多段线:"


  6. Do While ent.ObjectName <> "AcDb3dPolyline"
  7. ThisDrawing.Utility.Prompt "您选的不是三维多段线!"
  8. ThisDrawing.Utility.GetEntity ent, pnt, "请选择一条三维多段线:"
  9. Loop
  10.    
  11. Set aa = ent
  12. Dim ps As Variant, n As Long
  13. ps = aa.Coordinates
  14. n = UBound(ps)
  15.    
  16. Dim xlapp As Object
  17.    
  18. Set xlapp = GetObject(, "Excel.Application")
  19. If Err <> 0 Then
  20.     Err.Clear
  21.     Set xlapp = CreateObject("Excel.Application")
  22.     xlapp.Visible = True
  23. End If

  24. Dim xlbook As Object
  25. Set xlbook = xlapp.Workbooks.Add
  26. For k = 0 To n Step 3
  27.     xlbook.ActiveSheet.Cells(k / 3 + 1, 1) = ps(k)
  28.     xlbook.ActiveSheet.Cells(k / 3 + 1, 2) = ps(k + 1)
  29.     xlbook.ActiveSheet.Cells(k / 3 + 1, 3) = ps(k + 2)
  30. Next k
  31.    
  32. xlbook.SaveAs ("c:\1.xls")                    '另存为
  33.    
  34. End Sub


用VBALOAD加载,用VBARUN运行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-11-13 06:28 , Processed in 0.299230 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表