找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 190|回复: 0

对图元进行扎堆分组(方框分组)

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-6 12:47:59 | 显示全部楼层 |阅读模式
  1. ;;对图元进行扎堆分组(方框分组)作者:tryhi-大海
  2. (defun try-ss-zhadui-fenzu2 (ss dist / 采用intersect a b c ca cc flag l l1 lst n)
  3.         (defun 采用intersect (a b / ax1 ax2 ay1 ay2 bx1 bx1采用in采用a bx2 bx2采用in采用a by1 by1采用in采用a by2 by2采用in采用a)
  4.                 (if
  5.                         (not
  6.                                 (or
  7.                                         (< (setq ax2(caddr a)) (setq bx1(car b)));
  8.                                         (< (setq ay2(cadddr a)) (setq by1(cadr b)));
  9.                                         (> (setq ax1(car a)) (setq bx2(caddr b)));
  10.                                         (> (setq ay1(cadr a)) (setq by2(cadddr b)));
  11.                                 )
  12.                         )
  13.                         (list
  14.                                 (min ax1 bx1)(min ay1 by1)
  15.                                 (max ax2 bx2)(max ay2 by2)
  16.                         )
  17.                 )
  18.         )
  19.         ;(setq lst '())
  20.         (if ss
  21.                 (progn
  22.                         (setq l(zd采用ssbox ss))
  23.                         (setq l
  24.                                 (vl-sort;
  25.                                         l
  26.                                         '(lambda (a b / ax1 ax2 ay1 bx1 bx2 by1)
  27.                                                  (if (equal (setq ax1(car a)) (setq bx1(car b)) 1e-3)
  28.                                                          (if (equal (setq ay1(cadr a)) (setq by1(cadr b)) 1e-3)
  29.                                                                  (if (equal (setq ax2(caddr a)) (setq bx2(caddr b)) 1e-3)
  30.                                                                          (< (cadddr a) (cadddr b))
  31.                                                                          (< ax2 bx2)
  32.                                                                  )
  33.                                                                  (< ay1 by1)
  34.                                                          )
  35.                                                          (< ax1 bx1)
  36.                                                  )
  37.                                          )
  38.                                 )
  39.                         )
  40.                         (setq dist (* dist 0.5))
  41.                         (setq l(mapcar '(lambda(x)(list (- (car x) dist)(- (cadr x) dist)(+ (caddr x) dist)(+ (cadddr x) dist)))l))
  42.                         (setq k t r nil)
  43.                         (while k
  44.                                 (setq a(car l)lst nil)
  45.                                 (while (setq ca(car l))
  46.                                         (setq l(cdr l))
  47.                                         (if (setq c (采用intersect a (setq ca(car l))))
  48.                                                 (setq a c)
  49.                                                 (if (setq cc(vl-some '(lambda(x / b)(if(setq b(采用intersect a x))(list b x)))lst))
  50.                                                         (progn
  51.                                                                 (if (not(equal (car cc) (cadr cc)))
  52.                                                                         (setq lst(subst (car cc) (cadr cc)lst))
  53.                                                                 )
  54.                                                                 (setq a ca)
  55.                                                         )
  56.                                                         (setq lst(cons a lst)a ca)
  57.                                                 )
  58.                                         )
  59.                                 )
  60.                                 (if(=(length lst)(length r))
  61.                                         (setq k nil)
  62.                                         (setq r lst l lst)
  63.                                 )
  64.                         )
  65.                 )
  66.         )
  67.         (setq l(mapcar '(lambda(x)(list (+ (car x) dist)(+ (cadr x) dist)(- (caddr x) dist)(- (cadddr x) dist)))lst))
  68.         (mapcar '(lambda(x)(list(list(car x)(cadr x))(list(caddr x)(cadddr x))))l)
  69. )
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 17:48 , Processed in 0.132155 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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