gile 发表于 2022-7-5 17:10:10

重新定义块

你好
 
我在这里发布了我的Edit_bloc例程,而不是增加到另一个网站的链接。
 
此函数(命令名:Edit\u bloc)允许对当前图形中的块定义进行某些更改(完整集合、全部插入或选择)。
编辑块的所有组成部分,甚至嵌套块和属性。
通过对话框可以选择要编辑的属性:全局比例、单位(仅适用于R2006和R2007)、层“0”上的成分、颜色、线型、线宽和成分到ByBlock的打印样式。
 
使用另一个功能(Edit\u bloc\u rep),可以编辑储备库的所有dwg文件(wblock)。这一个必须从原始图形启动,并运行“所有集合”选项。

编辑_Bloc_3.5。拉链

gilsoto13 发表于 2022-7-5 17:16:35

 
我会试试的。。检查是否可以将块修改为“无单元”。。。但是如果你知道这个Lisp程序。。。你一定已经知道了。。。它允许我们在选定的块中更改此属性吗?
----------------------
 
 
那么,你说它还使用当前比例重新定义了选定的块?。。。我必须去看看。

gile 发表于 2022-7-5 17:19:25

我编写了这个LISP,它确实将选定块的插入单元设置为弹出列表中的选定单元。
 
我无法解决在动态块上更改比例的问题(在这种情况下,您会收到一个对话框的警报)。

gilsoto13 发表于 2022-7-5 17:22:16

 
嗯,我测试了一下。。。看起来它确实改变了块的单位,但它确实将块重新定义为当前大小的1,1,1比例。。。但我想我可以用它做我需要的三件事之一。
 
老实说,我不太确定它是否总是有效的,因为我把3个测试块的单位改为无。。。然后我将当前的绘图单位更改为英寸,并将所有那些假定为无单位的块都锁定,当我打开提取的绘图时,它们以英寸为单位。。。所以我认为他们从他们所属的图纸中抓取了绘图单位。
 
然后我做了另一个测试。。并将块更改为毫米,并从相同的英寸单位图纸中提取。。提取的图形为毫米。。。所以它在这个案例中起了作用。。我想我只需要确保所有的编译图都是无单元的,并运行lisp到所有的块和交叉手指。。。
 
谢谢
 
然后我开始玩一些单位。。。似乎这个程序只会扩展块。。。但并没有重新定义它们。。它无法保持大小。我可以缩放所有块并调整其大小,但使用当前大小重新定义它们才是我想要的。
 
基本上,我需要的是一个例行程序:
 
我有积木。。。一些是比例1,一些是比例1.5,一些是其他比例。。0.254...或者别的什么。。。但我把它们都插进去了,大小都正确了。。。现在我需要分解每一个,保留它们的插入点、名称、层、颜色。。每件事只需分解每个对象,然后转到命令块,抓取自己的插入点,抓取自己的名称,并选择以前分解的对象。。并重新定义。。。还有沃拉。。但不是吝啬鬼做的。。。我需要一个Lisp程序自己做这件事。。。用它建造数千个街区。

gile 发表于 2022-7-5 17:25:50

尝试在新图形中插入WBLOCK块,并在“特性”选项板中查看其单位。。。 
LISP重新定义块定义,并根据这些更改更新插入的参照。
尝试更改单位或全局比例并插入重新定义的块,它将显示与更新的插入参考相同的内容(如果它们是1x1x1比例的)。。。
 
如果我没有误解的话,您的请求完全不同,它需要获得块插入比例来重新缩放定义。
如果存在2d块和均匀缩放的参考,则可以执行此操作。

gilsoto13 发表于 2022-7-5 17:28:58

 
嗯,是的,我想它会对单位的事情起作用。。。是的,我需要的是一个lisp,以当前的比例将每个块重新缩放到1,1,1,这样它们就不会被移动或调整大小(通过这个lisp),而是将它们重新定义为1,1,1,以便作为任何公制或英制单位的标准,而不必更改或缩放它们,除非根据他们的具体需要。
 
我需要它以最合适的方式完成我的任务,我甚至可以在完成所有这些工作后卖掉它。。。但这就是我的美丽,如果我免费得到这些东西。。。让我们保持自由。

gile 发表于 2022-7-5 17:31:42

当我开始写Edit_bloc(2004)的时候,我的目标就是避免做你已经做过的事情:因为它们的创建单元而缩放引用。。。
 
这是一个根据插入比例重新定义块的快捷方法。
它不处理非均匀缩放的引用。
嵌套块的不可预测结果(因为它们可以在父块中重新定义和重新缩放)。
 
(defun c:rescaleBlocks (/ acdoc blocks ss scl name def base)
(vl-load-com)
(setq acdoc(vla-get-ActiveDocument (vlax-get-acad-object))
       blocks (vla-get-Blocks acdoc)
)
(if (ssget "_X" '((0 . "iNSERT")))
   (progn
   (vla-StartUndoMark acdoc)
   (vlax-for b (setq ss (vla-get-ActiveSelectionSet acdoc))
       (setq scl (vla-get-XScaleFactor b))
       (if (and (= scl (vla-get-YScaleFactor b) (vla-get-ZScaleFactor b))
                (/= 1.0 scl)
                (setq name (vla-get-Name b))
                (setq def (vla-item blocks name))
         )
         (progn
         (setq base (vla-get-Origin def))
         (vlax-for o def
             (vla-ScaleEntity o base scl)
         )
         (vla-put-XScaleFactor b 1.0)
         (vla-put-YScaleFactor b 1.0)
         (vla-put-ZScaleFactor b 1.0)
         (if (vla-get-HasAttributes b)
             (vl-cmdf "_.attsync" "_name" name)
         )
         )
       )
   )
   (vla-Delete ss)
   (vla-Regen acdoc acAllViewports)
   (vla-EndUndoMark acdoc)
   )
)
(princ)
)

gilsoto13 发表于 2022-7-5 17:34:12

 
 
嗯,我也一直在这样做。。。我使用lisp将所有块转换为其原始1,1,1比例。。。之后,我在这个论坛上要求对lisp进行修改,以便它只能同步选定的块。。Lee Mac已经多次回答并更新了它,现在它是一个很好的工具,可以将选定的块、属性块和动态块更新到当前的dimscale。。但是
 
所有这些lisp只是重新缩放块,它们很有用,但我在这里的任务包括重新定义许多块,我知道大多数人使用不同比例的块。。但我正在组织的大多数块都是真实的对象,不需要重新缩放或调整大小。。。他们有一个独特的尺寸,像汽车,飞机,窗户,家具,还有,我想做一个版本,其中绘图单位是英寸,另一个绘图单位是米。。。此外,我下载的许多块没有真实的维度,我需要缩放它们,并将新的比例设置为1,1,1。为此,我需要逐个重新定义每个块,将块名复制到内存中,在插入点上放置一个标记,然后分解。。。然后制作一个新块,在粘贴相同名称或从文件内存中选择名称之前必须清除,拾取现有点并选择以前分解的对象。。这样,我得到了相同的对象和相同的块,用我固定的新维度重新定义为比例1,1,1。
 
然后我需要的lisp是在所有选定的块中执行所有这些步骤。。。
 
但很高兴有另一个版本的块缩放lisp。。。
 
------------
 
对不起,我用了“重缩放”这个词。。。我的意思是使用它们当前的大小(任何比例)进行分解和重新定义

gile 发表于 2022-7-5 17:35:39

这是你第二次说“LISP不会重新定义块”,即使它会!RescaleBlocks会重新定义块,即使它不会分解它们。编程时,不需要分解块来调整其在块定义中的所有组件。
 
对不起,我既不明白你想要什么,也不明白你的工作方式。我认为你有你需要的(强大的)工具,学习如何使用它们。。。

gilsoto13 发表于 2022-7-5 17:39:47

 
这里有一些文件。。。用一些图片来解释我的需求。。。以及示例dwg文件。。
 
如果你进入绘图。。。你会在方块中看到4到5个不同的比例。。。0.0394、1、2、0236等。。。我需要它们都是1,1,1,但不改变其当前大小、名称或插入点。。。
 
当我使用你的重缩放块时。。它会将它们全部更改为1,1,1,但只会缩放块,保留其名称和插入点,但更改其当前大小。。
 
如果我使用edit_bloc并选择块,然后选择global scale=1,并选择none units。。。。(使用edit_bloc.jpg)它改变了块比例,但有点从它们的原始单位或其他单位进行转换,但不能将它们转换为1,1,1(正如你在“result.jpg”中的块比例属性对话框中看到的那样)。。
 
我需要的(在这种情况下,我手动一个接一个地执行)显示在“What I need.jpg”中,正如您在“属性”对话框中看到的那样,所有块的比例都是1,1,1,它们的大小没有改变。我知道lisp可以保留它们的名称和插入点……所以我需要的基本上是将它们的比例转换为1,1,而不改变它们的当前大小。
实例图纸



页: [1] 2
查看完整版本: 重新定义块