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

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

[复制链接]

2019-4-12 09:06:31 2432 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. S" ^7 |, G9 Y* `8 B7 @1 \
Imports NXOpen
- }8 x! k% l' a3 z' w* ]3 C0 ~Imports NXOpen.UF+ K, D' U2 q0 e
Imports NXOpen.Utilities
3 {5 K5 m9 z* M* f: {4 \9 h; L'
, X; z7 e8 N  k6 L" s) ^' The OpenComponents() parameter
& D8 I% L0 P, B' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly4 F  G8 A$ M$ B4 D
' only opens unloaded components fully (see also PR-8406345)" l0 r* p  m+ }3 T% [. A4 z% a) B# L
' Workaround: collect and open all components individually
& ]- n" v7 I+ o( p'* s* `7 @0 i% ?! F+ Q8 W2 Y$ m* U1 |) \  {
Module NXJournal
+ s$ P1 A: s. u/ _$ b0 ?    Dim theSession As Session = Session.GetSession()
8 H) m6 R4 I4 Z7 P: g4 }    Dim theUFSession As UFSession = UFSession.GetUFSession()
4 E4 m0 Z  Z1 P( Y    Dim dispPart As Part = theSession.Parts.Display2 g! X8 U: V5 M
& g* p. F+ P8 H1 g, x+ f# A
    Sub DoIt()" @+ O8 ^0 \; N1 q5 B& C
        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)
2 e% U+ ~( v; G1 q9 O! V: o5 F! v6 |        Echo("Number of Components: " & allComps.Length.ToString)
3 Y1 V- O% t; y+ t: w        For ii As Integer = 0 To allComps.Length - 1* |. e# \0 w& B/ S- G/ S( y+ z
            Echo(allComps(ii).DisplayName)
+ p( Z# w8 T8 V" `! {5 J* l        Next
3 K! T3 s$ u% M/ Q7 P$ _0 I) q. k, D& q# R& {' R& y# P5 ~
        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading0 H: m) N6 T. o# y4 K4 d. O
        theSession.Parts.LoadOptions.UsePartialLoading = False5 n. J' V2 M; f
& ?" |9 V1 T- B9 b+ H2 ?
        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus: j/ r% c* y# S: ?: }- K, c" q
        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing0 Y# ~6 P+ w" Z7 a: I' g* P
        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(
) l7 T# z1 g* u6 ~: b7 ^            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)$ a: m" j; y* y) D; D
# F* U' |& y8 s$ U% v+ X
        reportPartLoadStatus(partLoadStatus1)7 U4 a0 z+ g2 c1 |5 m
        partLoadStatus1.Dispose()/ ]! S% x2 j. M4 `9 `

# `4 o; S3 ?$ q" \. d0 f        theSession.Parts.LoadOptions.UsePartialLoading = option1
" o3 J2 S* _1 v( ~$ K4 ^- K& C- }' ^0 R: |. C" [
    End Sub/ ^' R  e6 _2 ]* n% v+ u/ i; t% E
8 C+ N* l' h: G: `1 d
    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()
: m* f6 p* j7 c        Dim theChildren As Collections.ArrayList = New Collections.ArrayList
# d7 k5 J. g! S/ t7 D  U: v- ]3 _        Dim aChildTag As Tag = Tag.Null
/ M! k; ~8 ^  L& v+ X7 X+ ^, N( C- @7 ]
7 C& N/ n/ H5 `; r% l        Do
6 d3 X* v# H# B. b( u$ W2 ^  q' {& p            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)) s6 b+ }" C: y& O0 Q
            If (aChildTag = Tag.Null) Then Exit Do
5 g) G6 L+ v" N3 B# `+ y+ n* y5 z1 \# z6 T+ q; _( a
            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)
; ?9 v. M$ |2 t) u/ ]9 t            theChildren.Add(aChild)0 T0 B3 M- p: `+ Y
        Loop
! p5 a, w; v% ~+ y3 T+ k& U/ P( j1 r        Return theChildren.ToArray(GetType(Assemblies.Component))
  Y" P7 A: ^* P, E; p+ }1 k5 W8 y" U0 N( `: r# x* ^% a
    End Function# O, G9 c: w! Z# t1 M4 [

6 j0 ?& t/ H/ S7 A2 f# E4 }+ |    Public Sub Main(ByVal args As String())
2 H. Q# }5 O$ j9 t        If dispPart IsNot Nothing Then4 P6 q( ~' T9 }3 W6 z0 Z" K
            DoIt()# k& {! q: ?3 N
            Return7 v% c9 W+ h3 G; G, V6 l$ w
        End If$ K8 n, J  Y% h  U  s

5 _8 i9 Z. _& W6 n2 w    End Sub, e4 p8 E5 M7 U: J2 c( T
9 B, C/ o. Y+ o1 t. n6 v9 P6 P, \8 P0 l
    Sub Echo(ByVal output As String)
9 ~# s. F8 W3 V8 j) |' J, o  Q        theSession.ListingWindow.Open()- @1 |2 Y# ~# G  x
        theSession.ListingWindow.WriteLine(output)8 a/ |/ |' g- ^9 _
        theSession.LogFile.WriteLine(output); ~8 V4 ]* P: ?' G. H6 d/ k4 q* c: ^
    End Sub
4 Q% X- F( \) {, ~, _9 {5 g: d: v- g' ~) ~  Q  H: D
    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus)5 A, h7 B$ o- |, Y/ B
        If load_status.NumberUnloadedParts = 0 Then
5 \5 {- H$ v7 \1 v% |. H8 d, l  z            Return8 D/ c. D* [2 B5 E* i8 s# _4 h
        End If, `, r! d% ?5 U5 O% p. Q0 T

) H5 t" y# e; S7 @7 ^" o        Echo("  Load notes:"), S1 I$ Q# o* u  t  k5 m: z) A4 }

- _& h- |: M$ E        For ii As Integer = 0 To load_status.NumberUnloadedParts - 1+ W2 \; C3 M3 m5 g' K
            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))  j; L- M6 I( ?( y7 n2 Z
        Next+ K: t" v  m  Y9 [% T
    End Sub
9 K8 m# `! v# o$ [& h4 H; d8 K2 s7 O4 o3 v% ~+ L) Z: O
    Public Function GetUnloadOption(ByVal arg As String) As Integer
2 C9 W6 A, v+ D4 m$ V        Return Session.LibraryUnloadOption.Immediately, u9 n  f( X& W6 r& O) j4 }
    End Function$ i, [" {2 K7 H) p" r& v! L
. ?- A) L6 x% `2 Y$ ~" a
End Module[/mw_shl_code]6 f+ ^% q( c4 _0 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二次开发专题模块培训报名开始啦

    我知道了