乐筑天下

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

[编程交流] 检索选择时拾取的边

[复制链接]

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 06:23:31 | 显示全部楼层 |阅读模式
我正在寻找一种可靠的解决方案来检索用户为选择3DFace实体而拾取的边缘。我试图检查从拾取点(由SSNAMEX函数返回)到所述3DFace实体的每条边的距离,并保留最短的一条。不幸的是,在三维视图中进行选择时,拾取点可能离实体很远,并且从实体到拾取边的距离不一定是最短的距离。
解决方法是在当前视图上投影所有点(拾取一个和3DFace的顶点),并比较上述距离;到目前为止,这个解决方案似乎是可靠的。
 
我想知道是否有更有效的解决方案?任何建议或解决方案都将不胜感激。感谢您的关注!
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 06:36:12 | 显示全部楼层
可能有帮助3dface由4个点组成最后=第一个为3个点
 
因此,如果你将你的拾取点的角度与壁橱pt和2pt之间的线的角度进行比较,应该相差很小,希望这有意义
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 06:43:18 | 显示全部楼层
比格尔,谢谢你的建议,但我不确定我是否听懂了。你能贴张草图吗?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 06:51:33 | 显示全部楼层
我认为你无法通过ssnamex识别这些信息。我认为(恩塞尔)会是一个更好的选择。然后进行(is_point_on_line)测试并验证其是否为奇异解(不是蝶形面)
 
  1. ;;;++++++++++ 3D Is Point On Line ++++++++++++++++++++++++++++++++++++++
  2. ;;;ARG -> TestPt LinePt1 LinePt2 Fuzz
  3. ;;;RET T nil
  4. (defun is_pt_online (pt l1 l2 fz)
  5. (and (numberp fz)
  6.       (equal (distance l1 l2)
  7.              (+ (distance l1 pt)
  8.                 (distance l2 pt)) fz)))

 
-大卫
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:00:01 | 显示全部楼层
  1. [b][color=BLACK]([/color][/b]defun c:fedge [b][color=FUCHSIA]([/color][/b]/ in en ed sp el[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]defun is_pt_online [b][color=NAVY]([/color][/b]pt l1 l2 fz[b][color=NAVY])[/color][/b]
  3. [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]numberp fz[b][color=MAROON])[/color][/b]
  4.       [b][color=MAROON]([/color][/b]equal [b][color=GREEN]([/color][/b]distance l1 l2[b][color=GREEN])[/color][/b]
  5.              [b][color=GREEN]([/color][/b]+ [b][color=BLUE]([/color][/b]distance l1 pt[b][color=BLUE])[/color][/b]
  6.                 [b][color=BLUE]([/color][/b]distance l2 pt[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] fz[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  7. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not en[b][color=MAROON])[/color][/b]
  8.             [b][color=MAROON]([/color][/b]/= [color=#2f4f4f]"3DFACE"[/color] [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 0 [b][color=RED]([/color][/b]entget en[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.         [b][color=NAVY]([/color][/b]setq in [b][color=MAROON]([/color][/b]entsel [color=#2f4f4f]"\nSelect 1 3DFACE:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]car in[b][color=MAROON])[/color][/b]
  11.               sp [b][color=MAROON]([/color][/b]osnap [b][color=GREEN]([/color][/b]cadr in[b][color=GREEN])[/color][/b] [color=#2f4f4f]"NEA"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  12. [b][color=FUCHSIA]([/color][/b]setq ed [b][color=NAVY]([/color][/b]entget en[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  13. [b][color=FUCHSIA]([/color][/b]foreach e '[b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]1 2[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]2 3[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]3 4[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]4 1[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  14.    [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]is_pt_online sp [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc [b][color=RED]([/color][/b]+ [b][color=PURPLE]([/color][/b]car e[b][color=PURPLE])[/color][/b] 9[b][color=RED])[/color][/b] ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  15.                         [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc [b][color=RED]([/color][/b]+ [b][color=PURPLE]([/color][/b]cadr e[b][color=PURPLE])[/color][/b] 9[b][color=RED])[/color][/b] ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]  1e-8[b][color=MAROON])[/color][/b]
  16.        [b][color=MAROON]([/color][/b]setq el [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]car e[b][color=BLUE])[/color][/b] el[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]if el
  18.    [b][color=NAVY]([/color][/b]progn
  19.      [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nPoint "[/color][b][color=MAROON])[/color][/b]
  20.      [b][color=MAROON]([/color][/b]prin1 sp[b][color=MAROON])[/color][/b]
  21.      [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]" Resides on Edge[b][color=GREEN]([/color][/b]s[b][color=GREEN])[/color][/b] "[/color][b][color=MAROON])[/color][/b]
  22.      [b][color=MAROON]([/color][/b]foreach p el
  23.        [b][color=GREEN]([/color][/b]prin1 p[b][color=GREEN])[/color][/b]
  24.        [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]" "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  25. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:04:44 | 显示全部楼层
大卫,也谢谢你的建议。基本上,ENTSEL也返回一个任意点,唯一的区别是它位于XoY平面。
但是,您使用OSNAP功能的解决方案很有魅力!再次感谢!
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:11:42 | 显示全部楼层
对于其他可能有相同问题的人,下面是一个示例,说明在等轴测视图中选择3DFace项目时,如果没有David Bethel的解决方案,这两种方法将返回什么(第一个点是在接下来的步骤中拾取的边的中间;它将显示实体的位置):
  1. (getpoint)
  2. [i](6304.12 7135.41 1130.54)[/i]
  3. (cadr (entsel))
  4. [i](7434.68 8265.98 0.0)[/i]
  5. (osnap (cadr (entsel)) "NEA")
  6. [i](6304.12 7135.31 1130.54)[/i]
  7. (cadr (cadddr (car (ssnamex (ssget "_:S") 0))))
  8. [i](2201.07 3032.5 5233.57)[/i]
  9. (osnap (cadr (cadddr (car (ssnamex (ssget "_:S") 0)))) "NEA")
  10. [i](6304.12 7135.53 1130.54)[/i]
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:20:43 | 显示全部楼层
我认为如果在调用(ssnamex)之前更改视图,则可能会失败。Entsel将强制使用当前视图
 
  1. (setq ss (ssget))
  2. (command "_.VPOINT" '(1 1 1))
  3. (ssnamex ss 0)

 
-大卫
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:28:14 | 显示全部楼层
这是一个很好的观察,谢谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 17:54 , Processed in 0.475110 second(s), 70 queries .

© 2020-2025 乐筑天下

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