明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: flyfox1047

[源码] 获取多段线顶点XY座标,并写入到表格

    [复制链接]
发表于 2014-5-29 12:04 | 显示全部楼层
很好的程序,可惜来晚了,值得学习
发表于 2014-5-29 16:26 | 显示全部楼层
真不错,学习了
发表于 2014-6-15 15:46 | 显示全部楼层
谢谢楼主,认真学习下!
发表于 2014-6-15 17:28 | 显示全部楼层
我也来一个,一个比较简单的方法


;;;多段线顶点坐标导出到EXCEL
;;;                by:langjs
(defun c:aa ( / ent file filex i j p ss)
  (setq ss (ssget '((0 . "LWPOLYLINE")))  i 0
        filex (getfiled "指定输出文件路径" "" "xls" 1)        file (open filex "w"))
  (repeat (sslength ss)
    (setq j 1  ent (entget (ssname ss i))  p (cdr (assoc 10 ent)))
    (write-line (strcat "Line" (itoa (1+ i))) file)
    (write-line "oint\tX\tY\tZ" file)
    (entmake (list '(0 . "TEXT") (cons 1 (strcat "Line" (itoa (1+ i)))) (cons 10 (list (car p) (+ (cadr p) 50))) (cons 40 30)))
    (while (setq p (assoc 10 ent))
      (setq ent (cdr (member p ent)) p (cdr p))
      (entmake (list '(0 . "TEXT") (cons 1 (itoa j)) (cons 10 (list (+ (car p) 10) (+ (cadr p) 10))) (cons 40 30)))
      (write-line (strcat (itoa j) "\t" (rtos (car p) 2 4) "\t" (rtos (cadr p) 2 4) "\t"
                          (if (caddr p) (rtos (caddr p) 2 4)"0.0")) file )
      (setq j (1+ j))
    )
    (setq i (1+ i))
  )
  (close file)
  (command "start" filex)
  (princ)
)

点评

不赞一个都不好意思上网!  发表于 2014-8-20 09:58
发表于 2014-6-19 16:01 | 显示全部楼层
  1. ;46.2 [功能] pline,lwpline点坐标表  By 无痕
  2. ;;示例(vxs (car (entsel))),返回三维点坐标
  3. (defun vxs (e / i v lst)
  4.   (setq i -1)
  5.   (while
  6.     (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
  7.      (setq lst (cons v lst))
  8.   )
  9.   (reverse lst)
  10. )

  11. ;;;*下面这段代码来源于吴永进 林美樱的AutoCAD完全应用指南,
  12. ;;;*可以直接将多段线的顶点坐标输出到EXCEL中(2003 2007 2010都可以)
  13. ;;;根据输出三维点坐标表改了一点点
  14. ;;;******************************************************
  15. ;;; 将多段线相关点坐标写入EXCEL文件内
  16. (defun c:xyz2excel ()
  17.    (setq pline_data_list (vxs (car (entsel "\n请选择多段线:"))));三维点表
  18.    (if (null MX-ACOS)
  19.      (jinn-get-excel-Lib)
  20.    )
  21.    (jinn-creat-excel-sheet)
  22.    (sub-xl-test4 pline_data_list)
  23.    (prin1)
  24. )
  25. ;;将所有点坐标列表写入EXCEL各单元格中
  26. (defun sub-xl-test4 (data_list / i j index )
  27.    (setq  i 1   j 1 )
  28.    (foreach val '("序号" "X" "Y" "Z")
  29.      (setq ceobj (get-XL-cell sheetobj i j))
  30.      (put-cell-bkcolor ceobj 3 5 2 12 val)
  31.      (setq j (1+ j))
  32.    )
  33.    (setq  i 2    j 1    index 1  )
  34.    (foreach lista data_list
  35.      (setq ceobj (get-XL-cell sheetobj i j))
  36.      (mx-put-HorizontalAlignment ceobj 3)
  37.      ;;向中对齐
  38.      (mx-put-value2 ceobj index)
  39.      (setq j (1+ j))
  40.      (foreach data lista
  41.        (setq ceobj (get-XL-cell sheetobj i j))
  42.        (mx-put-HorizontalAlignment ceobj 4)
  43.        ;;向右对齐
  44.        (mx-put-value2 ceobj data)
  45.        (setq j (1+ j))
  46.      )
  47.      (setq i   (1+ i)   j   1    index   (1+ index))
  48.    )
  49. )
  50. ;;;创建EXCEL应用程序对象与窗体对象
  51. (defun jinn-creat-excel-sheet ( / XLobj wb-obj cells)
  52.    (setq XLobj (vlax-create-object "Excel.Application"))
  53.    (vla-put-visible XLobj 1)
  54.    ;; (vla-put-visible XLobj :vlax-true)
  55.    (setq        wb-obj (vlax-invoke-method
  56.                  (vlax-get-property XLobj 'WorkBooks)
  57.                  'Add
  58.                )
  59.    )
  60.    (setq sheetobj (MX-get-activesheet wb-obj))
  61.    (setq cells (MX-get-cells sheetobj))
  62. )

  63. ;;;加载EXCEL应用程序资源库文件
  64. (defun jinn-get-excel-Lib ( / sys:drv office:dir xl-test4)
  65.    (setq sys:drv (getenv "systemdrive"))
  66.    (setq office:dir "C:\\Program Files\\Microsoft Office\")
  67.    (cond
  68.      ((setq exlib (findfile (strcat office:dir "office\" "Excel8.olb")))
  69.      )
  70.      ((setq exlib (findfile (strcat office:dir "office\" "Excel9.olb")))
  71.      )
  72.      ((setq exlib (findfile (strcat office:dir "office\" "Excel.exe")))
  73.      )
  74.      ((setq
  75.         exlib (findfile (strcat office:dir "office11\" "Excel.exe"))
  76.       )
  77.      )
  78.      ((setq
  79.         exlib (findfile (strcat office:dir "office12\" "Excel.exe"))
  80.       )
  81.      )
  82.      (t (setq exlib nil))
  83.    )
  84.    (if exlib
  85.      (vlax-import-type-library
  86.        :tlb-filename        exlib                  :methods-prefix
  87.        "MX-"                :properties-prefix
  88.        "MX-"                :constants-prefix "MX-"
  89.       )
  90.      (alert "Excel typelib 文件不存在")
  91.    )
  92. )
  93. ;;;取得指定的单元格对象
  94. (defun GET-XL-CELL (wkst row col)
  95.    (vlax-Variant-Value
  96.      (MX-Get-Item (MX-Get-Cells wkst) row col)
  97.    )
  98. )
  99. ;;        (put-cell-bkcolor 单元格对象 对齐方式 背景颜色 文字颜色 字号 数据内容)
  100. (defun put-cell-bkcolor  (obj atype bkcc txtcc txthh data)
  101.    (mx-put-horizontalalignment obj atype)
  102.    (mx-put-bold (mx-get-font obj) 1)
  103.    (mx-put-colorindex (mx-get-interior obj) bkcc)
  104.    (mx-put-colorindex (mx-get-font obj) txtcc)
  105.    (mx-put-size (mx-get-font obj) txthh)
  106.    (mx-put-value2 obj data)
  107. )
  108. ;;(put-cell-txtcolor 单元格对象 对齐方式 文字颜色 字号 数据内容)
  109. (defun put-cell-txtcolor (obj atype txtcc txthh data)
  110.    (mx-put-horizontalalignment obj atype)
  111.    (mx-put-bold (mx-get-font obj) 1)
  112.    (mx-put-colorindex (mx-get-font obj) txtcc)
  113.    (mx-put-size (mx-get-font obj) txthh)
  114.    (mx-put-value2 obj data)
  115. )
  116. (PRINC)

点评

“excel typelib 文件不存在” 这是什么情况?  发表于 2014-6-20 20:00
发表于 2014-6-20 14:10 | 显示全部楼层
langjs 发表于 2014-6-15 17:28
我也来一个,一个比较简单的方法

阁下写的程序是不错,可是不足之处是:1。编号点字高不能选择 2。EXCEL显示是数学坐标而不是地理坐标。3点号距离位置偏远。冒昧修改一下。程序如下:
;;;多段线顶点坐标导出到EXCEL
;;; by:langjs
(defun c:zbdc ( / ent file filex i j p ss)
(setvar"dimzin"0);;保留小数位数时如果位数不足可以补零
(setq TextHeight (getdist "\n请输入文字高度:"))
  (setq ss (ssget '((0 . "LWPOLYLINE")))  i 0
        filex (getfiled "指定输出文件路径" "" "xls" 1)        file (open filex "w"))
  (repeat (sslength ss)
    (setq j 1  ent (entget (ssname ss i))  p (cdr (assoc 10 ent)))
    (write-line (strcat "线段" (itoa (1+ i))) file)
    (write-line "点号\tX\tY\tZ" file)
    (entmake (list '(0 . "TEXT") (cons 1 (strcat "线段" (itoa (1+ i)))) (cons 10 (list (car p) (- (cadr p) 10)))(cons 7 "tukou") (cons 40 TextHeight)))
    (while (setq p (assoc 10 ent))
      (setq ent (cdr (member p ent)) p (cdr p))
      (entmake (list '(0 . "TEXT") (cons 1 (itoa j)) (cons 10 (list (+ (car p) 0.01) (- (cadr p) 0.01)))(cons 7 "tukou") (cons 40 TextHeight)(cons 8 "编号")(cons 62 3) ))
      (write-line (strcat (itoa j) "\t" (rtos (cadr p) 2 3) "\t" (rtos (car p) 2 3) "\t"
                          (if (caddr p) (rtos (caddr p) 2 3)"0.0")) file )
      (setq j (1+ j))
    )
    (setq i (1+ i))
  )
  (close file)
   (princ)
)

点评

好多大牛,顶!  发表于 2014-8-20 10:01
发表于 2014-6-20 19:18 | 显示全部楼层
新手学习,过来围观!
发表于 2014-6-21 19:34 | 显示全部楼层
wzg356 发表于 2014-6-19 16:01

看看你系统的excel路径,改这句(setq office:dir "C:\\Program Files\\Microsoft Office\\")
发表于 2014-6-22 11:31 | 显示全部楼层
发表于 2014-6-28 23:47 | 显示全部楼层
flyfox1047 发表于 2014-2-19 09:59
答案是肯定的

楼主的程序确实强大,膜拜,可惜我才学习程序不久,能否发我一个提取三维点的源码,研究学习学习
非常感谢    412388169@QQ.COM
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 04:45 , Processed in 0.292258 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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