broncos15 发表于 2022-7-5 18:03:02

Osnap函数问题

我有一个关于如何在autocad中使用osnap函数的快速问题。我有一个来自ssget的选择集(它在变量ss1下)和一个我已经有的pt。我的问题是如何使用osnap函数查找set My perppt。我知道我的错误与cadr函数有关(我把它放进去是因为当我将entsel与osnap一起使用时,我就是这样使用osnap的)。我的代码是
(setq obj (ssname ss1 0))
(setvar "lastpoint" pt1)
(setq pt2(osnap (cadr obj) "_Per"))

jonathann3891 发表于 2022-7-5 18:12:23

没有关系。删除

rkmcswain 发表于 2022-7-5 18:21:23

如果ss1是一个选择集,则obj是该选择集中的第一个实体,(类型obj)=ENAME
 
ENAME上没有(cadr)。
 
(osnap)函数的第二个参数需要一个列表(点)。

broncos15 发表于 2022-7-5 18:27:56

请原谅我的无知,如果cadr不能像在entsel上那样工作,那么我如何从选择集对象中提取列表?

BIGAL 发表于 2022-7-5 18:30:48

如果使用,您是否尝试绘制从pt到对象的perp线
 
(setq pt2 (vlax-curve-getClosestPointTo (vlax-ename->vla-object obj) pt1)))

broncos15 发表于 2022-7-5 18:42:57

我试过使用它,但当我有不同的z坐标时,它会返回奇怪的点(我希望有一种方法可以使用该函数并声明它必须仅使用x和y坐标来找到最近的点)。

Lee Mac 发表于 2022-7-5 18:47:00

 
vlax curve GetClosestPointTopProjection可能就是您想要的函数-下面是对差异的解释。

broncos15 发表于 2022-7-5 18:52:57

李,这正是我想要的函数。当我再看一下文档时,我知道我需要指定法线平面,但我不确定如何准确地做到这一点。目前我有(setq pt2 (vlax-curve-getClosestPointtoProjection ent2 pt1 '(0.0 0.0 1.0)))

Lee Mac 发表于 2022-7-5 18:58:04

至少在语法上,您的代码看起来是正确的。

broncos15 发表于 2022-7-5 19:09:11

谢谢你的帮助!我在代码的另一部分中发现了这个错误,该部分去掉了投影部分。
页: [1]
查看完整版本: Osnap函数问题