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

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

[复制链接]

2019-4-12 09:06:31 2454 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
8 k+ J& f5 l) XImports NXOpen
* Z# S+ k/ K. }1 T: s; WImports NXOpen.UF
# [% r1 C- i6 A3 S2 p+ {* K, lImports NXOpen.Utilities
1 m; m& E2 _; Y. f! s'
( ~8 S3 Y" ~3 _0 Y/ M, E9 g0 ~' The OpenComponents() parameter% S9 s" C) q) G& ~6 N
' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly2 P9 o% `5 {1 A. b. S1 A) g! E9 R
' only opens unloaded components fully (see also PR-8406345); x. c: b) l3 t
' Workaround: collect and open all components individually
3 h. \( X+ [( ]'1 {* y; R, c. b4 [. N) n
Module NXJournal
8 A% @- Z& Z: j. m    Dim theSession As Session = Session.GetSession()
, o' `! A7 i) R    Dim theUFSession As UFSession = UFSession.GetUFSession()6 ?$ ?  K8 {$ O1 C. c: U6 d; Z  ^0 ?
    Dim dispPart As Part = theSession.Parts.Display2 ~7 @! D0 J: y1 `$ `) L
% K( g! B  W; u. z# X7 D& c
    Sub DoIt()" _6 `8 Z% H& j5 W
        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)
- ], T2 P/ E+ X9 s1 T0 M* ~( T! G        Echo("Number of Components: " & allComps.Length.ToString)
% T5 Z+ g4 x- X; H4 J# w7 }6 t        For ii As Integer = 0 To allComps.Length - 1
2 S! j: w% F0 C            Echo(allComps(ii).DisplayName)
% Z  \+ K* H1 x5 [        Next
8 v) w0 C9 V: z4 v. w1 M( L3 v- Y
* y3 g; D" J1 H5 _3 i        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading  f7 [- v+ N' C3 f2 c4 C
        theSession.Parts.LoadOptions.UsePartialLoading = False
9 A5 ?$ r: c* \' [- h, v0 a& o/ r$ X5 y  Z* I0 k5 t
        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus  h% r; r6 b( P* d# K
        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing
' k2 y5 {% f, A' M% b2 h9 a3 v        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(- ]# d. R+ s: @, H1 w) C- _
            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)
# c6 U  W) e1 X3 I0 O4 N  Q3 A- R& i9 ]
        reportPartLoadStatus(partLoadStatus1)
$ E, d3 W1 s1 a/ Q% b0 A        partLoadStatus1.Dispose()8 A- Z' R; }& q& ~: s
: X2 o. h6 Z6 g2 k% Z
        theSession.Parts.LoadOptions.UsePartialLoading = option1
- b# G1 D' D; c0 `5 c- V
3 o+ s3 I% O. ^2 {    End Sub
# z6 k$ X8 c5 x% S) ]+ b  `+ Z# v* x( I$ N
    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()
% |. g* E2 ]+ @0 `# F/ W* f( Z        Dim theChildren As Collections.ArrayList = New Collections.ArrayList& ~/ u4 @) h; u$ B" |; n" p
        Dim aChildTag As Tag = Tag.Null
1 ~' s3 D0 x1 K1 S9 ~7 e
0 [6 O. ~3 ]$ d9 x6 A        Do
" U6 k+ T6 e( f3 r( b            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)
2 t( k# X& F7 |: e) @            If (aChildTag = Tag.Null) Then Exit Do
. ]! q. L2 ]9 C$ @  \* O3 Z
5 k) P+ W1 D! V* b            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)6 l/ }: }' |5 T* ?& _2 A+ s0 @$ A
            theChildren.Add(aChild)
% f0 G( X5 ^7 e& w        Loop8 P: A9 U2 K; N' }3 I7 D
        Return theChildren.ToArray(GetType(Assemblies.Component))+ B9 u# G7 r, P( `) A
# v% e' B0 s) o6 V
    End Function
; h1 C1 w% n$ q! B! ]' s( v5 G( w4 ~: U6 }  E8 r  z" P9 z2 A
    Public Sub Main(ByVal args As String())) s* i9 f( W9 j8 J/ S. q0 y: t6 }, I7 k
        If dispPart IsNot Nothing Then# {. B  _* v. b9 A. f9 h( G; `3 w) J
            DoIt()! ~5 O' u/ D5 j2 p' _0 M) @
            Return8 g6 M/ K0 H  d, Z% L0 V
        End If
  w: [# u# A# c7 A
4 w' I4 k( \; ]8 r$ i, I" l& d    End Sub$ }6 \* @% R( i; V' l0 r

& |1 w& s! R- |; T9 u" J    Sub Echo(ByVal output As String)
8 S% C+ b, z' ~: n4 B% A! ~  t$ w$ n8 z        theSession.ListingWindow.Open()7 ]+ a: L6 e1 @
        theSession.ListingWindow.WriteLine(output)
6 O( h  `2 `( K6 |  i0 C        theSession.LogFile.WriteLine(output)' I; F/ a9 n% C+ d& x
    End Sub2 n' [9 L* ~5 s$ I, F

, Q- J6 l- G" u% v    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus)
6 L7 v  A. y( `4 s" g        If load_status.NumberUnloadedParts = 0 Then( ?4 e0 |$ e5 h
            Return
! [* M( H, G" p* W7 X( g        End If
, [; g* v: F; B' z7 G0 k
) X. M6 _0 a% r3 |0 H( Z! f        Echo("  Load notes:")  N4 ^6 O% Q- `0 w: p" r
  _+ y& Z3 f% T7 F3 X
        For ii As Integer = 0 To load_status.NumberUnloadedParts - 1/ a) O8 w  Y4 u* w! m8 E
            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))
4 O# t2 ?( w! X1 e) H: z& z8 c        Next2 ?- ?6 x* U: M8 k! }
    End Sub
+ E9 q5 |  O5 l) S1 l5 j2 |' c/ ^7 E9 C$ p' _9 m
    Public Function GetUnloadOption(ByVal arg As String) As Integer
! |: _- T. e- ^5 H' e/ J$ b        Return Session.LibraryUnloadOption.Immediately( k: W3 n' ]- ^( c( U
    End Function6 V1 W6 _4 b/ x) ]4 X

# x' c' @/ G# J1 T$ Z4 _: P4 sEnd Module[/mw_shl_code]+ B  `* h0 R  W9 g
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了