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

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

[复制链接]

2019-4-12 09:06:31 2411 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. v0 |' g) e1 {( Y) i- T
Imports NXOpen3 A1 B$ S  K0 b# b6 i
Imports NXOpen.UF: [" M' y$ w- M' N2 t: L! Y
Imports NXOpen.Utilities
2 j" _+ d5 @! D4 u7 p, A% w! s'2 d  L- `* U1 a
' The OpenComponents() parameter( p9 C0 t. G9 s* u1 @& L' T0 v
' NXOpen.Assemblies.ComponentAssembly.OpenOption.WholeAssembly; S3 x) s2 G, s' G2 g
' only opens unloaded components fully (see also PR-8406345)! b+ L/ Z  b8 B& v
' Workaround: collect and open all components individually
7 l" J6 ]7 _- e# B'! N( [0 \5 U" r3 `5 R/ r
Module NXJournal
1 y: K/ u3 ?+ }9 ]' G    Dim theSession As Session = Session.GetSession()' Q/ `( a! Z3 r7 C8 J# y$ ]1 B
    Dim theUFSession As UFSession = UFSession.GetUFSession()
9 V! e/ U* Z& B    Dim dispPart As Part = theSession.Parts.Display, p4 s! v3 {0 C3 G" E4 a4 B
3 F  P2 v: g3 q2 i1 E' W! a
    Sub DoIt()8 P$ ~# [( r2 q8 w0 {! P
        Dim allComps() As Assemblies.Component = getAllChildren(dispPart)
8 Q" |9 N! S, P7 S+ I6 n' ^+ }% u* T, U        Echo("Number of Components: " & allComps.Length.ToString)! V8 c- {& _! e# D, X" B" o7 J, L
        For ii As Integer = 0 To allComps.Length - 10 U+ [- t: G. }& D- o
            Echo(allComps(ii).DisplayName)% i8 G, \0 e* \  n% u3 f9 Y
        Next8 e) W2 a% _' Z+ X% F# c$ z
1 f7 W  |' r8 f$ N' L
        Dim option1 As Boolean = theSession.Parts.LoadOptions.UsePartialLoading
/ P* Y; K/ P0 V: p, q        theSession.Parts.LoadOptions.UsePartialLoading = False
2 A- G5 q' @" K% ]* p4 ^1 b- x4 B$ e! h# |' t% _
        Dim openStatus1() As NXOpen.Assemblies.ComponentAssembly.OpenComponentStatus' N4 Y. [' `# `: T& f, k! [
        Dim partLoadStatus1 As NXOpen.PartLoadStatus = Nothing6 n2 Y+ A+ U6 ?
        partLoadStatus1 = dispPart.ComponentAssembly.OpenComponents(6 ]3 C2 u5 w3 h5 a$ Q2 B
            NXOpen.Assemblies.ComponentAssembly.OpenOption.ComponentOnly, allComps, openStatus1)" i! w+ t0 s+ _6 G
" O& i: n% m6 Y) r- q  _5 W3 j
        reportPartLoadStatus(partLoadStatus1)' G5 l) t: w2 k4 D
        partLoadStatus1.Dispose(), D& K* K5 t# p; n/ \7 B

( s% s! v2 M6 S+ r. h        theSession.Parts.LoadOptions.UsePartialLoading = option1
' S& e% v' Y; C) M) V
! @7 ^+ J7 B' V" m& X, q& n    End Sub" i1 R2 |0 ^+ y5 r: y3 {% @
+ z9 K0 }) ~) p# d4 ]7 P* Q
    Function getAllChildren(ByVal assy As BasePart) As Assemblies.Component()
3 m7 {" b8 g3 `" }4 d        Dim theChildren As Collections.ArrayList = New Collections.ArrayList
. {1 x& R/ k+ C9 a' v2 j        Dim aChildTag As Tag = Tag.Null
( V4 M5 n+ Z' @" L& Z; B" C) {1 l& d5 g) w" `
        Do! r# V) J- r, R1 B8 s* I! P- k1 G
            theUFSession.Obj.CycleObjsInPart(assy.Tag, UFConstants.UF_component_type, aChildTag)
' f) y; T7 W6 z            If (aChildTag = Tag.Null) Then Exit Do4 F# Q) J, Y% t9 A' s/ Y; K& C3 R
) ^: V# s5 D# n" ~5 i+ d
            Dim aChild As Assemblies.Component = NXObjectManager.Get(aChildTag)
; Q5 J; w6 Y2 C: M            theChildren.Add(aChild)
9 a5 q# _! O) J: I6 z        Loop' A; F9 {: M$ `# m% D
        Return theChildren.ToArray(GetType(Assemblies.Component))
- ]( O" {1 f. R. B# X: H9 H+ j1 L, z
    End Function% p5 M* E0 J5 D
' @& D7 X( i3 H( j+ P! C* X' T
    Public Sub Main(ByVal args As String())
! B) ~" v8 Z4 w- a" ]% o        If dispPart IsNot Nothing Then
' r( }# Q% [: P1 _$ x            DoIt()
( w- r. M" Y. d/ _9 W            Return/ S8 o7 c. h7 n4 M* D+ g
        End If
( S2 K9 M: p) Q7 |! d, b
6 _. o/ \4 S. T1 Y- r    End Sub
6 u# }# F/ z% M; ^( R2 X* k' B  c% W
% t$ l7 e/ q# `: @  {    Sub Echo(ByVal output As String)' O9 k6 T1 ^6 N3 x
        theSession.ListingWindow.Open()
- x- _" f% Q8 E% y5 G" r$ ^  d9 n        theSession.ListingWindow.WriteLine(output)
" u- m" w7 `' v, e        theSession.LogFile.WriteLine(output)
  w) s$ R" W& H# j$ v% l6 k    End Sub( j6 ~6 M7 l+ b2 S1 {6 E1 H

: e" b8 }9 q$ s' V3 g. C) k6 K/ J' H) V    Sub reportPartLoadStatus(ByVal load_status As PartLoadStatus)
& }# Z4 q; f1 b" J3 e6 |" C        If load_status.NumberUnloadedParts = 0 Then
0 F' a; r/ ~/ U  u1 s1 j            Return3 L9 c1 y& D. v) Y0 Y' L6 M
        End If
$ K# q! d9 I1 A; I, {( y: C5 G4 V* U/ X. N8 E# C+ B
        Echo("  Load notes:")8 E" r+ Q) P) j$ P+ v* f8 k' j6 u

; x4 C/ o! J  c4 k        For ii As Integer = 0 To load_status.NumberUnloadedParts - 1" |1 g' l/ k8 Q3 E# T5 r
            Echo("  " & load_status.GetPartName(ii) & " - " & load_status.GetStatusDescription(ii))
- @# x: x* L# l( ~! n        Next
- B* w, T7 h9 G7 q, L8 Y2 u. J    End Sub( N' J8 u* N5 f: J

' {. z: {, H2 c+ q: t0 M+ z    Public Function GetUnloadOption(ByVal arg As String) As Integer
2 Q8 u4 U; n7 a5 c% M. V        Return Session.LibraryUnloadOption.Immediately
) n8 U% X" @* f6 O    End Function
, Z  @  L/ a5 ]- ]% I
. I- _( E' p; _  H# w, H. wEnd Module[/mw_shl_code]
0 a* C6 b4 p8 ]- M7 f1 ?# P' p
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了