SergeM 发表于 2022-7-6 17:27:20

如何设置所有嵌套实体

你好
 
这在不重新编辑外部参照的情况下是否可行????
 
谢谢Serge

ML0940 发表于 2022-7-6 17:35:54

是的
使用代码时,必须按块定义获取实体,然后将其颜色特性更改为按层。
 
您是指特定的块参照,还是指外部参照,还是希望将图形中的所有上述图元更改为“按图层”?
 
Serge,我只能用VBA提供答案,可以吗?
 
毫升

SergeM 发表于 2022-7-6 17:38:27

你好
 
VBA正常。我想将图形中上述所有外部参照实体更改为“按图层”。
 
谢谢
 
哔叽

ML0940 发表于 2022-7-6 17:45:28

嘿Serge,
对不起,花了这么长时间,我一直很忙。
回答您的问题,是的,我们可以在不使用外部参照的情况下实现这一点;我们必须编辑块定义表,这就是我们在下面的代码中所做的。
 
我们必须首先检查块是否实际上是外部参照;
如果是,请检查该特定外部参照名称。
如果名称匹配,则将该外部参照的所有图元更改为“Bylayer”
 
至于昏暗的风格,这将不得不单独处理,但我认为所有其他可以更改的对象都在下面处理。
 
它似乎对我很有效。
让我知道你过得怎么样
 
毫升
 

Sub XrefEntsToByLayer()
Dim Blk As AcadBlock
Dim xrEnt As AcadEntity

For Each Blk In ThisDrawing.Blocks
If Not Blk.IsLayout Then
If Blk.IsXRef Then
   If Blk.Name = "xrefname" Then 'Replace xrefname with the name of your xref
    'MsgBox Blk.Name
    For Each xrEnt In Blk
   'xrEnt.Layer = "0" 'If you want to change the xref layer.
   xrEnt.color = acByLayer
   xrEnt.LinetypeScale = acByLayer
   xrEnt.Lineweight = acLnWtByLayer
   xrEnt.Update
    Next xrEnt
   End If
End If
End If
Next Blk

ThisDrawing.Regen acActiveViewport

End Sub

ML0940 发表于 2022-7-6 17:50:31

哇,谢尔盖
这段代码的工作原理很奇怪。
 
我认为,这正是你要求的。
 
它使用外部参照的源bylayer特性将所有图元放置在外部参照bylayer中,但它似乎仅在当前图形中更新,而不影响源文件。
 
我不确定这是不是你的意图?
 
让我知道
毫升

SergeM 发表于 2022-7-6 17:55:58

,这正是我想要的。我明天试试看,这个星期五告诉你。(如果你觉得可以的话)。
 
当这一切顺利时,我将能够结合我在另一个线程中提到的lisp以及我从Jason Piercy那里获得的lisp,为外部参照的所有层提供一种特定的颜色。(见下文)你能帮我测试一下吗?
 

(defun c:adjustXref (/ lst ename object name)
(setvar "errno" 0)
(while (/= 52 (getvar "errno"))
(setq lst (entsel "\nselect an xref : "))
(cond
((= 7 (getvar "errno"))
(princ "\nMiss pick")
(setvar "errno" 0) )
((and
lst
(setq ename (car lst))
(setq object (vlax-ename->vla-object ename))
(vlax-property-available-p object 'path)
)
(setq name (vla-get-name object))
(command "layer" "c" 252 (strcat name "|*") "" "")
(command "draworder" ename "" "back")
)
(lst (princ "\nselection was not an xref"))
(t (setvar "errno" 52))
)
)
(princ)
)

 
我希望这将是仅以一种特定颜色(在本例中为color252)绘制外部参照的突破。
 
提前谢谢。
 
哔叽

SergeM 发表于 2022-7-6 18:00:31

哦,是的,我忘了,
 
你能演示一下如何处理尺寸吗。
 
然后我想它会解决的。
 
哔叽

ML0940 发表于 2022-7-6 18:06:48

 
嗨,谢尔盖,
我很高兴这就是你需要的。
 
那么,您确定源外部参照没有受到影响吗?
至少昨晚没有,我可以再测试一次。
这很有意义,因为我们抓取的是块,而不是实际的外部参照本身。
 
在你的文章中,你提到了Refedit;如果小心和明智地使用,Refedit是很棒的。Refedit实际上会影响源文件,而我提供的代码使用的是源文件中的信息,但不会影响源文件。
 
所以,如果这真的是你需要的,那就太好了:)
 
我相信我们也可以像Refedit那样获取实际的源外部参照文件;有一个acadexternalreference对象,我只需要进一步研究它。
 
Serge,我对LISP不太在行,但如果你想给我发送一个文件样本,我会尝试LISP例程,我真的无法帮你调整它。我对LISP知之甚少。
 
当然,我们可能会将您想要的暗淡样式设置为活动。
请告诉我您正在使用的dim样式名称。
 
还有,最后一件事,我试图将线型设置为bylayer,但我一直得到,key not found。
 
我的猜测是,问题是不同的实体可以位于不同的层上,每个层可以有自己的指定线型。
 
因此,如果我们将所有外部参照实体放在一个图层上(我在代码中提供了该功能),那么我们可能会根据需要将该图层的线型更改为“bylayer”。
 
毫升

ML0940 发表于 2022-7-6 18:08:27

哇!
我刚刚意识到
 
如果出于某种原因,您希望使源外部参照中的所有实体都具有不同的颜色、线宽等以进行显示,那么我提供给您的代码将非常有用。然而,当它实际上是外部参照到另一个图形中时,您希望出于任何原因(我认为在您的示例中)使用初始的“bylayer”设置进行打印。
 
我猜,这就是你在做的?
 
毫升

SergeM 发表于 2022-7-6 18:13:32

 
是的,确实不能影响外部参照。
 
 
只需将lisp复制到命令行中,并使用adjustxref加载lisp。
 
谢谢Serge
页: [1] 2
查看完整版本: 如何设置所有嵌套实体