乐筑天下

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

[编程交流] 从列表中插入块

[复制链接]

3

主题

12

帖子

9

银币

初来乍到

Rank: 1

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

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-5 22:48:01 | 显示全部楼层
如果数据来自Excel工作表,则使用脚本将块添加到AutoCAD图形可能更容易。例如,假设您的Excel文件看起来像下面的示例,数据位于B列到G列。
 

                               
登录/注册后可看大图

 
使用Excel连接函数在单元格A2中输入以下内容,以创建添加块的命令。如前所述,重要的是要使用空格来强制命令在执行时转到下一个参数。请注意,1之前有一个空格(表示比例),后面有两个空格。由于Enter不能包含在此序列中,我们将使用@@@作为其占位符。

                               
登录/注册后可看大图

 
使用“向下填充”为所有数据创建插入命令。
 
将A列从第2行复制到最后一行(在我的示例中为A4单元格)到剪贴板。
 
打开MS Word并粘贴为文本。
 
使用Replace并将文本@@替换为^p。这会将第二个属性值放置在新行上,为命令提供Enter输入。
 
将文件另存为。txt文件。
 
将文件扩展名更改为。scr。文件名应该类似于:filename。可控硅
 
在AutoCAD中,输入脚本命令并选择。scr文件。这应该在指定的位置和角度添加多个块。
回复

使用道具 举报

7o7

0

主题

93

帖子

93

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 22:50:52 | 显示全部楼层
您可以使用此例程从文本文件中获取信息。其中A.txt是文件,L是结果列表。项目的L类型为字符串。
  1. (setq L nil
  2.      file (open "A.txt" "r"))
  3. (while (setq line (read-line file))
  4. (setq line (mapcar 'vl-princ-to-string (read (strcat "(" line ")")))
  5. L (append L (list line)))
  6. )
  7. (close file)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 22:56:33 | 显示全部楼层
Irm也可以将属性括在引号“Apples”“Banannas”中,而不是添加单词step。粘贴到Word需要确保保存为文本文件。scr文件扩展名,Word可以添加隐藏字符。
 
解释得很清楚,做得好。
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

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

使用道具 举报

3

主题

12

帖子

9

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:02:24 | 显示全部楼层
Irm,
这就是我一直在寻找的方法。我曾经有过类似的想法,用不同的y坐标绘制多段线,并将x增加一个单位(5英尺),然后我会将该列表粘贴到命令行中。这种补救方法肯定会为我节省大量的时间来完成这项任务。
 
非常感谢!
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 23:07:19 | 显示全部楼层
或者使用autolisp语法:
234410u86s74m4s887nwl8.jpg
234413gjlqcqk2l8l1k1co.jpg
回复

使用道具 举报

3

主题

12

帖子

9

银币

初来乍到

Rank: 1

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

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 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公司
  • 回复

    使用道具 举报

    3

    主题

    12

    帖子

    9

    银币

    初来乍到

    Rank: 1

    铜币
    15
    发表于 2022-7-5 23:15:11 | 显示全部楼层
    当我运行名为Test2的lsp时。lsp返回此测试窗口
    234415xcc41pihmdemk9k9.jpg
     
    这是目前lsp中唯一的一行
    (命令“_.INSERT”“SIG”list(12 36 0)1 1 32“781Z”“GYR”)
     
    知道怎么了吗?
     
    谢谢
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-11 03:17 , Processed in 1.348512 second(s), 74 queries .

    © 2020-2025 乐筑天下

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