明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2073|回复: 2

[已解答] 矩形框排列

[复制链接]
发表于 2014-10-13 15:20:57 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 simpleye 于 2015-5-9 13:01 编辑

看下一个贴子

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-10-13 23:50:32 来自手机 | 显示全部楼层
看我的帖子,源码已经发了
回复

使用道具 举报

发表于 2014-10-16 16:42:14 | 显示全部楼层
(defun c:px (/ ss ssen)
  (prompt "\n先选择对齐的图块\n")
  (setq tkss (ssget '((0 . "INSERT"))))   ;获得参照块
  (setq ssen (cdr(assoc 2(entget(ssname tkss 0))))) ;获得图块名
  (setq sgetlst (list '(0 . "INSERT") (cons 2 ssen))) ;过滤表
  (prompt "对齐的图块为:")
  (prompt ssen)
  (setq ss (ssget sgetlst)) ;过滤图块并且选择指定块名 得到选择集SS

   (setq lst1 nil)
  (setq i 0)
  (repeat (sslength ss)    ;获得左下角点表lst1
    (setq lst1 (cons (xnth 0 (get-box (ssname ss i))) lst1))
    (setq i (1+ i))
  )                 ;end rep
                                       
  (setq lst2 (HH:ssPts:Sort lst1 "xy" 0.1))
                                        ;排序按X,lst2
  (setq zuozx (car(car lst2)))          ;最左边的点 x坐标

  (setq i 0) ;循环计数
  (repeat (length lst1)
    (setq dis1(-  (car(xnth i lst1)) zuozx)) ;获得第一个x坐标,用最左的减去这个 获得值然后MOVE

       ;判断代码
          (setq x 0)
          (setq en nil)
          (repeat (sslength ss)
            (if        (equal (car (car (get-box (ssname ss x))))
                       (car(xnth i lst1))
                       0.1
                )
              (setq en (ssname ss x))
            )
            (setq x (1+ x))
          )
    ;end if
      (command "move"
                     en                        ;获得这个图元名判断一下
                     ""
                     "_non"
                     (car lst1)
                     "_non"
                     (a (car lst1) dis1)
            )
    (setq ss (ssdel en ss)) ;删除图元  
    ;从SS中删除这个图元名
    ;(setq lst1 (enth  i i lst1)) 从lst中删除这个点表 放弃!
    (setq i (1+ i)) ;循环计数
    )






  (setq ss (ssget sgetlst))
  (setq lst1 nil)
  (setq i 0)
  (repeat (sslength ss)
    (setq lst1 (cons (xnth 0 (get-box (ssname ss i))) lst1))
    (setq i (1+ i))
  )
  (setq lstmp lst1)
                                        ;获得左下角点表
  (setq        tmpy (-        (car (cdr (xnth 1 (get-box (ssname ss 0)))))
                (car (cdr (xnth 0 (get-box (ssname ss 0)))))
             )
  )
                                        ;获取图框高度
  (setq lst1 (HH:ssPts:Sort lst1 "xy" 0.1))
                                        ;排序按X
  (setq tmpx (car (car lst1)))
                                        ;查看对其左边的x坐标
  (setq i 1)
  (while (equal tmpx (car (xnth i lst1)) 0.1)
    (setq i (1+ i))
  )
                                        ;查看有几个
  (setq lst2 (newnth 0 (- i 1) lst1))
                                        ;获得对其左边点的点表
  (setq j 0)
  (setq h 0)
                                        ;下面循环左边图框个数
  (repeat (length lst2)
                                        ;(setq tmpay (car (cdr (xnth j lst2))))
                                        ;除去左边图框 获得y值
    (setq zuoy (car (cdr (xnth h lst2)))
                                        ;获得h位置的y值 ,为最左边框
          fw   (+ zuoy tmpy)
    )
    (setq i 0)                                ;获得匹配的范围  为 zuoy 到 fw
                                        ;获得最
    (repeat (length lstmp)
      (if (and (> (car (cdr (xnth i lstmp))) zuoy)
               (< (car (cdr (xnth i lstmp))) fw)
          )
        (progn
          (setq dis (- (car (cdr (xnth i lstmp))) zuoy))

                                        ;正在判断
          (setq x 0)
          (setq en nil)
          (repeat (sslength ss)
            (if        (equal (car (cdr (car (get-box (ssname ss x)))))
                       (car (cdr (xnth i lstmp)))
                       0.1
                )
              (setq en (ssname ss x))
            )
            (setq x (1+ x))
          )
                                        ;判断结束
          (if en
            (command "move"
                     en                        ;需要判断是谁的点
                     ""
                     "_non"
                     (car lst1)
                     "_non"
                     (s (car lst1) dis)
            )
          )
                                        ;move
        )
      )
      (setq i (1+ i))
    )
    (setq h (1+ h))
  )
)


引用鱼与熊掌的帖子:http://bbs.mjtd.com/thread-111724-1-1.html



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 09:36 , Processed in 0.171093 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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