PLM之家PLMHome-国产软件践行者

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

[复制链接]

2019-4-12 09:06:31 2277 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
# k1 B! X  a6 WImports NXOpen
& |0 k/ n# w4 |+ M& a- UImports NXOpen.UF
2 f8 h3 T0 H: tImports NXOpen.Utilities
0 e: d' \6 O4 C'0 C, ]" L' x. r* {9 B9 T
' The OpenComponents() parameter! i' k  s4 Q) F  D- v, T8 k
' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly
( n5 g  X9 r9 ~' only opens unloaded components fully (see also PR-8406345)+ a! ~6 R. \, A3 @8 S) G4 z) `
' Workaround: collect and open all components individually6 B8 L9 f( M; o
'4 R" c5 B  o+ ]2 u* @! s
Module NXJournal
: }" C/ L6 K, G7 [) O    Dim theSession As Session = Session.GetSession()# Q" p) C* A# B4 I$ w9 x- G, g
    Dim theUFSession As UFSession = UFSession.GetUFSession(): t) x; V/ M4 }* h% \: V0 ~
    Dim dispPart As Part = theSession.Parts.Display  r- f0 Q7 O& k7 {  `7 m! ~

4 f% v8 L& T- e4 [6 x# y- N0 g: F4 s7 O    Sub DoIt()* f# N4 ]- O  {/ ?7 M
        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)0 M7 ~9 K- _8 m, k
        Echo("Number of Components: " & allComps.Length.ToString)
' J- S/ p" n- b( a( w# ]# Y        For ii As Integer = 0 To allComps.Length - 1
; h1 H9 a4 Y; U& z, B7 I8 b            Echo(allComps(ii).DisplayName)" _7 F. C5 v. L' @$ O
        Next
4 H! o0 u& s; a- }2 {" K- J9 K' r* z' o: V
        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading
- Z& K0 G( k( [+ u- f: r: d7 G& O! I        theSession.Parts.LoadOptions.UsePartialLoading = False1 ~- ^. x0 _, ]6 F9 q% y
( @4 O0 r0 g1 R/ C2 W% ]3 X; P
        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus
% u. s/ q5 v# _$ O9 y" n# k2 P        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing
/ r# t0 q9 [8 s8 K        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(
0 U" r' S! ?0 A5 R/ i: ~( f, j            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)
4 l, [; I& ?) H# P/ [
5 l- b0 }( W% U( ~* J' i        reportPartLoadStatus(partLoadStatus1)
. u, J0 u) N" E/ O' g        partLoadStatus1.Dispose()
* M# G  c  B5 Z6 ~6 Y6 x1 v$ v
% a* D; m: f( d3 y6 D        theSession.Parts.LoadOptions.UsePartialLoading = option1
( a, D7 m( v  Y. Z
6 b' D. G: P) A    End Sub' t6 T+ B0 ?/ \( A. Q3 T8 r

/ ]$ M$ n) h; n    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()
4 m3 l. G4 ]3 S$ v2 s0 H        Dim theChildren As Collections.ArrayList = New Collections.ArrayList  z' I. ?' k$ B' I
        Dim aChildTag As Tag = Tag.Null% G: w( F7 c0 G; e( y
$ @8 W% L/ ?7 M2 a( u, X
        Do# M: g6 ?! f  a: q/ P3 Y
            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)& R  N, `% Q8 b1 G4 i
            If (aChildTag = Tag.Null) Then Exit Do
3 t* A; p& ^; c" U, F3 e2 z
4 G; p2 o& S0 Q3 A( j            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)
# r  B1 ^% e; {9 B6 F+ D            theChildren.Add(aChild)9 i: p0 n; l+ `8 \6 n# h
        Loop% v1 h$ A2 o3 l9 ^' W
        Return theChildren.ToArray(GetType(Assemblies.Component))' {% U, Y1 J2 `, ?" v% v1 o, H& V
+ h: _8 h6 d  n1 I/ p
    End Function$ b" ]4 {# K) J" V4 |

; O) V: A# m& [6 b! U3 P    Public Sub Main(ByVal args As String())
  g$ B" j7 O2 @        If dispPart IsNot Nothing Then+ B9 X' T( z5 ?4 l
            DoIt()# M; l4 K+ G2 m  N
            Return9 Y: _  F  u3 c# ~5 ~
        End If
  P3 F- t  ^* A2 P' F' h" _4 p1 t- H6 b1 k. ?
    End Sub
! ?& o* r9 v8 y- ]: y* M4 R( J7 L7 J" F& O
    Sub Echo(ByVal output As String)
9 q' A: O6 p. z: _% R  F$ g0 M        theSession.ListingWindow.Open()- |. _0 `" f6 v7 X6 [+ k
        theSession.ListingWindow.WriteLine(output)
# }6 K8 _: Q) a        theSession.LogFile.WriteLine(output)
2 T6 o$ A- F" D    End Sub8 C# v& r5 |# r# ]; e, ]4 p7 _) b; q
( q/ {9 \+ z( M  v# I5 d
    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus)
2 f" T: U0 h5 v  q& |) G( m        If load_status.NumberUnloadedParts = 0 Then( ~: y$ |& |6 k9 x
            Return3 M8 }9 [8 K" s9 B5 C/ E: r
        End If+ \$ C6 ?4 T$ B& f# e) I
& ?; C& F4 Q) \2 u
        Echo("  Load notes:")7 X& }+ v0 [$ a/ M, f. ?  K5 ]
9 ], q4 s1 b* l0 g8 q# C/ C
        For ii As Integer = 0 To load_status.NumberUnloadedParts - 1
6 u1 t3 Q2 t# L            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))
- t( \9 z6 G" {# E        Next$ v( S7 Z& O: D6 R0 f
    End Sub
" _3 F/ p( F% U' T8 [' x/ k  L; f  T5 p3 a' U( @1 d' z) s
    Public Function GetUnloadOption(ByVal arg As String) As Integer: Q$ {7 h5 `0 b0 E6 u3 `) Z
        Return Session.LibraryUnloadOption.Immediately
: `3 y4 t% c6 x; T; N; q/ w    End Function
! Q" _! p2 i0 U/ f' ~7 }7 ^. B% P/ i4 S+ g& M$ M$ @  ~* Y
End Module[/mw_shl_code]$ W) u& M+ H7 j9 B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了