乐筑天下

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

[编程交流] 宏到命令-已恢复

[复制链接]

12

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 15:15:30 | 显示全部楼层 |阅读模式
2008年9月,我发布了一条关于将宏转换为LISP例程的帖子。
我不确定是否还有人在看这部电影,所以我想更详细地了解一下我想要的是什么。我举的宏并不是我的最佳选择,所以这里有一些我目前已经映射到键盘快捷键的其他宏,这一切都很好,但我真的很想学习如何编写LISP,这样我可以更进一步。
 
在我之前在这家公司工作的绘图员不太热衷于保持我们的施工文件标准化,所以很多时候,我不得不进去“清理”他。所以,我做的一件事是创建这个宏来基本上准备旧图纸,以便我可以开始我的看门人工作。
基本上,它所做的就是将模板导入现有图形(以携带所有尺寸、图层和样式信息),然后设置其他常见设置。我希望能够把它变成一个列表例程,也许可以添加更多的信息/设置。。。除非有更简单的方法来完成整个任务,而不需要LISP或宏。
 
 
我做的另一个宏是将选定对象从一个层更改为另一个层。但是,为了完成这个宏,我必须先抓取对象,然后单击图标(现在是键盘快捷键)。我从来都无法放下“暂停用户输入”宏代码来避免它。
我真正想做的是能够将其作为命令来执行,以及如何将其与LAYISO联系起来。我想有两个命令。一个只是将对象更改为所述层,另一个先执行LAYISO,然后执行LAYISO。
 
最后一个例子我会举(但我还有更多!)能够生成一条多线,自动分解到特定维度的特定层。
这一点有可能用于具有不同间距的其他一些应用。。。。
 
总而言之,我想做的是能够学习一些基础知识,能够探索如何制作Lisp,然后从那里继续学习。从R10开始,我就一直在使用AutoCAD,我觉得自己错过了一个非常酷的聚会,我刚刚收到了邀请。有很多事情要做!
 
---------------------------------------
 
哦,顺便提一句,ACAD 2009是否有命令来擦除彼此重叠的行?此外,是否有命令将图形中的所有对象恢复到Z的零轴?一些图形已从DataCAD导入,因此直线将在Z轴上下不同距离处出现(包括DIM节点)
 
-抱歉读了这么久
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:29:36 | 显示全部楼层
好的,首先:
我认为Express tools有点过头了:
引用帮助:
 
可能变平了?也在Express tools中
引用帮助:
 
我看看我能做些什么,把你的宏转换成LISP。
 
希望这能有所帮助
 
干杯
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:39:03 | 显示全部楼层
也许 吧:
 
 
  1. 3

 
只是打字很快——我想作为一个初学者来说是可以的眨眼:
回复

使用道具 举报

12

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 15:44:34 | 显示全部楼层
这是一个很好的开始。唯一不同的是,它不会询问要更改到哪一层,而是只会更改到该层(每个层都需要一个命令)
 
我会尝试在需要的地方修改代码,但是我对一些脚本有点一无所知。。。
 
我知道我没有将lisp放入代码块,我只是觉得回复会变得很混乱。如果我真的应该这么做,请告诉我。。。我不想违反任何规则!
 
 
第一部分:(defun c:laychng我明白了。你告诉Autocad这是命令名。这部分:(/ss lay)不知道。
 
对此一无所知。。。(除了指定要更改为>的图层之外,AutoCad会提示用户。
(if(and(setq ss(ssget))
铺设(getstring“\n指定要更改为>”的层)
(程序
(setvar“cmdecho”0)
(如果(不是(tblsearch“Layer”lay))
我猜这就是您告诉AutoCAD为LISP参考的基本命令
(命令“-m”lay”层)
(命令“_chprop”ss”““LA”lay“C”“BYLAYER”“LT”“BYLAYER”“”)然而,我不确定ss”和lay是做什么的。lay与第一行代码有什么关系吗?
 
我认为这是在告诉autocad它可以重复这个命令,也可以结束它。。。
(setvar“cmdecho”1)))
(普林斯)
 
我并不是想毁了你的工作,我只是渴望学习它,这样我就不必一直打扰专业人士了!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:57:31 | 显示全部楼层
好的,这并不是最好的学习例子,因为我只是在动态中写的,但是你仍然可以学习一些关键的元素。
 
好的,我会逐行检查:
 
定义函数(defun c:…而不是just(defun…意味着可以通过命令行调用函数)。
 
这被称为变量本地化及其良好编程实践。函数完成后,它将擦除其值的变量。这很有用,因为您可能有其他程序使用类似名称的变量。
 
好的,这有点难解释,最好使用教程/参考手册。
 
(if…是一个if语句,意思是:
 
(如果——这是真的
然后这样做
否则就这样做
如果两个语句都为true,“AND”语句将返回T,因此,我要求用户选择对象并指定层。
 
我要求用户创建一个选择集(pickset),并将该pickset存储到名为ss的变量中。
 
因为两个语句都包含一个(setq),我不需要重复它,只是在设置第一个变量后不要关闭(setq)括号。
 
Getstring就是这样做的——提示用户输入字符串——我将这个提示的结果设置为一个名为“lay”的变量。显然,这也包含在“and”语句中,因此只有当字符串不是nill时,函数才会继续。
 
好的,这个很难描述,但本质上它是一个代码包装器,与前面提到的IF语句结合使用-您可能在这里看到的最好结果是:
 
http://www.cadtutor.net/forum/showpost.php?p=173196&postcount=10
 
好的,这个很简单-我将命令Echo变量设置为0,即关闭命令Echo,因此当我调用命令,例如-layer,chprop时,用户在程序运行时不会看到所有提示。
 
还有一个“IF”语句,我要求函数在层表定义中搜索用户在getstring提示符(lay)中指定的层。如果找不到,则(not)(tblsearch…将返回True,因此if函数将运行。
 
如果函数运行的结果(即未找到层名称),我指示函数调用层命令,从而创建用户指定的层。
 
这是LISP的业务端,使用chprop命令将选择集(ss)中项目的层更改为指定的层(lay)。
 
这可以通过多种方式实现-我可以在选择集中的每个实体上使用DXF分组表,并更改(cdr(assoc 8)的值,然后跟随(entmod),或者,我可以将集合中的每个实体转换为VLA对象,并使用VLA put layer更改层。
 
  1. 14

 
最后,将命令Echo变量的值返回到1-这不是严格意义上的“犹太”,因为我可能应该在关闭命令Echo之前检索命令Echo的现有值,然后将命令Echo变量返回到其原始值,而不是将其重置为1。但正如我所说的,我很快就把它打出来了,所以事情可能不像他们应该做的那样。
 
  1. 15

 
这个很容易解释-这个“干净地退出”,并在命令行中打印新行,从而抑制了最后调用的函数。
 
 
 
对,这就是整个Lisp程序的剖析!我想我从来没有这么详细地看过它。。。
 
希望这能有所帮助-但我会再次重申-我建议学习LISP的教程和/或参考手册。
 
看看杰弗里·桑德斯(Jeffery Sanders)的网站——他是一位优秀的导师。
此外,AfraLISP是一个很好的资源站点,尽管如果使用Mozilla Firefox,您可能需要更改颜色设置。
 
无论如何,现在就这些!
 
干杯
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 16:04:11 | 显示全部楼层
只是一个简单的layiso
 
然后设置当前层(命令-la“off”“*”)
 
layon公司
(命令-la“on”“*”)
 
我认为它需要更多的“但它的想法显示
回复

使用道具 举报

12

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 16:11:32 | 显示全部楼层
哇,李!
 
我不得不说你帮了大忙!当然,我想,现在我知道了它的基本知识,我有点困惑,但我会接受你的建议,并以此作为指导。
 
我非常感谢你今天给了我一些事情做。我们现在工作很慢,所以这是一个很好的机会来加深我的AutoCAD知识,以便有一天我可以像你们一样。
 
脱帽致敬李!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:19:20 | 显示全部楼层
没问题,我昨晚有点时间。
 
希望解释能有所帮助——我郑重建议大家看看杰弗里·桑德斯(JeffereySanders)的网站和AfraLISP的网站——这两个网站都是很好的资源。
 
另外,看看你是否可以下载AutoLISP参考手册-如果你不知道在哪里可以找到,只要用你的电子邮件地址PM我,我会把我的副本发送给你
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:33 , Processed in 0.414116 second(s), 68 queries .

© 2020-2025 乐筑天下

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