找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1350|回复: 13

输出多段线顶点坐标的小程序

[复制链接]
发表于 2006-9-27 20:16:13 | 显示全部楼层 |阅读模式

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

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

×
刚刚,因为工作的需要,编写了一个多段线顶点坐标输出的小程序,请各位高手指正

  1. ;;;--------------------------------------------------------
  2. ;;;函数: c:plout                               
  3. ;;;--------------------------------------------------------
  4. ;;;来源:            作者: hj               
  5. ;;;功能:  本函数提取多段线的各端点坐标值输出至文本文件
  6. ;;;语法:                 
  7. ;;;参数:  
  8. ;;;返回值:
  9. ;;;备注:注意输出坐标格式为 点号 Y坐标 X坐标
  10. ;;;--------------------------------------------------------
  11. (defun c:plout ()
  12.   (SETQ name (ENTSEL "\n<请选择要多段线>:"))
  13.   (princ)
  14.           (SETQ ename (CAR name));;取图元名
  15.           (SETQ $acdName1 (CDR (ASSOC 0 (ENTGET ename))))
  16.           (IF (WCMATCH $acdName1 "LWPOLYLINE,AcDbPolyline");;判断是否多段线
  17.             (SETQ $temp-name ename)
  18.             (SETQ $temp-name nil)
  19.           ) ;_ 结束if
  20.           (if $temp-name
  21.             (progn
  22.               (setq pllist (GETPLLIST $temp-name));;调用子程序取多段线顶点坐标
  23.               (initget 4)
  24.               (setq num (getint "请输入小数位数:[2]"))
  25.               (if (= num nil)
  26.                 (setq num 2)
  27.                 )
  28.               (setq filename
  29.                      (getfiled "选择文件存储目录" "多段线坐标.TXT" "TXT" 5)
  30.               )
  31.               (if filename
  32.                 (progn
  33.                 (plout:OutFile pllist filename (itoa num))
  34.                 (setq message (strcat "\n 输出至文件:" filename))
  35.                 (princ)
  36.                 (princ message)
  37.                 )
  38.               )
  39.             )
  40.           )   
  41. )

  42. ;;;函数: DIM:OutFile                               
  43. ;;;--------------------------------------------------------
  44. ;;; 说明:将界址点坐标输出到文件
  45. ;;; 语法:DIM:OutFile #plist-OutFile $filename-OutFile #precision-OutFile)
  46. ;;;       #plist-OutFile.............界址点坐标点对表
  47. ;;;       #plist-OutFile.............输出文件文件名
  48. ;;;       #precision-OutFile.........界址点坐标取位精度
  49. ;;; 返回值:"T"  F NIL
  50. ;;; 备注  本函数供C:DIMEJZD调用
  51. ;;;--------------------------------------------------------

  52. (DEFUN plout:OutFile (#plist-OutFile                $filename-OutFile
  53.                     #precision-OutFile                /
  54.                     %jzd-jd          $jzd-dh        #jzd-zb
  55.                     $jzd-zbX          $jzd-zbY        %id1
  56.                     %id2          %resv-OutFile        %rep
  57.                     $open2          $open                %rep1
  58.                     %wordrow
  59.                    )
  60. ;;;              (SETQ $txtname (STRCAT $dwgpath
  61. ;;;                           (SUBSTR $dwgname 1 (- (STRLEN $dwgname) 4))
  62. ;;;                           ".txt"
  63. ;;;                           ) ;_ 结束strcat
  64. ;;;            ) ;_ 结束setq

  65.   ;;打开文件
  66.   (SETQ %jzd-jd (ATOI #precision-OutFile))
  67.   (SETQ $open (OPEN $filename-OutFile "w"))
  68.   (IF (NOT $open)
  69.     (PROGN
  70.       (PRINC
  71.         "\n 由于未知原因建立文件失败!文件保存至 C:/顶点坐标文件.txt 中!"
  72.       ) ;_ 结束princ
  73.       (SETQ $filename-OutFile "C:\顶点坐标文件.txt")
  74.       (SETQ $open (OPEN $filename-OutFile "w"))
  75.       (IF (NOT $open)
  76.         (PROGN
  77.           (PRINC "\n 无法在C盘根目录下创建文件!程序将退出!")
  78.           (setq %resv-OutFile nil)
  79.           (EXIT)
  80.         ) ;_ 结束progn
  81.        
  82.       ) ;_ 结束if
  83.     ) ;_ 结束progn
  84.    
  85.   ) ;_ 结束if
  86.   (setq %id1 0)
  87.   (repeat (LENGTH #plist-OutFile)
  88.     ;;(SETQ $jzd-dh (NTH %id1 #jzd-dhlist))
  89.     (setq $jzd-dh (itoa (+ %id1 1)))
  90.     ;;取x,y坐标注记值
  91.     (SETQ #jzd-zb (NTH %id1 #plist-OutFile))
  92.     (SETQ $jzd-zbX (RTOS (CAR #jzd-zb) 2 %jzd-jd))
  93.     (SETQ $jzd-zbY (RTOS (CADR #jzd-zb) 2 %jzd-jd))
  94.     (write-line
  95.       (strcat $jzd-dh "       " $jzd-zbY "       " $jzd-zbX)
  96.       $open
  97.     )
  98.     (setq %id1 (+ 1 %id1))
  99.   )
  100.   (close $open)

  101.   (setq %resv-OutFile "T")
  102. )
  103. ;;;--------------------------------------------------------
  104. ;;;函数: getPlList                               
  105. ;;;--------------------------------------------------------
  106. ;;;说明:本函数提取多段线的各端点坐标值构成一张表并返回
  107. ;;;               
  108. ;;;               
  109. ;;;编制者:高老师               
  110. ;;;--------------------------------------------------------

  111. (DEFUN getPlList (#entity / OBJ LW_T8 OBJ_1)
  112.   (SETQ obj (ENTGET #entity))
  113.   (SETQ lw_t8 (CDR (ASSOC 8 obj)))
  114.   (SETQ obj_1 nil)
  115.   (WHILE (/= (ASSOC 10 obj) nil)
  116.     (IF        (AND (= (CAAR obj) 10)
  117.              (NOT (EQUAL (CDAR obj) (LAST obj_1) 0.001))
  118.         ) ;_ 结束and
  119.       (SETQ obj_1 (APPEND obj_1 (LIST (CDAR obj))))
  120.     )                                        ;生成坐标表同时去掉相邻重点,不带10
  121.     (SETQ obj (CDR obj))
  122.   ) ;_ 结束while
  123.   (SETQ obj obj_1)
  124.   (IF (EQUAL (CAR obj) (LAST obj) 0.001)
  125.     (SETQ obj (REVERSE (CDR (REVERSE obj))))
  126.   ) ;_ 结束if
  127.   ;;判断首闭
  128.   (SETQ #temp obj)
  129. ) ;_ 结束defun
  130. ;;end defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-9-28 13:59:25 | 显示全部楼层
这些功能比较实用;如果能把三个功能集成为一个函数,那就更好了;但还是要谢谢楼主!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-9-28 15:51:55 | 显示全部楼层
难得有人比较详细的贴自己的源码,在你的基础上改了改

  1. (defun c:plout (/ s filename e n fn jd pt pts)
  2.   (if (setq s (ssget ":S" '((0 . "*POLYLINE")))) ;_点选带过滤形式
  3.     (progn
  4.       (setq e (ssname s 0)
  5.             n (fix (vlax-curve-getendparam e))
  6.       )
  7.       (if (not (setq filename
  8.                       (getfiled "选择文件存储目录" "多段线坐标.txt" "txt" 5)
  9.                )
  10.           )
  11.         (setq filename "c:\\多段线坐标.txt")
  12.       )
  13.       (setq fn (open filename "w")
  14.             jd n
  15.       )
  16.       (setvar "dimzin" 0)
  17.       (repeat n
  18.         (setq pt (vlax-curve-getpointatparam e (setq jd (1- jd))))
  19.         (if (null pts)
  20.           (setq pts (list pt))
  21.           (if (not (equal pt (car pts) 1e-3))
  22.             (setq pts (cons pt pts))
  23.           )
  24.         ) ;_去除重复
  25.       )
  26.       (setq n 1)
  27.       (mapcar '(lambda (x)
  28.                  (write-line
  29.                    (strcat (itoa n)
  30.                            "\t"
  31.                            (rtos (cadr x))
  32.                            "\t"
  33.                            (rtos (car x)) ;_与前面的 dimzin 配合采用用户 UNITS 精度设置
  34.                    )
  35.                    fn
  36.                  )
  37.                  (setq n (1+ n))
  38.                )
  39.               pts
  40.       )
  41.       (close fn)
  42.     )
  43.   )
  44.   (princ)
  45. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-28 16:01:49 | 显示全部楼层
看了楼主和斑竹的代码,看来要好好学习objectarx代码!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-28 20:10:11 | 显示全部楼层
呵呵,楼上你......让大家都晕菜了 :D
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-9-30 14:35:46 | 显示全部楼层
试了下,还是可以用,但是假如自己定义个坐标系,好像不能量出自定义坐标系下的坐标。请看下是不是这样的啊,有没有办法解决?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-25 09:30:52 | 显示全部楼层
再加上输出z值 然后到excel 很好用 谢谢

真奇怪,测试的时候还好好的。但是关闭了一次cad,再打开用plout就出现no function definition: VLAX-CURVE-GETENDPARAM的提示。
怎么回事呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2008-12-25 16:00:57 | 显示全部楼层
最初由 SGP007 发布
[B]再加上输出z值 然后到excel 很好用 谢谢

真奇怪,测试的时候还好好的。但是关闭了一次cad,再打开用plout就出现no function definition: VLAX-CURVE-GETENDPARAM的提示。
怎么回事呢? [/B]


1.“输出到excel”,直接存*.et即可
2.(vl-load-com)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-26 13:06:04 | 显示全部楼层
刚学不久,越来越发现,不懂这门外语真是不行了,还好有晓东空间,这么多高手支持,非常感谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2008-12-28 11:11:14 | 显示全部楼层
在lisp当中,如果设定变量在循环中反复拾取点,那么这两个点的距离怎么计算呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-28 13:25:27 | 显示全部楼层
谢谢,源码很详细,可作为参考。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-5-7 16:14:38 | 显示全部楼层
请问一下啊 这个表出来了 但是具体在多段线上没有标示哪个点是1哪个点是2啊  如何自动生成
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5个

财富等级: 恭喜发财

发表于 2024-7-22 13:21:56 | 显示全部楼层
谢谢源码分享!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:12 , Processed in 0.198888 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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