找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[每日一码] 获取对象包围盒、最小包围盒-----(也适于UCS)

 火... [复制链接]
发表于 2015-10-8 14:21:53 | 显示全部楼层
hao !!!!!!!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

使用道具 举报

已领礼包: 96个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 96个

财富等级: 招财进宝

发表于 2015-11-14 12:10:07 | 显示全部楼层
本帖最后由 xiaolong100 于 2015-11-17 12:08 编辑

少了函数 Mat:EntityMatrix mat:mxp MAT:w2u MAT:u2w 在highflybird空间找到了,补上!谢谢!{:soso_e130:}


  1. ;;[功能] 图元当前坐标系下包围盒,4角点坐标
  2. ;
  3. ;4 = 左上;3 = 右上
  4. ;1 = 左下;2 = 右下
  5. ;
  6. ;;Flag : T时,返回最小包围盒角点;nil时,返回包围盒角点
  7. ;;说明 1 使用前加载须加载highflybird的程序Matrix-Lib.LSP
  8. ;;     2 作者保留本程序的一切权利,但你可以**拷贝与复制、修改本程序用于非商业目的
  9. ;;     3 自贡黄明儒 2013年10月8日
  10. ;;示例(HH:Ent4pt (car (entsel)) T),返回UCS坐标系下坐标
  11. (defun HH:Ent4pt (ent Flag / ENT LST MAT MAT1 MAXPT MINPT OBJ UCSFLAG X)
  12.   (cond ((= (type ent) 'ENAME)
  13.   (setq obj (vlax-ename->vla-object ent))
  14. )
  15. ((= (type ent) 'VLA-OBJECT) (setq obj ent))
  16. (T (exit))
  17.   )
  18.   (and Flag
  19.        (setq Mat (Mat:EntityMatrix ent))
  20.        (setq Mat1 (cadr Mat));Mat1 4x4
  21.        (setq Mat (car Mat));Mat 4x4
  22.   )
  23.   (if (= (getvar "WORLDUCS") 0)
  24.     (setq UcsFlag T)
  25.   )
  26.   (cond ((and Flag UcsFlag)
  27.   (vla-TransformBy obj (vlax-tmatrix Mat))
  28. )
  29. (UcsFlag (vla-TransformBy obj (vlax-tmatrix (MAT:u2w))))
  30. (Flag (vla-TransformBy obj (vlax-tmatrix Mat)))
  31.   )
  32.   (vla-GetBoundingBox obj 'minPt 'maxPt)   ;得到包围框
  33.   (setq minPt (vlax-safearray->list minPt))
  34.   (setq maxPt (vlax-safearray->list maxPt))
  35.   (cond ((and Flag UcsFlag)
  36.   (vla-TransformBy obj (vlax-tmatrix Mat1))
  37. )
  38. (UcsFlag (vla-TransformBy obj (vlax-tmatrix (MAT:w2u))))
  39. (Flag (vla-TransformBy obj (vlax-tmatrix Mat1)))
  40.   )
  41.   (setq lst (list minPt
  42.     (list (car maxPt) (cadr minpt) (caddr minPt))
  43.     maxPt
  44.     (list (car minpt) (cadr maxPt) (caddr minPt))
  45.      )
  46.   )
  47.   (COND (Flag nil)
  48. (UcsFlag (setq mat1 (MAT:w2u)))
  49.   )
  50.   (cond ((or Flag UcsFlag)
  51.   (setq lst (mapcar '(lambda (x) (mat:mxp mat1 x)) lst)) ;wcs坐标
  52.   (setq lst (mapcar '(lambda (x) (trans x ent 1)) lst))
  53. )
  54.   )
  55.   lst
  56. )

  57. ;;;-----------------------------------------------------------;;
  58. ;;; 平齐实体的变换矩阵  -by highflybird                       ;;
  59. ;;; 输入:Ent - 实体名                                        ;;
  60. ;;; 输出:平齐这个实体的变换矩阵和它的逆矩阵                  ;;
  61. ;;;-----------------------------------------------------------;;
  62. (defun Mat:EntityMatrix (Ent / z dxf Cen obj an m1 mat Inv org)
  63.   (setq dxf (entget ent))
  64.   (if (setq Cen (cdr (assoc 10 dxf)))                           ;Insertpoint,center or startpoint,etc.
  65.     (if (null (caddr Cen))
  66.       (setq Cen (append Cen '(0.0)))
  67.     )
  68.     (setq Cen '(0 0 0))
  69.   )
  70.   (setq obj (vlax-ename->vla-object Ent))
  71.   (if (and (vlax-property-available-p obj 'elevation)           ;If it has elevation value.
  72.            (wcmatch (vla-get-objectname obj) "*Polyline")       ;It's a "AcDb2dPolyline" or "AcDbPolyline" object
  73.       )
  74.     (setq z   (vla-get-elevation obj)
  75.           Cen (list (car Cen) (cadr Cen) (+ (caddr Cen) z))     ;add elevation value
  76.     )
  77.   )
  78.   (if (vlax-property-available-p obj 'rotation)                 ;if it has a rotaion angle
  79.     (setq an (vla-get-rotation obj))
  80.     (setq an 0)
  81.   )
  82.   (MAT:Align 0 Ent Cen an)                                      ;return two matrices, the first is WCS->OCS,the second is OCS->WCS
  83. )

  84. ;;;-----------------------------------------------------------;;
  85. ;;; 通用变换矩阵 by highflybird                               ;;
  86. ;;; 输入:from - 原坐标系,                                   ;;
  87. ;;;       to   - 目的坐标系,                                 ;;
  88. ;;;       Org  - 目的坐标系的原点相对原坐标系的位置           ;;
  89. ;;;       Ang  - 相对于原坐标系的旋转角度                     ;;
  90. ;;; 输出:两个矩阵,一个是从原坐标系变换到目的坐标系的变换矩阵;;
  91. ;;;       一个是从目的坐标系变换到原坐标系的变换矩阵          ;;
  92. ;;;-----------------------------------------------------------;;
  93. (defun MAT:Align (from to Org Ang / Mat Rot Inv Cen)
  94.   (setq Mat (mapcar (function (lambda (v) (trans v from to T)))
  95.                     '((1. 0. 0.) (0. 1. 0.) (0. 0. 1.))
  96.             )
  97.   )
  98.   (if (not (equal ang 0 1e-14))
  99.     (setq Rot (list (list (cos ang) (- (sin ang)) 0.)
  100.                     (list (sin ang) (cos ang) 0.)
  101.                     (list 0. 0. 1.)
  102.               )
  103.           mat (MAT:mxm mat Rot)
  104.     )
  105.   )
  106.   (setq Cen (trans Org to from))
  107.   (setq Inv (mat:trp mat))
  108.   (list
  109.     (Mat:DispToMatrix mat Cen)                                  ;from->to
  110.     (Mat:DispToMatrix Inv (mat:mxv mat (mapcar '- Cen)))        ;to->from
  111.   )
  112. )

  113. ;;;-----------------------------------------------------------;;
  114. ;;; 矩阵转置                                                  ;;
  115. ;;; MAT:trp Transpose a matrix -Doug Wilson-                  ;;
  116. ;;; 输入:矩阵                                                ;;
  117. ;;; 输出:转置后的矩阵                                        ;;
  118. ;;;-----------------------------------------------------------;;
  119. (defun MAT:trp (m)
  120.   (apply 'mapcar (cons 'list m))
  121. )

  122. ;;;-----------------------------------------------------------;;
  123. ;;; Append displacement vector to a matrix      -Highflybird- ;;
  124. ;;; 把位移矢量添加到矩阵中                                    ;;
  125. ;;; 输入:mat -- 矩阵(3x3),disp -- 位移矢量                  ;;
  126. ;;; 输出:一个4X4的变换CAD的标准变换矩阵                      ;;
  127. ;;;-----------------------------------------------------------;;
  128. (defun Mat:DispToMatrix (mat disp)
  129.   (append
  130.     (mapcar 'append mat (mapcar 'list disp))
  131.     '((0. 0. 0. 1.))
  132.   )
  133. )


  134. ;;;-----------------------------------------------------------;;
  135. ;;; 矩阵相乘                                                  ;;
  136. ;;; MAT:mxm Multiply two matrices -Vladimir Nesterovsky-      ;;
  137. ;;;-----------------------------------------------------------;;
  138. (defun MAT:mxm (m q)
  139.   (mapcar (function (lambda (r) (MAT:mxv (MAT:trp q) r))) m)
  140. )


  141. ;;;-----------------------------------------------------------;;
  142. ;;; 向量或点的矩阵变换(向量乘矩阵)                            ;;
  143. ;;; Matrix x Vector - Vladimir Nesterovsky                    ;;
  144. ;;; Args: m - nxn matrix, v - vector in R^n                   ;;
  145. ;;;-----------------------------------------------------------;;
  146. (defun MAT:mxv (m v)
  147.   (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m)
  148. )

  149. ;;;-----------------------------------------------------------;;
  150. ;;; ucs到wcs矩阵,也可称UCS的变换矩阵                         ;;
  151. ;;;-----------------------------------------------------------;;
  152. (defun MAT:u2w () (MAT:Trans 1 0))
  153. ;;;-----------------------------------------------------------;;
  154. ;;; wcs到ucs矩阵,也可称UCS的逆变换矩阵                       ;;
  155. ;;;-----------------------------------------------------------;;
  156. (defun MAT:w2u () (MAT:Trans 0 1))


  157. ;;;-----------------------------------------------------------;;
  158. ;;; 点的矩阵(4x4 matrix) 变换                                 ;;
  159. ;;; 输入:矩阵m和一个三维点p                                  ;;
  160. ;;; 输出:点变换后的位置                                      ;;
  161. ;;;-----------------------------------------------------------;;
  162. (defun MAT:mxp (m p)
  163.   (reverse (cdr (reverse (MAT:mxv m (append p '(1.0))))))
  164. )


  165. ;;下面的代码可以验证
  166. ;;148.1 [功能] 根据点表画多段线
  167. (defun draw-pline (pts)
  168.   (command "_PLINE")
  169.   (mapcar 'command pts)
  170.   (command "c")
  171. )

  172. (draw-pline (HH:Ent4pt (car (entsel)) T))
  173. ;;(draw-pline(HH:Ent4pt (car (entsel)) nil))

点评

缺少函数:(mat:trans 0 1)  详情 回复 发表于 2021-5-6 19:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3498个

财富等级: 富可敌国

发表于 2016-2-23 21:15:19 来自手机 | 显示全部楼层
学习一下大神作品……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 8711个

财富等级: 富甲天下

发表于 2016-6-3 08:57:26 | 显示全部楼层
学习一下黃老師作品……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 568个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 194个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 21:02 , Processed in 0.373994 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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