PLM之家PLMHome-国产软件践行者

[二次开发源码] NX二次开发源码: 装配中选点,并报告父对象

[复制链接]

2013-11-5 17:35:29 5598 1

admin 发表于 2013-11-5 17:34:33 |阅读模式

admin 楼主

2013-11-5 17:34:33

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

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

x

) X/ y% G7 g% V4 PNX二次开发源码: 装配中选点,并报告父对象
4 w6 _+ _( H$ N, k( y
  1.   U2 u$ f2 x3 r. o3 r
  2. <P>Option Strict Off+ G1 w6 f' C; W: m
  3. Imports System$ M/ M( r: [) u
  4. Imports NXOpen
    ! a. Q3 d% E: E; x* r
  5. Imports NXOpen.UF
    + d# v* ^) ^$ y: v. ~

  6. 3 T/ Z+ j0 h7 o/ Z: H( ~
  7. Module Module1
    ; Y5 t2 A. C6 ]% [( r, L

  8.   s; J* ]7 W0 g8 ]
  9.     Dim theSession As Session = Session.GetSession()
    4 G9 J) Z4 Y( f+ s0 `
  10.     Dim theUI As UI = UI.GetUI()5 p6 f( z( X4 C% I2 X
  11.     Dim theUfSession As UFSession = UFSession.GetUFSession()
    - \) m) [* H. o4 q1 D
  12.     Dim lw As ListingWindow = theSession.ListingWindow' Z) F+ H" f( K; j: k
  13.     Dim pickedPoint As Point
    2 f, O# d) a" m: k, c* \+ _
  14.     Dim myModelingTolerance As Double
    0 \7 u# H4 q( c/ \9 o  t

  15. . g( I, \+ s9 U7 \' m2 l/ A! c
  16.     Sub Main()' r! L, x7 W0 K: j$ n0 {% r

  17. 0 N* D, @* |& Y/ A
  18.         theUfSession.Modl.AskDistanceTolerance(myModelingTolerance)
    3 i6 r) V" `, k/ v7 T! ?  I2 I
  19. 8 ]% R5 z& c& {4 N7 p
  20.         Dim workPart As Part = theSession.Parts.Work
    ' Z4 x: v! |9 ^
  21.         lw.Open()
    # S' P- G$ j; {0 {) x) D  a/ |+ T

  22. . D4 ~% l# z, g& k9 ?
  23.         Dim myPointTag As Tag6 U2 t% ~% W0 b3 s: {2 O% L3 P+ }

  24. . G7 D" p- r* E2 I4 _
  25.         If Not select_point("Select Point", myPointTag) = UFConstants.UF_UI_OK Then
    / R+ L4 ~) ^% S8 X  n
  26.             Exit Sub; z/ Z5 d9 S0 t) m
  27.         End If8 A+ ]4 g2 e( f4 w

  28. 2 B, G1 Z2 K' g8 N  x7 P/ w
  29.         lw.WriteLine("pickedPoint: " & pickedPoint.Coordinates.ToString)
    0 \$ R# N6 b  o: c, Z$ s
  30. * w* n6 E/ ]& N( E3 w0 p& J
  31.         AskParents(myPointTag)
    . R3 `! }. G; T+ e
  32. 3 c5 O# j$ N+ r$ W! h
  33.     End Sub% O. W- y: |1 k$ S6 w8 R8 y4 m
  34. ; i" Y  Q7 m' \- g
  35.     Sub AskParents(ByVal objTag As Tag)
    ! T. k2 b6 z, i

  36. 8 q. z# Y: q6 B0 G8 e
  37.         Dim n_parents As Integer2 |8 O! v) t+ d# ?# I3 u; b( \: B9 ]
  38.         Dim parentTags As Tag()  W! q5 Y& u6 t4 b& _5 E8 b
  39.         Dim myPoint As Point
    ; }2 H) B' N; T2 @5 m5 c
  40.         Dim myEdge As Edge
    2 \) a; ~8 f; e4 Q  `2 }, v' t
  41.         Dim myXform As Xform( p* A) z' T+ N. R( K" ]- ?
  42.         Dim myTaggedObject As TaggedObject# F7 F& E9 A) m, C& c
  43.         myTaggedObject = Utilities.NXObjectManager.Get(objTag)) O  c0 ~8 r7 ~- j/ M8 k% n+ v! q! }2 U
  44. 8 U: y) G+ W5 {. S7 H1 [) L5 r
  45.         If myTaggedObject.GetType.ToString.ToLower.Contains("point") Then
    8 B4 U* p" \9 A# j5 K9 R9 V
  46.             myPoint = myTaggedObject1 x! ?) @% ]% S: v2 \$ Q, x
  47.             lw.WriteLine("the tagged object: " & myTaggedObject.GetType.ToString)
    * Z* v; H0 g6 u
  48.             lw.WriteLine("")2 ~& ~" Q$ T/ f* R
  49. . e- o3 {& e0 }- ~1 ~
  50.             Try
    8 L& M+ ]0 ^6 T% {% W( T
  51.                 theUfSession.So.AskParents(objTag, UFConstants.UF_SO_ASK_ALL_PARENTS, n_parents, parentTags), f, b$ m1 P3 d9 N, u7 ~/ z
  52.                 lw.WriteLine("num parents: " & n_parents.ToString)- q+ g4 _( x0 T3 |2 E0 D$ \. O) }
  53.                 For Each parentTag As Tag In parentTags$ {; d. k+ M! }/ \
  54.                     Dim parent_object As TaggedObject = Utilities.NXObjectManager.Get(parentTag)
    / T5 m" I! ~- R. y* |

  55. & O0 w# P' }: `9 o) a
  56.                     AskParents(parent_object.Tag)3 W1 l8 z  G1 l1 U! m( l
  57. ( ?; u& F  y( E+ _
  58.                     If parent_object.ToString.ToLower.Contains("edge") Then1 ^% k" H& s  n- p
  59.                         myEdge = parent_object( k! `  D8 u1 u
  60.                         lw.WriteLine("")
    . {2 Z, {; d3 ^4 ]! Z
  61.                         lw.WriteLine("edge type: " & myEdge.SolidEdgeType.ToString)
    3 u$ E8 v6 |: P+ W8 i9 E) i
  62.                         lw.WriteLine("edge length: " & myEdge.GetLength.ToString)
    3 m7 P+ }  M! j
  63.                         lw.WriteLine("edge owning part: " & myEdge.OwningPart.FullPath.ToString)9 r+ @0 w3 J% f) i$ Z# R" r

  64. # w- U% n; J- \1 a6 f
  65.                         Dim partTag As Tag = myEdge.OwningPart.Tag
    8 v4 @: K" n1 v2 d9 h
  66.                         Dim occTags() As Tag; T/ S& H$ \- F( l8 e
  67.                         theUfSession.Assem.AskOccsOfPart(Tag.Null, partTag, occTags); @& k3 Q% E8 A
  68.                         lw.WriteLine("number of occurences: " & occTags.Length.ToString)& i) R. ]) d  }" |: x4 _. H
  69.                         For Each temp As Tag In occTags" u, z8 u! n# z! U
  70.                             Dim myComp As Assemblies.Component
    1 t; U# j- o& R2 F5 D
  71.                             myComp = Utilities.NXObjectManager.Get(temp)
    & K5 g$ ~9 ]* v3 l
  72.                             Dim myCompPos As Point3d
    . }) ~+ L3 f% _
  73.                             Dim myCompOrientation As Matrix3x3% x0 [  ~% z. V
  74.                             myComp.GetPosition(myCompPos, myCompOrientation)- ]" f( R% ^1 k* d2 f
  75. / J# O4 }; \7 K9 W
  76.                             lw.WriteLine("")
    . ^( o7 f4 {! N7 a+ F1 Y
  77.                             lw.WriteLine("component name: " & myComp.Name)' e0 I4 z/ l  o( h
  78.                             lw.WriteLine("component display name: " & myComp.DisplayName)# C  y2 ]# D- N9 i9 T/ a/ a% E" n
  79.                             lw.WriteLine("distance from picked point: " & MeasureDistance(pickedPoint, myComp).ToString)/ {) i3 z$ J- A+ P' d. P

  80. $ ?( g% I( m  _
  81.                             If MeasureDistance(pickedPoint, myComp) < myModelingTolerance Then
    % ^& L! c; a* L6 A! X
  82.                                 lw.WriteLine("** This is the component that was picked **")
    5 X7 v( g$ ]/ z! u+ Y8 o- K' k. J
  83.                             End If
    + h" @; j  R( s* T' M& t
  84. 0 v% K0 f( t! [5 I4 a7 P
  85.                             lw.WriteLine("")9 _5 P* J# R6 y& e7 B
  86.                         Next; w2 H( |: o3 S: |( D

  87. 8 K2 F5 s/ U0 ?9 X7 V) _
  88.                         lw.WriteLine("")
    $ O6 t8 V6 m5 m' x) D, q) d7 O; X
  89.                     End If" R& p% T( }0 y  b6 {: j/ B% N3 g
  90.                 Next" C, u* y9 ?1 Q% w

  91. - ?; h1 i; ?: l! h: L
  92.             CaTCh ex As Exception
    * d" w; r5 Y* c8 ?7 [
  93.                 ' NXOpen.NXException: Current object is not smart
    4 W! q: B, x% x# I) x. B
  94.                 lw.WriteLine(" Error: " + ex.Message)
    # p2 K6 K' y3 P7 q
  95.                 lw.WriteLine("    " & myTaggedObject.GetType.ToString); ]( i/ o$ J. D
  96.             End Try% c7 F: O' |' Q+ e7 x/ A# d

  97. ' q& d7 \- n4 o/ ?' F/ P' ]1 v- M+ x
  98. ' v7 Y$ b3 d6 x1 S& u" ]
  99.         End If2 B+ p" G; l+ f( Y+ \0 ~+ J5 g' _
  100. 3 ]6 u. A' p& M3 O2 h0 O$ {9 Z% K
  101. % t% I  |5 ]# v0 Q
  102.     End Sub
    ; _& q3 w1 w! ~+ X2 B
  103. ' D; V0 b3 S6 d/ Z
  104.     Function select_point(ByVal cue As String, ByRef pt_tag As Tag) As Integer
    7 z$ K) ]& G: t6 g4 C! k6 @4 B. s

  105. , `; E' v! t* \' o
  106.         Dim base_pt As Double() = New Double(2) {}6 c' O" h5 w/ y! `+ Y# M
  107.         'Dim point_tag As NXOpen.Tag = NXOpen.Tag.Null* k; b0 C+ L1 H$ j; Q# O
  108.         Dim response As Integer = 05 U) S4 U) b' v# \9 `% J/ s
  109.         Dim base_method As UFUi.PointBaseMethod = UFUi.PointBaseMethod.PointEndPt; ^; z! P. E: p$ H3 G2 U% T

  110. 2 V0 t. ^2 X' ?6 T4 c
  111.         theUfSession.Ui.LockUGAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM)1 c; [( ?' I# z9 K
  112.         theUfSession.Ui.PointConstruct(cue, base_method, pt_tag, base_pt, response)/ I6 i  z+ C' q/ r; z
  113.         theUfSession.Ui.UnlockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM)
    3 L9 @! O, R1 @+ o: ~

  114. - B( J; t+ E3 w" B9 H8 [/ w: O+ I/ E
  115.         Dim pointLocation As Point3d5 b9 ^; j4 I1 \- R! @
  116.         pointLocation.X = base_pt(0)& B! U+ H1 I: [5 Z8 I
  117.         pointLocation.Y = base_pt(1)7 N9 C, S- K- G. A$ |" |
  118.         pointLocation.Z = base_pt(2)
    / |5 N& T% |, }, Z6 {5 \
  119.         pickedPoint = theSession.Parts.Display.Points.CreatePoint(pointLocation)
    $ K& O8 ]& Z' R$ k
  120.         'pickedPoint.SetVisibility(SmartObject.VisibilityOption.Visible)
    6 f: B3 H  y9 x0 i; b

  121. . f8 b( z5 E8 C- B1 O  h
  122.         Return response6 r% q5 y! P, S  t8 B# R% |

  123. 0 U7 w/ z; z! @/ @+ e; B$ H6 x
  124.     End Function
    3 t9 {5 Q! V/ r" C5 j

  125. ) Y, |0 s0 f, o
  126.     Function SelectPointObject(ByVal prompt As String, ByRef selPoint As Point) As Selection.Response) j6 n/ L- k* ~! d' }
  127. ' b9 l/ p9 C$ o( Z) Y/ O
  128.         Dim selObj As TaggedObject8 G0 }* R# X" [
  129.         Dim theUI As UI = UI.GetUI& j* g. n) J/ X! R
  130.         Dim title As String = "Select a Point"+ l1 |  S2 @: B3 Q
  131.         Dim includeFeatures As Boolean = False
    " T% f: R# ^9 B2 P
  132.         Dim keepHighlighted As Boolean = False
    7 G! y; m# |+ b- u
  133.         Dim selAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific# r) E/ o5 u  W6 w
  134.         Dim cursor As Point3d  z! Z, J! B" m: h/ ?
  135.         Dim scope As Selection.SelectionScope = Selection.SelectionScope.AnyInAssembly
    ; S( |& T( I  N$ Z) x
  136.         Dim selectionMask_array(0) As Selection.MaskTriple
    % N- c4 P/ K6 R/ P# H% j
  137. 9 D+ m1 t/ }  N) e8 _5 x
  138.         With selectionMask_array(0)
    ! p. k' i$ C; r( W" n) z8 A. P
  139.             .Type = UFConstants.UF_point_type
    7 _" {) g% _/ ]
  140.             .Subtype = UFConstants.UF_all_subtype
    & _, K8 z+ O! }
  141.         End With2 m) p( q' U0 W5 N/ Q

  142. - W: Q) x$ F7 K- b% F1 u4 a
  143.         Dim resp As Selection.Response = theUI.SelectionManager.SelectTaggedObject(prompt, _& k. A6 X( Q. s2 W+ ^) @! R* I5 `
  144.          title, scope, selAction, _6 V' S" o+ \/ y
  145.          includeFeatures, keepHighlighted, selectionMask_array, _5 w+ m4 ^$ c' j$ `4 M/ j1 {2 `
  146.          selobj, cursor)% E% b# [1 N) f  [( @. A
  147.         If resp = Selection.Response.ObjectSelected OrElse resp = Selection.Response.ObjectSelectedByName Then/ l; m' l( p# `) `' b6 {1 G( {! t
  148.             selPoint = selObj- ~$ p9 w$ U, r9 s
  149.             Return Selection.Response.Ok
    * g0 t. w4 F& n' M" F. n
  150.         Else/ c# Y* B$ U& \! i2 B" R
  151.             Return Selection.Response.Cancel
    # E# N- {" S; Y4 n9 o0 k$ [
  152.         End If) _1 c# I7 J+ A( Z: Z+ i
  153. ) m( ^* z8 h: T$ r% S3 Z9 B
  154.     End Function7 J6 D! y5 |3 V- C4 h6 {7 D3 G+ q

  155. 0 c0 }7 L; L' |) {3 Z
  156.     Function MeasureDistance(ByVal obj1 As DisplayableObject, ByVal obj2 As DisplayableObject) As Double
    8 u! r& ]; E+ m, K# [/ _

  157. 7 y+ k- P/ u% s) _1 @# w& u
  158.         Dim result As Double
    ; f; M0 z" e, f, i* |. X

  159. ) n9 X/ n: Y  U7 B
  160.         Try: F: @" D3 V8 ^) g
  161.             Dim nullNXObject As NXObject = Nothing' d. |# K5 f8 t* \3 u

  162.   D: F% O/ d; H) n4 O3 d5 l% E
  163.             Dim measureDistanceBuilder1 As MeasureDistanceBuilder/ ^' l1 K5 [4 A5 Q+ Z  \4 \+ ?& p
  164.             measureDistanceBuilder1 = theSession.Parts.Display.MeasureManager.CreateMeasureDistanceBuilder(nullNXObject)( y9 Q( z# d5 l: M

  165. 0 R. p- N- M) t1 c2 Z) e
  166.             measureDistanceBuilder1.InfoWindow = False5 Q9 j' Y, o9 v) S# r

  167. & r* |# z( |  ?9 L* K# o
  168.             measureDistanceBuilder1.Mtype = MeasureDistanceBuilder.MeasureType.Minimum
    / b9 d4 \8 P0 ^

  169. ; q: o2 k- z8 O
  170.             Dim nullUnit As Unit = Nothing
    6 ^0 R+ m3 h, }" K0 [9 |9 E
  171. % m: O' S# v2 _; X3 G& `$ {
  172.             Dim measureDistance1 As MeasureDistance% l5 ^. @& S7 n* A
  173.             measureDistance1 = theSession.Parts.Display.MeasureManager.NewDistance(nullUnit, MeasureManager.MeasureType.Minimum, obj1, obj2)5 o2 J5 h' P2 G! |2 a

  174. $ ^5 [7 \. n4 Y# K) Q# X5 h
  175.             result = measureDistance1.Value* n& F. S4 ^9 P) b: P5 Z* n4 I
  176. 0 A" L& D0 ]4 Z6 Y- w8 _8 {( g
  177.             'measureDistance1.Information()& G, R4 }  l6 ?. K3 I4 B

  178. % n+ U0 Z4 Y* o7 E2 M' F
  179.             measureDistance1.Dispose()+ O4 S+ }7 O( v( @
  180. 2 J: S1 r( R# b5 W& Z
  181.         Catch ex As NXException
    & f9 b' @6 e1 o  k! r3 ]9 p6 b
  182.             MsgBox(ex.Message)* b( j" T. `6 T5 q
  183.             Return Nothing# i7 d5 |) v# Z: `% ^
  184. 5 I  u- y0 K0 D: m: _$ r( b) Y$ x
  185.         End Try) `3 Q& d  \8 U6 e  B) }
  186. " o+ o; u; Q2 M0 V+ N' A

  187. 9 @: g% P% s  Q) K" A) i8 F
  188.         Return result9 O4 p5 E. ?( k% {- ?" P1 R# f7 d
  189. 6 e  N3 X  @, O" P
  190.     End Function
    ) c% w4 D8 h1 f
  191. / _) t+ g4 ?2 f  E# e4 ~4 X9 F

  192. 7 x- x3 |* a: t0 W
  193.     Public Function GetUnloadOption(ByVal dummy As String) As Integer" H; T$ R) W- a8 Z; @

  194. 7 O% l* B; f  }* p4 ]5 n7 B
  195.         'Unloads the image when the NX session terminates8 K( f2 n$ }; L) L
  196.         GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination: f$ u2 Z6 N7 e- `

  197. 9 X" q5 J2 C, i0 C
  198.     End Function* z+ p$ s1 }/ \9 ~0 [0 u

  199. : F( l8 E/ w1 s! G* }& Y
  200. End Module! o! Z; H5 N$ ^
  201. </P>
复制代码

% A3 k5 J" @0 ]. r* s2 g6 {/ b
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

admin 发表于 2013-11-5 17:35:29

admin 沙发

2013-11-5 17:35:29

直接 跑下 Journal 就可以看结果了
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了