|
' ug刻字源码 +QQ 609719845
6 R& i1 P1 h1 T' into geometry using a true type font and0 n/ g. H, C/ f7 s: q W$ p! B
' extrude the result
5 ]4 Z: M- ~/ u" i& P; m
+ k1 ?8 [+ X5 e8 w" }4 _3 VOption Strict On) m x) {: Q2 O6 u5 O/ X8 o" [
- W8 h8 |1 @% n, F* E5 \
Imports System8 ^% j, h; O, Q, ]$ K
Imports System.Drawing
) [! V$ q4 K5 V* S& z: f- dImports System.Drawing.Drawing2D. B! s! M1 a$ p T0 h7 |' ]
Imports System.Windows.Forms. H' n; @7 z7 O4 D9 S# ?
Imports System.Collections
6 w' f. a2 Q0 d1 Q& y8 e) a3 ?9 ~8 LImports NXOpen( g2 s: V7 F; u5 \7 y5 i) u# G
Imports NXOpen.Features
( F1 `. S' z6 Z' x- B) Y5 H/ @: Y4 OImports NXOpen.UF
$ O* o+ P- S; z; u$ J% CImports NXOpen.Utilities
- @" c& _ N$ j e4 CImports NXOpenUI
/ X1 I: j$ d9 J! l
( D& Q. d; f, o4 i* P" g" o' g# WModule DrawText
( b" q/ R5 E/ `* E2 l5 ^2 g0 Q( ~; c1 w
Private sess As Session
) {# Z. `0 M9 z3 v" [( E Private ufSess As UFSession9 S, s! t" S C r) j
Private origin(2) As Double( ] v' j0 j- M
Private path As GraphicsPath
: C# ]5 B& ?: R; \! r7 E& C# k( j Private text As String$ g4 B9 \0 Z* y' @5 C# J* ^, G
Private font As font
8 \: x, b/ o7 i Private curves As New ArrayList
2 H- ^/ N4 d& A9 `* F: e+ G Private sketch1 As sketch
4 k# C% I3 A3 J8 E6 o Private thickness As String
0 i8 S; y& N' I Private undoMarkId As Session.UndoMarkId7 H1 K; n1 w. b1 ~6 D
/ ~# d& C7 M( \4 u( K( y. d) i* U ' Prompt the user to select a font.# z e; A8 g- m& ^* v/ v
' Return True if successful$ b J0 w( V4 N2 ?
' The Module level variable 'font' is set to the resulting font.
9 K& S$ R' q& x2 p! y Function SelectFont() As Boolean
% s8 F! n6 ^8 p u' u7 W/ M( ~ Dim fontDlg As FontDialog = New FontDialog6 Z7 Z' h# Q9 V @
+ m8 h, D ^, H9 C
SelectFont = False
8 D9 L$ J G/ L9 ? If fontDlg.ShowDialog() = DialogResult.OK Then
; ?/ p# A, P# U8 |9 o: d( E" m5 R$ T font = fontDlg.Font
( f3 ]* f8 m' O) I( y SelectFont = True
9 C- c0 F% H- a7 J4 t$ i* C End If( C- C3 D; J5 R Z: m
End Function
! c6 @% j) L) _: i ' Prompt the user to select a screen position3 d2 I0 b9 @' W
' Return True if successful+ q7 Z+ L# z/ w, p! t
' The Module level variable 'origin' is set to the resulting point.
2 p! e/ Z! s4 ]' ?0 t0 m Function SelectPosition() As Boolean6 G- z7 t- Z5 F0 |. O. k: @0 Y
Dim view As Tag c, z/ X3 C1 i! B: R/ q
Dim response As Integer
; T( u$ a. ^- h) e6 E( I6 j- C* \: K- ~+ I& G/ ]4 I
ufSess.Ui.LockUGAccess(UFConstants.UF_UI_FROM_CUSTOM)9 S1 h, L' B L) t7 r' D
SelectPosition = False0 R( @ M; R( ? m6 |
Try1 ]" l- P$ {% v
ufSess.Ui.SpecifyScreenPosition("选择字体", Nothing, IntPtr.Zero, origin, view, response)
% w/ H: M8 @; c' c If response = UFConstants.UF_UI_PICK_RESPONSE Then3 e) H0 A/ U6 m+ T
SelectPosition = True6 J" y7 A2 T" ?1 X; i3 p, Z
End If/ P9 O, e; v8 D5 ^
Finally3 a: f3 M6 r) ~5 n- X6 ?
' Restore UI state always including in case of error.
/ J( z2 D/ f$ v1 S) x8 q ufSess.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)0 C5 K/ o1 ~8 F' \" n( q1 J. n) N
End Try
+ I) l, {3 h% N5 x3 N# F End Function
3 h4 _# P1 R: t ' Prompt the user to input a text string to convert.2 Y) S4 f8 o2 l- E# J( U1 S
' Return True if successful
9 Y4 Y. F8 E$ T# G" s( R ' The Module level variable 'text' is set to the resulting string.
& l' z. i3 @8 K) ^$ x5 s" X* W Function SelectText() As Boolean4 d! S: R1 K% I' c3 u
text = NXInputBox.GetInputString("输入文字", "Enter String To Convert")
1 w# X7 p) D' J4 u: D0 y8 Q; q SelectText = False: u! r- `5 Y% Z6 E s' a& X
If text.Length <> 0 Then
: C4 i9 @8 B5 `/ r$ a0 z. S! F SelectText = True
9 V& k9 C' r( A6 z* R0 }1 k End If2 s" P1 q1 z9 ]
End Function
( {5 V2 @+ h1 D* @: m6 Y* p6 P ' Prompt the user to input an expresion text string to convert.3 s; a H, W4 H4 N+ Y
' Return True if successful z) d$ Q, }* s) P# g& C0 Q- B4 o
' The Module level variable 'thickness' is set to the resulting string.2 O9 }# t2 K- H5 B4 I
Function SelectThickness() As Boolean
4 I1 Y# O2 E/ E p thickness = NXInputBox.GetInputString("输入高度", "输入高度")$ @# u/ v, F% u7 J3 g3 r5 Q
SelectThickness = False
) T! a2 v6 a9 e If text.Length <> 0 Then2 k9 Z' _* H1 v X
SelectThickness = True. y S3 J+ Q+ C4 f
End If
1 _4 y6 N5 J; i! _8 ^ End Function
3 F% u: _% _6 V+ o3 n( }1 Z ' Given a subset of the graphics path between the given indices ( z( m& M8 r4 `. X* r" l' z e
' create lines between the points in the path.
6 x5 D: }1 u+ G" m ' Assumes that caller has selected an appropriate section of the path.! T1 t, J2 `5 c4 r' y8 r6 `
Sub CreateLinearPath(ByVal startIndex As Integer, ByVal endIndex As Integer)
8 J4 U" b/ L ?. i+ u Dim j As Integer4 c6 P5 A+ Z- a* v2 E; ~
For j = startIndex To endIndex - 14 E7 a$ Z# W; B% ]! r& L) e* M
Dim stpt As New Point3d
, ^9 O+ [1 ?0 N Dim endpt As New Point3d
. l9 I- \1 v3 N# g( i) v stpt.x = path.PathPoints(j).X + origin(0): [! x5 [3 M4 D3 ]/ ^: k
stpt.y = -path.PathPoints(j).Y + origin(1)) C' h( O+ J. H; b7 ?
stpt.z = 0+ s" q" `4 ^; |% n
endpt.x = path.PathPoints(j + 1).X + origin(0)/ W5 v& @+ h2 \) x9 a8 n; G
endpt.y = -path.PathPoints(j + 1).Y + origin(1); Z3 B* S+ G' P5 V# h/ Q0 o! f
endpt.z = 00 X0 {; g% M$ E: t3 n0 u3 ^
curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))
9 L) z$ ^. Q5 L7 B Next
7 s& g, S+ \+ ^" o, ^ End Sub' X" l1 ?0 @3 h5 z' c2 V B" Z) S
' Given a subset of the graphics path between the given indices 9 D$ |3 Y0 V. e! Z; c
' create splines between the points in the path.
+ U9 H3 p! y0 L. T! q ' The path contains bezier segments and this converts then to B-splines.
* W( O2 d7 g) ?( M/ X: p ' Assumes that caller has selected an appropriate section of the path.
4 `. O5 b' r' d2 _! y0 Q Sub CreateSplinePath(ByVal startIndex As Integer, ByVal endIndex As Integer)" j2 I# j& N7 D- ?6 P& n
Dim j As Integer
[1 X# K6 K0 M4 h5 N$ R+ W For j = startIndex To endIndex - 1 Step 3. v% o5 p5 S$ v! G; o. q2 U
Dim poles(3, 3) As Double
- M: v% K" @! h& U( H! |, k Dim k As Integer( x8 R0 j7 @# r4 [% G% U, o
For k = 0 To 3- Y& j3 z# _$ d& r
poles(k, 0) = path.PathPoints(j + k).X + origin(0)( ? A4 ^2 T: [" }! i
poles(k, 1) = -path.PathPoints(j + k).Y + origin(1), }* `- a& @7 e) R& H* h* H% @
poles(k, 2) = 0
N. R. F# `0 i- y+ S: {, Y$ Q poles(k, 3) = 1
( g4 e9 u, q7 P9 _7 z Next
8 ^+ D, m _6 y) C8 u( C/ N$ c Dim knots() As Double = {0, 0, 0, 0, 1, 1, 1, 1}! Q+ f$ C* ~: a
Dim spl As UFCurve.Spline
. N4 l4 \. e! S+ b Dim spline As Tag
! a+ w- h/ a. P Dim num_states As Integer
- J, d& y" M( q2 R/ |! G6 }1 x Dim states() As UFCurve.State = Nothing6 W; G" [5 ^8 T4 j$ I0 X0 o
spl.start_param = 0; i. n/ o5 J' ?* Y
spl.end_param = 1
# _! e' \+ i! [1 ` spl.is_rational = 0
+ z. Z2 U% ^ [# x1 o spl.num_poles = 46 ~! B5 L2 j) o' J% ]
spl.order = 4
3 X- U Z" v5 O" f5 i/ s2 B9 z) Z. q+ } spl.knots = knots1 y s/ t/ h7 f# G
spl.poles = poles4 J. y Y5 o, z* Z; C8 K: D3 d
ufSess.Curve.CreateSpline(spl, spline, num_states, states)
# ^6 F$ C+ G2 c curves.Add(NXObjectManager.Get(spline))
2 o/ f7 j8 }: M Next
* Q4 z8 Q C f4 j& |' c! H' Q0 I. f End Sub
- S. G# e: _9 [2 @) k* Q) _ ' Create a sketch and add all curves we've created to it.( y) F3 j0 J5 l+ ^
' Most of this was created by recording create a sketch and editting the result.+ e4 l5 \- J( d2 ]% Q n8 V7 z
' Retries with different sketch names to avoid duplicate names.; r; b( K, M. _! j: W
Sub CreateSketch()
" F% G, |9 b4 @ Dim theSession As Session = Session.GetSession()
9 h- Q2 x2 X+ O' ]6 X Dim workPart As Part = theSession.Parts.Work
% X7 m# A2 n: B4 q8 e* l1 K/ S Dim displayPart As Part = theSession.Parts.Display
i3 \/ y# v. w
# e0 {5 o+ Q7 z Dim markId1 As Session.UndoMarkId
$ z; R5 f3 t# D3 F+ M6 o( O markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start")
& _; _$ r" Y$ L+ z0 Z! K w
$ b$ V2 ]4 `$ P' R Dim nullSketch As Sketch = Nothing
, G I& L# n# r; T) N# B/ L. I% B8 a5 ^- V4 W
Dim sketchInPlaceBuilder1 As SketchInPlaceBuilder+ p9 s) g, v/ d/ o' C8 b9 g
sketchInPlaceBuilder1 = workPart.Sketches.CreateSketchInPlaceBuilder2(nullSketch)
3 |% v2 E) S6 }
# M P$ a C0 [* T8 _& I% s2 x Dim unit1 As Unit = CType(workPart.UnitCollection.FindObject("Inch"), Unit)% v5 y3 j9 b- G! A3 q& K2 B
. w) o1 _/ u4 I/ O+ ^6 u- B
Dim expression1 As Expression
0 O/ F# k0 u b2 D; T expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)5 n: D0 p ^; [5 S) b3 ]
/ m% S( o. q, Q' I n8 t
Dim expression2 As Expression
, R1 L" s7 ^3 K8 z expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)
; m$ A' E2 F+ z8 D* j0 g$ P$ v- {$ F$ t) {, o
theSession.SetUndoMarkName(markId1, "'Create Sketch Dialog")/ K5 ^2 W. F: b$ k) t0 ]: G
3 ]7 t' f- L/ |8 P/ h- B5 Q0 I' X Dim markId2 As Session.UndoMarkId
$ Q0 Q2 a9 V2 E; v4 W markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")" F% a# f1 g. k' ~) V
$ T( e- d: Y, v6 Z- f theSession.DeleteUndoMark(markId2, Nothing)3 a2 r3 V- _4 M: ^, ]
8 h6 `; ~1 J4 o6 q
Dim markId3 As Session.UndoMarkId! ^5 @' @0 T# k: ^
markId3 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")
! o. F8 O; w f z6 h! C
' h: K% ~5 h) D% | ' Inferring constraints and auto dimensions may take long time and is not really required for drawing text. * o: |% t$ Q( \ S. `" w
theSession.Preferences.Sketch.CreateInferredConstraints = False+ P5 F$ y, I* w L
theSession.Preferences.Sketch.ContinuousAutoDimensioning = False
) M3 t4 V2 Z) z! W7 F8 o/ z theSession.Preferences.Sketch.DimensionLabel = Preferences.SketchPreferences.DimensionLabelType.Expression: k j0 i1 ~/ e5 r) l
theSession.Preferences.Sketch.TextSizeFixed = True
3 N1 Y& Y) ?) v$ o1 P* L" K$ o8 ^ theSession.Preferences.Sketch.FixedTextSize = 0.12
& s# p& K% l- X8 Z' t0 N theSession.Preferences.Sketch.ConstraintSymbolSize = 3.01 }6 R3 H# O6 D1 L- v% Z
theSession.Preferences.Sketch.DisplayObjectColor = False8 x3 Q, }# u2 l% V
theSession.Preferences.Sketch.DisplayObjectName = False
5 r) @' N( ]+ x7 O ~# L% i. {; {3 {* {( |& j( M
Dim nXObject1 As NXObject1 Z- f' e" y+ ?! U/ w w3 C) d
nXObject1 = sketchInPlaceBuilder1.Commit()
9 J# L$ M6 T1 D! J sketch1 = CType(nXObject1, Sketch) E9 }/ E/ |4 R! H9 @
& W5 l+ R* h+ _
Dim markId4 As Session.UndoMarkId
/ G% O5 b: U4 }- c markId4 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "update")2 p6 O( r' T+ @4 H' K$ _: N
f3 h/ I& W4 K0 |# d( b
Dim nErrs1 As Integer
/ p8 h+ ]8 C. R6 u3 S* ~5 [ nErrs1 = theSession.UpdateManager.DoUpdate(markId4): q$ f% k; V9 w o g _+ V9 N# l
; b% K. G3 s% {7 P# \" F
sketch1.Activate(sketch.ViewReorient.False)
8 P. Y, r/ ?, l# h2 F7 | Q9 ~9 w# u- B8 B' a, B1 ^
Dim curve As DisplayableObject$ W4 f; {% v1 J6 I, G. k( t: C
For Each curve In curves& v$ v6 q0 ?+ k
Try" u$ R1 x( f6 q/ J# S6 S
sess.ActiveSketch.AddGeometry(curve)9 u0 g* S' d; _+ G: W1 x
Catch ex As Exception3 w0 J4 r& n, r& {4 U2 N; m
MessageBox.Show("Could not add: " + curve.ToString + " to sketch " + ex.Message) R2 b& S3 v2 d+ _0 M9 }2 t/ d
End Try
) v+ O+ B; Y I$ _$ m Next
) {0 l0 Z+ k7 Z7 w2 _
5 h1 A$ P, B/ M' R; [' F" {" a. G sess.ActiveSketch.Deactivate(sketch.ViewReorient.False, sketch.UpdateLevel.Model)
3 D2 i" L7 X2 m9 Q5 Q, i) C2 `7 l2 d1 [, i! K! Q
theSession.DeleteUndoMark(markId3, Nothing)
4 l$ S% G! j! [- ? theSession.SetUndoMarkName(markId1, "Create Sketch")9 H* T7 ` f# a' P# l- P; {
sketchInPlaceBuilder1.Destroy()1 y- ~/ j$ O$ Y) V5 {. a
8 I: x' B" d/ p. V. | Try! Z9 R1 }# W P7 G
' 'Expression is still in use.
( p6 D1 `$ K, D1 T workPart.Expressions.Delete(expression2)* g% ]5 r! O+ h) f* V1 t1 l$ n) H
Catch ex As NXException
6 g% B0 f+ ~ k ex.AssertErrorCode(1050029)( x5 H6 C( v; n9 {
End Try; t- e: V& W6 `
, N% f7 ?( S% i! w/ \5 P8 d Try
& c. D9 J8 D# J! k$ w3 D0 ? ' 'Expression is still in use.
+ E% R d8 l& Z$ K. z3 F workPart.Expressions.Delete(expression1)) g( d$ C: v& F M$ Q5 J
Catch ex As NXException6 p* p/ c: S! }/ i' V8 r$ `
ex.AssertErrorCode(1050029)6 V% R$ x6 V C f
End Try
0 v4 q. s- _: L/ {- k5 p7 @' r% f3 _. r) q! r# l- {) x: o1 G- |) T4 h
End Sub
! H6 x) K7 L8 H ' Extrude the sketch6 J0 g: ~& ?1 y/ M& F2 q
Sub CreateExtrusion()
& X# E: z6 v/ n. k5 `6 f$ A- m$ C, o' m6 A4 E6 s/ j$ u2 j
Dim nullFeature As Feature = Nothing
. b/ _2 k6 z: N C! u8 S
3 f4 ?( }9 E U p; M. x( ` Dim extrudeBuilder1 As Features.ExtrudeBuilder$ R2 _2 V3 F- X6 Q: y
extrudeBuilder1 = sess.Parts.Work.Features.CreateExtrudeBuilder(nullFeature)9 Y/ R# {. J" P& @2 {- w, N7 O
; d& K" z0 l7 L* z( O* Y Dim section1 As Section
7 O5 ?. a$ Y7 J, ] section1 = sess.Parts.Work.Sections.CreateSection(0.000001, 0.001, 0.5)
% Y3 [7 l7 ~ A: y2 p0 r2 n1 t3 C( x- t N) h+ v5 W% `' D3 Y
Dim featureArray1(0) As Feature
3 w$ c8 i. S( R( h! O featureArray1(0) = sketch1.Feature$ m# v2 X* x7 i) j: H1 u9 m
Dim curveFeatureRule1 As CurveFeatureRule- x$ @% a, ~- D9 t
curveFeatureRule1 = sess.Parts.Work.ScRuleFactory.CreateRuleCurveFeature(featureArray1)
4 j+ F2 e! J; A6 E6 O' }/ y2 ?6 C. F5 Y5 p! ?% S3 M8 `
Dim rules(0) As SelectionIntentRule, M6 Y( ^/ ?1 D4 i/ U% E A0 |
rules(0) = curveFeatureRule1; T9 Q* p5 }( q0 {, [9 S6 V
Dim geoms() As NXObject = sketch1.GetAllGeometry()
; {3 j, T8 f+ x! j1 e' z Dim helpPoint As Point3d = New Point3d(0, 0, 0)8 O5 _2 e& U# O2 `. H+ D
section1.AddToSection(rules, geoms(0), Nothing, Nothing, helpPoint, Section.Mode.Create)
! s8 s" K2 O7 Y4 y2 v: }
5 M2 X' W x8 H$ o extrudeBuilder1.Section = section1
7 P) x( l# u- B/ u& _. X7 L, E$ d1 J! u- A! l1 i- w
Dim direction1 As NXOpen.Direction( `1 u3 _0 B* l
direction1 = sess.Parts.Work.Directions.CreateDirection(sketch1, Sense.Forward, SmartObject.UpdateOption.WithinModeling)3 L9 j7 c( v8 }2 t; h
extrudeBuilder1.Direction = direction1
6 A2 h: n1 a6 v6 B: j
' h" v, O' W; J2 n$ `! J extrudeBuilder1.Limits.StartExtend.Value.RightHandSide = "0"8 q% Z7 D4 c6 x6 \! k7 ?
extrudeBuilder1.Limits.EndExtend.Value.RightHandSide = thickness8 H0 H, W7 D; X. T3 t; c& m: W
7 e! H& _! \' U0 l3 S; D Dim featureOptions1 As GeometricUtilities.FeatureOptions
; m4 ]" y- ~1 _; p" Z, s* x featureOptions1 = extrudeBuilder1.FeatureOptions/ X3 ^( D! m+ o+ L4 M. R! ]0 {% Y: p
featureOptions1.BodyType = GeometricUtilities.FeatureOptions.BodyStyle.Solid$ L' [. K( _9 M* @ n# c7 Z
# I4 V' V3 W1 h" D) F
Dim feature5 As Feature: g4 e: }3 n+ O# s
feature5 = extrudeBuilder1.CommitFeature()4 @7 h5 L+ X0 S' X
8 [" ^0 {; V( u6 g" r
extrudeBuilder1.Destroy(), \4 @' `) a$ r6 i
5 v+ ?- A1 S3 z) u0 o6 l End Sub
H! t L* J2 u* S5 m$ A$ B# T ' Main routine for this journal5 d1 n: @$ ]+ D5 a) v+ D
Sub Main()
; _. ~) K0 n' D. w# M sess = Session.GetSession()
3 g7 n4 W2 W) q: q F9 k! k9 ` ufSess = UFSession.GetUFSession()- M( Y P0 L- l5 _& R# O
, u$ F! [" G/ m0 O$ S* j If Not SelectFont() Then
# B/ R6 Y! l3 |/ f( t2 U( { Return
+ H: I+ Z/ w0 Y# ^6 `1 ~/ r/ U; |5 P End If
4 Z( T2 c4 z* r" h$ R( y If Not SelectText() Then/ y& B/ a2 f# ? O
Return6 i$ F9 }4 c, w# a; i+ _
End If
$ V' z/ N* V* c& D: x8 c) [ If Not SelectPosition() Then; c7 `) k1 @7 O g
Return6 @$ U: M: M7 Y6 F: O5 U, ?
End If
1 ^, j# d _- ]" i+ Y* w/ z- h0 l& N, G& @; d# U% G
undoMarkId = sess.SetUndoMark(Session.MarkVisibility.Visible, "Create geometry from text")
. h3 k, m# K: P: Q
1 n' s: v6 D7 t- }, O0 ^ path = New GraphicsPath(FillMode.Alternate)/ b6 N" h% u1 B% w
Dim zero As New System.Drawing.Point(0, 0)
( H& ?: B6 y8 f% I Dim format As StringFormat = StringFormat.GenericDefault! E1 E3 R/ r( E8 d& G" U& k
path.AddString(text, font.FontFamily, font.Style, font.SizeInPoints, zero, format)
$ ?# L6 t5 k5 y% c1 m' H/ ?- L
" U& {! ~6 g; X6 N) V& d( M Dim bounds As RectangleF = path.GetBounds()
5 ?' _6 |2 F9 x [* l/ [% d Dim gpi As New GraphicsPathIterator(path)0 U" D. M% w5 g( w$ ~7 M
gpi.Rewind()- D# G" q. Y% j) _/ k5 B9 ]
/ F7 L! d- K) m- H0 q
origin(0) -= bounds.Left
: r* k5 l V- L: `5 G1 v origin(1) += bounds.Bottom
' ^* _1 c$ M1 {5 m3 D7 t& T4 c2 d" `/ E
Dim iSubPath As Integer4 A4 p9 r( o$ q( ?
Dim subPathCount As Integer = gpi.SubpathCount" D+ _+ D. ^2 `% s& s+ G. G8 x3 R+ Z
* G- Q8 [9 x7 T/ |3 h
For iSubPath = 0 To subPathCount - 1
6 g9 V2 [7 d% s' |& y" z2 F8 i Dim mySubPaths As Integer- u+ S) A! U% k. y- ~; |* m' @
Dim IsClosed As Boolean
- W) s, ^. y% V# g8 T, x Dim subPathStartIndex, subPathEndIndex As Integer
|, G% u; E6 q Dim stpt As New Point3d- \5 e# U+ g- j9 p) q( D+ k Q
Dim endpt As New Point3d9 ?5 |: z Q8 R6 r
" O3 S1 j: @: C/ |
mySubPaths = gpi.NextSubpath(subPathStartIndex, subPathEndIndex, IsClosed)8 U' z1 i3 Z6 ?- l' @9 `( }5 a ?5 D
Dim pointTypeStartIndex, pointTypeEndIndex As Integer
: W- v# b2 e' w9 ?$ o Do
7 D0 B% n4 @% r9 \0 O0 R Dim subPathPointType As Byte, {- [* f* Q: q# T
Dim numPointsFound As Integer = gpi.NextPathType(subPathPointType, pointTypeStartIndex, pointTypeEndIndex)
7 p5 Z+ O6 K) z9 I Dim type As PathPointType = CType(subPathPointType, PathPointType)
! S/ R0 n! n; B
- t7 O) [% ^5 j9 p" O$ d( ?$ [ If type = PathPointType.Line Then" a) H$ `3 i' N2 n+ c* l1 T
CreateLinearPath(pointTypeStartIndex, pointTypeEndIndex)
" p i, X; n5 H( m( d: y ElseIf type = PathPointType.Bezier3 Then- @. ^- F! M1 o# x$ }' I
CreateSplinePath(pointTypeStartIndex, pointTypeEndIndex)
& a( s2 ^6 \7 ?7 p End If1 O1 M; r. f( }: C+ Q
Loop While subPathEndIndex <> pointTypeEndIndex% L Z0 J" o0 ]; J* F; f7 L
If IsClosed Then: M& [ w; t& \8 T D
stpt.x = path.PathPoints(subPathStartIndex).X + origin(0)
* \) \* b3 r, [3 E v, }) g0 R stpt.y = -path.PathPoints(subPathStartIndex).Y + origin(1)
1 ]6 c; @3 w$ d stpt.z = 0! T: t! @# y7 R9 v# s% g6 u7 w+ A
endpt.x = path.PathPoints(subPathEndIndex).X + origin(0)' a4 }* n G6 c+ t9 l# D# R
endpt.y = -path.PathPoints(subPathEndIndex).Y + origin(1)- y7 j5 g8 v6 t$ L" k
endpt.z = 03 ^: L; [0 O& v4 n! H5 e5 Y
' Do not create zero length lines
: b$ t5 Q' B" ?: o) V. \: Y If Math.Abs(stpt.x - endpt.x) > 0.000001 Or Math.Abs(stpt.y - endpt.y) > 0.000001 Then
: m4 O+ B% j9 u& R9 t! } curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))+ {. n- I7 s& S% P) V$ o8 m& f; w
End If e( I; Y' `' e3 O& X# i
End If0 B. Y; K' a9 V1 [: P
Next1 V+ l( z" L3 Q
If SelectThickness() Then
. `# n0 c# H [ CreateSketch()
5 |- W0 M: { x3 P CreateExtrusion()
! M" Q7 K! U4 K; Q8 z% p% H6 M End If
5 j2 i* p, d- W End Sub$ E7 f$ G2 a2 l( ?3 y* E( S" b
End Module' z0 M' `. n) t1 ]6 v! r
/ `5 {8 S6 e3 B& \3 o, @
6 d; w1 E: R8 ?% Q+ g& h
G7 U% o5 V, ~! m |
|