luctifo 发表于 2022-7-6 07:31:11

帮助:然后查找最长的行

你好
我需要一些帮助来设置一系列图形的限制(LIMMIN,LIMMAX)。
限制要设置为标题栏框架,标题栏框架被分解:(有时会移动!我尝试混搭一些lisp,但没有成功。我认为这应该是最简单的方法:
 
-在层“TB”上查找最长的行[应在标题栏层上查找2行(顶部和底部)]。
-找到左下角,从找到的线的坐标中找到右上角。
-相应地分配LIMMIN和LIMMAX。
 
可选:删除LIMMIN和LIMMAX之外的所有内容。
 
“Lee Mac”和“alanjt”的Lisp程序让我开始:
http://www.cadtutor.net/forum/archive/index.php/t-51523.html
 
 
谢谢

Lee Mac 发表于 2022-7-6 07:52:30

欢迎来到CADTutor luctifo。
 
考虑以下功能:
 
http://lee-mac.com/ssboundingbox.html

luctifo 发表于 2022-7-6 08:21:41

谢谢你的帮助!
 

(defun c:TBLimits (/ ss i l1 l2 ll ur bb)
; With help from function "SelectionSet BoundingBox" by Lee Mac
(setq ss (ssget "X" '((0 . "LINE") (8 . "_TB"))))
(repeat (setq i (sslength ss))
(vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'll 'ur)
(setq l1 (cons (vlax-safearray->list ll) l1)
l2 (cons (vlax-safearray->list ur) l2)
)
)
(setq bb (mapcar '(lambda (a b) (apply 'mapcar (cons a b))) '(min max) (list l1 l2)))

(setvar "LIMMIN" (list (car (car bb)) (cadr (car bb)) ))
(setvar "LIMMAX" (list (car (cadr bb)) (cadr (cadr bb)) ))

(princ)
)
(vl-load-com)

Lee Mac 发表于 2022-7-6 08:49:26

嗨,luctifo,
 
请阅读适用于我网站上所有代码的使用条款,并在使用我的代码的地方保留我的代码标题。
 
对于您的程序,只需按如下方式调用我的函数:
 
(defun c:tblimits ( / box sel )
   (if (setq sel (ssget "_X" '((0 . "LINE") (8 . "_TB"))))
       (progn
         (setq box (LM:SSBoundingBox sel))
         (setvar 'limmin (mapcar '+ (carbox) '(0 0)))
         (setvar 'limmax (mapcar '+ (cadr box) '(0 0)))
       )
   )
   (princ)
)
(vl-load-com) (princ)

;;--------------=={ SelectionSet BoundingBox }==--------------;;
;;                                                            ;;
;;Returns the lower-left and upper-right points of a      ;;
;;rectangle bounding all objects in a supplied SelectionSet ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;ss - SelectionSet for which to return the BoundingBox   ;;
;;------------------------------------------------------------;;
;;Returns:Point List decribing BoundingBox (in WCS)       ;;
;;------------------------------------------------------------;;

(defun LM:SSBoundingBox ( ss / i l1 l2 ll ur )
   (repeat (setq i (sslength ss))
       (vla-getboundingbox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'll 'ur)
       (setq l1 (cons (vlax-safearray->list ll) l1)
             l2 (cons (vlax-safearray->list ur) l2)
       )
   )
   (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list l1 l2))
)
页: [1]
查看完整版本: 帮助:然后查找最长的行