明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1564|回复: 4

[已解答] 获取块实例中对象的信息

[复制链接]
发表于 2016-4-25 22:01:41 | 显示全部楼层 |阅读模式
20明经币
一个块由多段线和直线组成,图形中有很多该块的实例。各实例可能进行任意的变换(旋转、非等比的缩放。。),如何获取直线在各实例中的起点及终点?


附件: 您需要 登录 才可以下载或查看,没有账号?注册
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2016-4-26 15:42:55 | 显示全部楼层
本帖最后由 aihuyujian 于 2016-4-26 15:51 编辑

循环+遍历块 应该可以获取吧
我擦  没看见是大神提问  那估计 循环+遍历块 可能是获取不到了 。。。
回复

使用道具 举报

发表于 2016-4-26 21:19:06 | 显示全部楼层
不会在块内做遍历,不过如果块定义的基点在直线上,可以提取出一个直线的端点,在根据50组码和41,42,43组码将另外一个点算出来,
回复

使用道具 举报

 楼主| 发表于 2016-5-1 19:29:05 | 显示全部楼层
经过几天的搜索,发现了这个 http://bbs.mjtd.com/thread-99926-1-1.html
然后提取了满足问题的最少代码。

  1. ;;;-----------------------------------------------------------;;
  2. ;;; MAT:mxm Multiply two matrices -Vladimir Nesterovsky-      ;;
  3. ;;;-----------------------------------------------------------;;
  4. (defun mat:mxm (m q)
  5.   (mapcar (function (lambda (r) (mat:mxv (mat:trp q) r))) m)
  6. )

  7. ;;;-----------------------------------------------------------;;
  8. ;;; Matrix x Vector - Vladimir Nesterovsky                    ;;
  9. ;;; Args: m - nxn matrix, v - vector in R^n                   ;;
  10. ;;;-----------------------------------------------------------;;
  11. (defun mat:mxv (m v)
  12.   (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m)
  13. )

  14. ;;; MAT:trp Transpose a matrix -Doug Wilson-                  ;;
  15. ;;;-----------------------------------------------------------;;
  16. (defun mat:trp (m)
  17.   (apply 'mapcar (cons 'list m))
  18. )

  19. ;;;-----------------------------------------------------------;;
  20. ;;; MAT:RefGeom (gile)                                        ;;
  21. ;;; Returns a list which first item is a 3x3 transformation   ;;
  22. ;;; matrix(rotation,scales normal) and second item the object ;;
  23. ;;; insertion point in its parent(xref, bloc or space)        ;;
  24. ;;;                                                           ;;
  25. ;;; Argument : an ename                                       ;;
  26. ;;;-----------------------------------------------------------;;
  27. (defun mat:refgeom (ename / elst ang norm mat)
  28.   (setq        elst (entget ename)
  29.         ang  (cdr (assoc 50 elst))
  30.         norm (cdr (assoc 210 elst))
  31.   )
  32.   (list
  33.     (setq mat
  34.            (mat:mxm
  35.              (mapcar (function (lambda (v) (trans v 0 norm t)))
  36.                      '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0))
  37.              )
  38.              (mat:mxm
  39.                (list (list (cos ang) (- (sin ang)) 0.0)
  40.                      (list (sin ang) (cos ang) 0.0)
  41.                      '(0.0 0.0 1.0)
  42.                )
  43.                (list (list (cdr (assoc 41 elst)) 0.0 0.0)
  44.                      (list 0.0 (cdr (assoc 42 elst)) 0.0)
  45.                      (list 0.0 0.0 (cdr (assoc 43 elst)))
  46.                )
  47.              )
  48.            )
  49.     )
  50.     (mapcar
  51.       '-
  52.       (trans (cdr (assoc 10 elst)) norm 0)
  53.       (mat:mxv mat
  54.                (cdr (assoc 10 (tblsearch "BLOCK" (cdr (assoc 2 elst)))))
  55.       )
  56.     )
  57.   )
  58. )

  59. ;;; pt 块定义内的点
  60. ;;; insert 块实例图元
  61. ;;; 返回 指定实例内的点的WCS坐标值
  62. (defun block->wcs (pt insert / geom)
  63.   (setq geom (mat:refgeom insert))
  64.   (mapcar '+ (mat:mxv (car geom) pt) (cadr geom))
  65. )
回复

使用道具 举报

 楼主| 发表于 2016-5-1 19:30:52 | 显示全部楼层
本帖最后由 vectra 于 2016-5-1 19:40 编辑

好像不能把自己的贴子设成最佳答案 呵呵
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-23 15:33 , Processed in 0.202098 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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