找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1505|回复: 6

[每日一码] 函数 UcsBoundingBox

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-12-12 18:20:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
by gile
  1. ;; gc:TMatrixFromTo
  2. ;; Returns the 4X4 transformation matrix from a coordinate system to an other one
  3. ;;
  4. ;; Arguments
  5. ;; from to: same arguments as for the 'trans' function

  6. (defun gc:TMatrixFromTo (from to)
  7.   (append
  8.     (mapcar
  9.       (function
  10.   (lambda  (v o)
  11.     (append (trans v from to T) (list o))
  12.   )
  13.       )
  14.       (list '(1. 0. 0.) '(0. 1. 0.) '(0. 0. 1.))
  15.       (trans '(0. 0. 0.) to from)
  16.     )
  17.     (list '(0. 0. 0. 1.))
  18.   )
  19. )

  20. ;; gc:UcsBoundingBox
  21. ;; Returns the UCS coordinates of the object bounding box about current UCS
  22. ;;
  23. ;; Arguments
  24. ;; obj: an entity (ENAME or VLA-OBJCET)
  25. ;; _OutputMinPtSym: a quoted symbol (output)
  26. ;; _OutputMaxPtSym: a quoted symbol (output)

  27. (defun gc:UcsBoundingBox (obj _OutputMinPtSym _OutputMaxPtSym)
  28.   (vl-load-com)
  29.   (and (= (type obj) 'ENAME)
  30.        (setq obj (vlax-ename->vla-object obj))
  31.   )
  32.   (vla-TransformBy obj (vlax-tmatrix (gc:TMatrixFromTo 1 0)))
  33.   (vla-GetBoundingBox obj _OutputMinPtSym _OutputMaxPtSym)
  34.   (vla-TransformBy obj (vlax-tmatrix (gc:TMatrixFromTo 0 1)))
  35.   (set _OutputMinPtSym (vlax-safearray->list (eval _OutputMinPtSym)))
  36.   (set _OutputMaxPtSym (vlax-safearray->list (eval _OutputMaxPtSym)))
  37. )

  38. ;; gc:SelSetUcsBBox
  39. ;; Returns the UCS coordinates of the object bounding box about current UCS
  40. ;;
  41. ;; Arguments
  42. ;; ss: a selection set
  43. ;; _OutputMinPtSym: a quoted symbol (output)
  44. ;; _OutputMaxPtSym: a quoted symbol (output)

  45. (defun gc:SelSetUcsBBox  (ss _OutputMinPtSym _OutputMaxPtSym / n l1 l2)
  46.   (repeat (setq n (sslength ss))
  47.     (gc:UcsBoundingBox (ssname ss (setq n (1- n))) _OutputMinPtSym _OutputMaxPtSym)
  48.     (setq l1 (cons (eval _OutputMinPtSym) l1)
  49.     l2 (cons (eval _OutputMaxPtSym) l2)
  50.     )
  51.   )
  52.   (set _OutputMinPtSym (apply 'mapcar (cons 'min l1)))
  53.   (set _OutputMaxPtSym (apply 'mapcar (cons 'max l2)))
  54. )


for test
  1. (defun c:test (/ ss minpt maxpt)
  2.   (if (setq ss (ssget))
  3.     (progn
  4.       (gc:SelSetUcsBBox ss 'minpt 'maxpt)
  5.       (vl-cmdf
  6.   (if (equal (caddr minpt) (caddr maxpt) 1e-6)
  7.     "_.rectangle"
  8.     "_.box"
  9.   )
  10.   "_non"
  11.   minpt
  12.   "_non"
  13.   maxpt
  14.       )
  15.     )
  16.   )
  17.   (princ)
  18. )


Another one.
  1. ;;;Function: Get BuondingBox
  2. ;;;arg :
  3. ;;;      ss -- Select set or a Ename
  4. ;;;   onseg -- T or NIL , if T then returns the box in UCS , if NIL in WCS
  5. ;;;Support in UCS
  6. ;;;Written by Highflybird
  7. ;;;Edited by GSLS(SS), 2011-02-16
  8. (defun ss-get-boundingbox (ss    onseg   /  Wmat   Umat   i
  9.          ent    obj   minPt  maxPt  minLs  maxLs
  10.          maxX    maxY   minX  minY pts
  11.         )
  12.   (if ss
  13.     (progn
  14.       (if (eq (type ss) 'ENAME)
  15.   (setq ss (ssadd ss (ssadd)))
  16.       )
  17.       (if (and onseg (= (getvar "WORLDUCS") 0))
  18.   (setq Wmat (gc:TMatrixFromTo 1 0)
  19.         Umat (gc:TMatrixFromTo 0 1)
  20.   );_Use gile's nice function
  21.       )
  22.       (setq i 0)
  23.       (setq minPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
  24.       (setq maxPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
  25.       (repeat (sslength ss)
  26.   (setq ent (ssname ss i)
  27.         obj (vlax-ename->vla-object ent)
  28.   )
  29.   (if Wmat
  30.     (vla-TransformBy obj (vlax-tmatrix Wmat))
  31.   )
  32.   (vla-GetBoundingBox obj 'minpt 'maxpt)
  33.   (setq minPt (vlax-safearray->list minPt)
  34.         maxPt (vlax-safearray->list maxPt)
  35.         minLs (cons minPt minLs)
  36.         maxLs (cons maxPt maxLs)
  37.   )
  38.   (if Umat
  39.     (vla-TransformBy obj (vlax-tmatrix Umat))
  40.   )
  41.   (setq i (1+ i))
  42.       )
  43. ;_Is there better way to get the other coner points , if it's in 3D UCS ?
  44. ;_Perhaps it'n use 'trans' function ...
  45.       (setq minX (apply 'min (mapcar 'car minLs)))
  46.       (setq minY (apply 'min (mapcar 'cadr minLs)))
  47.       (setq maxX (apply 'max (mapcar 'car maxLs)))
  48.       (setq maxY (apply 'max (mapcar 'cadr maxLs)))
  49.       (setq pts  (list (list minX minY 0)
  50.           (list maxX minY 0)
  51.           (list maxX maxY 0)
  52.           (list minX maxY 0)
  53.     )
  54.       )
  55.       (if Wmat
  56.   (mapcar  (function (lambda (x)
  57.           (trans x 1 0)
  58.         )
  59.     )
  60.     pts
  61.   )
  62.   pts
  63.       )
  64.     )
  65.   )
  66. )
  67. (defun c:test (/
  68.        ss
  69.       )
  70.   ;(svos)
  71.   (if (setq ss (ssget))
  72.     (draw-pl (list (ss-get-boundingbox ss NIL)));_test in UCS return the wcs box
  73.   )
  74.   ;(clos)  
  75.   (princ)
  76. )
  77. (defun draw-pl (lst)
  78.   (entmake
  79.     (append
  80.       '((0 . "LWPOLYLINE")
  81.   (100 . "AcDbEntity")
  82.   (100 . "AcDbPolyline")
  83.        )
  84.       (list (cons 90 (length (car lst))))
  85.       (mapcar (function (lambda (x) (cons 10 x))) (car lst))
  86.       (list (cons 70 1))
  87.       (cdr lst)
  88.     )
  89.   )
  90. )


评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-12 18:35:03 | 显示全部楼层
做什么用的,能给介绍介绍吗?

GILE是谁?

点评

回版主大人,这个不用介绍了吧,你应该一看就懂的,哈哈, Gile 是theswamp 上的一位牛人,分享过很多函数,赞!  详情 回复 发表于 2014-12-12 18:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-12 18:42:11 | 显示全部楼层
newer 发表于 2014-12-12 18:35
做什么用的,能给介绍介绍吗?

GILE是谁?

回版主大人,这个不用介绍了吧,你应该一看就懂的,哈哈,
Gile 是theswamp 上的一位牛人,分享过很多函数,赞!

点评

我知道不代表别人也知道啊,所以分享函数最好是说下做什么的,如果有图就更好了。  详情 回复 发表于 2014-12-12 18:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-12 18:44:11 | 显示全部楼层
lucas3 发表于 2014-12-12 18:42
回版主大人,这个不用介绍了吧,你应该一看就懂的,哈哈,
Gile 是theswamp 上的一位牛人,分享过很多函 ...

我知道不代表别人也知道啊,所以分享函数最好是说下做什么的,如果有图就更好了。

点评

上面有英文注释的 ,懂lisp的应该都明白的,你都知道我是一个门外汉,你要我解释,我只能抓狂了  详情 回复 发表于 2014-12-12 18:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-12-12 18:50:36 | 显示全部楼层
newer 发表于 2014-12-12 18:44
我知道不代表别人也知道啊,所以分享函数最好是说下做什么的,如果有图就更好了。

上面有英文注释的 ,懂lisp的应该都明白的,你都知道我是一个门外汉,你要我解释,我只能抓狂了{:soso_e118:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3913个

财富等级: 富可敌国

发表于 2014-12-12 19:39:51 | 显示全部楼层
当ss中有样条曲线时,结果似乎不正确。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

发表于 2021-7-30 00:26:03 | 显示全部楼层
感谢楼主分享函数 UcsBoundingBox
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 13:50 , Processed in 0.317564 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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