乐筑天下

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

[编程交流] Lisp更改全部的Z值

[复制链接]

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:39:24 | 显示全部楼层 |阅读模式
我正在寻找一个简单的Lisp例程,将所有选定实体的所有部分的Z值更改为特定值。它将用于简单的轮廓信息(一束线、多段线或文本)。
 
理想情况下,该命令将请求选择集(或使用已选择的集),然后请求新高程(例如125'6”)。
 
谢谢,汤姆
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:44:53 | 显示全部楼层
看起来很简单,而且你已经计划好了常规。。。你只剩下写代码了。
 
测试隐含选择,如果不存在,则提示用户输入新的选择集和高程差。然后迭代选择集,移动选择集。你挂在我朋友身上的是哪一部分?
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:49:58 | 显示全部楼层
这是这一部分:“然后迭代选择集,移动选择集。”剩下的我可以做。
 
汤姆
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:56:23 | 显示全部楼层
这里不是给你代码,而是要使用的命令
从开始
ss长度ss
然后重复
然后Sname ss x
移动对象0,0,0,0,z
结束重复
 
也可能是foreach
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 08:00:29 | 显示全部楼层
我的任务是在实体中设置Z值的精确代码,特别是对于具有多个顶点(直线和多段线)的实体。Isense嵌套循环:每个实体外部,每个顶点内部。
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 08:04:19 | 显示全部楼层
如果我没有弄错的话,您可以很容易地用CHANGE命令来完成这项工作。
 
命令:更改
选择对象:指定对角点:210
选择对象:
指定更改点或[特性]:p
输入要更改的特性[Color/Elev/LAyer/LType/ltScale/LWeight/Thickness/TRansparency/Material/Annotative]:e
指定新高程:127
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 08:06:03 | 显示全部楼层
谢谢。我要试试(有点太容易了,我应该考虑一下)。我认为它需要更具体的实体和顶点。我会告诉你事情的进展。可能明天。。。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:13:22 | 显示全部楼层
汤姆,这可以简单地通过移动命令来完成。考虑将SS从0,0,0移动到0,0,10。
 
为了更好地了解正确编码需要做什么,只需手动执行任务,然后根据输入转录成代码。确保在多种情况下测试代码,以删除任何错误。
 
HTH公司
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 08:13:57 | 显示全部楼层
Move和Change/Elev命令都有效。移动命令更为复杂,因为首先需要计算出图元的高程。Change命令的局限性在于,如果一个图元中有多个Z值(例如垂直斜线),它不会执行任何操作。
 
就短期而言,变革方法正在发挥作用。我只需要先跑平。理想情况下,我想找到一个解决方案,在那里我可以实际更改Z值,而不是将每个实体作为一个整体处理。
 
谢谢。。。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:20:12 | 显示全部楼层
正如你所发现的,你的问题并不简单。
 
更改有一些主要限制:
[列表]
  • 它无法处理具有不同Z轴值的实体(线3DFACES、重多段线网格、3DPolyline)
  • 实体必须在当前UCS中
    [/列表]
     
    使用MOVE时,您必须首先计算出当前高程,然后计算新高程。同样,必须处理具有不同高程的图元,多段线有其自己的特性(组38)
     
    (entmod)也可以做到这一点,你只需要注意顺序实体(带有属性和重多段线的插入)
     
    1. (and (setq ss (ssget))
    2.     (while (setq en (ssname ss 0))
    3.            (setq ed (entget en))
    4. ;;;DO YOUR THING HERE....
    5.            (ssdel en ss)))

    希望这能帮助你走得更远-大卫
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 05:11 , Processed in 0.471822 second(s), 72 queries .

    © 2020-2025 乐筑天下

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