明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 704|回复: 1

[提问] 请教点表按照从左往右,从上到下排序怎么弄?

[复制链接]
发表于 2023-5-1 14:44:23 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 sbwdx 于 2023-5-1 14:47 编辑

以下代码来自论坛前辈:
(defun c:tt ( / box e i ss)
(defun ebox (e / pa pb)
         (Vlax-Invoke-Method (Vlax-Ename->Vla-Object e ) 'GetBoundingBox 'pa 'pb )
             (setq pa (trans (vlax-safearray->list pa) 0 1)
                   pb (trans (vlax-safearray->list pb) 0 1)
             )
             (list pa pb)
)
        (setq ss (ssget '((0 . "INSERT"))))
        (repeat (setq i (sslength ss))
                (setq e (ssname ss (setq i (1- i)))
                        box (ebox e)
                )
                (vl-cmdf "rectang" (car box) (cadr box))
        )
)
想请教一下大家, e对象的box 一组坐标点pa pb 是随机排序的,怎么对e对象的一组坐标点pa pb,按照从左往右,从上到下排序后
vl-cmdf  rectang 按照排序后,从左往右,从上到下排序依次绘制矩形,谢谢!

最佳答案

查看完整内容

左右优先,上下其次,fuzz用于上下坐标误差内还认为是同一行
发表于 2023-5-1 14:44:24 | 显示全部楼层
  1. (defun c:tt (/ box e i ss  )
  2.   (defun ebox (e / pa pb)
  3.     (Vlax-Invoke-Method
  4.       (Vlax-Ename->Vla-Object e)
  5.       'GetBoundingBox
  6.       'pa
  7.       'pb
  8.     )
  9.     (setq pa (trans (vlax-safearray->list pa) 0 1)
  10.           pb (trans (vlax-safearray->list pb) 0 1)
  11.     )
  12.     (list pa pb)
  13.   )
  14.   (setq thisdrawing (vla-get-activedocument
  15.                           (vlax-get-acad-object)))
  16. (vla-startundomark thisdrawing)



  17.   (setq        ss     (ssget '((0 . "INSERT")))
  18.         boxlst nil
  19.         FUZZ 0;;;;坐标误差,相差这么大被认为是一行
  20.   )
  21.   (repeat (setq i (sslength ss))
  22.     (setq e         (ssname ss (setq i (1- i)))
  23.           box         (ebox e)
  24.           boxlst (cons box boxlst)

  25.     )
  26.   )
  27.   (setq
  28.     boxlst (vl-sort
  29.              boxlst
  30.              (function (lambda (e1 e2)
  31.                          (if (equal (cadr (car e1)) (cadr (car e2))FUZZ)
  32.                            (< (car (car e1)) (car (car e2)))
  33.                            (> (cadr (car e1)) (cadr (car e2)))          
  34.                          )
  35.                        )
  36.              )
  37.            )
  38.   )
  39. ;;;  (setq i 1)
  40.   (foreach box boxlst
  41.     (vl-cmdf "rectang" (car box) (cadr box))
  42. ;;;    (Make-TEXT (car box) (rtos i 2 0) 0.11)
  43. ;;;    (SETQ I(1+ I))
  44.    
  45.   )

  46. (vla-endundomark thisdrawing)


  47. )
  48. (defun Make-TEXT (pt str Textheigh)
  49.   (entmakeX
  50.     (list '(0 . "TEXT") (cons 1 str) (cons 10 pt) (cons 40 Textheigh))
  51.   )
  52. )


左右优先,上下其次,fuzz用于上下坐标误差内还认为是同一行
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 16:29 , Processed in 0.170057 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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