Fathy81 发表于 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 发表于 2022-7-6 08:15:04

快一点
 

(defun _insert(p bn ang ds)
   (vlax-invoke
         (vlax-get
               (vla-get-ActiveLayout
                     (vla-get-activedocument
                           (vlax-get-acad-object)))
               'Block)
         'InsertBlock
         p
         bn
         1
         1
         1
         0)
   (polar p ang ds)
   )
(defun c:test()
   (setq blk '("A" "B" "B" "C" "A" "B" "C")
         pt(getpoint "\nPick Insertion point:"))
   (if (not dist)
         (setq dist 1.00))
   (setq dist (cond
                      ((getdist
                           (strcat "\nEnter Distance <"
                                     (rtos dist 2 2)
                                     ">: ")))
                      (dist)))
   (if (not angl)
         (setq angl 0.00))
   (setq angl (cond
                      ((getangle
                           (strcat "\nEnter Angle <"
                                     (angtos angl 0)
                                     ">: ")))
                      (angl)))
   (foreach
            bn
            blk
         (setq pt (_insert pt bn angl dist)))
   )

   
 
HTH公司
得走了

Fathy81 发表于 2022-7-6 08:18:45

Lisp程序似乎很好,但实际上它对我不起作用。
 
它也没有要求我输入块名序列。序列是随文件而异的变量,因此它应该是一个变量,用户每次都必须将其作为用逗号分隔的字符串插入

BIGAL 发表于 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 发表于 2022-7-6 08:25:40

 
1、不知道你的文本文件是什么样子。
2.它是你的起点(因此c:测试)
 
 
是的
 
 
是的,可以这样做,接受逗号分隔的字符串,然后解析。根据OP在文本文件上的格式,解析实际上是不必要的,我完全不知道该文件的格式,很可能是“A”“B”“B”“C”“A”“B”“C”或sub来读取文本文件。不管怎样,这取决于行动
 
标志T将允许空间“”
 

(setq blk (getstring T "\nPaste Block Names: "))
(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(没有逗号,没有引号)
 
 

(setq blk (getstring T "\nPaste Block Names: "))
(setq blk (mapcar 'vl-symbol-name (read (strcat "("blk")"))))

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

BIGAL 发表于 2022-7-6 08:29:06

谢谢Pbe的T也许有一天会派上用场。

pBe 发表于 2022-7-6 08:31:55

 
干杯Bigal

BIGAL 发表于 2022-7-6 08:33:33

现在轮到你了。很高兴让别人知道你得到了你想要的答案。

Fathy81 发表于 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 发表于 2022-7-6 08:39:55

 
您可以不用为Autocad转换文件来识别格式(Autocad不限于空格分隔格式),如果我们知道您在get gp上使用的文件格式,我们可以节省您转换文件的时间。从外部源读取块名会更干净。
 
但无论如何。,它现在对你有效。总比没有好
 
干杯
页: [1] 2
查看完整版本: 将一组块插入