看到一个可以在Inventor装配体上随机颜色的一段ilogic代码,代码付在文末。
这个想法应该是从Solidworks那边来的。Inventor默认的颜色确实也是单调了点。随机颜色,装配体瞬间花花绿绿的,也是好看了些。大致看了一下实现的ilogic/vba代码,ilogic是阉割版的VBA,VBA是阉割版的VB,而VB已经过时,那么就用相对现代的Vb.NET(其实VB.net也是土的)来重写吧。写完测试运行了一下,还行。不过发现了一些问题:
1、在装配体中如果有被压缩的子件或者装配体有未解析的零部件,比如少螺栓或者文件丢失之类。这种情况,代码会报错。
2、另外,这个随机颜色对每一个 ComponentOccurrence都进行改色,这点不合理,正常应该相同的 ComponentOccurrence赋相同的颜色。
3、有时候用户会重复点这个随机颜色,因为每次运行都会不停的创建新的颜色,而装配体又包含很多子件,所以用户点一次就会生成子件数量的外观,不停的增加,污染文档。
uAppearance = topAsm.Assets.Add(kAssetTypeAppearance, "Generic", "appearances")
4、当然有时候,花花绿绿的看厌倦了,想返璞归真回到Inventor默认色,一个一个子件清除替代色是要命的。
所以根据以上缺点,我重写这个随机颜色的功能,点击随机颜色按钮时,跳过被抑制和未被解析的零部件。相同的零部件会有相同的颜色。并且每次点击随机颜色的时候会删除之前创建过的颜色。减少对文档的污染。
另外增加了一个恢复默认颜色的按钮。一键回到过去。
如果你对这个插件感兴趣,有需求,可以到LnvTools下载
附:剽窃来的ilogic/vba代码,供参考,不建议使用这个有缺陷的代码。
Sub Main()
Dim topAsm As AssemblyDocument
topAsm = ThisApplication.ActiveDocument
Dim trans As Transaction
trans = ThisApplication.TransactionManager.StartTransaction(topAsm, "随机色")
Dim ucRep As DesignViewRepresentation
On Error GoTo CreateDV
ucRep = topAsm.ComponentDefinition.RepresentationsManager.DesignViewRepresentations("随机色")
On Error GoTo 0
ucRep.Activate
Dim compOcc As ComponentOccurrence
For Each compOcc In topAsm.ComponentDefinition.Occurrences
Dim uAppearance As Asset
uAppearance = topAsm.Assets.Add(kAssetTypeAppearance, "Generic", "appearances")
Dim uColor As ColorAssetValue
uColor = uAppearance.Item("generic_diffuse")
RNG = Round(Rnd * 255)
RNG1 = Round(Rnd * 255)
RNG2 = Round(Rnd * 255)
uColor.Value = ThisApplication.TransientObjects.CreateColor(RNG, RNG1, RNG2)
compOcc.Appearance = uAppearance
Next
trans.End
Exit Sub
CreateDV:
ucRep = topAsm.ComponentDefinition.RepresentationsManager.DesignViewRepresentations.Add("随机色")
Resume Next
End Sub