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

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

[复制链接]

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

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

admin 楼主

2013-11-5 17:34:33

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

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

x

' P7 V/ Y) Y2 {& f- NNX二次开发源码: 装配中选点,并报告父对象" B& _$ ]! D, K6 h0 \9 @) u8 m
  1. ! h, }0 j  t- r
  2. <P>Option Strict Off
    & C9 A1 U5 o' G9 {; u  d
  3. Imports System5 @4 B! C, ]/ f- w3 ]
  4. Imports NXOpen
    , r  \7 R3 E1 m9 w8 `3 z
  5. Imports NXOpen.UF
      {6 I# d* i; t/ U. I

  6. / o$ G! O. `2 P
  7. Module Module1% V/ U! C- v$ z/ I! R" W1 C$ F2 A

  8. 4 U# _5 F, U; n' O( l
  9.     Dim theSession As Session = Session.GetSession()" x) Q# K% [) ~: |1 x2 w# Z( ]3 \
  10.     Dim theUI As UI = UI.GetUI()
    / N. z3 R" F7 k0 k/ f$ H% I
  11.     Dim theUfSession As UFSession = UFSession.GetUFSession()' K/ Q1 e! c3 i
  12.     Dim lw As ListingWindow = theSession.ListingWindow
    0 @8 `; d; b% u( P4 {8 T% R
  13.     Dim pickedPoint As Point
    4 l6 {2 m0 l/ H8 _7 B
  14.     Dim myModelingTolerance As Double
    / X% ^; m, t, t2 y+ P6 k6 j  d1 ?
  15. ! {  h% i: m* y; t6 I! w
  16.     Sub Main()
    % z$ S8 `" n" c  N
  17. 8 A6 L  n( R, w( F9 e
  18.         theUfSession.Modl.AskDistanceTolerance(myModelingTolerance)
    ! B* E9 @$ j7 R9 u$ r

  19. 9 T  y* t; x; \* D( a2 I" z6 g
  20.         Dim workPart As Part = theSession.Parts.Work
    ! O4 m$ c! \* C- o0 {
  21.         lw.Open(): S8 N! m- W6 {
  22. 1 S" e9 K1 I5 Z- i! D  `2 J
  23.         Dim myPointTag As Tag
    2 C% b" T+ k: e0 x; G
  24. & S9 q% ~9 k* Y$ l) X
  25.         If Not select_point("Select Point", myPointTag) = UFConstants.UF_UI_OK Then
    * P! a0 x5 L9 q" H! K, Q4 y
  26.             Exit Sub# s; L  Y- H# j: r
  27.         End If8 B' h# h( K% D- }0 y

  28. % B" s6 s" K3 Y: u& R4 b5 D( k
  29.         lw.WriteLine("pickedPoint: " & pickedPoint.Coordinates.ToString)
    7 U: v  z2 O0 S5 ~0 W. O6 [
  30. ' @1 R: j  F4 r! _* h# d1 K
  31.         AskParents(myPointTag)
    , m  @* o8 z! P& Y

  32. / c, {  S8 S2 T
  33.     End Sub* o( K6 s! l- M6 Q' {& F

  34. 3 @! j% w0 J1 e* N8 S5 S
  35.     Sub AskParents(ByVal objTag As Tag)9 \3 y# g/ z1 L6 w% H
  36. / B8 F* b- o, a+ b! D2 R1 V8 e$ P* _
  37.         Dim n_parents As Integer1 U% f& O" B$ H9 T- O# c+ X
  38.         Dim parentTags As Tag()
      N3 A2 y3 b7 J/ Q9 m9 d2 Z& @
  39.         Dim myPoint As Point
    5 y- c4 ]  [+ N' K
  40.         Dim myEdge As Edge. f* J( v6 ?9 N; {& m
  41.         Dim myXform As Xform
    2 P. v; `+ i1 Z) h3 }
  42.         Dim myTaggedObject As TaggedObject5 A. x3 ]# x* {$ B1 W
  43.         myTaggedObject = Utilities.NXObjectManager.Get(objTag)
    9 o, l1 }' ^! |: [2 e  J

  44. ; `$ f  j! _7 y+ d  A6 b6 y& C
  45.         If myTaggedObject.GetType.ToString.ToLower.Contains("point") Then
    ; V" _1 H3 ]; I# Q
  46.             myPoint = myTaggedObject2 Z2 a+ U, `0 T4 U
  47.             lw.WriteLine("the tagged object: " & myTaggedObject.GetType.ToString)
    # A( E9 \/ p" t5 u- s
  48.             lw.WriteLine("")
    ) |4 |  ], ]$ j" @- R6 L+ L
  49. % h- L6 \, D; A
  50.             Try, r( ~, T6 {: o! R
  51.                 theUfSession.So.AskParents(objTag, UFConstants.UF_SO_ASK_ALL_PARENTS, n_parents, parentTags)4 G7 E6 [9 A: a& f; t
  52.                 lw.WriteLine("num parents: " & n_parents.ToString)8 c* e$ }/ S+ _
  53.                 For Each parentTag As Tag In parentTags
    ( d% S  w: z/ t+ \
  54.                     Dim parent_object As TaggedObject = Utilities.NXObjectManager.Get(parentTag)
    + n" ]6 ^1 v& h* G7 }9 r! U( R

  55. % T0 G; i7 N( C
  56.                     AskParents(parent_object.Tag)
    7 s5 @1 _" e5 Z, {0 ?1 r8 E
  57. 1 o( V6 Z0 p* R2 H/ \6 K( m
  58.                     If parent_object.ToString.ToLower.Contains("edge") Then2 m, t6 R* B& S0 Q) L: [% R
  59.                         myEdge = parent_object
    8 W, q$ h/ _" J
  60.                         lw.WriteLine("")' R6 B2 F2 x$ {. J' R$ N6 i
  61.                         lw.WriteLine("edge type: " & myEdge.SolidEdgeType.ToString)5 F* F' `# k( {, p
  62.                         lw.WriteLine("edge length: " & myEdge.GetLength.ToString)
    0 l" M  D0 P4 ~
  63.                         lw.WriteLine("edge owning part: " & myEdge.OwningPart.FullPath.ToString)/ y9 D+ ?' f/ c3 L' f- i  x; s

  64. $ r$ b2 M7 b6 H
  65.                         Dim partTag As Tag = myEdge.OwningPart.Tag" s9 \# V. Y; n, z. ^" a4 P! m* U. N5 i
  66.                         Dim occTags() As Tag
    6 K- D7 `) a# V' X9 l/ W, M* n
  67.                         theUfSession.Assem.AskOccsOfPart(Tag.Null, partTag, occTags)
    ( m% x! e# l$ V2 g9 U
  68.                         lw.WriteLine("number of occurences: " & occTags.Length.ToString)3 m8 Q! r3 j- R6 P7 k, k% i
  69.                         For Each temp As Tag In occTags
    ) X% V% v, s4 m  ^. m5 |; l
  70.                             Dim myComp As Assemblies.Component! J' n5 m4 G7 R& I7 Y5 I
  71.                             myComp = Utilities.NXObjectManager.Get(temp)2 o: b, j, ]* A/ K4 ^
  72.                             Dim myCompPos As Point3d9 d8 [5 v+ F* v6 T" l! ~& F) I+ D
  73.                             Dim myCompOrientation As Matrix3x32 m% k; Z4 E( W& }; \& Q) j
  74.                             myComp.GetPosition(myCompPos, myCompOrientation)) j$ ]9 w9 B% Y1 o% y- ~" V% M

  75. 0 [2 w" o# k# E
  76.                             lw.WriteLine("")1 Z5 P& I# ~9 |
  77.                             lw.WriteLine("component name: " & myComp.Name)6 l' B* z: y$ F
  78.                             lw.WriteLine("component display name: " & myComp.DisplayName)
    ! r  r8 p  N. a; h) b2 M
  79.                             lw.WriteLine("distance from picked point: " & MeasureDistance(pickedPoint, myComp).ToString)9 {5 \$ |: b  x+ |' l
  80. 9 D% W7 ?3 H0 k( T- Z5 Y. v6 B
  81.                             If MeasureDistance(pickedPoint, myComp) < myModelingTolerance Then, r' e$ ~, F; D3 e( T/ |, G
  82.                                 lw.WriteLine("** This is the component that was picked **")
    0 l! h- D: D, {* k8 X2 G8 t# \
  83.                             End If
    $ r# r5 T% F& Y1 j' t  T8 Q- Y/ b$ L
  84. : Y6 H0 H6 t, f& v) f3 s
  85.                             lw.WriteLine("")
    6 ?: m5 g$ U  l" f5 Z7 n
  86.                         Next
    $ w& V+ ~3 a# K* S

  87. 3 a6 y: G: W6 Q9 R& I& F' P
  88.                         lw.WriteLine("")
    : s2 a$ a4 K( G" t' ^  d: e
  89.                     End If$ W: V! D$ _4 r0 X3 [; p
  90.                 Next
    $ o; B1 [4 Y/ O. u( \/ T( a

  91. ) o; o7 Y4 B" Y6 b7 R+ @
  92.             CaTCh ex As Exception
    % W  T8 _; a% g4 g- N- @1 u% p
  93.                 ' NXOpen.NXException: Current object is not smart" g- y3 R/ c* P; h& S" q% H
  94.                 lw.WriteLine(" Error: " + ex.Message)$ n  c0 h$ g0 n# o# y# _
  95.                 lw.WriteLine("    " & myTaggedObject.GetType.ToString)
    " y4 K1 ^7 m8 n) S
  96.             End Try2 O4 _% N2 M* v& U( u

  97. , J+ K# ]8 \% E/ S

  98. ) p+ v( u0 Z7 Y1 l
  99.         End If$ n$ g; l* C/ X7 z" N" c; x5 L9 g

  100. 2 x& P+ _/ f* V! ~7 z% M

  101. / n$ L/ M$ c' c: s, {9 {
  102.     End Sub
    3 B- R) {2 [" k3 ?4 P

  103. % F; |0 w0 d4 r
  104.     Function select_point(ByVal cue As String, ByRef pt_tag As Tag) As Integer
    , B; M. r5 {* ]4 @+ h/ r
  105. ) B2 F  Y# a. n) z0 z6 y
  106.         Dim base_pt As Double() = New Double(2) {}
    0 S( o; i5 n& h- P
  107.         'Dim point_tag As NXOpen.Tag = NXOpen.Tag.Null( n" `3 {6 t4 n1 t5 d4 P; l6 G
  108.         Dim response As Integer = 0
    / H6 w. v4 T+ d2 n( t' T
  109.         Dim base_method As UFUi.PointBaseMethod = UFUi.PointBaseMethod.PointEndPt
    4 u: P& `/ N2 B7 S

  110. ! h6 p3 W. [4 _+ m4 k
  111.         theUfSession.Ui.LockUGAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM)& s* N( L; ~! L3 l
  112.         theUfSession.Ui.PointConstruct(cue, base_method, pt_tag, base_pt, response)5 L7 n# t+ s; v. m7 U: m5 m
  113.         theUfSession.Ui.UnlockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM)
    9 h% a) ~3 \* W) r# p# M! p! l
  114. 4 X3 d' y0 a8 F+ r6 j5 Y, q
  115.         Dim pointLocation As Point3d" K* }/ g# i( E7 E& \
  116.         pointLocation.X = base_pt(0). f7 z: t3 w+ x$ v* M
  117.         pointLocation.Y = base_pt(1), ?1 m- h8 x% F% R  B$ e% C
  118.         pointLocation.Z = base_pt(2): [: j# y* `$ K# ]( U" `' h/ Q
  119.         pickedPoint = theSession.Parts.Display.Points.CreatePoint(pointLocation)/ @" H+ u) S: J4 [3 E: |( `
  120.         'pickedPoint.SetVisibility(SmartObject.VisibilityOption.Visible)
    & \( |! f* z) n  H3 r' @
  121. 3 i6 V) C" R$ |" e3 W
  122.         Return response
      _0 x7 X7 @9 m  @

  123. 3 q; y% e# q1 P: @% F7 G9 R
  124.     End Function+ m0 G4 P  x) l$ l; x( N& \
  125. " S% l! G7 u" g+ g( }3 v
  126.     Function SelectPointObject(ByVal prompt As String, ByRef selPoint As Point) As Selection.Response1 \1 Z- {1 L8 I/ v8 @" s4 }3 |& J

  127. 7 }: a& W& J/ b  \
  128.         Dim selObj As TaggedObject
    % m' N: _# a! I5 V
  129.         Dim theUI As UI = UI.GetUI) c1 T+ e+ n4 P5 w4 C, k7 V& E
  130.         Dim title As String = "Select a Point"
    3 v! o/ |3 n) T* H
  131.         Dim includeFeatures As Boolean = False+ u2 N- u3 {: ?3 R
  132.         Dim keepHighlighted As Boolean = False
    / ^4 O" `% M4 ]" ~) U
  133.         Dim selAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific" ~# k( p4 l+ C# q
  134.         Dim cursor As Point3d
    6 I" W) K' s5 R9 d8 |1 Q+ ^
  135.         Dim scope As Selection.SelectionScope = Selection.SelectionScope.AnyInAssembly
    / {& W0 `# N( H; X, ^
  136.         Dim selectionMask_array(0) As Selection.MaskTriple: b6 d& F& V: j
  137. . M" h9 u0 i4 q# Z: b( z
  138.         With selectionMask_array(0)6 c9 Y0 o5 i/ n# N
  139.             .Type = UFConstants.UF_point_type: F( N, N- G9 C/ \8 X0 K
  140.             .Subtype = UFConstants.UF_all_subtype& g1 l6 B* ]# `! L( U
  141.         End With
    * d5 f3 r" V0 v$ J

  142. ; ^: ?( e; L/ m' m: _! @  M
  143.         Dim resp As Selection.Response = theUI.SelectionManager.SelectTaggedObject(prompt, _; \2 v+ b6 t4 G( ]2 L
  144.          title, scope, selAction, _
    0 J6 N3 ]" w7 X- g
  145.          includeFeatures, keepHighlighted, selectionMask_array, _
    5 P# r" O7 P" s( O# D1 @' w
  146.          selobj, cursor)' V9 F, `8 n8 X+ Q/ Q  Z* y; M) Z
  147.         If resp = Selection.Response.ObjectSelected OrElse resp = Selection.Response.ObjectSelectedByName Then
    ' q! m! \- _& ]" z6 C' b
  148.             selPoint = selObj
    3 |% k) m: Q: \1 }5 V. @+ F$ q
  149.             Return Selection.Response.Ok5 N0 l/ L0 m8 g; U) z
  150.         Else" f) q+ @' x8 X, x/ t- N7 k/ w
  151.             Return Selection.Response.Cancel. W. O1 N3 m" J1 ?4 D
  152.         End If, J9 ?0 a+ M9 o1 z# ?
  153. * |' L- t6 H' Q$ x. k
  154.     End Function
    : ^/ Q& K! _  r- n7 Z7 z& n
  155. 3 J* n# I) m* U3 w9 \5 t2 b
  156.     Function MeasureDistance(ByVal obj1 As DisplayableObject, ByVal obj2 As DisplayableObject) As Double
    9 K2 K. Z8 _4 A' B) P# K$ j8 @6 u
  157. 0 e0 w( b: [8 B- e. Y3 @5 ~
  158.         Dim result As Double
    ' r% J6 ?" e, p" I" E8 w6 h6 w0 f; z
  159. 4 m1 ?0 G9 u4 K2 Q/ {" I! x
  160.         Try# Z& S9 u* P7 {) `$ r  {7 M: {
  161.             Dim nullNXObject As NXObject = Nothing
    4 a8 }+ J% I( H

  162. , O8 {, G: X+ R
  163.             Dim measureDistanceBuilder1 As MeasureDistanceBuilder# V3 M5 h5 r- i4 o( G1 ]
  164.             measureDistanceBuilder1 = theSession.Parts.Display.MeasureManager.CreateMeasureDistanceBuilder(nullNXObject)7 }  g8 F2 _6 Y- }6 k

  165. ! T& g7 t6 R1 ~' j1 `" {* }+ j
  166.             measureDistanceBuilder1.InfoWindow = False
    ' w' z- W$ ]' _  b

  167. . j% r  B! h$ i# q$ E
  168.             measureDistanceBuilder1.Mtype = MeasureDistanceBuilder.MeasureType.Minimum9 v; Y) g) H* @

  169. 2 p+ A1 u# Y8 h  n" H1 n
  170.             Dim nullUnit As Unit = Nothing1 `' y8 {( D- f: y) G6 C+ R9 B4 d

  171. 5 k2 t/ O) J8 ~6 ^7 }* ?- c. J
  172.             Dim measureDistance1 As MeasureDistance# J# B6 k* Y0 `3 }0 F7 T1 M
  173.             measureDistance1 = theSession.Parts.Display.MeasureManager.NewDistance(nullUnit, MeasureManager.MeasureType.Minimum, obj1, obj2). I1 [# w! E( m9 @

  174. ) f! |9 ?8 @% r) x( z" m
  175.             result = measureDistance1.Value/ ]4 m$ |( Z2 P1 H3 X5 j

  176. ' v9 z: I. r$ T4 C& E
  177.             'measureDistance1.Information()  K3 t3 m' ^! z4 p9 }* z) G

  178. 5 V9 d: L+ n0 X
  179.             measureDistance1.Dispose()) B  p. Y. d! {: T8 M) c9 J2 Y% w4 O

  180. ' ?+ N$ S0 f# u6 P
  181.         Catch ex As NXException
    , n) ]& c$ @  ~, Q" K3 ^0 S; }9 Y
  182.             MsgBox(ex.Message)( r  A" L5 b* Z, P' p+ O( [9 j
  183.             Return Nothing3 M, g& C9 D6 f& n) B2 A" t
  184. " i. j: }5 W3 V' D4 q. L9 W) u
  185.         End Try
    ! _9 x$ x! B# n+ a5 q! v
  186. # ^6 W  l3 {5 v6 ?7 N" Q/ ~

  187. $ K6 s( @/ o: V7 v' @) o
  188.         Return result
    5 ]: `' `0 I+ y" K6 R( z) n, W

  189. 9 e& |' ~+ A- |; V7 P
  190.     End Function
    0 W1 m3 M) X1 K# N) B/ E

  191. 8 ^+ k5 v2 ]* L, A# z4 n

  192. ! F2 T: k+ m) ]* z" m% S7 i
  193.     Public Function GetUnloadOption(ByVal dummy As String) As Integer
    , n! J/ Z" r. ~
  194.   y8 z6 E, M( M6 q/ Z
  195.         'Unloads the image when the NX session terminates
    6 a+ u; b' o6 T
  196.         GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination' U, R9 o7 D/ ~7 k6 F2 a
  197. * Z" J; [! C# L' ?/ k" \; n
  198.     End Function
    8 ~  e/ j0 Q# R7 O  q. q6 f/ @

  199. . T: g  `: X0 O3 j. F4 D7 n
  200. End Module5 f- L9 U' p+ A* v
  201. </P>
复制代码
/ q# k( U2 E9 U" l/ |( n$ b2 ]
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了