|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
! P5 C' l3 ^9 w9 z- |
NX二次开发源码: 装配中选点,并报告父对象
( W* P; d+ f5 B
* {9 k0 q! b$ H, J* W- <P>Option Strict Off* c) p$ V8 J9 s3 t: k+ |8 Z
- Imports System. j- w2 m$ u5 G" V8 S" F8 R
- Imports NXOpen g' b8 P9 y. R, p a0 M7 _7 i; w
- Imports NXOpen.UF) ]- g* c" O$ D/ R/ F: F
-
: A7 i; \% n9 `+ ]$ j - Module Module16 C; T0 w( }0 \8 _% G% s$ m
-
% ?' K! ?) A0 T7 o' Y - Dim theSession As Session = Session.GetSession()3 f6 A9 Y) ~% v9 t$ s0 U3 x
- Dim theUI As UI = UI.GetUI()% [% D$ e$ D* a4 c' Y9 ~- @
- Dim theUfSession As UFSession = UFSession.GetUFSession()5 b, o+ O: d4 C$ R
- Dim lw As ListingWindow = theSession.ListingWindow
5 ^: I2 V0 K- i - Dim pickedPoint As Point) n7 r3 S3 \" {9 G
- Dim myModelingTolerance As Double" z' f6 U2 I; _8 e
-
/ e8 p: B% S6 F. X4 x( T - Sub Main()
5 G v) Y" k4 p3 E0 P -
" O) l% R" }& U5 V' Y( n& ?' { - theUfSession.Modl.AskDistanceTolerance(myModelingTolerance)- J( m9 z U7 n( R- y: r9 ?7 L
-
/ H6 Z6 N8 r$ R5 ~# U2 S - Dim workPart As Part = theSession.Parts.Work
# E" R* v* w; p/ P2 S - lw.Open()
# w- V1 B% q4 H1 A; g - 0 f$ U& s; l% v% G
- Dim myPointTag As Tag
E; h6 K7 E- Q! a: H1 E -
: s3 {5 B4 m8 p; ^1 I% w6 A - If Not select_point("Select Point", myPointTag) = UFConstants.UF_UI_OK Then9 l3 @; h/ G" R3 w
- Exit Sub6 O0 `( A5 N0 L, b* K% D
- End If7 H# ^8 q- w& O4 h3 D; G+ |* Z+ m3 v
-
8 r( C R2 P" l, g6 O. G5 @. @2 K/ | - lw.WriteLine("pickedPoint: " & pickedPoint.Coordinates.ToString)5 I5 ~, Z; A; c
- 6 T( _& n! S9 P
- AskParents(myPointTag)
% a; H% G" `5 A9 b) z0 k: V - $ s, V" B! k4 L- O# ^) F
- End Sub0 p; A x5 \( S0 r$ \
- ! o2 O; t9 I. s5 L+ m
- Sub AskParents(ByVal objTag As Tag)9 V: ~- B! N: b" g7 _! w! t O- c
- & q8 N2 F' M& w0 w* [4 A
- Dim n_parents As Integer2 P F( n) o: ^5 I1 X
- Dim parentTags As Tag()
0 D0 j! ]/ u: w9 m0 w+ _% W - Dim myPoint As Point
( _% g8 A" A/ G: } - Dim myEdge As Edge
; V- A$ a( r0 Q* b; I8 {# g - Dim myXform As Xform
: y, B; T0 e3 E; u2 ^7 {- T. U- m - Dim myTaggedObject As TaggedObject
: ~0 |3 z3 s7 M5 r1 o - myTaggedObject = Utilities.NXObjectManager.Get(objTag)
8 `& B* C" C' L+ G3 O -
8 t. U: T# n5 s - If myTaggedObject.GetType.ToString.ToLower.Contains("point") Then
( q% Y1 t: Q/ w9 o3 K - myPoint = myTaggedObject4 w5 I3 ]0 |" \
- lw.WriteLine("the tagged object: " & myTaggedObject.GetType.ToString)6 v" q2 p- X4 @9 c" _
- lw.WriteLine("")8 j4 {% \7 B: }7 q
- + {! y; F1 c9 S. b7 x
- Try, m+ w) T# Z% ]' P
- theUfSession.So.AskParents(objTag, UFConstants.UF_SO_ASK_ALL_PARENTS, n_parents, parentTags)
$ I# x" X( p3 D5 g( C - lw.WriteLine("num parents: " & n_parents.ToString): z# V5 g e6 O2 F
- For Each parentTag As Tag In parentTags' F6 j7 _1 o9 z
- Dim parent_object As TaggedObject = Utilities.NXObjectManager.Get(parentTag)
# u$ l' X6 s3 t2 \" G( e9 q# N -
1 Z; `- {2 T9 g5 N7 G9 V/ L - AskParents(parent_object.Tag)) E7 _4 B3 c4 }$ J! R) F' N5 E
-
. V+ n( a$ d8 h8 m& W8 e# X" |, A0 ~/ B" L - If parent_object.ToString.ToLower.Contains("edge") Then* i; r0 z( C- _4 m0 ]& f
- myEdge = parent_object
+ r5 K% `: P; k - lw.WriteLine("")' u$ q: | y; L
- lw.WriteLine("edge type: " & myEdge.SolidEdgeType.ToString)& d y) B/ m- Z0 g6 Q' K: W
- lw.WriteLine("edge length: " & myEdge.GetLength.ToString)8 E; e4 R7 C E+ i
- lw.WriteLine("edge owning part: " & myEdge.OwningPart.FullPath.ToString)
+ a5 j" d F8 F1 a' t, E4 \3 s - 1 W. z; }( ^+ }- R# I
- Dim partTag As Tag = myEdge.OwningPart.Tag+ c/ m/ t# _4 |
- Dim occTags() As Tag
, k+ ^4 n; |, `7 I6 L. }' k' @ - theUfSession.Assem.AskOccsOfPart(Tag.Null, partTag, occTags)
' Z: T* {& k9 x: A: q. h' k - lw.WriteLine("number of occurences: " & occTags.Length.ToString)
! Q" J; f. Q/ A. }2 R" a9 O$ t& |2 g X - For Each temp As Tag In occTags
8 _# D# B S* [ Z$ D2 \( o" M7 s - Dim myComp As Assemblies.Component' x7 B9 F2 C$ ^- M
- myComp = Utilities.NXObjectManager.Get(temp)
4 y% q0 U. `) }: E - Dim myCompPos As Point3d: k5 P5 T6 h+ s ?/ q
- Dim myCompOrientation As Matrix3x3/ Q9 c. ^& t3 |
- myComp.GetPosition(myCompPos, myCompOrientation)
7 ~0 v% K% U/ v2 F - , C8 \; {( W* w: u4 W+ c* K5 e
- lw.WriteLine("")/ {+ D# c- \; d% q7 j
- lw.WriteLine("component name: " & myComp.Name)7 l9 U3 P! [8 l9 D
- lw.WriteLine("component display name: " & myComp.DisplayName)
* w1 {1 l" ~) a* s- w4 t9 `$ N; g - lw.WriteLine("distance from picked point: " & MeasureDistance(pickedPoint, myComp).ToString)$ x9 @" a, o0 y& H; J( C
-
4 R" P: p; U1 B" j! o7 s* [ - If MeasureDistance(pickedPoint, myComp) < myModelingTolerance Then) A, E1 f# f1 ]. G
- lw.WriteLine("** This is the component that was picked **")3 n. z) K: U( B6 E5 V
- End If
4 v) J; l) P3 d6 w - 4 J, z2 k, V' }' r6 m8 S; y9 }
- lw.WriteLine("")
7 I0 v: N! h9 F2 e) ~ - Next E# w) m* m/ I
-
7 Z# ^2 ~: s4 [: H - lw.WriteLine(""): O0 u3 D5 L1 c
- End If# r8 U, K* i( j* p8 Y& s/ q
- Next
9 g6 T2 @. z: j" d+ C# Z -
! l8 Y# @! e6 @; z - CaTCh ex As Exception
! u5 U- m7 Q& _: R5 ]0 K5 ` - ' NXOpen.NXException: Current object is not smart8 T% P* _9 h5 f1 Z" e5 N! O
- lw.WriteLine(" Error: " + ex.Message); _8 l0 `8 ^) X9 y+ k3 l, p% X
- lw.WriteLine(" " & myTaggedObject.GetType.ToString). z9 Q0 h2 X2 U- [/ H/ x) w
- End Try5 x2 y! D( [- q. e
- - x) ]0 D" c6 q) j8 {3 i4 J
-
" q- f6 L0 u7 | - End If
9 h$ i% D6 j) t% E8 [6 N -
2 e" [/ ~( C6 P9 ~$ q' a% E -
1 S/ N' ^6 G6 F4 w: _/ `: R. q - End Sub4 b% V' Q7 _( j3 n: o% |7 ~
- # c$ q& v% I3 @! ~5 t
- Function select_point(ByVal cue As String, ByRef pt_tag As Tag) As Integer6 _5 I5 a3 H+ f6 O, [
- ( ^0 k% L2 O9 x p
- Dim base_pt As Double() = New Double(2) {}
3 o) E" x: x& E' |0 u9 C - 'Dim point_tag As NXOpen.Tag = NXOpen.Tag.Null
& p5 g5 B" H# l; ?! f/ L# W+ \* J - Dim response As Integer = 0" H+ y, |0 e0 o. F
- Dim base_method As UFUi.PointBaseMethod = UFUi.PointBaseMethod.PointEndPt% h {9 C" Y8 p) k9 Q
-
! D$ u( ^2 v% y4 w; h) l" K6 @ - theUfSession.Ui.LockUGAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM)
; e/ A" r8 t; _ - theUfSession.Ui.PointConstruct(cue, base_method, pt_tag, base_pt, response)8 w7 q; @) ]1 V
- theUfSession.Ui.UnlockUgAccess(NXOpen.UF.UFConstants.UF_UI_FROM_CUSTOM); C% b* o4 Z5 g3 G5 V! `
- . p* h3 b; L9 @; d
- Dim pointLocation As Point3d
% F6 U) F" M, D$ q, Y$ u - pointLocation.X = base_pt(0)
! n+ r7 Z, L1 E* o' m - pointLocation.Y = base_pt(1)
7 {' e+ k A# K) C - pointLocation.Z = base_pt(2), `- v, \ J) I8 P* l
- pickedPoint = theSession.Parts.Display.Points.CreatePoint(pointLocation)
! @( h/ X* S) O! V, }9 V - 'pickedPoint.SetVisibility(SmartObject.VisibilityOption.Visible)
4 T8 B7 m; [+ b& l8 i8 o - * [1 u; P% y2 V z4 X8 w
- Return response% p! }, f# {( {# K) ]- e
-
+ S" o5 g O! `& Q - End Function
# h( M q3 M& O0 ^+ b$ F) ?, D - " D+ m% o! J, @9 L% y B6 p E! ]
- Function SelectPointObject(ByVal prompt As String, ByRef selPoint As Point) As Selection.Response
~! @% {7 u1 V: Z# V2 h+ N! d -
4 G' T$ l) w0 {, {- R - Dim selObj As TaggedObject
! Z( s) f: y* E. P. a/ n - Dim theUI As UI = UI.GetUI
* }5 _" b f* j - Dim title As String = "Select a Point"
2 h+ |! u6 L4 R" Y7 e - Dim includeFeatures As Boolean = False
9 W! U) \' p+ o3 i/ U" B - Dim keepHighlighted As Boolean = False
; O) G# f; i- n& c - Dim selAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific
: _( i4 k, T* X7 b7 j6 E - Dim cursor As Point3d
5 _' V5 H* B7 J - Dim scope As Selection.SelectionScope = Selection.SelectionScope.AnyInAssembly
0 I" i# U) T0 ~ - Dim selectionMask_array(0) As Selection.MaskTriple- c/ z3 [3 Q* B" s6 x
- & n$ K# p7 J3 t& G, R
- With selectionMask_array(0)
; j4 I( F* E8 u* i* q - .Type = UFConstants.UF_point_type
! o. J; [* B& g$ s1 h# E - .Subtype = UFConstants.UF_all_subtype3 m: G% Q7 e! ? m2 S& M. Z
- End With6 Z/ h k* o. t1 X- Z# a
- 1 N& ]+ F! h e0 V
- Dim resp As Selection.Response = theUI.SelectionManager.SelectTaggedObject(prompt, _
. @+ X6 k2 i3 t# S) b. i; m' U* M) ^& r - title, scope, selAction, _
' B" ]3 S8 }+ T2 M$ | - includeFeatures, keepHighlighted, selectionMask_array, _
4 K5 S& c5 f7 }! ]$ g - selobj, cursor)
( c! Y/ F6 w7 b: t - If resp = Selection.Response.ObjectSelected OrElse resp = Selection.Response.ObjectSelectedByName Then6 ~3 P5 e3 j: j8 g. |
- selPoint = selObj
: {, P& G1 {( f$ E9 F( Q - Return Selection.Response.Ok* t# X: N* U. ^3 U) J
- Else
% H) m4 s1 c Q+ g8 z, ^1 ` - Return Selection.Response.Cancel; |0 ~3 y2 L: i
- End If
# \: z- O7 B( w7 z) f# z# o2 w -
) W1 @5 ?9 W: o - End Function
) w3 I; |) G/ w# b' s& P - 4 } T8 b% X4 l) D
- Function MeasureDistance(ByVal obj1 As DisplayableObject, ByVal obj2 As DisplayableObject) As Double+ z8 [3 q0 ?7 e" D( H4 x6 ?; f
-
2 E6 w2 |# Q4 b6 z4 [: g - Dim result As Double7 h8 G9 C) g, x
-
. v# \: F; v, f+ ]6 Z - Try
$ z3 J* f1 T/ p8 ` - Dim nullNXObject As NXObject = Nothing
+ X% O3 y5 |8 T% O$ ` - & C& w% Q. Q( H* }% X6 m; z' O
- Dim measureDistanceBuilder1 As MeasureDistanceBuilder! b. w# G; r6 z" X1 S) l
- measureDistanceBuilder1 = theSession.Parts.Display.MeasureManager.CreateMeasureDistanceBuilder(nullNXObject)
4 f; H* V. a) j X - " W+ Y; Q8 K0 i: g
- measureDistanceBuilder1.InfoWindow = False2 B* i! p; @* z T
- & ^. Z/ T% s* ?+ }$ T- c
- measureDistanceBuilder1.Mtype = MeasureDistanceBuilder.MeasureType.Minimum' C9 G. g% |% q# c5 `
- % G: V: b" l! L6 t% ]( @' Q
- Dim nullUnit As Unit = Nothing
2 A1 y3 |7 g. Z - : o- H) j9 X! e$ ~# p3 [3 q, H
- Dim measureDistance1 As MeasureDistance
( [$ A% f" G) h+ i5 o1 o* @$ T - measureDistance1 = theSession.Parts.Display.MeasureManager.NewDistance(nullUnit, MeasureManager.MeasureType.Minimum, obj1, obj2)% e! q- P2 [& ?' A/ i
- 6 U6 _: l4 C. W @% M
- result = measureDistance1.Value
# {3 O6 b' f: H) V/ ?; P* o -
/ B0 D0 Z9 j( Z0 S - 'measureDistance1.Information()
+ D, i3 v1 Y( q; B -
2 g& D H, q. T, u7 Q - measureDistance1.Dispose()
" u) Q* M0 r; {# t0 s -
" d" R- x$ ^' W6 c - Catch ex As NXException
+ n2 g) c4 b# c/ i* A7 a3 Q - MsgBox(ex.Message)
/ p" K9 Y' \9 v5 z - Return Nothing
- a, R) x; m$ k* ~# j6 D1 E3 h S O -
$ i1 T! y# R8 X' v$ X - End Try
& L8 f+ ^# U" @9 F - , x5 I& C7 }2 ]; O
- , i8 T- q) E0 z5 S# X; K6 }# g+ s
- Return result* {/ O9 p) j `# ?
-
, f- K0 b4 x8 O8 t) \ - End Function+ ~( r6 J! H! l8 q
- . \5 i1 ^* p: z4 b
-
% { h5 L+ l& Z- X; A. [8 ] - Public Function GetUnloadOption(ByVal dummy As String) As Integer/ x U6 l# ]/ `" c
- * `1 m/ X1 c2 t7 W
- 'Unloads the image when the NX session terminates% p: w: r5 }9 T! A1 C- ?9 h8 U b
- GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination- {. C8 T4 L* F
-
! v0 J) [9 a+ H - End Function
1 z, R8 \2 x& v5 F; o2 Y - / _9 N( ], Y* K) b
- End Module
: n9 v7 R: ~: K& s - </P>
复制代码 ' x9 H" b' J( |$ Y; b
|
|