批量修改透明度工具
仿照网友的界面重新做了修改透明度插件,支持装配环境。注意,装配环境选择的时候,只能在过滤器里面选择组件和当前工作部件下的实体。如果过滤器选择实体,即使使用系统自带的编辑对象显示,也不能更改子装配内实体的透明度。
直接设置装配下实体的原型就可以了 arong_open_nx 发表于 2026-8-24 09:13
直接设置装配下实体的原型就可以了
试过了,没有成功。根据选中的实体得到他所在组件内部的实体原型,然后改变透明度。你要是成功了能否分享这段代码。 应该是全部取消透明的问题 python取消全部透明代码:
# -*- coding: utf-8 -*-
import NXOpen
import NXOpen.UF
class ClearFaceTransparency:
def __init__(self):
self.s = NXOpen.Session.GetSession()
self.uf = NXOpen.UF.UFSession.GetUFSession()
self.batch = 2000
self.set_work_to_display()
self.wp = self.s.Parts.Work
self.dp = self.s.Parts.Display
def set_work_to_display(self):
try:
dp = self.s.Parts.Display
if dp and dp != self.s.Parts.Work:
self.s.Parts.SetWork(dp)
except Exception:
pass
def is_asm(self):
try:
return self.dp and self.dp.ComponentAssembly and self.dp.ComponentAssembly.RootComponent
except Exception:
return False
def is_occ(self, o):
try:
return bool(o.IsOccurrence)
except Exception:
return False
def add(self, arr, tags, o):
try:
t = o.Tag
if t not in tags:
tags.add(t)
arr.append(o)
except Exception:
pass
def collect_faces(self):
faces, tags = [], set()
if not self.is_asm():
try:
for b in self.wp.Bodies:
try:
for f in b.GetFaces():
self.add(faces, tags, f)
except Exception:
pass
except Exception:
pass
return faces
try:
root = self.dp.ComponentAssembly.RootComponent
stack = list(root.GetChildren())
except Exception:
return faces
while stack:
c = stack.pop()
try:
p = c.Prototype
except Exception:
p = None
if isinstance(p, NXOpen.Part):
try:
for pb in p.Bodies:
try:
ob = c.FindOccurrence(pb)
except Exception:
ob = None
if ob:
try:
for f in ob.GetFaces():
if self.is_occ(f):
self.add(faces, tags, f)
except Exception:
pass
except Exception:
pass
try:
stack.extend(c.GetChildren())
except Exception:
pass
return faces
def apply_zero(self, objs):
if not objs:
return
for i in range(0, len(objs), self.batch):
dm = None
try:
dm = self.s.DisplayManager.NewDisplayModification()
dm.ApplyToAllFaces = False
dm.ApplyToOwningParts = False
try:
dm.NewWidth = NXOpen.DisplayableObject.ObjectWidth.One
except Exception:
pass
dm.NewTranslucency = 0
dm.Apply(objs)
except Exception:
pass
finally:
if dm:
try:
dm.Dispose()
except Exception:
pass
def refresh(self, mark):
for fn in [
lambda: self.dp.Views.Refresh(),
lambda: self.wp.Views.Refresh(),
lambda: self.dp.ModelingViews.WorkView.UpdateDisplay(),
lambda: self.uf.Disp.Refresh(),
lambda: self.s.UpdateManager.DoUpdate(mark)
]:
try:
fn()
except Exception:
pass
def run(self):
try:
self.set_work_to_display()
self.wp = self.s.Parts.Work
self.dp = self.s.Parts.Display
mark = self.s.SetUndoMark(
NXOpen.Session.MarkVisibility.Visible,
"取消全部透明"
)
faces = self.collect_faces()
self.apply_zero(faces)
self.refresh(mark)
except Exception:
pass
def main():
try:
ClearFaceTransparency().run()
except Exception:
pass
if __name__ == "__main__":
main()
f3634861 发表于 2026-8-25 10:11
python取消全部透明代码:
全部取消透明度我的插件没有问题。那个按钮就可以实现。 谢谢分享
页:
[1]