ramis 发表于 2022-7-8 12:57:08

插入块的点

早上好
 
我已经在论坛上查看了是否有关于这个的现有线程,但我还没有找到。
 
我有一个关于AutoCAD的小问题。是否可以轻松地为类型的每个块设置一个点。例如,我在“WPI 26”层上有一些名为“WPI2 601”的块。有没有办法选择所有这些类型的块,并为每个块在块的坐标处放置一个点。。。
 
我有许多不同的块和许多块(还有许多文件),所以我不能手动执行。这将花费太多时间。。。我可以忘记其中的一些。
 
谢谢你的帮助,
拉米斯

fuccaro 发表于 2022-7-8 13:06:45

说点什么?你会如何使用这些信息?一个文本文件包含一个列表,其中包含图形中每个块的名称、ins点和图层,怎么样?它可以用Lisp完成。也可以设置为批量处理目录中的所有图形。您可以在Excel中打开该文件,并根据需要对其重新排序。这对你有帮助吗?

ramis 发表于 2022-7-8 13:19:18

AutoCAD将被放入软件中,以将信息转换为其他格式。但要使转换良好,必须将点对象设置为dxf文件上的点。块不对流。但在我的文件中,这些对象是用块绘制的,以便有一个更容易理解的图表。这就是为什么我要选择每种类型的块,为它们设置一个转换点。我可能会尝试用lisp来做这件事,但我不太熟悉那种语言。。。我只使用AutoCAD来准备和重新组织dxf文件,以获得最佳转换,最大限度地转换对象,从而最大限度地减少工作量,然后。。。
我不知道我的解释和我的英语是否清楚。。。

e.mounir 发表于 2022-7-8 13:25:42

我有lisp可能会帮助你,但它会把坐标点在表中,并将开始点没有
e、 g N e
P1 3232132159986555566
P2 3266665832 996586223
用TH开始lisp
设置为最终。lsp

ramis 发表于 2022-7-8 13:32:25

谢谢你的lisp函数。但这个功能似乎是手动完成的。我正在寻找一种方法来自动做到这一点。。。我认为我必须过滤所有相同类型的块来选择它们,然后在它们的坐标处画一个点。
 
我这里有一个lisp函数,应该可以工作,但我不知道如何正确选择块。
问题来自这一行(setq ss(ssget’((0。“BLOCK”)(8。“WPI26”)),其中选择称为零。但当我点击一个块时,它是这个层WPI26出现,块的名称是WPI2 601。。。
 
(定义c:bck2pt()
(princ“\n选择块:”)
(setq ss(ssget’((0。“块”)(8。“WPI26”)))
(setq项目0)
(重复(sslength ss)
(setq Ename(ssname ss项目))
(setq CtrPt(cdr(assoc 10(entget Ename)))
(命令“_点”CtrPt)
(setq项(+1项))
)
(普林斯)
)

RobDraw 发表于 2022-7-8 13:41:31

这里有一种不用口齿不清的方法。
 
用点创建块。然后使用“blockreplace”。然后可以通过分解这些块将其“转换”为点。

ramis 发表于 2022-7-8 13:49:25

我认为对我来说,使用lisp会更容易,因为我在文件上还有其他事情要做,所以我会将其包含到脚本中。。。
我可以选择要使用的类型块
(setq ss(ssget“_x”'((0。“插入”)(8。“WPI26”)))
在这里,选择不是空的。。。
但是当我用
(setq ss(ssget’((0。“插入”)(8。“WPI26”)))
据说“错误:错误参数类型:lselsetp nil”
 
此lisp函数最初用于在圆心绘制点,使用命令选择圆
(setq ss(ssget’((0。“圆”)(40.7.5)))
 
可能在lisp函数的其余部分中需要更改某些内容,以获取块的坐标。。。

ASMI 发表于 2022-7-8 13:56:48

试试这个:
 
(defun c:b2p(/ sBl cLay bSet)
(if(and
   (setq sBl(entsel "\nPick sample block > "))
   (setq cLay(cdr(assoc 8(entget(car sBl)))))
   (setq bSet(ssget "_X" (list '(0 . "INSERT")(cons 8 cLay))))
   ); end and
(progn
    (princ(strcat "\n"(itoa(sslength bSet)) " blocks found. "))
    (sssetfirst nil bSet)
    (initget 1 "Yes No")
    (setq cAns(getkword "\nAdd points? : "))
    (if(= "Yes" cAns)
      (mapcar '(lambda(x)(command "_.point"
                           (cdr(assoc 10(entget x)))))
       (vl-remove-if 'listp
       (mapcar 'cadr(ssnamex bSet))))
      ); end if
    ); end progn
); end if
(princ)
); end of c:b2p

e.mounir 发表于 2022-7-8 14:03:45

干得好干得好
页: [1]
查看完整版本: 插入块的点