明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1214|回复: 4

[源码] 菜鸟的练习程序-----[选择线条输出坐标]

  [复制链接]
发表于 2014-9-20 10:30:58 | 显示全部楼层 |阅读模式
因工作需要,写了这样的一个程序!请各前辈们不要见笑!
  1. ;子函數,世界坐標轉換成用戶坐標  
  2. (prompt "\n[OO] -- Export line(s) ordinate datas By . ShingYatChun")
  3. (defun wtu (pt)
  4.   (trans pt 0 1)
  5.   )
  6. (defun desame (lst / a ll) ;;;表中去除重复元素
  7.   (while lst(setq a (car lst) lst (vl-remove a lst) ll (cons a ll)))
  8.   (reverse ll)
  9. )
  10. (defun c:oo (/ pt lst ba p10 p11 sslen i n r h ent data)
  11. (princ "\n>>> Program processing is start ...")
  12. (prompt "\n>>> Select objects marking ...")
  13. (setq ss (ssget '((0 . "*LINE")))
  14.     i 0)
  15. (setq sslen (sslength ss))
  16. (setq osmode (getvar "osmode"))
  17. ;;-----------輸出的座標類型-----------
  18. (initget "World Ucs")
  19. (setq ucs (getkword "\Export ordinate type [World/Ucs] <World>:"))
  20. (if (= ucs nil)
  21.   (setq ucs "World")
  22.   )
  23. ;;------------------------------------
  24. (repeat sslen
  25.   (setq ent (ssname ss i))
  26.   (cond
  27.     ((= (cdr (assoc 0 (entget ent))) "LINE")
  28.       (setq p10 (cdr (assoc 10 (entget ent)))
  29.             p11 (cdr (assoc 11 (entget ent)))
  30.         )
  31.       (setq lst (append lst (list p10) (list p11)))
  32.     )
  33.    
  34.     ((or (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") (= (cdr (assoc 0 (entget ent))) "SPLINE") )
  35.       (setq ssdata (entget ent) s 0 )
  36.       (repeat (length ssdata)
  37.         (setq pp (nth s ssdata)
  38.               key (car pp))
  39.         (if (= key 10)
  40.           (setq lst (append lst (list (cdr pp))))
  41.         )
  42.         ;(setq lst (append lst (list lst)))
  43.         (setq s (1+ s))
  44.       )
  45.     )
  46.    
  47.     ((= (cdr (assoc 0 (entget ent))) "POLYLINE")      
  48.       (setq s 0 )
  49.       (while (/= (vlax-curve-getPointAtParam ent s) nil)
  50.         (setq lst (append lst (list (vlax-curve-getPointAtParam ent s)))
  51.             s (1+ s)
  52.           )
  53.       )
  54.     )   
  55.   )
  56.   (setq i (1+ i))  
  57.   )
  58.   (if (/= (desame lst) nil)
  59.     (setq lst (desame lst))
  60.     );;刪除重複的元素
  61.   (setq n 0 )
  62.     (repeat (length lst)
  63.       (setq ;ba (wtu (nth n lst)) ;;定義文字插入點
  64.             data (nth n lst)
  65.           )
  66. ;;---------判斷座標輸出類型----------
  67.       (if (= ucs "Ucs")
  68.         (setq data (wtu data))
  69.         )
  70. ;;------------------------------------
  71.       (if (= (length data) 2)
  72.         (setq data (list (nth 0 data) (nth 1 data) 0))
  73.         )
  74.       (setq cm (strcat (rtos (nth 0 data)) "," (rtos (nth 1 data)) "," (rtos (nth 2 data))))
  75.       ;(setvar "osmode" 0)
  76.       (vl-cmdf "ucs" "na" "d" "orucs" ;;刪除原座標
  77.                "ucs" "na" "s" "orucs" ;;保存原座標
  78.              "ucs" "v") ;;切換UCS到正方向方便字體顯示
  79.       (setq ba (wtu (nth n lst))) ;;定義文字插入點
  80.         (vl-cmdf "-MTEXT" ba "J" "MC" "W" "0" cm "")
  81.       (vl-cmdf "ucs" "na" "r" "orucs") ;;恢復原座標
  82.       (setq n (1+ n))
  83.     )
  84. (setvar "osmode" osmode)
  85. (princ (strcat "\n>>> Program processing is complete , " (rtos sslen 2) " objects finish ! <<<"))
  86. (prin1)
  87. )



本帖子中包含更多资源

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

x
发表于 2014-9-20 15:49:59 | 显示全部楼层
发表于 2014-9-20 16:16:51 | 显示全部楼层
----啥用途?
发表于 2014-9-20 19:14:40 | 显示全部楼层
是线条的拐点坐标吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 00:45 , Processed in 0.192492 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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