PLM之家PLMHome-工业软件与AI结合践行者

[二次开发源码] NX二次开发源码分享: 加载所有的装配组件----全部加载

[复制链接]

2019-4-12 09:06:31 2407 0

admin 发表于 2019-4-12 09:06:31 |阅读模式

admin 楼主

2019-4-12 09:06:31

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
[mw_shl_code=csharp,true]Imports System
' ^  i8 ]9 N' c- \4 F' B& @Imports NXOpen; C' `* M0 d8 l8 ]# i
Imports NXOpen.UF, k2 R- P, y6 N, c! Y- p
Imports NXOpen.Utilities
. L& S/ r3 u. g$ N# h'. R" \, N3 a) l, p5 L
' The OpenComponents() parameter7 A0 ~0 [8 b; Z4 k' V, q2 }3 I
' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly
* N4 v! |. l4 j. B) ^" `' only opens unloaded components fully (see also PR-8406345)
" L) H2 y8 _9 u' Workaround: collect and open all components individually
  O8 |$ b5 i' x2 T1 |'7 A& U. I8 }( E( A: R; c1 Z8 {% R
Module NXJournal6 m4 N5 D* m0 c, ^7 u
    Dim theSession As Session = Session.GetSession()9 N7 l" u) b9 D
    Dim theUFSession As UFSession = UFSession.GetUFSession()5 ^: M" D9 c; ]* `; p# \
    Dim dispPart As Part = theSession.Parts.Display
9 @5 u! K! e8 O* U5 l+ e6 c, \% v4 C& [0 g) n  m) u
    Sub DoIt()! g* x0 i; b+ F+ t: h7 e
        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)
: ?  A# U& y3 s$ c# R& x) O6 \        Echo("Number of Components: " & allComps.Length.ToString)
; a6 _: k& G5 a2 Q        For ii As Integer = 0 To allComps.Length - 1; T) G3 ^' P- _
            Echo(allComps(ii).DisplayName)
8 y' K0 H# J8 L* i7 x" Z' |. ^* Q        Next$ \/ D# W+ T+ q2 r' g

: L) D' [' |7 v" ^        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading
/ E2 V: D5 ^, O0 M0 A        theSession.Parts.LoadOptions.UsePartialLoading = False2 ^  ~7 Q8 W# `& q
, w; E7 \& ^5 x) p! w
        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus
, ?% g' g. s; g) @# |- \; _        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing
: l1 c- F9 }# O  q: M  [3 r        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(, g) M1 M7 R& p
            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)3 ~+ q. m$ t) f. e
) W, g% A- A( G5 o7 F
        reportPartLoadStatus(partLoadStatus1)
% c1 m! l7 K1 o; O# N9 c        partLoadStatus1.Dispose()% `+ i' M% u0 q% N7 v8 U6 l& g

( C) l8 C0 S; ^; ^, l- ^% {        theSession.Parts.LoadOptions.UsePartialLoading = option1  u2 h/ ]6 O; @9 g7 c% c( d% h
/ c7 M, x4 F$ p# D
    End Sub' A( o7 e# }. x; a: d. U( F
- W" f: `; I- m
    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()+ C1 n) s# O7 w) X2 c) P
        Dim theChildren As Collections.ArrayList = New Collections.ArrayList
. D& l) }) D" `5 z        Dim aChildTag As Tag = Tag.Null
* N5 e0 H0 j  K. o! S/ \' _7 z6 o/ {) f, Q! I0 J; X
        Do
% d2 V/ d. I' g& |: m& ^, g4 y. u6 [            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)
+ g1 h5 z6 G- l5 {            If (aChildTag = Tag.Null) Then Exit Do
% V6 j! Y7 s0 U+ d" E5 B; J" m1 E# F( Y9 |7 o8 f) x: s9 N
            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)
0 o. r3 \4 c  `  _            theChildren.Add(aChild)9 x# T: E, a+ i2 X# `
        Loop
* R6 v8 K$ T2 M6 z1 \        Return theChildren.ToArray(GetType(Assemblies.Component))& O1 o" y# x9 X8 M8 W! C
# {5 p1 c8 g0 T, H7 O
    End Function
' w  }* ?: R" s, i4 ]4 C
& ]( X/ l# k$ J; S9 f6 t    Public Sub Main(ByVal args As String())
  U: l  P; \6 P. u2 _# k        If dispPart IsNot Nothing Then
7 w0 S4 |7 R) O            DoIt()& ]6 R* f6 n/ ]6 J* z6 W+ K
            Return7 ]( }; ?" h' I6 W
        End If9 ~& x6 m6 s) b8 V3 J

& z" I/ _( ]/ W& M" }' a    End Sub1 T" t; g- L; j# w4 G9 E

( a. X6 |' Z9 }    Sub Echo(ByVal output As String)
" M2 c  V( y- _( P6 R        theSession.ListingWindow.Open()/ ^7 H  K9 Z  H) \/ P8 p: [" X
        theSession.ListingWindow.WriteLine(output)* a# V3 O9 ]$ g1 r
        theSession.LogFile.WriteLine(output)
/ ?* G1 S3 |5 d8 @/ X" N% D1 B    End Sub& B( q4 N& F: \: v6 u9 v$ e

4 B$ v4 z& R" W0 J, }    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus)
' p9 Z7 E$ m! H        If load_status.NumberUnloadedParts = 0 Then7 ]5 \6 j) N" H% {
            Return
2 r' S( [% S5 g# c/ g4 A7 Q        End If
' q2 M7 M: ?$ j) }/ A' S/ V3 N6 T' j0 g
        Echo("  Load notes:")
- L# M. D4 A8 T* N1 X7 x1 |* J; C7 a4 m0 s$ l! m8 E; o+ P
        For ii As Integer = 0 To load_status.NumberUnloadedParts - 19 T9 K! b: Z/ d4 e4 W
            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))9 _+ P! |& L# O0 M& v' m
        Next
1 a9 F8 Z. G7 p) @8 m3 s    End Sub
7 T6 ?& ?+ h" T# C" q0 e, u0 o
, R8 ~  x; c7 q- |' W7 W    Public Function GetUnloadOption(ByVal arg As String) As Integer9 g; V9 ?; P1 K9 \$ D! V
        Return Session.LibraryUnloadOption.Immediately, p& Y$ }6 @. k& I! O3 m/ E# e/ `
    End Function4 d) s4 z5 {5 W9 \! C' e/ q( Y

+ H" w# G; l1 l' aEnd Module[/mw_shl_code]% o: ], L7 E+ V( U
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了