找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 467|回复: 8

[分享] 批量修改透明度工具

[复制链接]

12

主题

1997

回帖

6059

积分

上尉

积分
6059
发表于 2026-8-24 08:43:32 | 显示全部楼层 |阅读模式
仿照网友的界面重新做了修改透明度插件,支持装配环境。注意,装配环境选择的时候,只能在过滤器里面选择组件和当前工作部件下的实体。
修改透明度.rar (9.28 KB, 下载次数: 22)

111.png

12

主题

1997

回帖

6059

积分

上尉

积分
6059
 楼主| 发表于 2026-8-24 08:47:37 | 显示全部楼层
222.png 如果过滤器选择实体,即使使用系统自带的编辑对象显示,也不能更改子装配内实体的透明度。

5

主题

69

回帖

1364

积分

六级士官

积分
1364
发表于 2026-8-24 09:13:41 | 显示全部楼层
直接设置装配下实体的原型就可以了

12

主题

1997

回帖

6059

积分

上尉

积分
6059
 楼主| 发表于 2026-8-24 09:48:06 | 显示全部楼层
arong_open_nx 发表于 2026-8-24 09:13
直接设置装配下实体的原型就可以了

试过了,没有成功。根据选中的实体得到他所在组件内部的实体原型,然后改变透明度。你要是成功了能否分享这段代码。

1

主题

333

回帖

2468

积分

少尉

积分
2468
发表于 2026-8-25 08:37:16 | 显示全部楼层
应该是全部取消透明的问题

1

主题

333

回帖

2468

积分

少尉

积分
2468
发表于 2026-8-25 10:11:55 | 显示全部楼层
python取消全部透明代码:
  1. # -*- coding: utf-8 -*-
  2. import NXOpen
  3. import NXOpen.UF


  4. class ClearFaceTransparency:
  5.     def __init__(self):
  6.         self.s = NXOpen.Session.GetSession()
  7.         self.uf = NXOpen.UF.UFSession.GetUFSession()
  8.         self.batch = 2000
  9.         self.set_work_to_display()
  10.         self.wp = self.s.Parts.Work
  11.         self.dp = self.s.Parts.Display

  12.     def set_work_to_display(self):
  13.         try:
  14.             dp = self.s.Parts.Display
  15.             if dp and dp != self.s.Parts.Work:
  16.                 self.s.Parts.SetWork(dp)
  17.         except Exception:
  18.             pass

  19.     def is_asm(self):
  20.         try:
  21.             return self.dp and self.dp.ComponentAssembly and self.dp.ComponentAssembly.RootComponent
  22.         except Exception:
  23.             return False

  24.     def is_occ(self, o):
  25.         try:
  26.             return bool(o.IsOccurrence)
  27.         except Exception:
  28.             return False

  29.     def add(self, arr, tags, o):
  30.         try:
  31.             t = o.Tag
  32.             if t not in tags:
  33.                 tags.add(t)
  34.                 arr.append(o)
  35.         except Exception:
  36.             pass

  37.     def collect_faces(self):
  38.         faces, tags = [], set()

  39.         if not self.is_asm():
  40.             try:
  41.                 for b in self.wp.Bodies:
  42.                     try:
  43.                         for f in b.GetFaces():
  44.                             self.add(faces, tags, f)
  45.                     except Exception:
  46.                         pass
  47.             except Exception:
  48.                 pass
  49.             return faces

  50.         try:
  51.             root = self.dp.ComponentAssembly.RootComponent
  52.             stack = list(root.GetChildren())
  53.         except Exception:
  54.             return faces

  55.         while stack:
  56.             c = stack.pop()

  57.             try:
  58.                 p = c.Prototype
  59.             except Exception:
  60.                 p = None

  61.             if isinstance(p, NXOpen.Part):
  62.                 try:
  63.                     for pb in p.Bodies:
  64.                         try:
  65.                             ob = c.FindOccurrence(pb)
  66.                         except Exception:
  67.                             ob = None

  68.                         if ob:
  69.                             try:
  70.                                 for f in ob.GetFaces():
  71.                                     if self.is_occ(f):
  72.                                         self.add(faces, tags, f)
  73.                             except Exception:
  74.                                 pass
  75.                 except Exception:
  76.                     pass

  77.             try:
  78.                 stack.extend(c.GetChildren())
  79.             except Exception:
  80.                 pass

  81.         return faces

  82.     def apply_zero(self, objs):
  83.         if not objs:
  84.             return

  85.         for i in range(0, len(objs), self.batch):
  86.             dm = None
  87.             try:
  88.                 dm = self.s.DisplayManager.NewDisplayModification()
  89.                 dm.ApplyToAllFaces = False
  90.                 dm.ApplyToOwningParts = False

  91.                 try:
  92.                     dm.NewWidth = NXOpen.DisplayableObject.ObjectWidth.One
  93.                 except Exception:
  94.                     pass

  95.                 dm.NewTranslucency = 0
  96.                 dm.Apply(objs[i:i + self.batch])

  97.             except Exception:
  98.                 pass

  99.             finally:
  100.                 if dm:
  101.                     try:
  102.                         dm.Dispose()
  103.                     except Exception:
  104.                         pass

  105.     def refresh(self, mark):
  106.         for fn in [
  107.             lambda: self.dp.Views.Refresh(),
  108.             lambda: self.wp.Views.Refresh(),
  109.             lambda: self.dp.ModelingViews.WorkView.UpdateDisplay(),
  110.             lambda: self.uf.Disp.Refresh(),
  111.             lambda: self.s.UpdateManager.DoUpdate(mark)
  112.         ]:
  113.             try:
  114.                 fn()
  115.             except Exception:
  116.                 pass

  117.     def run(self):
  118.         try:
  119.             self.set_work_to_display()
  120.             self.wp = self.s.Parts.Work
  121.             self.dp = self.s.Parts.Display

  122.             mark = self.s.SetUndoMark(
  123.                 NXOpen.Session.MarkVisibility.Visible,
  124.                 "取消全部透明"
  125.             )

  126.             faces = self.collect_faces()
  127.             self.apply_zero(faces)
  128.             self.refresh(mark)

  129.         except Exception:
  130.             pass


  131. def main():
  132.     try:
  133.         ClearFaceTransparency().run()
  134.     except Exception:
  135.         pass


  136. if __name__ == "__main__":
  137.     main()
复制代码

12

主题

1997

回帖

6059

积分

上尉

积分
6059
 楼主| 发表于 2026-8-25 10:30:12 | 显示全部楼层
f3634861 发表于 2026-8-25 10:11
python取消全部透明代码:

全部取消透明度我的插件没有问题。那个按钮就可以实现。

1

主题

437

回帖

3万

积分

上将

积分
33707
发表于 2026-8-25 21:33:15 来自手机 | 显示全部楼层
谢谢分享

0

主题

890

回帖

1089

积分

六级士官

积分
1089
发表于 2026-9-16 15:10:46 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

咨询QQ:1359218528|发帖须知!|Archiver|手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )

GMT+8, 2026-10-8 15:49

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表