明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2831|回复: 10

方格排序 感谢73哥等大神函数

[复制链接]
发表于 2017-12-12 15:16:20 | 显示全部楼层 |阅读模式
方格排序 感谢73哥等大神函数
  1. (defun zxzb (pts / len pt )
  2.   (setq len (length pts))
  3. (setq pt (mapcar
  4.   '(lambda(x)
  5.     (/ x len)
  6.   )
  7.   (apply
  8.     'mapcar
  9.     (cons '+ pts)
  10.   )
  11. )
  12. )  pt)


  13. (defun Plinexy(e / p a b n ob q et d d1 en et)
  14.     (setq a(entget e)ob(vlax-ename->vla-object e)et(cdr(assoc 0 a))n 0 p nil d nil)
  15.     (cond((="LWPOLYLINE"et)
  16.     (repeat(length a)(setq b (nth n a) n (+ n 1))
  17.       (if (= 10 (car b))(progn
  18.         (setq q(list (cadr b) (caddr b))d1(vlax-curve-getDistAtPoint ob q))
  19.         (if p (if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))
  20.           (setq p (list q)))))))
  21.    ((="POLYLINE"et)
  22.     (SETQ EN (ENTGET (SETQ E (ENTNEXT E))))
  23.     (WHILE (/= (CDR (ASSOC 0 EN)) "SEQEND")
  24.       (SETQ q (CDR (ASSOC 10 EN))d1(vlax-curve-getDistAtPoint ob q)q(reverse(cdr(reverse q))))
  25.       (if p(if (not(member d1 d)) (setq p (append p (list q))d (append d (list d1))))(setq p(list q)))
  26.       (SETQ EN (ENTGET (SETQ E (ENTNEXT E)))))
  27.     (setq p(reverse p))))P)

  28. (defun cx-ss2en
  29.   (ss / enlst)
  30.   (cond
  31.     ((= (type ss) 'PICKSET)
  32.       (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  33.     )
  34.     ((= (type ss) 'LIST)
  35.       (setq enlst (ssadd))
  36.       (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  37.     )
  38.     ((='ename(type ss))
  39.       (ssadd ss)
  40.     )
  41.   )
  42. )
  43.   ;;;;;;;;;;;;;;;;;;
  44. (defun t2t (p1 p2 p3 / p1 p2 p3) ;点到直线距离1
  45.   

  46.   (abs (car (trans (mapcar '- p3 p1) 0 (mapcar '- p2 p1))))
  47.   
  48. )   ;;;;;;;;;;;;;;;;

  49. (defun t1t (p1 p2 p3 / p1 p2 p3) ;点到直线距离2
  50.   

  51.    (car (trans (mapcar '- p3 p1) 0 (mapcar '- p2 p1)))
  52.   
  53. )

  54. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  55. (defun c:szpx (/ ssa kongbiao i ii zb paixuzb p1 p2 fgjj p3 cishu kb kbb iii)
  56. (setq ssa (ssget "x"'( (0 . "polyline")  (8 . "tf-fg1") ) ) )
  57. (setq kongbiao '()) (setq i 0)
  58. (foreach x (cx-ss2en ssa)
  59.      
  60.     (setq zb (zxzb(plinexy x))) (setq kongbiao (append (list zb) kongbiao)) (setq i (1+ i))
  61.   )

  62. (setq paixuzb (vl-sort kongbiao
  63.              (function (lambda (e1 e2)      (> (cadr e1)(cadr e2 ) )   
  64.               ) ) )
  65.        )
  66. (setq p1 (getpoint "\n请选择直线起点:"))
  67.   (setq p2 (getpoint "\n请选择直线第二点:"))
  68. (setq fgjj (getint "\n请输入方格间距(输入整数):"));输入整数
  69.   (setq p3 (last paixuzb))
  70. (setq cishu (+ 2 (fix (/ (t2t p1 p2 p3) fgjj )  ) ) )
  71. (setq kb '()) (setq ii 0)
  72. (repeat cishu
  73.    

  74. (setq kbb
  75. (vl-sort (vl-remove-if-not  (FUNCTION (LAMBDA (A1) (< (* -1 fgjj) (t1t (polar p1 (+ (* 0.5 pi)(angle p1 p2)) (* ii fgjj)) (polar p2 (+ (* 0.5 pi)(angle p1 p2)) (* ii fgjj)) A1) 0) ))  kongbiao)
  76.              (function (lambda (e1 e2)      (> (car e1)(car e2 ) )   
  77.               ) ) )

  78. )  
  79. (setq kb (append kbb kb))

  80. (setq ii (1+ ii))


  81.   )
  82.   (setq iii 0)
  83. (foreach n (reverse kb)


  84.    (entmake (list '(0 . "TEXT") '(8 . "fgbj")(cons 1 (rtos (+ iii 1) 2 0)) (cons 10 n ) (cons 40 1.0)))
  85.   (entmake (list '(0 . "circle") '(8 . "fgbj")(cons 62 3) (cons 10 n ) (cons 40 1.0)))
  86. (setq iii (1+ iii))

  87.   )

  88. (princ)
  89. )


本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
USER2128 + 1 赞一个!
BaoWSE + 1 赞一个!

查看全部评分

本帖被以下淘专辑推荐:

  • · excel|主题: 80, 订阅: 2
 楼主| 发表于 2017-12-12 15:50:14 | 显示全部楼层
欢迎下载 改进

本帖子中包含更多资源

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

x
发表于 2017-12-25 23:38:42 | 显示全部楼层
好贴!估计楼主也花了不少时间写这个代码
发表于 2017-12-29 08:59:30 | 显示全部楼层
选择直线起点是只能选择最北的直线并且得从右往左选择,不然就出错,能否优化一下
发表于 2018-1-4 16:40:45 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2018-1-4 16:48:28 | 显示全部楼层
本帖最后由 血司 于 2018-1-5 09:36 编辑

(defun c:lxybh (/ str k qz ss xxpx xxss zg)
        (setq ss (ssget (list '(0 . "*LWPOLYLINE")))
              zg (getreal"\n请输入标注字高:")
              qz (getstring"\n请输入前缀:")
        )
        (setq xxss nil)
        (foreach cc (lxy-ss->list ss)
                (setq xxss (append (list (lxy-poly-cen (lxy-poly-pts cc))) xxss))
        )
        (setq xxpx (lxy-pts-xy xxss 1 0))
        (setq k 0)
        (foreach aa xxpx
                (if (= qz nil)
                        (setq str (itoa (1+ k)))
                        (setq str (strcat qz (itoa (1+ k))))
                )
                (maketext aa str zg)
        )
        (princ)
)
发表于 2021-12-16 12:12:53 | 显示全部楼层
非常谢谢大侠分享
发表于 2022-5-6 16:38:24 | 显示全部楼层
你就是测绘板块的 劳模
发表于 2024-5-9 14:02:03 | 显示全部楼层
非常谢谢大侠分享
发表于 2024-6-12 15:32:54 | 显示全部楼层
(setq fgjj (getint "\n请输入方格间距(输入整数):"));输入整数
这句话的意义是什么呀,能不能帮忙解释下~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-22 21:56 , Processed in 0.276312 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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