乐筑天下

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

[编程交流] align lisp问题

[复制链接]

13

主题

81

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 09:58:57 | 显示全部楼层
您确定您不时没有指定新的“原点”并且表格正在相对于它移动吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:02:57 | 显示全部楼层
为什么要制作Autocad中已经支持的例程?
回复

使用道具 举报

13

主题

81

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 10:08:07 | 显示全部楼层
备注:你是说另一个ucs?我希望我不会犯那样的错误。。。
tharwat313:它是如何得到支持的?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:09:07 | 显示全部楼层
我的意思是,您可以直接在Autocad中使用“align”命令,无需重新编写例程,除非您
还有其他特殊原因吗。
 
塔瓦特
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:13:06 | 显示全部楼层
我指的是UCS的起源。你从来没有(根据需要)移动过这个吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:17:23 | 显示全部楼层
此外,不能使用“移动”命令而不是“对齐”命令使它们相互对齐。
回复

使用道具 举报

13

主题

81

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

13

主题

81

帖子

68

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 10:25:55 | 显示全部楼层
塔尔瓦:我知道。这就是我通常做的:测量距离,复制z值,调用我的命令tz(移动z-ways)并粘贴z值。但从长远来看,这是令人厌倦的。
 
如果有人在上面的例程中发现了错误,那将非常有帮助,因为我没有/不能。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:27:57 | 显示全部楼层
似乎您想将一些实体移动到新的标高-当然可以使用OSNAP过滤器来实现这一点。
关于例程的不一致行为,我认为这是因为在使用例程时激活了OSNAP模式;请在下面找到一些建议的更正。
 
  1. (defun c:TZP ( / [color=red]OldOsm[/color] a b c s)
  2. [color=red](setq OldOsm (getvar "OSMODE"))[/color]
  3. [color=red](princ "Select objects: ")[/color]
  4. [color=red](if (and[/color] (setq s (ssget))
  5.          (setq a (getpoint "\nSelect item base point: "))
  6.          (setq b (getpoint "\nSelect target point: "))[color=red])[/color]
  7. [color=red](progn[/color]
  8.   (setq c (list (car a) (cadr a) (caddr b)))
  9.   [color=red](setvar "OSMODE" 0)[/color]
  10.   (vl-cmdf "move" s "" a c)
  11. [color=red])[/color]
  12. [color=red])[/color]
  13. [color=red](setvar "OSMODE" OldOsm)[/color]
  14. [color=red](princ)[/color]
  15. )

 
 
当做
米尔恰
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:09 , Processed in 0.417153 second(s), 72 queries .

© 2020-2025 乐筑天下

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