怎么样获取嵌套块引用的插入坐标? ( A->B->C->D,获取D在A里的坐标)
本帖最后由 takeeasy 于 2020-6-24 11:20 编辑各位大神,请教一个新手问题~ 十分感谢各位的阅读和回复
比如有4层嵌套块引用, A->B->C->D
A块引用 中有 B块引用
B块引用 中有 C块引用
C块引用 中有 D块引用
怎么获得D块引用在A块引用的位置坐标?
是通过一层层explode,把D打散到A块里, 再读坐标? 如果这样的话, 怎么用自动获取嵌套关系?
还是通过其他方法?
自己顶一下, 继续求助
就是要获得在位编辑里的树目录结构信息 takeeasy 发表于 2020-6-28 09:13
自己顶一下, 继续求助
就是要获得在位编辑里的树目录结构信息
图块都有变换矩阵,可以得到,嵌套得到没层的,
然后把矩阵左乘下,作用到对象就可以了 Lispboy 发表于 2020-6-28 09:16
图块都有变换矩阵,可以得到,嵌套得到没层的,
然后把矩阵左乘下,作用到对象就可以了
谢谢答复请问图块矩阵是什么?怎么获得?
现在该问题我曲线解决了
通过dictionary记录下 blocks里的所以对应关系
D : C
C : B
B : A
比如我要获得D在A的坐标, 那么
用sendcommand be依次进入B 块引用 炸开 C块引用,.....进入A块引用 炸开B块引用,
Lispboy 发表于 2020-6-28 09:16
图块都有变换矩阵,可以得到,嵌套得到没层的,
然后把矩阵左乘下,作用到对象就可以了
谢谢楼主的热情答复.
不太清楚具体怎么操作 采用递归就解决了。
如下:
(defun get::block:nr(e / mat0)
(if (equal (xdrx-getpropertyvalue e "IsA") "AcDbBlockReference")
(progn
(setq mat0 (xdrx-getpropertyvalue e "BlockTransform")
mat (cons mat0 mat)
);;;setq
(mapcar
'(lambda(x)
(if (not (equal (xdrx-getpropertyvalue x "IsA") "AcDbBlockReference"))
(if (equal (xdrx-getpropertyvalue x "IsA") "AcDbPolyline")
(setq lst (cons (list mat x) lst))
);;if
(get::block:nr x)
);;;if
);;;lambda
(xdrx-getpropertyvalue e "Entities")
);;;mapcar
);;;progn
);;;if
);;;defun
(progn
(setq lst nil
mat nil
e (car (xdrx-entsel "\n拾取块<退出>:" '((0 . "insert"))))
)
(get::block:nr e)
(mapcar
'(lambda(x)
(xdrx-polyline-make
(xdrx-points-transform
(xdrx-getpropertyvalue (cadr x) "GetSamplePoints")
(apply 'xdrx-matrix-product (car x))
);;;xdrx
t
);;;xdrx
);;;lambda
lst
);;;mapcar
) 这是获取嵌套图块中多段线,并将其坐标进行转换后,绘制的图形,测试下,就明白啥意思了。
嵌套最适合的方式就是递归。
页:
[1]