乐筑天下

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

[编程交流] 将一组块插入

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:10:30 | 显示全部楼层 |阅读模式
在我的文件中,我有一些预定义的块,让我们将其命名为“A”、“B”和“C”。
 
问题是如何在一个步骤中以定义的序列(如“a、a、B、C、C、C、a”或任何其他序列)将这些块插入数组中。
 
我不知道Vlisp,但总的来说,我认为我们可以遵循以下SETP:
1-程序将要求用户插入序列(只是序列已写入txt文件中,因此我们可以从txt文件复制序列并在命令行中通过。)
2-询问插入点。
3-要求wethere将其作为行或列插入。
4-指定块之间的间距。
 
有人愿意做这件事吗。
 
Thnx公司
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:15:04 | 显示全部楼层
快一点
 
  1. (defun _insert  (p bn ang ds)
  2.      (vlax-invoke
  3.            (vlax-get
  4.                  (vla-get-ActiveLayout
  5.                        (vla-get-activedocument
  6.                              (vlax-get-acad-object)))
  7.                  'Block)
  8.            'InsertBlock
  9.            p
  10.            bn
  11.            1
  12.            1
  13.            1
  14.            0)
  15.      (polar p ang ds)
  16.      )
  17. (defun c:test  ()
  18.      (setq blk '("A" "B" "B" "C" "A" "B" "C")
  19.            pt  (getpoint "\nPick Insertion point:"))
  20.      (if (not dist)
  21.            (setq dist 1.00))
  22.      (setq dist (cond
  23.                       ((getdist
  24.                              (strcat "\nEnter Distance <"
  25.                                      (rtos dist 2 2)
  26.                                      ">: ")))
  27.                       (dist)))
  28.      (if (not angl)
  29.            (setq angl 0.00))
  30.      (setq angl (cond
  31.                       ((getangle
  32.                              (strcat "\nEnter Angle <"
  33.                                      (angtos angl 0)
  34.                                      ">: ")))
  35.                       (angl)))
  36.      (foreach
  37.             bn
  38.               blk
  39.            (setq pt (_insert pt bn angl dist)))
  40.      )
  41.      

 
HTH公司
得走了
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:18:45 | 显示全部楼层
Lisp程序似乎很好,但实际上它对我不起作用。
 
它也没有要求我输入块名序列。序列是随文件而异的变量,因此它应该是一个变量,用户每次都必须将其作为用逗号分隔的字符串插入
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:20:14 | 显示全部楼层
行(setq blk)(“A”“B”“B”“C”“A”“B”“C”)需要替换为txt文件中的读取行。提供的代码作为如何开始回答问题的示例。
 
这可能是开始学习Lisp程序的好时机。这里有很多人会提供帮助。
 
作为一个帮助有一个go at(getstring)和粘贴“a”“B”“B”“C”“a”“B”“C”一旦它击中空格它停止这是正常的任何想法的家伙,必须有一种方法使用粘贴函数作为变量。我知道我可以通过在粘贴可以接受的地方使用虚拟文本来欺骗它。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:25:40 | 显示全部楼层
 
1、不知道你的文本文件是什么样子。
2.它是你的起点(因此c:测试)
 
 
是的
 
 
是的,可以这样做,接受逗号分隔的字符串,然后解析。根据OP在文本文件上的格式,解析实际上是不必要的,我完全不知道该文件的格式,很可能是“A”“B”“B”“C”“A”“B”“C”或sub来读取文本文件。不管怎样,这取决于行动
 
标志T将允许空间“”
 
  1. (setq blk (getstring [b][color=blue]T[/color][/b] "\nPaste Block Names: "))
  2. (setq blk (read (strcat "("  blk  ")")))

 
粘贴块名称:“A”“B”“B”“C”“A”“B”“C”
(“A”“B”“B”“C”“A”“B”“C”)
 
或者,如果碰巧文本文件是这种格式A B C A B C(没有逗号,没有引号)
 
 
  1. (setq blk (getstring T "\nPaste Block Names: "))
  2. (setq blk (mapcar 'vl-symbol-name (read (strcat "("  blk  ")"))))

 
粘贴块名称:A B C A B C
(“A”“B”“B”“C”“A”“B”“C”)
 
干杯
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:29:06 | 显示全部楼层
谢谢Pbe的T也许有一天会派上用场。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:31:55 | 显示全部楼层
 
干杯Bigal
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:33:33 | 显示全部楼层
现在轮到你了。很高兴让别人知道你得到了你想要的答案。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:36:36 | 显示全部楼层
首先,我要感谢你们的帮助。当我们使用“T”flage时,lisp特别适合我,因此它符合空格delmited txt文件的格式(即A B C…)。逗号增量文件会更好。
 
实际上,txt文件的格式与AutoCAD通过命令(expresss-export attribute information)导出的txt文件的格式相同。下面是txt文件格式的示例:
 
句柄块名
'42C50 U14
'391FA U270
'391BA U271
 
块的名称排列在第2列中(即U14、U270和U271)。但这里的问题是行之间的“回车”。
 
为了解决这个问题,我在xls中打开了txt文件,然后复制了第二列,并使用命令“pass special-transpose”将该列转换为行。然后我再次将其保存在相同的txt格式中,然后以逗号delmitted的形式将其作为txt文件打开,然后用空格替换逗号,以满足CAD熟悉的txt文件格式(空格delmitted)。然后我就过去了。以下是我遵循的步骤。
 
 
 
 
 
 
 
 
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:39:55 | 显示全部楼层
 
您可以不用为Autocad转换文件来识别格式(Autocad不限于空格分隔格式),如果我们知道您在get gp上使用的文件格式,我们可以节省您转换文件的时间。从外部源读取块名会更干净。
 
但无论如何。,它现在对你有效。总比没有好
 
干杯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 09:01 , Processed in 0.745610 second(s), 72 queries .

© 2020-2025 乐筑天下

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