明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3547|回复: 9

工程桩编号提取坐标

  [复制链接]
发表于 2015-8-31 19:21:19 | 显示全部楼层 |阅读模式
  1. ;;ssPts: 1 选择集,返回图元列表
  2. ;;    2 点表(1到n维 1维时key只能是x或X),返回点表
  3. ;;   3 图元列表,返回图元列表
  4. ;;Key: "xyzXYZ"任意组合,例如"yX",y在前表示y坐标优先,小y表示从小到大(注:二维点时,不能有z)
  5. ;;FUZZ: 允许误差
  6. ;;注:点表可以1到n维混合,Key长度不大于点的最小维数。
  7. ;;示例1 (HH:ssPts:Sort (ssget) "YxZ" 0.5);返回(<Entity name: 7ef7b3a8> <Entity name: 7ef7b3a0>)
  8. ;;示例2 (HH:ssPts:Sort (list '(2 3) '(3 5)) "Yx" 0.5);返回((3 5) (2 3))
  9. ;;示例3 (HH:ssPts:Sort '(<Entity name: 7ef79a28> <Entity name: 7ef79a10>) "YxZ" 0.5)
  10. ;;本程序是在fsxm的扩展 自贡黄明儒 2013年9月9日
  11. (defun HH:ssPts:Sort (ssPts KEY FUZZ / E EN FUN LST N SORTPTS SORTSS)
  12.   ;;1 点列表排序
  13.   (defun sortpts (PTS FUN xyz FUZZ)
  14.     (vl-sort pts
  15.       '(lambda (a b)
  16.   (if (not (equal (xyz a) (xyz b) fuzz))
  17.     (fun (xyz a) (xyz b))
  18.   )
  19.        )
  20.     )
  21.   )
  22.   ;;2 排序
  23.   (defun sortpts1 (PTS KEY FUZZ)
  24.     (setq Key (vl-string->list Key))
  25.     (foreach xyz (reverse Key)
  26.       (cond ((< xyz 100)
  27.       (setq fun >)
  28.       (setq xyz (nth (- xyz 88) (list car cadr caddr)))
  29.      )
  30.      (T
  31.       (setq fun <)
  32.       (setq xyz (nth (- xyz 120) (list car cadr caddr)))
  33.      )
  34.       )
  35.       (setq Pts (sortpts Pts fun xyz fuzz))
  36.     )
  37.   )
  38.   ;;3 本程序主程序
  39.   (cond ((= (type ssPts) 'PICKSET)
  40.   (repeat (setq n (sslength ssPts))
  41.     (if (and (setq e (ssname ssPts (setq n (1- n))))
  42.       (setq en (entget e))
  43.         )
  44.       (setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
  45.     )
  46.   )
  47.   (mapcar 'last (sortpts1 lst KEY FUZZ))
  48. )
  49. ((Listp ssPts)
  50.   (cond ((vl-consp (car ssPts)) (sortpts1 ssPts KEY FUZZ))
  51.         ((= (type (car ssPts)) 'ENAME)
  52.   (foreach e ssPts
  53.     (if (setq en (entget e))        
  54.       (setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
  55.     )
  56.   )
  57.   (mapcar 'last (sortpts1 lst KEY FUZZ))
  58.         )
  59.   )
  60. )
  61.   )
  62. )
  63. ;;*****************************************************************************通用点表排序
  64. (defun c:gczbh1 (/     )

  65. (setq blc (getint "\n请输入比例尺1:"))
  66.   (setvar 'userr1 blc);设置比例尺
  67. (setq zg(* 0.002 blc));字高


  68. (defun get_inpoint (blockname)
  69.   (setq in_point(cdr (assoc 10 (entget blockname))))
  70.   in_point
  71. )


  72. (setq ss (ssget '((0 . "insert")))   )
  73. (setq jidian (getpoint "请选择基点:"))
  74. (setq fangx (getpoint  jidian "请选择方向点:"))
  75. (setq angle1 (* (angle jidian fangx) 1))
  76. (command "_.rotate" ss "" jidian "r" jidian fangx (polar jidian 0 100))

  77. (setq i 0)
  78. (setq lst '())
  79. (repeat (sslength ss)
  80. (setq insert_name (ssname ss i))
  81. (setq e(get_inpoint insert_name))
  82.   (setq lst (append lst (list e)))
  83. (setq i (1+ i))


  84.   )

  85. (setq ptlst (HH:ssPts:Sort lst "xyz" 0.0))
  86. ;@树櫴希德 点表按照特定点逆时针排序~
  87. ;(setq p (getpoint "\n指定排序方向"))
  88. ;(setq ptlst(mapcar 'cdr (vl-sort (mapcar 'cons (mapcar '(lambda(x) (angle x p)) lst) lst) '(lambda (x y) (< (car x) (car y))))))


  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;(setq ptlst (vl-sort (reverse lst)
  91.                    ;以下根据x坐标对表排序
  92.    ;'(lambda (e1 e2)
  93.          ;   (< (car e1) (car e2) )
  94.      ; (= (angle  e1 e2))   )   )    )
  95. ;;;;;;;;;;;;;;;;;-----------------------------------

  96. (setq ii 1)
  97.   (setq  ff (open (getfiled "请输入要保存的数据文件名" "" "dat" 1) "w"))
  98. (foreach n ptlst

  99.    (entmake (list '(0 . "text") (cons 10 n) '(7 . "HZ") (cons 40 zg)(cons 1 (rtos ii 2 0))))
  100. (setq nn (polar jidian (+ angle1 (angle jidian n)) (distance jidian n)  ))
  101. (write-line (strcat (vl-princ-to-string ii)"," ","(vl-princ-to-string (car nn)) ","(vl-princ-to-string (cadr nn))","(vl-princ-to-string (caddr nn))
  102. ) ff)
  103.   
  104. (setq ii (1+ ii))
  105.     )
  106.   (close ff)





  107. )
 楼主| 发表于 2015-8-31 20:15:17 | 显示全部楼层

  1. (defun c:gczbh1 (/ p qianzhui blc zg ss i lst e kkkk ptlst ff )

  2. (setq blc (getint "\n请输入比例尺1:"))
  3.   (setvar 'userr1 blc);设置比例尺
  4. (setq zg(* 0.002 blc));字高


  5. (defun get_inpoint (blockname)
  6.   (setq in_point(cdr (assoc 10 (entget blockname))))
  7.   in_point
  8. )


  9. (setq ss (ssget '((0 . "insert")))   )
  10. ;(setq jidian (getpoint "请选择基点:"))
  11. ;(setq fangx (getpoint  jidian "请选择方向点:"))
  12. ;(setq angle1 (* (angle jidian fangx) 1))
  13. ;(command "_.rotate" ss "" jidian "r" jidian fangx (polar jidian 0 100))

  14. (setq i 0)
  15. (setq lst '())
  16. (repeat (sslength ss)
  17. (setq insert_name (ssname ss i))
  18. (setq e(get_inpoint insert_name))
  19.   (setq lst (append lst (list e)))
  20. (setq i (1+ i))


  21.   )

  22. ;(setq ptlst (HH:ssPts:Sort lst "xyz" 0.0))
  23. ;@树櫴希德 点表按照特定点逆时针排序~
  24. (setq p (getpoint "\n指定排序方向"))
  25. (setq qianzhui  (getstring "\n请输入前缀:"))
  26. ;(setq ptlst(mapcar 'cdr (vl-sort (mapcar 'cons (mapcar '(lambda(x) (angle x p)) lst) lst) '(lambda (x y) (< (car x) (car y))))))


  27. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  28. (setq ptlst (vl-sort (reverse lst)
  29.                    ;以下根据x坐标对表排序
  30.    '(lambda (e1 e2)
  31.             (< (car e1) (car e2) )
  32.       (= (angle  e1 p))   )   )    )
  33. ;;;;;;;;;;;;;;;;;-----------------------------------


  34. (initget "1 2")
  35.   (prompt "\n坐标是否缩小1000倍:")
  36.   (setq kkkk (getkword "\n 1. 不用缩小1000倍  \  2. 缩小1000倍:<1>"))
  37.   (if (= kkkk nil) (setq kkkk "1"))
  38.   (setq ii 1)
  39.   (setq  ff (open (getfiled "请输入要保存的数据文件名" "" "dat" 1) "w"))
  40. ( cond ((= kkkk "1")
  41.    (progn
  42. (foreach n ptlst

  43.    (entmake (list '(0 . "text") (cons 10 n) '(7 . "HZ") (cons 40 zg)(cons 1 (strcat qianzhui (rtos ii 2 0))   )))

  44. (write-line (strcat qianzhui (vl-princ-to-string ii)"," ","(vl-princ-to-string (car n)) ","(vl-princ-to-string (cadr n))","(vl-princ-to-string (caddr n))
  45. ) ff)
  46.   
  47. (setq ii (1+ ii))
  48.     )(close ff)  ))
  49. ( (= kkkk "2")
  50. (progn
  51. (foreach n ptlst

  52.    (entmake (list '(0 . "text") (cons 10 n) '(7 . "HZ") (cons 40 (* 1000 zg))(cons 1 (strcat qianzhui (rtos ii 2 0))   )))

  53. (write-line (strcat qianzhui (vl-princ-to-string ii)"," ","(vl-princ-to-string (/ (car n) 1000)) ","(vl-princ-to-string (/ (cadr n) 1000))","(vl-princ-to-string (/ (caddr n) 1000))
  54. ) ff)
  55.   
  56. (setq ii (1+ ii))
  57.     )  (close ff)
  58. )
  59.   )

  60.    

  61. )
  62.   
  63.   





  64. )
发表于 2015-8-31 23:21:31 | 显示全部楼层
楼主研究精神值得我们学习

点评

不敢当 菜鸟一个 居然得到GZXL的表扬  发表于 2015-9-1 08:56
发表于 2015-9-7 09:08:18 | 显示全部楼层
楼主,不知道怎么使用。
发表于 2018-9-10 23:20:32 | 显示全部楼层
楼主,不知道怎么使用。
发表于 2018-12-7 03:45:16 | 显示全部楼层
楼主,你做成附件,供新手下载。比如 lgzh0008 他知道怎么使用。
发表于 2019-6-5 13:38:41 | 显示全部楼层
楼主是孤独求败
发表于 2019-7-27 13:18:58 | 显示全部楼层
感谢楼主分享
发表于 2020-11-28 11:07:16 | 显示全部楼层
这个要针对桩做成块才行,还有就是原图没有标注字出来,不知道哪里搞错了
发表于 2020-11-28 11:52:46 来自手机 | 显示全部楼层
看了代码,应该字体中要有hz这个样式才行,等回去试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-22 20:29 , Processed in 0.195580 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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