明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 226|回复: 2

选择集中心点的快速求法

[复制链接]
发表于 2021-9-4 20:34 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2021-9-4 20:46 编辑

选择集图元很多的时候,会卡机,摸索下怎么快速求得。

  • ;; 选择集中心点--ss 选择集-------(一级)--------------------------
  • (defun ssmpt1 (ss / i s1 box ptn a p1 p5 num)
  •   ;;e 实体名  返回 (左下 右上)
  •   (defun ebox2p (e / pa pb)
  •     (Vlax-Invoke-Method (en2obj 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 num (sslength ss) i -1)
  •   (if (< num 100)
  •     (progn
  •       (repeat num
  •         (setq s1 (ssname ss (setq i (1+ i))))
  •         (setq box (ebox2p s1) ptn (append box ptn))
  •       )
  •       (setq a (mapcar '(lambda (x) (apply 'mapcar (cons x ptn))) (list 'min 'max))
  •         p1 (car a)
  •         p9 (cadr a)
  •         p5 (sl:mid p1 p9)
  •       )
  •     )
  •     (progn
  •       (command "_zoom" "_object" ss "")
  •       (setq p5 (getvar "viewctr"))
  •       (command "_zoom" "_p")
  •     )
  •   )
  •   p5
  • )


想不起是否还有不卡,更快的办法。

发表于 2021-9-6 09:51 | 显示全部楼层
分享一个别人写的

;;获得选择集的中心
;[用法](GetMidPt  选择集)
;[返回](点)
(defun GetMidPt (ss / i lstX lstY vn pt X1 X2 Y1 Y2)
        (setq i    0
                lstX '()
                lstY '()
        )
        (repeat (sslength ss)
                (setq vn (vlax-ename->vla-object (ssname ss i))
                        i  (1+ i)
                )
                (setq pt (vl-catch-all-apply 'vla-getBoundingBox (list vn 'MinPt 'MaxPt)))
                (if (not (vl-catch-all-error-p pt))
                        (progn
                                (setq
                                        X1 (vlax-safeArray-get-element MinPt 0)
                                        X2 (vlax-safeArray-get-element MaxPt 0)
                                        Y1 (vlax-safeArray-get-element MinPt 1)
                                        Y2 (vlax-safeArray-get-element MaxPt 1)
                                )
                                (cond
                                        ;; if this is the first time run,then put the value it .
                                        ((null lstX)
                                                (setq lstX (list X1 X2)
                                                        lstY (list Y1 Y2)
                                                )
                                        )
                                        ;; NOTE here,  .
                                        (T
                                                ;; X-Min .
                                                (if (< X1 (car lstX))
                                                        (setq lstX (list X1 (cadr lstX)))
                                                )
                                                ;; X-Max
                                                (if (> X2 (cadr lstX))
                                                        (setq lstX (list (car lstX) X2))
                                                )
                                                ;; Y-Min .
                                                (if (< Y1 (car lstY))
                                                        (setq lstY (list Y1 (cadr lstY)))
                                                )
                                                ;; Y-Max
                                                (if (> Y2 (cadr lstY))
                                                        (setq lstY (list (car lstY) Y2))
                                                )
                                        )
                                )
                        )
                )
        )
        ;; return the point  .
        (if lstX
                (list (* (apply '+ lstX) 0.5) (* (apply '+ lstY) 0.5) 0)
                nil
        )
)
发表于 2021-9-28 23:05 | 显示全部楼层
cghdy 发表于 2021-9-6 09:51
分享一个别人写的

;;获得选择集的中心

好用 学习了~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2021-10-25 13:23 , Processed in 0.478759 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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