乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 20|回复: 3

[编程交流] 需要有关边界框Mo的帮助

[复制链接]

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 19:47:14 | 显示全部楼层 |阅读模式
我现在有一个非常基本的LISP例程。它是为了在一张12x9的图纸上居中放置一组对象而写的(有些人不在乎他们的图纸是否居中……讨厌)。。
 
简而言之,它会提示用户使用SSGET选择对象。然后要求用户提供2个点,可以是包含对象组最外层界限的任何两个相对点。在建立SSGET和2个点后,我会根据2个点的中心将组移动到12x9图纸的中心。
 
我们绘制等距图,因此命令捕捉“I”和“S”。我让它按标准对齐,因此初学者可以快速将光标移动到任何给定组的范围。。见下面的代码
 
  1. (DEFUN C:CEN (/ *ERROR* oldsnap oldos)
  2. (defun *error* (msg)
  3.    (if oldos (setvar "osmode" oldos))
  4.    (if oldsnap (setvar "snapmode" oldsnap))
  5.    (if msg (prompt msg))
  6.    (princ)
  7. )
  8. (setvar "cmdecho" 0)
  9. (setq oldsnap (getvar "snapmode")
  10. (setq oldos (getvar "osmode"))
  11. (princ "\nSelect Object(s) to CENTER within the titleblock. ")
  12. (SETQ CENT3R (SSGET ))
  13. (command "snap" "s" "s" "")
  14. (setvar "snapmode" 0)
  15. (SETQ P1 (GETpoint "\nFirst corner of rectangle: "))
  16. (setvar "osmode" 0)
  17. (setq p2 (getCORNER P1 "\nSecond corner of rectangle: "))
  18. (COMMAND "MOVE" CENT3R "" "m2p" p1 p2 "M2P" "0,0" "12,9")
  19. (command "snap" "s" "i" "")
  20. (setvar "snapmode" oldsnap)
  21. (setvar "OSMODE" OLDOS)
  22. (SETQ CENT3R NIL)
  23. (*ERROR* NIL)
  24. (PRINT)
  25. )

 
我想使用BoundingBox函数自动获取SSGET的坐标,而不是要求用户获取矩形的第一个和第二个点。请参阅下面获取边界框坐标的代码。有人能帮我把这两个放在一起吗?谢谢,上帝保佑。
 
  1. (defun c:test ( / OBJ Point1 Point2 )
  2. (vl-load-com)
  3. (princ "\nSelect an object: ")
  4. (setq OBJ (vlax-ename->vla-object (ssname (ssget) 0)))
  5. (if OBJ
  6. (progn
  7. ;;OBJ is a vla-object
  8. ;;Point1 is the lower left point of the bounding box around the object
  9. ;;Point2 is the upper right point of the bounding box around the object
  10. (vla-getboundingbox OBJ 'Point1 'Point2)
  11. ;;Point1 and Point2 are returned as a safearray and need to be converted to a list
  12. (setq Point1 (vlax-safearray->list Point1))
  13. (setq Point2 (vlax-safearray->list Point2))
  14. (princ (strcat "\n The lower left corner is " (rtos (car Point1) 2 2) ", " (rtos (cadr Point1) 2 2)))
  15. (princ (strcat "\nThe upper right corner is " (rtos (car Point2) 2 2) ", " (rtos (cadr Point2) 2 2)))
  16. )
  17. )
  18. (princ) )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:14:06 | 显示全部楼层
下面是使用我的选择集边界框函数的快速草稿:
  1. (defun c:cen ( / s l )
  2.    (and (setq s (ssget "_:L"))
  3.         (setq l (LM:ssboundingbox s))
  4.         (command "_.move" s ""
  5.             "_non"  (apply 'mapcar (cons '(lambda ( a b ) (/ (+ a b) 2.0)) l))
  6.             "_non" '(6.0 4.5)
  7.         )
  8.    )
  9.    (princ)
  10. )
  11. ;; Selection Set Bounding Box  -  Lee Mac
  12. ;; Returns a list of the lower-left and upper-right WCS coordinates of a
  13. ;; rectangular frame bounding all objects in a supplied selection set.
  14. ;; s - [sel] Selection set for which to return bounding box
  15. (defun LM:ssboundingbox ( s / a b i m n o )
  16.    (repeat (setq i (sslength s))
  17.        (if
  18.            (and
  19.                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  20.                (vlax-method-applicable-p o 'getboundingbox)
  21.                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  22.            )
  23.            (setq m (cons (vlax-safearray->list a) m)
  24.                  n (cons (vlax-safearray->list b) n)
  25.            )
  26.        )
  27.    )
  28.    (if (and m n)
  29.        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  30.    )
  31. )
  32. (vl-load-com) (princ)
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 20:39:17 | 显示全部楼层
李先生,你又来了!我非常感谢您在CAD导师社区中为帮助这些人和我自己所做的不懈努力和奉献!你的日常工作完美无瑕!我祝你和你的家人一切顺利!:值得注意:
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:54:18 | 显示全部楼层
 
不客气!感谢您的感激和良好祝愿,我很高兴代码对您有所帮助。
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 01:10 , Processed in 0.878263 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表