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

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

[复制链接]

2019-4-12 09:06:31 2384 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( ~  ^# t/ t$ V0 J/ ^) ^
Imports NXOpen5 f1 i0 p6 x3 X& _2 Y
Imports NXOpen.UF
' B: D4 _1 _4 rImports NXOpen.Utilities
; I! r3 [6 ]- h6 Q0 S. k: `0 Y' }, v'8 o: D4 a( N: k  T
' The OpenComponents() parameter
' J" ~, y- E8 @+ [' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly
& U7 c+ L, J8 h% M' only opens unloaded components fully (see also PR-8406345)
! g! A2 s4 U9 g; N5 g! S4 a' Workaround: collect and open all components individually5 U: n  K6 Y3 }% X
'
1 u5 n: L0 D: _% b5 T9 L* |1 sModule NXJournal9 A" n3 ^. K$ b! J$ U
    Dim theSession As Session = Session.GetSession()4 x5 f& M: h: i( n. b1 f
    Dim theUFSession As UFSession = UFSession.GetUFSession()
; V# ?4 J  g( A7 B7 Z    Dim dispPart As Part = theSession.Parts.Display
. Z& u" N( N2 J& @6 S# m* K) y1 W% E$ Y/ m' Z3 O
    Sub DoIt()
1 f5 u( {4 l$ l        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)
$ N- Y9 e! ^/ I8 r. J" D        Echo("Number of Components: " & allComps.Length.ToString)* \, S4 p, K+ X3 s* V" B
        For ii As Integer = 0 To allComps.Length - 1, g8 c9 F0 ]9 E! ?
            Echo(allComps(ii).DisplayName)' a$ n* r- W# V& y" E5 z' W
        Next
  ]9 A0 p0 G2 v, B' }  D& R1 ~/ v) u, d1 Y4 R6 N! i
        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading
( V5 K4 ~% o& _+ l  @7 e        theSession.Parts.LoadOptions.UsePartialLoading = False1 s; @1 l5 K- `8 Y
- ~& a+ w. C! W7 R6 K$ y- d
        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus
+ D8 a# r! Y& d6 z! P        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing
: m- t, v0 |$ F: N. b# x' R" S+ f        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(
% B" v! r: z3 V  T! K8 d            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)
- I: x$ E0 w2 ~) ^
5 V& @9 w( p: z$ b" c/ w( V        reportPartLoadStatus(partLoadStatus1)( M4 h# ]' B( [& k
        partLoadStatus1.Dispose()
7 h0 J- X& S7 [  j' ^; \
' d# r; `7 j7 r  L! R" F' S        theSession.Parts.LoadOptions.UsePartialLoading = option1
( A% p: C6 S, h1 G$ {, p8 p! B
7 u2 P' ~/ L# z! {    End Sub
9 z7 R( Y( c0 m1 e& C- ]' b' m7 _3 {" l+ b9 ]& T
    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()$ B+ F; D3 Q; O$ L0 ?5 W0 t
        Dim theChildren As Collections.ArrayList = New Collections.ArrayList
& l- A& w9 ^$ Q- V0 ^2 n& D        Dim aChildTag As Tag = Tag.Null
4 i' [9 Q6 v, ?% T5 z( w+ |* z* t: K1 o# t$ j  D
        Do
7 W; r. _8 \3 E) V            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)
' G/ C- W' U; k            If (aChildTag = Tag.Null) Then Exit Do+ w# p! I' a" y$ z1 B5 ?0 f

  d9 x$ W: M! V/ y            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)
' y/ I: F- F% a8 b! ]0 S            theChildren.Add(aChild)' z  e, }. k4 G. q
        Loop
7 B# [  ]( p6 Z: T: y* K$ a9 h7 a        Return theChildren.ToArray(GetType(Assemblies.Component))7 _2 B% f' h6 f6 S/ t- y; R

  z) y+ A( Z- x/ S3 T    End Function
: X5 C, ^; j3 x1 b7 X1 j: I9 O
! F) Y: R; n- K" e* z    Public Sub Main(ByVal args As String())
2 D; ]! Z% E- o2 Y8 ]. k3 S        If dispPart IsNot Nothing Then
+ o: \" i' |0 |- Y4 J            DoIt()1 B; @0 v2 @, x. {) |
            Return+ S5 V, a/ ?. u% H  o1 F
        End If2 H* ^' x7 M: W5 H  T. N* d( j

. L, O7 ^4 @1 N    End Sub3 _- Y+ O) k2 ]* `) H

0 {# A* m2 j+ D, H4 \    Sub Echo(ByVal output As String)
9 S4 i$ F  V" b( J        theSession.ListingWindow.Open()& u9 o6 I0 a) \5 [7 w( ?
        theSession.ListingWindow.WriteLine(output)3 M. h% r( p$ x+ ]( L
        theSession.LogFile.WriteLine(output)
3 }7 F& N, \! w- s# r$ j( C- v7 X* s    End Sub  [  l$ U; k7 k, t" J7 w7 @7 h
6 K& Q' f; C0 c" d/ j' L9 R9 j
    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus), c$ k5 `' D! U8 G
        If load_status.NumberUnloadedParts = 0 Then
* ^. P4 u* K6 ^4 z9 j' F$ }! a" I# x0 O            Return2 v5 I- u: T4 C
        End If% W. q9 s0 q/ S3 ?. R1 T; @) Q" K
+ B7 D2 W6 [. }' t% K
        Echo("  Load notes:")
5 u/ O1 |- p5 l; x4 o
6 b4 B! H2 T% e6 d6 h        For ii As Integer = 0 To load_status.NumberUnloadedParts - 1
& J$ A6 N& x" A7 Y8 s. K# Q            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))$ f) K+ ~; f1 p' Y6 p7 T2 }7 i/ h
        Next% ]6 o8 J9 I+ S
    End Sub; a2 k5 R  u: ?+ w, K

% t7 a' }, F: O: ]& |8 u' W    Public Function GetUnloadOption(ByVal arg As String) As Integer
) d$ S& C( Q6 |" }3 ~2 K        Return Session.LibraryUnloadOption.Immediately
9 T% ?& C+ S& Q1 O    End Function9 B0 n  v4 g, F. X8 W7 n

5 P6 X# o: ]/ i: a* h7 |# @End Module[/mw_shl_code]2 r3 ^8 _4 F8 n$ ]4 F+ b6 W
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了