找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2588|回复: 3

[图块] (XD::Block:GetXClipInfo)获取一个裁剪块的详细信息关联表

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-7-6 16:15:10 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Block:GetXClipInfo
调用格式: (XD::Block:GetXClipInfo e)
参数说明: e ---- 裁剪块实体名
返回值: 关联表

Enabled---裁剪是否启用
coords--- 剪切空间局部坐标系(原点,Z轴)
PntSums-- 剪切多边形顶点数(如果是2,我们还需计算出矩形的4个顶点)
Pnts1-----多边形顶点表(定义在j剪切空间局部坐标系下)
Pnts2-----实际的裁剪边界顶点表
Bound---上下边界数据,0表示无边界
Mat----剪切空间局部坐标系到块定义的转换矩阵
rMat---逆块矩阵
函数简介: 获取一个裁剪块的详细信息
函数来源: 二次修改
函数作者:
适用版本: XDRX API 
最后更新时间: 2013-07-06
备注: (setq a (XD::BLOCK:GETXClipINFO (entlast)))
(("Enabled" . 1) ("Coords" (0.0 0.0 0.0) (0.0 0.0 1.0)) ("PntSums" 4) ("Pnts1"
(2649.22 -719.847 0.0) (3066.33 -1167.41 0.0) (3556.48 -854.309 0.0) (3060.57
-456.686 0.0)) ("Pnts2" (217.582 -1131.71 0.0) (-390.278 -1062.42 0.0) (-559.51
-1618.87 0.0) (75.819 -1599.0 0.0)) ("Bound" 0.0 0.0) ((-0.760246 0.649635 0.0
2699.28) (-0.649635 -0.760246 0.0 42.0589) (0.0 0.0 1.0 0.0) (0.0 0.0 0.0 1.0))
("rMat" (1.0 0.0 0.0 0.0) (0.0 1.0 0.0 0.0) (0.0 0.0 1.0 0.0) (0.0 0.0 0.0
1.0)))
演示图片: -

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

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

×
本帖最后由 Lispboy 于 2013-7-6 17:28 编辑

xclip.gif


使用函数前请加载XDRX_API 和 XD通用LISP函数库最新版
关于裁剪块的精彩讨论,见帖子http://www.xdcad.net/forum/thread-668258-1-1.html
裁剪块的应用篇:  http://www.xdcad.net/forum/thread-668298-1-1.html

  1. ;|
  2. 获取一个裁剪块的详细信息
  3. 参数
  4.    e ---- 裁剪图块名

  5. 返回值: 表

  6. 说明:
  7. Enabled---裁剪是否启用
  8. coords---局部坐标系(原点,Z轴)
  9. PntSums-- 剪切多边形顶点数(如果是2,我们还需计算出矩形的4个顶点)
  10. Pnts1-----多边形顶点表(定义在局部坐标系下)
  11. Pnts2-----实际的裁剪边界顶点表(UCS坐标系)
  12. Bound---上下边界数据,0表示无边界
  13. Mat----剪切空间局部坐标系到块定义的转换矩阵
  14. rMat---逆块矩阵
  15. |;
  16. (defun XD:Block:GetXClipInfo (e / bb bound coords d d1 enabled i info mat mat1 mat2 mat3 mat4 normal orin p1 p2 p3 p4
  17.                                   pnt pnts pnts1 rmat ub v zaxis
  18.                                )
  19.   (defun _spatialMat (mat / d d1 i mat1 mat2 mat3 mat4)
  20.     (setq i 0)
  21.     (repeat 12
  22.       (setq d (nth i mat))
  23.       (cond
  24.         ((and
  25.            (>= i 0)
  26.            (< i 4)
  27.          )
  28.           (setq d1 (cdr d)
  29.                 mat1 (cons d1 mat1)
  30.           )
  31.         )
  32.         ((and
  33.            (>= i 4)
  34.            (< i 8)
  35.          )
  36.           (setq d1 (cdr d)
  37.                 mat2 (cons d1 mat2)
  38.           )
  39.         )
  40.         (t
  41.           (setq d1 (cdr d)
  42.                 mat3 (cons d1 mat3)
  43.           )
  44.         )
  45.       )
  46.       (setq i (1+ i))
  47.     )
  48.     (list (reverse mat1) (reverse mat2) (reverse mat3) '(0.0 0.0 0.0 1.0))
  49.   )
  50.   (if (setq info (XD::Block:GetSpatialFilter e))
  51.     (progn
  52.       (setq orin (cdr (assoc 11 info))
  53.             enabled (cdr (assoc 71 info))
  54.             Enabled (cons "Enabled" enabled)
  55.             normal (assoc 210 info)
  56.             zAxis (cons "zAxis" (cdr (assoc 210 info)))
  57.             Coords (cons "Coords" (list orin (cdr zAxis)))
  58.             pnts (assoc 70 info)
  59.             pnt (list "PntSums" (cdr pnts))
  60.             pnts (XD::AssocList:K1->Kn info 70 210 t)
  61.             pnts (cons "Pnts1" (cdr pnts))
  62.             uB (cdr (assoc 72 info))
  63.             ub (cond
  64.                  ((= 72 1)
  65.                    (cdr (cdr (member uB info)))
  66.                  )
  67.                  (t
  68.                    0.0
  69.                  )
  70.                )
  71.             bB (cdr (assoc 73 info))
  72.             bb (cond
  73.                  ((= 73 1)
  74.                    (cdr (cdr (member bB info)))
  75.                  )
  76.                  (t
  77.                    0.0
  78.                  )
  79.                )
  80.             bound (list "Bound" ub bb)
  81.             mat (XD::AssocList:GetDataByKeyWithNums info 40 24)
  82.             mat1 (XD::AssocList:GetDataByKeyWithNums mat 40 12)
  83.             mat2 (reverse (XD::AssocList:GetDataByKeyWithNums (reverse mat) 40 12))
  84.             mat1 (_spatialMat mat1)
  85.             Mat (cons "Mat" mat1)
  86.             mat2 (_spatialMat mat2)
  87.             rMat (cons "rMat" mat2)
  88.       )
  89.       (setq pnts1 (cdr pnts)               ; 得到剪切空间的点表
  90.             mat1 (cdr Mat)               ; 得到剪切空间到块容器坐标系的变换矩阵
  91.             mat2 (xdrx_matrix_block2wcs e) ; 得到块容器坐标系到世界坐标系的变换矩阵
  92.       )
  93.       (if (= 2 (length pnts1))               ; 如果是2点,算出矩形
  94.         (progn
  95.           (setq p1 (car pnts1)
  96.                 p3 (cadr pnts1)
  97.                 v (mapcar
  98.                     '-
  99.                     p3
  100.                     p1
  101.                   )
  102.                 p2 (mapcar
  103.                      '+
  104.                      p1
  105.                      (list (car v) 0 0)
  106.                    )
  107.                 p4 (mapcar
  108.                      '+
  109.                      p1
  110.                      (list 0 (cadr v) 0)
  111.                    )
  112.                 pnts1 (list p1 p2 p3 p4)
  113.           )
  114.         )
  115.       )
  116.       (setq mat (xdrx_matrix_wcs2ucs)) ;;世界坐标系到UCS坐标系变换矩阵
  117.       (setq pnts1 (XD::Pnts:TransForm pnts1 (XD::Matrix:Product (list mat  mat2 mat1)))) ; 剪切空间点变换到当前UCS坐标系
  118.       (list Enabled Coords pnt pnts (cons "Pnts2" pnts1) bound mat rmat)
  119.     )
  120.   )
  121. )




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

已领礼包: 15个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 15个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 07:01 , Processed in 0.427873 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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