明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1361|回复: 6

嵌套块坐标

[复制链接]
发表于 2015-9-1 20:50:18 | 显示全部楼层 |阅读模式
假如一块内含多个块 子块又含有直线 园 等图元 我想批量提取子图元 圆CIRCLE的坐标,循环老是有问题,大侠们看看
  1. (defun INSERT1 ( ENT11 / OBJ LST)
  2. (setq OBJ (vlax-ename->vla-object ENT11))
  3. (vlax-for X
  4. (vla-item
  5. (vla-get-blocks (vla-get-ActiveDocument(vlax-get-acad-object)))
  6. (vla-get-name OBJ)
  7. )
  8. (setq lst (cons (vlax-vla-object->ename X) LST))
  9. )
  10. LST
  11. )
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. (defun c:gczbh1 (/ p qianzhui blc zg ss i lst1t e kkkk ptlst ff )

  14. (setq blc (getint "\n请输入比例尺1:"))
  15.   (setvar 'userr1 blc);设置比例尺
  16. (setq zg(* 0.002 blc));字高


  17. (defun get_inpoint (blockname)
  18.   (setq in_point(cdr (assoc 10 (entget blockname))))
  19.   in_point
  20. )


  21. (setq ss (ssget '((0 . "insert")))   )
  22. ;(setq jidian (getpoint "请选择基点:"))
  23. ;(setq fangx (getpoint  jidian "请选择方向点:"))
  24. ;(setq angle1 (* (angle jidian fangx) 1))
  25. ;(command "_.rotate" ss "" jidian "r" jidian fangx (polar jidian 0 100))

  26. (setq i 0)
  27.   (setq lsttt '())
  28. (setq lst '())
  29.   (setq lstt '())
  30. (repeat (sslength ss)
  31. (setq insert_name (ssname ss i))
  32.   (SETQ E (INSERT1 insert_name))
  33. (foreach x E
  34.   ;;;;;;;;;;;;;;
  35.         ;;;;;;;;;;;;;;;;
  36. (if   (= (cdr (assoc 0(entget x))) "insert")
  37.   (progn
  38.     (setq PPP  (INSERT1 x))
  39.    
  40.   (mapcar  '(lambda (xxx)
  41.     (if (= (cdr (assoc 0(entget xxx)) ) "CIRCLE"   ) (progn
  42. (setq zhuobiao (cdr (assoc 10(entget xxx))))
  43.   (setq lstt (append lstt (list zhuobiao)))    ) )  
  44.     )
  45.         ppp)
  46.   )

  47.   ;;;;;;;;;;;;;;;;;;;;;
  48.   (if  (= (cdr (assoc 0(entget x)) ) "CIRCLE"   )
  49.     (progn
  50.      (setq zhuobiao (cdr (assoc 10(entget x))))
  51.     (setq lstt (append lstt (list zhuobiao)))
  52. );;;;;;;;;;;;;;;;;;;;
  53. )
  54.   )
  55. ;(setq e(get_inpoint insert_name))
  56.   
  57.   (setq lst (append lst lstt))
  58.   
  59. (setq i (1+ i))

  60.   )
  61. )
发表于 2015-9-1 21:18:54 | 显示全部楼层
一般都是递归法,lisp或vlisp都可以。
 楼主| 发表于 2015-9-1 21:29:36 | 显示全部楼层
edata 发表于 2015-9-1 21:18
一般都是递归法,lisp或vlisp都可以。

不懂递归
发表于 2015-9-1 22:35:53 | 显示全部楼层
  1. ;;vla版递归遍历图元
  2. ;;(sk_get_blk->ent obj) obj= 插入块的vla-object
  3. ;;by edata 2015-9-1
  4. (defun sk_get_blk->ent(blk / blk_name  blocks n lst)
  5.   (if(and blk (= (vla-get-objectname blk) "AcDbBlockReference"))
  6.     (progn
  7.       (setq blk_name(vla-get-name blk))
  8.       (setq blocks(vla-get-blocks(vla-get-activedocument(vlax-get-acad-object))))
  9.       (vlax-for n (vla-item blocks blk_name)
  10.         (cond ((= (vla-get-objectname n) "AcDbBlockReference")
  11.               (setq lst(append (sk_get_blk->ent n) lst ))
  12.                )
  13.               (t (setq lst(cons n lst)))
  14.               )
  15.         )
  16.       (reverse lst)
  17.       )
  18.     )
  19.   )

  20. ;;test
  21. (defun c:tt(/ obj all_blk_en)
  22.   (setq obj(vlax-ename->vla-object (car(entsel))))
  23.   (setq all_blk_en(mapcar 'vlax-vla-object->ename (sk_get_blk->ent obj)))
  24.   )
  25.   
 楼主| 发表于 2015-9-2 11:25:21 | 显示全部楼层
本帖最后由 树櫴希德 于 2015-9-2 11:31 编辑
edata 发表于 2015-9-1 22:35
这段代码能返回0次嵌套图元名,返回的图元名10组是以母块插入点为0基准的,但是大神上面那个是以字块插入点为基准的,可不可以修改下返回的图元名10组也以母块插入点为基准啊
  1. (defun INSERT1 ( ENT11 / OBJ LST)
  2. (setq OBJ (vlax-ename->vla-object ENT11))
  3. (vlax-for X
  4. (vla-item
  5. (vla-get-blocks (vla-get-ActiveDocument(vlax-get-acad-object)))
  6. (vla-get-name OBJ)
  7. )
  8. (setq lst (cons (vlax-vla-object->ename X) LST))
  9. )
  10. LST
  11. )
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
发表于 2015-9-2 12:16:11 | 显示全部楼层
这个涉及到坐标转换;
假设一个块内的坐标点是: x ,y ,z ,且一般不考虑法线矢量。
插入块的缩放比例是u, v ,w
块的旋转角度是  a
块的插入点坐标是 x0,y0,z0
那么这个点在世界坐标系是:
u*cos(a)*x - v*sin(a)*y + X0,
u*sin(a)*x +v*cos(a)*y +Y0,
w*Z0                      BY highflybird


 楼主| 发表于 2015-9-2 13:11:56 | 显示全部楼层
edata 发表于 2015-9-2 12:16
这个涉及到坐标转换;
假设一个块内的坐标点是: x ,y ,z ,且一般不考虑法线矢量。
插入块的缩放比例是u, ...

关键是信息丢失 分的太彻底了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 07:30 , Processed in 0.182339 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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