乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 23|回复: 8

[编程交流] 查找精确插入点

[复制链接]

13

主题

36

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 07:54:26 | 显示全部楼层 |阅读模式
你好
 
有人知道如何使用autolisp查找块的精确插入点吗?
“精确”是指所有小数。
 
如果使用snap插入块,然后向左移动0.0000001。然后可以用autolisp找到该块吗?
 
提前感谢
/托马斯
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:06:06 | 显示全部楼层
与其他人的想法相反,当检索块的插入点时,它将为您提供准确的坐标。你可能看不到,但我现在告诉你。它是。
 
尝试在0,0坐标处插入块。移动块0.0000001,然后使用
  1. (Cdr (assoc 10 (entget (Car (entsel)))))

您将得到类似(1.0e-007 0.0 0.0)的结果
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:13:54 | 显示全部楼层
下面的代码将允许您查看可用的小数位数:
  1. (if (setq itemBlock (ssget ":S" '((0 . "INSERT"))))
  2. (progn
  3. (setq pointIns (cdr (assoc 10 (entget (ssname itemBlock 0)))))
  4. (prompt (strcat "\Insertion point:"
  5.                  "\n   X = " (rtos (car   pointIns) 2 18)
  6.                  "\n   Y = " (rtos (cadr  pointIns) 2 18)
  7.                  "\n   Z = " (rtos (caddr pointIns) 2 18)))
  8. )
  9. )
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 08:22:59 | 显示全部楼层
@pBe:虽然示例正确地显示了这一点,但我认为可能不清楚如何舍入错误。如果插入点远离0,0,0,并且与整数(整数)相差很小,则您可能会发现插入点的显示忽略了小数(这是由于LUPREC设置)。
 
@里普兹:即使你将精度设置得尽可能高,它也可能不会显示所有的小数。返回值(如pBe所示)仍然是“精确”点,但可能很难显示到绝对精度。在该点上的所有计算都使用entget返回的双精度浮点值,而不是在list命令的命令行上看到的值。它不是“完美”的精度,但它是最好的,因为acad本身只在内部使用双精度浮点。可能会出现一些小错误(称为浮点错误),但通常是16位或更少的十进制数字。http://en.wikipedia.org/wiki/Floating_point
回复

使用道具 举报

13

主题

36

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 08:27:14 | 显示全部楼层
 
好的,我明白了。。。我照你说的做了,我得到了和你一样的答案,但只有当x接近零时。
如果区块位于99.9999999,100,则答案为(100.0 100.0 0.0)。
 
我明白你的意思了。。。坐标是正确的坐标,只是没有精确显示。
为了证明这一点:
  1. (rtos (Cadr (assoc 10 (entget (Car (entsel))))) 2

 
感谢您快速回复pBe!
回复

使用道具 举报

13

主题

36

帖子

23

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 08:37:40 | 显示全部楼层
 
谢谢irneb,现在我明白了。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:43:09 | 显示全部楼层
还要记住,精度与数字的“大小”成反比:
  1. (rtos 12.345678901234567 2 18)
  2. [color=magenta];Return> "12.34567890123457"[/color]
  3. (rtos 1234567.8901234567 2 18)
  4. [color=magenta];Return> "1234567.890123457"[/color]
  5. (rtos 12345678901234.567 2 18)
  6. [color=magenta];Return> "12345678901234.57"[/color]
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 08:49:23 | 显示全部楼层
是的,16位数字表示总共16位。小数点后不是16。如Mircea所示,舍入/浮点误差随着距离0,0,0越远而变得越差。因此,我更喜欢绘制尽可能接近0,0,0的图形,并使用UCS进行坐标参考。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:00:03 | 显示全部楼层
 
真为你高兴
 
@Msasu/Irné
覆盖所有底座
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-15 03:21 , Processed in 7.306618 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表