Randolph 发表于 2022-7-6 09:53:08

align lisp问题

你好
 
我以前有过这个话题,这里的一位同事帮了我。这是一种对齐功能。不幸的是,lisp有一个错误,它并不总是显示出来。让我解释一下:
 
假设我在平面图中有一张桌子。它的x,y位置是正确的,但在3D中,它悬停在地面上。我想把它放在地板上,而不在x、y方向移动。我输入TZP(使用点沿z方向平移),选择桌子,单击桌腿底部,然后单击房间的任何角落。桌子会掉到地板上。
 
现在我需要在二楼的同一张桌子。我输入DZP(使用点沿z方向复制),选择桌子,再次单击桌子腿底部,然后单击第二层标高上的任何点。
 
线索是,我不需要任何两个点,这两个点正好高于对方。这是代码:
 
(defun c:TZP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr a) (caddr b)))
(vl-cmdf "move" s "" a c)
)同样适用于复制或其他轴。据架构师判断,我发现代码相当优雅。
 
但无论出于何种原因,“桌子”不时会以不可预测的方式在x、y方向移动,但通常会接近所需的位置。随着我使用这个命令的时间越长,情况就越糟,这可能与未清除的赋值变量有关吗?或者对象捕捉未被禁用?
 
谢谢你的帮助!

ReMark 发表于 2022-7-6 09:58:57

您确定您不时没有指定新的“原点”并且表格正在相对于它移动吗?

Tharwat 发表于 2022-7-6 10:02:57

为什么要制作Autocad中已经支持的例程?

Randolph 发表于 2022-7-6 10:08:07

备注:你是说另一个ucs?我希望我不会犯那样的错误。。。
tharwat313:它是如何得到支持的?

Tharwat 发表于 2022-7-6 10:09:07

我的意思是,您可以直接在Autocad中使用“align”命令,无需重新编写例程,除非您
还有其他特殊原因吗。
 
塔瓦特

ReMark 发表于 2022-7-6 10:13:06

我指的是UCS的起源。你从来没有(根据需要)移动过这个吗?

Tharwat 发表于 2022-7-6 10:17:23

此外,不能使用“移动”命令而不是“对齐”命令使它们相互对齐。

Randolph 发表于 2022-7-6 10:23:10

备注:我当然会移动UCS。我只是想表达一下,在垂直或水平移动或复制之前,我通常将其设置为“world”。
 
塔瓦特:因为align命令的工作方式与我需要的完全不同。也许我用这个表达是被误解了。我需要的只是:将一个对象从点1的高度移动到高度点2,而不移动、旋转或缩放它。

Randolph 发表于 2022-7-6 10:25:55

塔尔瓦:我知道。这就是我通常做的:测量距离,复制z值,调用我的命令tz(移动z-ways)并粘贴z值。但从长远来看,这是令人厌倦的。
 
如果有人在上面的例程中发现了错误,那将非常有帮助,因为我没有/不能。

MSasu 发表于 2022-7-6 10:27:57

似乎您想将一些实体移动到新的标高-当然可以使用OSNAP过滤器来实现这一点。
关于例程的不一致行为,我认为这是因为在使用例程时激活了OSNAP模式;请在下面找到一些建议的更正。
 

(defun c:TZP ( / OldOsm a b c s)
(setq OldOsm (getvar "OSMODE"))
(princ "Select objects: ")
(if (and (setq s (ssget))
         (setq a (getpoint "\nSelect item base point: "))
         (setq b (getpoint "\nSelect target point: ")))
(progn
(setq c (list (car a) (cadr a) (caddr b)))
(setvar "OSMODE" 0)
(vl-cmdf "move" s "" a c)
)
)

(setvar "OSMODE" OldOsm)
(princ)
)

 
 
当做
米尔恰
页: [1] 2
查看完整版本: align lisp问题