numberOCD 发表于 2022-7-5 22:43:57

从列表中插入块

早上好
我是AutoLISP的新手,现在还不太熟悉它。
我正在尝试制作一个LISP,它将在Excel中制作的列表中的指定坐标处插入大约1500个块(或者可以转换为txt)。excel列表将具有X、Y坐标、旋转角度和2或3个属性。
 
这个LISP不会被长时间使用,它主要是为了在构建过程中完成一个大的插入以进行编辑,所以我只需要将其用于功能目的。如果有人能更好地指导我如何将列表中的信息提取到LISP中,这是我遇到的主要问题。
 
谢谢你的帮助!

lrm 发表于 2022-7-5 22:48:01

如果数据来自Excel工作表,则使用脚本将块添加到AutoCAD图形可能更容易。例如,假设您的Excel文件看起来像下面的示例,数据位于B列到G列。
 
https://dl.dropboxusercontent.com/u/18135203/Script1.JPG
 
使用Excel连接函数在单元格A2中输入以下内容,以创建添加块的命令。如前所述,重要的是要使用空格来强制命令在执行时转到下一个参数。请注意,1之前有一个空格(表示比例),后面有两个空格。由于Enter不能包含在此序列中,我们将使用@@@作为其占位符。
https://dl.dropboxusercontent.com/u/18135203/Script2.JPG
 
使用“向下填充”为所有数据创建插入命令。
 
将A列从第2行复制到最后一行(在我的示例中为A4单元格)到剪贴板。
 
打开MS Word并粘贴为文本。
 
使用Replace并将文本@@替换为^p。这会将第二个属性值放置在新行上,为命令提供Enter输入。
 
将文件另存为。txt文件。
 
将文件扩展名更改为。scr。文件名应该类似于:filename。可控硅
 
在AutoCAD中,输入脚本命令并选择。scr文件。这应该在指定的位置和角度添加多个块。

7o7 发表于 2022-7-5 22:50:52

您可以使用此例程从文本文件中获取信息。其中A.txt是文件,L是结果列表。项目的L类型为字符串。

(setq L nil
   file (open "A.txt" "r"))
(while (setq line (read-line file))
(setq line (mapcar 'vl-princ-to-string (read (strcat "(" line ")")))
L (append L (list line)))
)
(close file)

BIGAL 发表于 2022-7-5 22:56:33

Irm也可以将属性括在引号“Apples”“Banannas”中,而不是添加单词step。粘贴到Word需要确保保存为文本文件。scr文件扩展名,Word可以添加隐藏字符。
 
解释得很清楚,做得好。

lrm 发表于 2022-7-5 22:59:05

BIGAL,文本字符串:
 
-插入MyBlock 12.34,20.5 1 30“苹果”“香蕉”
 
将“Apples”“Bananas”分配给MyBlock的第一个属性。应该使用什么语法在两个值之间获得Enter键,以便将Apple分配给第一个属性,将Banana分配给第二个属性?我对^ p的替换添加了执行此操作的返回键。不必做替代品会更干净。非常感谢。

numberOCD 发表于 2022-7-5 23:02:24

Irm,
这就是我一直在寻找的方法。我曾经有过类似的想法,用不同的y坐标绘制多段线,并将x增加一个单位(5英尺),然后我会将该列表粘贴到命令行中。这种补救方法肯定会为我节省大量的时间来完成这项任务。
 
非常感谢!

David Bethel 发表于 2022-7-5 23:07:19

或者使用autolisp语法:

numberOCD 发表于 2022-7-5 23:07:50

Irm,
我需要^p周围的空间吗?我还没有让它完全发挥作用,但它正在出现。
 
大卫,
我该如何使用你的这个序列?我还不太熟悉autolisp。我抄下了序列,并在脚本中运行它。这是正确的方法吗?我得到一个提示:“需要点或选项关键字。”后跟“指定插入点或[基点/比例/X/Y/Z/旋转]:

David Bethel 发表于 2022-7-5 23:11:10

最简单的方法是:
 
 
只需将列“I”复制到AutoCAD命令行即可
 
或:
 
[列表]
[*]将列“I”复制到记事本或任何真正的ASCII编辑器中
[*]将新文件保存到已知位置(c:\acad\insb.lsp)
[*]在这种情况下,文件名和扩展名并不重要
[*]在AutoCAD命令行类型处(加载“c:/acad/insb.lsp”)
[/列表]
 
 
注意,文件位置使用“/”vs DOS标准。(AutoLsip需要)
 
此外,块/插入属性数量必须完全匹配。在同一个帖子中,我发布了MyBlock1有(3)MyBlock2有MyBlock3有(2)。
 
有一些解决方法,但听起来这对你来说并不是一个大问题。
插入xlsx公司

numberOCD 发表于 2022-7-5 23:15:11

当我运行名为Test2的lsp时。lsp返回此测试窗口

 
这是目前lsp中唯一的一行
(命令“_.INSERT”“SIG”list(12 36 0)1 1 32“781Z”“GYR”)
 
知道怎么了吗?
 
谢谢
页: [1] 2
查看完整版本: 从列表中插入块