|
|
发表于 2026-8-25 10:11:55
|
显示全部楼层
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[i:i + self.batch])
- 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()
复制代码 |
|