明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2350|回复: 4

路基水泥搅拌桩(CLRCLE)坐标导出并编号 ,73哥函数

[复制链接]
发表于 2015-9-7 16:26:45 | 显示全部楼层 |阅读模式
路基水泥搅拌桩(CLRCLE)坐标导出并编号 ,73哥函数
  1. (defun makepl(argments);;argments==>(list pts 闭合标志 全局宽度 线宽 图层 颜色 厚度 线型)pts以后可省略
  2.   (entmakex(append(mapcar'cons'(0 100 100 43 370 8 62 39 6)(append'("LWPOLYLINE""AcDbEntity""AcDbPolyline")(cddr argments)))
  3.       (cons(cons 90(length(car argments)))
  4.            (cons(cons 70(if(cadr argments)(cadr argments)0))(mapcar'(lambda(x)(cons 10 x))(car argments)))))))
  5. (defun poinpl(p pt);;:点是否在指定点表内
  6.   (equal(abs(apply'+(mapcar'(lambda(x y)(rem(-(angle x p)(angle y p))pi))pt(cons(last pt)pt))))pi 1e-8))
  7. (defun plinexy(e)
  8.   (mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))(entget e)))
  9.   )
  10. (defun SsgetW(arg / a);;选择指定矩形区域内(不限屏幕范围)
  11.   (ssget"X"(apply'append(list'((-4 . "<and")(-4 . ">=,>="))
  12.            (setq a(list(car arg)(cadr arg))
  13.            a(mapcar'(lambda(x)(mapcar x a))'(car cadr))
  14.            a(mapcar'(lambda(y)(cons 10(mapcar'(lambda(x)(apply y x))a)))'(min max))
  15.            a(list(car a)'(-4 . "<=,<=")(cadr a)))
  16.            (cddr arg)
  17.            '((-4 . "and>")))))
  18.   )
  19. (defun SsgetCP(arg / a i pt s b);;根据多线段图元名或者其坐标点表进行(ssget"CP"...)但不限屏幕范围
  20.   (if(listp(setq a(car arg)))
  21.     (setq pt a a(vlax-ename->vla-object(makepl(list pt))))
  22.     (setq pt(plinexy a)a(vlax-ename->vla-object a)))
  23.   (if(setq i -1
  24.      s(SsgetW(append(mapcar'(lambda(x)(mapcar'(lambda(y)(apply x y))
  25.           (mapcar'(lambda(x)(mapcar x pt))'(car cadr))))'(min max))(cdr arg)))
  26.      s(if(SSMEMB(vlax-vla-object->ename a)s)(ssdel(vlax-vla-object->ename a)s)s))
  27.     (repeat(sslength s)
  28.       (setq i(1+ i)e(ssname s i))
  29.       (if(not(or(>(vlax-safearray-get-u-bound(vlax-variant-value(vla-intersectwith(vlax-ename->vla-object e)a 0))1)1)
  30.     (poinpl(cdr(assoc 10(entget e)))pt)))
  31.   (setq b(cons e b)))))
  32.   (if(listp(car arg))(vla-Delete a))
  33.   (foreach a b(setq s(ssdel a s)))s)
  34. (defun SsgetWP(arg / a i pt s b);;根据多线段图元名或者其坐标点表进行(ssget"WP"...)但不限屏幕范围
  35.   (if(listp(setq a(car arg)))
  36.     (setq pt a a(vlax-ename->vla-object(makepl(list pt))))
  37.     (setq pt(plinexy a)a(vlax-ename->vla-object a)))
  38.   (if(setq i -1
  39.      s(SsgetW(append(mapcar'(lambda(x)(mapcar'(lambda(y)(apply x y))
  40.           (mapcar'(lambda(x)(mapcar x pt))'(car cadr))))'(min max))(cdr arg)))
  41.      s(if(SSMEMB(vlax-vla-object->ename a)s)(ssdel(vlax-vla-object->ename a)s)s))
  42.     (repeat(sslength s)
  43.       (setq i(1+ i)e(ssname s i))
  44.       (if(or(>(vlax-safearray-get-u-bound(vlax-variant-value(vla-intersectwith(vlax-ename->vla-object e)a 0))1)1)
  45.      (not(poinpl(cdr(assoc 10(entget e)))pt)))
  46.   (setq b(cons e b)))))
  47.   (if(listp(car arg))(vla-Delete a))
  48.   (foreach a b(setq s(ssdel a s)))s)



  49. ;;;
  50. (defun maketext (zb gd /  cld )
  51.   (setq cld (polar zb (* 0.25 pi) (* 2 gd) ))
  52. (entmake (list
  53. '(0 . "LINE")
  54. '(67 . 0)
  55. '(8 . "0")
  56. (list 10 (car zb) (cadr zb) 0)
  57. (cons 11 cld )
  58. '(210 0.0 0.0 1.0)
  59. )
  60. )
  61. ;;;
  62. (entmake (list
  63. '(0 . "LINE")
  64. '(67 . 0)
  65. '(8 . "0")
  66. (cons 10 cld)
  67. (cons 11 ( polar cld 0 (* 10 gd)) )
  68. '(210 0.0 0.0 1.0)
  69. )
  70. )
  71. ;;;;
  72. (entmake (list
  73. '(0 . "text")
  74. (list 10 (+ (car cld) gd) (car(cdr cld)) )
  75. (cons 40 gd)
  76. (cons 1 ( strcat "X=" (rtos (cadr zb) 2 3)))
  77. '(50 . 0)
  78. )
  79. )
  80. (entmake (list
  81. '(0 . "text")
  82. (list 10 (+ (car cld) gd)
  83. (- (car(cdr cld)) (+ gd (/ gd 3)) )
  84. )
  85. (cons 40 gd)
  86. (cons 1 (strcat "Y="(rtos (car zb) 2 3)))
  87. '(50 . 0)
  88. )
  89. )
  90. (princ)
  91. )
  92. ;
  93. (defun maketext1 (zb gd /  cld )
  94.   (setq cld (polar zb (* 0.25 pi) (* 2 gd) ))
  95. (entmake (list
  96. '(0 . "LINE")
  97. '(67 . 0)
  98. '(8 . "0")
  99. (list 10 (car zb) (cadr zb) 0)
  100. (cons 11 cld )
  101. '(210 0.0 0.0 1.0)
  102. )
  103. )
  104. ;;;
  105. (entmake (list
  106. '(0 . "LINE")
  107. '(67 . 0)
  108. '(8 . "0")
  109. (cons 10 cld)
  110. (cons 11 ( polar cld 0 (* 10 gd)) )
  111. '(210 0.0 0.0 1.0)
  112. )
  113. )
  114. ;;;;
  115. (entmake (list
  116. '(0 . "text")
  117. (list 10 (+ (car cld) gd) (car(cdr cld)) )
  118. (cons 40 gd)
  119. (cons 1 ( strcat "X=" (rtos (/ (cadr zb) 1000) 2 3)))
  120. '(50 . 0)
  121. )
  122. )
  123. (entmake (list
  124. '(0 . "text")
  125. (list 10 (+ (car cld) gd)
  126. (- (car(cdr cld)) (+ gd (/ gd 3)) )
  127. )
  128. (cons 40 gd)
  129. (cons 1 (strcat "Y="(rtos (/ (car zb) 1000) 2 3)))
  130. '(50 . 0)
  131. )
  132. )
  133. (princ)
  134. )

  135. ;货物分两组(样品 库存)
  136. (defun lst->2lst(lst / lst1 lst2)
  137.   (setq lst1 '() lst2 '())
  138. (foreach a lst
  139.     (if (member a lst2)
  140.       (setq lst1 (cons a lst1))
  141.       (setq lst2 (cons a lst2))
  142.     )
  143.   )
  144. (cons (reverse lst2) (reverse lst1))
  145. )


  146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  147. (defun c:gczbh1 (/ p qianzhui blc zg ss i lstt e kkkk ptlst ff sjzb xx ee zhuobiao lst )

  148. (setq blc (getint "\n请输入比例尺1:"))
  149.   (setvar 'userr1 blc);设置比例尺
  150. (setq zg(* 0.002 blc));字高
  151. (setq ss (SsgetWP (list(car (entsel))'(0 . "circle") )) )
  152.   (setq i 0)
  153.   (setq lst '())
  154.   
  155.   
  156. (repeat (sslength ss)
  157.   (setq insert_name (ssname ss i))
  158.   (setq sjzb (cdr (assoc 10(entget insert_name))))
  159.   
  160. ;(setq e(get_inpoint insert_name))
  161.    
  162.   (setq lst (append lst (list sjzb)))
  163.   
  164. (setq i (1+ i))
  165. )
  166. ;(setq ptlst (HH:ssPts:Sort lst "xyz" 0.0))
  167. ;@树櫴希德 点表按照特定点逆时针排序~
  168. (setq p (getpoint "\n指定排序方向"))
  169. (setq qianzhui  (getstring "\n请输入前缀:"))
  170. ;(setq ptlst(mapcar 'cdr (vl-sort (mapcar 'cons (mapcar '(lambda(x) (angle x p)) lst) lst) '(lambda (x y) (< (car x) (car y))))))


  171. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  172. (setq ptlst (vl-sort (car (lst->2lst (reverse lst)))
  173.                    ;以下根据x坐标对表排序
  174.    '(lambda (e1 e2)
  175.             (< (car e1) (car e2) )
  176.       (= (angle  e1 p))   )   )    )
  177. ;;;;;;;;;;;;;;;;;-----------------------------------


  178. (initget "1 2")
  179.   (prompt "\n坐标是否缩小1000倍:")
  180.   (setq kkkk (getkword "\n 1. 不用缩小1000倍  \  2. 缩小1000倍:<1>"))
  181.   (if (= kkkk nil) (setq kkkk "1"))
  182.   (setq ii 1)
  183.   (setq  ff (open (getfiled "请输入要保存的数据文件名" "" "dat" 1) "w"))
  184. ( cond ((= kkkk "1")
  185.    (progn
  186. (foreach n ptlst

  187.    (entmake (list '(0 . "text") (cons 10 n) '(7 . "HZ") (cons 40 (* 1 zg))(cons 1 (strcat qianzhui (rtos ii 2 0))   )))
  188. (maketext n (* 1 zg))
  189. (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))
  190. ) ff)
  191.   
  192. (setq ii (1+ ii))
  193.     ) (close ff)  ))
  194. ( (= kkkk "2")
  195. (progn
  196. (foreach n ptlst

  197.    (entmake (list '(0 . "text") (cons 10 n) '(7 . "HZ") (cons 40 (* 1000 zg))(cons 1 (strcat qianzhui (rtos ii 2 0))   )))
  198. (maketext1 n (* 1000 zg))
  199. (write-line (strcat qianzhui (vl-princ-to-string ii)"," ","(vl-princ-to-string (/ (car n) 1000)) ","(vl-princ-to-string (/ (cadr
  200. n) 1000))","(vl-princ-to-string (/ (caddr n) 1000))
  201. ) ff)
  202.   
  203. (setq ii (1+ ii))
  204.     )  (close ff)
  205. )
  206.   )

  207.    

  208. )
  209.   
  210.   





  211. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
tigcat + 1 很给力!

查看全部评分

发表于 2015-9-8 11:20:57 | 显示全部楼层
测绘版楼主出了好多实用的程序!
发表于 2015-9-8 13:41:52 | 显示全部楼层
出成果了.赞一个
发表于 2020-11-28 22:35:50 | 显示全部楼层
楼主出了几个桩基编号的程序,感觉都很棒。刚学lisp的人可能会有点摸不着头脑
简要说明:1、楼主示范gif是桩以m为单位展示的,比如桩直径0.4m,字高比例为0.002*你输入的1:X的X,如果你的图时mm为单位,X输10000以上可能才看的见字高。
2、前缀字符。如果图纸名称无“HZ”字体样式,则前缀字符在图纸中无法生成,但输出dat表中有
展望:这个程序由于具有选取多段线给多段线里面桩编号功能,可拓展为以承台为个体,按承台位置的上下左右排序,再以每个承台里面的桩上下左右编号。
总之,是个很棒的程序。开始使用时由于字体原因没摸着头脑,看到相关的代码后就顺畅了。楼主程序扩展性很强!
发表于 2021-12-16 12:16:02 | 显示全部楼层
非常谢谢大侠分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 03:27 , Processed in 0.242430 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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