查找精确插入点
你好有人知道如何使用autolisp查找块的精确插入点吗?
“精确”是指所有小数。
如果使用snap插入块,然后向左移动0.0000001。然后可以用autolisp找到该块吗?
提前感谢
/托马斯 与其他人的想法相反,当检索块的插入点时,它将为您提供准确的坐标。你可能看不到,但我现在告诉你。它是。
尝试在0,0坐标处插入块。移动块0.0000001,然后使用
(Cdr (assoc 10 (entget (Car (entsel)))))
您将得到类似(1.0e-007 0.0 0.0)的结果 下面的代码将允许您查看可用的小数位数:
(if (setq itemBlock (ssget ":S" '((0 . "INSERT"))))
(progn
(setq pointIns (cdr (assoc 10 (entget (ssname itemBlock 0)))))
(prompt (strcat "\Insertion point:"
"\n X = " (rtos (car pointIns) 2 18)
"\n Y = " (rtos (cadrpointIns) 2 18)
"\n Z = " (rtos (caddr pointIns) 2 18)))
)
) @pBe:虽然示例正确地显示了这一点,但我认为可能不清楚如何舍入错误。如果插入点远离0,0,0,并且与整数(整数)相差很小,则您可能会发现插入点的显示忽略了小数(这是由于LUPREC设置)。
@里普兹:即使你将精度设置得尽可能高,它也可能不会显示所有的小数。返回值(如pBe所示)仍然是“精确”点,但可能很难显示到绝对精度。在该点上的所有计算都使用entget返回的双精度浮点值,而不是在list命令的命令行上看到的值。它不是“完美”的精度,但它是最好的,因为acad本身只在内部使用双精度浮点。可能会出现一些小错误(称为浮点错误),但通常是16位或更少的十进制数字。http://en.wikipedia.org/wiki/Floating_point
好的,我明白了。。。我照你说的做了,我得到了和你一样的答案,但只有当x接近零时。
如果区块位于99.9999999,100,则答案为(100.0 100.0 0.0)。
我明白你的意思了。。。坐标是正确的坐标,只是没有精确显示。
为了证明这一点:
(rtos (Cadr (assoc 10 (entget (Car (entsel))))) 2
感谢您快速回复pBe!
谢谢irneb,现在我明白了。 还要记住,精度与数字的“大小”成反比:
(rtos 12.345678901234567 2 18)
;Return> "12.34567890123457"
(rtos 1234567.8901234567 2 18)
;Return> "1234567.890123457"
(rtos 12345678901234.567 2 18)
;Return> "12345678901234.57" 是的,16位数字表示总共16位。小数点后不是16。如Mircea所示,舍入/浮点误差随着距离0,0,0越远而变得越差。因此,我更喜欢绘制尽可能接近0,0,0的图形,并使用UCS进行坐标参考。
真为你高兴
@Msasu/Irné
覆盖所有底座
页:
[1]