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

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

[复制链接]

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

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

admin 楼主

2019-4-12 09:06:31

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

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

x
[mw_shl_code=csharp,true]Imports System1 ^! F$ P% ^" T) Z
Imports NXOpen
* j  H0 j. E/ t5 o) k- ]Imports NXOpen.UF
# \; ^1 e0 u# B; B: FImports NXOpen.Utilities
) [8 H3 X/ F0 O9 c7 S'. u5 i) W) s  ?: i6 j4 j- M
' The OpenComponents() parameter
6 P: \% v, V% h& J4 B& Y' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly
. _2 F; Z5 H- r  z. U5 s" v' only opens unloaded components fully (see also PR-8406345)) M+ w( p5 k* f
' Workaround: collect and open all components individually$ \0 @; s9 [% C" p+ n
'
7 z' y6 N  P" J" s1 t: E- b0 @Module NXJournal
! ^4 n) I& c. l9 V    Dim theSession As Session = Session.GetSession(); j: r" P- w/ J* q; Z: C
    Dim theUFSession As UFSession = UFSession.GetUFSession()
, l9 u+ Q  w$ y/ e2 u; |    Dim dispPart As Part = theSession.Parts.Display
& _. I9 r  n( ^2 c5 Q1 w5 c) R! ?, @3 N" o; B& t
    Sub DoIt()9 O9 J- S7 ^, X
        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)
8 M' U2 L! v2 }) ~        Echo("Number of Components: " & allComps.Length.ToString)- d0 {+ }, R. S3 X' S
        For ii As Integer = 0 To allComps.Length - 1! ^: u. c- G+ A7 @% _# w  \8 {
            Echo(allComps(ii).DisplayName)
( _4 v# u$ X& o* N6 E        Next
) s! Y- r0 y( l7 x2 ?7 S
- v- v( c$ k! S        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading- C( N2 K; ]4 T$ V' a) |
        theSession.Parts.LoadOptions.UsePartialLoading = False: T1 B$ k0 Q- Q

- I9 \! o0 h. o  Q/ M, G# g        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus: o; I- J( \* u, M
        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing! `2 a' \* v$ Q3 a" ?$ H
        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(
9 ]8 f2 ^. m3 x, p! j( V& d( e) k            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)
; Y$ C# }, {& m( z' K' t6 w- j  \6 w; A- F0 I, d) R0 o
        reportPartLoadStatus(partLoadStatus1)
+ `' G$ N$ C! A% J. s* n        partLoadStatus1.Dispose()7 C' G  M. f& G5 l3 c) }' @2 Q9 O: x! Q
& y2 o0 K/ A- V+ _9 h+ A: Q
        theSession.Parts.LoadOptions.UsePartialLoading = option1
: B/ k2 `6 E0 {0 K; _5 i( N3 \8 Q* m4 |+ K2 M; ]
    End Sub
1 g  `2 J) j4 W) y+ H2 ]0 ~
) v) q7 S7 H, B/ ~* h# e    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()
+ e" ]( z0 I: ?. g        Dim theChildren As Collections.ArrayList = New Collections.ArrayList
# D) w! P' ~; V        Dim aChildTag As Tag = Tag.Null, {# L2 F  w6 \

' x; t4 _  L8 d' N1 e        Do
( Z/ A9 ^' G' W- ~8 f            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)
9 \; }, n$ A$ U            If (aChildTag = Tag.Null) Then Exit Do
  i7 V; b( c  {$ _1 D1 }- K- b/ m* _% f. v0 u. g- M
            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)8 O+ ^" _' r) w2 ^8 o' S
            theChildren.Add(aChild)
" n# C0 I- H+ u7 w        Loop
7 A# I( w- M9 D; P        Return theChildren.ToArray(GetType(Assemblies.Component))9 o9 O& r$ q4 J0 y* I
8 G0 [5 M; T+ g) g% s
    End Function5 I' E" J0 m0 n5 S) X" B# e% c

7 V# f8 s; I# }( i/ R5 t: A* V- n    Public Sub Main(ByVal args As String())5 ^- \3 }2 U/ B! ^
        If dispPart IsNot Nothing Then* a' a' T. L  i5 \  h
            DoIt()
7 u2 i% r" Z% y& |8 x            Return
' a# H, Q  _8 f, C        End If
' _6 x, W0 F& z* x# P7 ^' t) J  ~( t% q% N& P9 o) a4 w
    End Sub* H# A+ Z0 T$ c9 ~
/ b! n* K: ^; B* H) ]2 @$ \7 E
    Sub Echo(ByVal output As String)# _) n$ N5 \4 H+ p. W
        theSession.ListingWindow.Open()$ i) h, D+ }, t6 h+ ]3 {0 z
        theSession.ListingWindow.WriteLine(output)/ y3 i4 v6 J6 o" d; a
        theSession.LogFile.WriteLine(output)  ?' T" Y; ~' J  B
    End Sub
: L! |6 ]) A( N: [9 X8 u' m
) o# M! B0 g+ I, S4 c    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus)- h& f& q6 [% P! H( U2 T4 g
        If load_status.NumberUnloadedParts = 0 Then" z7 ~4 q  h  Q" v/ [7 P7 ]
            Return+ u* Y/ r! H" y  ^# s( l) T: t  ]
        End If) D3 }& d8 F% M1 T( {1 ]
; v# T4 J% j3 Z4 O( _, ]
        Echo("  Load notes:")" b1 d" U5 b+ U( C' K: s8 w4 l
! _8 b" }1 H% Q
        For ii As Integer = 0 To load_status.NumberUnloadedParts - 1
* p# D" V* ~1 e9 S            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))! c( }' d+ g7 T# t( {, o
        Next5 @# i9 L; |3 g) ]- F
    End Sub! n! X. m! [% E1 }$ t

+ H- z8 z+ H) D2 ]# K    Public Function GetUnloadOption(ByVal arg As String) As Integer
0 Z5 F! j8 \) D2 [! ^        Return Session.LibraryUnloadOption.Immediately+ L8 A3 z8 E0 s1 E4 @: l2 f
    End Function2 F; r* k, c8 C) q

6 P5 {; Z  \2 \End Module[/mw_shl_code]% U) y5 A% [! H% }, ^
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了