|
' ug刻字源码 +QQ 609719845; p. o! e" o; G, I! h
' into geometry using a true type font and
% E0 l# ^0 i, A3 R' extrude the result
* R; G3 `( C( N. \* `% A/ n; X" K# V
Option Strict On
) Y3 Z9 m" B5 z- @4 C2 [2 g' Y$ k) U
Imports System
, X5 j* o/ T" SImports System.Drawing
, @. s- e# o* H% l( UImports System.Drawing.Drawing2D3 x# q `, C% f! ]! o# Y' `1 _
Imports System.Windows.Forms
4 R+ I4 j o4 e6 d$ F/ y) yImports System.Collections
9 i7 B3 n; H- F1 M0 P) Z$ AImports NXOpen: y0 h4 y. u" q: u7 o5 [. R
Imports NXOpen.Features" f+ ]4 ?3 {+ X7 n; A
Imports NXOpen.UF
& r& v) {3 O' w6 ]! w4 pImports NXOpen.Utilities4 m8 ^! S4 Q; ?3 ?
Imports NXOpenUI
' S1 n$ L! h' G5 J' n% T7 v, i/ L9 Z, j5 x9 o0 D
Module DrawText3 ~1 A) G% R# p8 L1 z
% \( Q! Y' W! ^ Private sess As Session3 p, B% l; g, F; Y
Private ufSess As UFSession
0 t$ t" f W0 v7 t7 ?: N2 U* [6 ~. J Private origin(2) As Double
; h: S ]8 [/ Z5 z4 p' X Private path As GraphicsPath. c0 m, v2 _9 V4 q
Private text As String9 u4 Z1 m, \# t
Private font As font- v# S# V# T7 a8 q: m+ F
Private curves As New ArrayList. c$ _. v. z2 U4 D4 s+ M1 v
Private sketch1 As sketch
& K" U, g1 Q: G Private thickness As String
- f. N' ?" D- S6 O- b. d' {' S Private undoMarkId As Session.UndoMarkId
+ L* ]5 h3 n. k
% M- O9 N: `3 _ ' Prompt the user to select a font.
# V2 Y# T( M# Y) T% P8 w ' Return True if successful; Q. B4 g$ d- v, k' K! }5 |; {3 K
' The Module level variable 'font' is set to the resulting font.
& {& ?7 Z4 _: W! t7 D1 h Function SelectFont() As Boolean
8 B. ?, f. `) P+ j Dim fontDlg As FontDialog = New FontDialog; f' p' f' B; Q
! _( [8 N/ P0 j! E& W SelectFont = False
/ P3 N0 F( q+ b h If fontDlg.ShowDialog() = DialogResult.OK Then
4 Y. `- l: K; `- F font = fontDlg.Font
3 p6 U# Q) O9 V/ J SelectFont = True" ?. _ J# W/ a" \/ W9 m
End If; k7 D1 J+ e, @$ r$ m- ~
End Function: w) V; v) z! Q& y/ I) H, \
' Prompt the user to select a screen position* D2 W: J5 j; `# J7 U; j+ r7 i+ K9 b
' Return True if successful
3 R& l9 i7 k C, F8 \9 e: t& R ' The Module level variable 'origin' is set to the resulting point. H. ?' @3 F8 I# V3 y
Function SelectPosition() As Boolean2 o }" q0 l6 o( r+ y7 X/ v
Dim view As Tag* z0 ]. h3 N6 T8 g2 y
Dim response As Integer/ I- u; S& C& ~, h& b; J
6 `1 C. Y; E5 J Q ufSess.Ui.LockUGAccess(UFConstants.UF_UI_FROM_CUSTOM)* {& g( X7 c0 i p- C/ ?
SelectPosition = False
% c. M8 @. r. ~7 {0 v% o: H, y' \ Try
4 c( }$ f- S5 H2 Q/ E! B. J ufSess.Ui.SpecifyScreenPosition("选择字体", Nothing, IntPtr.Zero, origin, view, response)
7 |9 [& U, D# Y: O If response = UFConstants.UF_UI_PICK_RESPONSE Then5 w& b% o, h. _- L E/ {
SelectPosition = True
3 L1 D* V; ^7 L- c End If' F! ?; t$ O% r& S# J% @
Finally
D5 ?* @; T" b' s4 I ' Restore UI state always including in case of error., s1 N* V: S J: U0 F3 b
ufSess.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)
. y4 d) V/ b, j" i6 |' [7 V' U End Try* K- r- ?, Y) j/ C
End Function# A& l4 e( x$ h6 X$ e
' Prompt the user to input a text string to convert.
. p6 `6 p9 P1 x8 U; b ' Return True if successful
9 T* w( @% ?4 w: V# Z ' The Module level variable 'text' is set to the resulting string.
- G8 K2 g p( \. [! | Function SelectText() As Boolean) `5 {8 a* M& ]" H9 Q9 O4 k
text = NXInputBox.GetInputString("输入文字", "Enter String To Convert")
5 s# M! m; Q6 B9 |( a. F SelectText = False" ]) g; J2 c9 f: W; l2 @: w# D0 Z# b+ x
If text.Length <> 0 Then9 P8 u$ o4 L8 H2 E+ ?
SelectText = True
- r8 E. C8 n2 G) b# ] End If4 n6 x# M- _4 ^6 H @( R
End Function
2 A: ~4 y4 W/ L( x/ C) E ' Prompt the user to input an expresion text string to convert.
" K6 `9 X; [' t; a ' Return True if successful, I1 Q& B2 W( h8 V+ k; s
' The Module level variable 'thickness' is set to the resulting string.4 q4 r# L+ f! U' j
Function SelectThickness() As Boolean
3 j7 x$ S0 T9 A4 y' l! J" {, n thickness = NXInputBox.GetInputString("输入高度", "输入高度")
8 F& u& }: K; w- d3 W& u/ }: ~ SelectThickness = False
# l; S8 b7 M x) P If text.Length <> 0 Then
4 }# ?7 h% f. O3 \' t# A SelectThickness = True6 ~- t4 m' ?2 n/ P6 W y8 X4 ]; w- Y
End If
1 f! p% h" J$ B: t0 [. O3 W6 G End Function
" v; q# m, g7 S! g$ |3 e ' Given a subset of the graphics path between the given indices ( p) B+ F0 y, \) F) T B. y, W7 n
' create lines between the points in the path.
" V7 h) S8 @) Y( k' ^+ M j9 |7 _3 Z ' Assumes that caller has selected an appropriate section of the path.% J* ^; Y8 n; M7 c8 Z# F j
Sub CreateLinearPath(ByVal startIndex As Integer, ByVal endIndex As Integer)& M) M2 A/ o/ e1 g$ F+ B
Dim j As Integer- w5 v% R- _( _- p5 r
For j = startIndex To endIndex - 1
8 ^- `% J' r) M% `, n Dim stpt As New Point3d* @- R" c. F; b2 C% V+ |
Dim endpt As New Point3d
( f: D/ Y, b. W, F" L) L+ m2 v) h2 \ stpt.x = path.PathPoints(j).X + origin(0)$ b# `. |* ~. V1 W# f7 I' o+ T
stpt.y = -path.PathPoints(j).Y + origin(1)8 V h7 H) v: F2 b
stpt.z = 0: _4 `9 ~# f& _# H: L. ]' R0 X
endpt.x = path.PathPoints(j + 1).X + origin(0)
1 ?& x, _1 l2 u6 [% S endpt.y = -path.PathPoints(j + 1).Y + origin(1)
0 Y3 S: A5 c! S; h4 r0 g endpt.z = 0
) p# V$ E% V" U2 @$ A curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))
. N4 @) ~& U ^8 w9 w% x: w9 F4 P' D Next. j' W! t1 F8 _) }
End Sub5 m* q9 b4 g6 [. s
' Given a subset of the graphics path between the given indices
' @2 t3 F, f7 s. i) d9 `" @ ' create splines between the points in the path.
7 C6 g; t5 K( M) K7 Q. h ' The path contains bezier segments and this converts then to B-splines.+ B+ p9 ]9 U$ W$ L
' Assumes that caller has selected an appropriate section of the path.3 p7 ]+ G% i1 d! G) }$ C
Sub CreateSplinePath(ByVal startIndex As Integer, ByVal endIndex As Integer)
z) T5 w* f) { Dim j As Integer
4 W3 Y. _: j0 y: ^8 ]$ N+ ~7 } For j = startIndex To endIndex - 1 Step 3
6 ]# t6 b' o4 C* O+ E Dim poles(3, 3) As Double
/ B, V+ ?5 U- l5 ? Dim k As Integer3 y% G5 ^7 }) ?
For k = 0 To 3* S5 Y: D2 C9 a$ w6 _; P
poles(k, 0) = path.PathPoints(j + k).X + origin(0)+ |$ r6 y# ^6 I1 W6 m
poles(k, 1) = -path.PathPoints(j + k).Y + origin(1), X9 z6 B3 O8 H* Q4 V5 _. t8 W0 s
poles(k, 2) = 01 U) x0 I3 h) j |
poles(k, 3) = 1
# i+ C: U+ c' n9 [# y- b% h Next
. g7 g1 }8 Q# U6 \ D Dim knots() As Double = {0, 0, 0, 0, 1, 1, 1, 1}
: n- g- k' N5 u, S Dim spl As UFCurve.Spline
1 R6 }7 v- y* G- A0 {- W Dim spline As Tag! q) J- g: y# K
Dim num_states As Integer4 y! l) m# G3 A7 _
Dim states() As UFCurve.State = Nothing
: b e8 j1 ?! K: q7 q6 I: v spl.start_param = 0
( r% m! c. W# a& g3 Y# c; s spl.end_param = 1
5 D* q0 u# f, V3 f/ X* w spl.is_rational = 0" A, a3 r5 z) V( W
spl.num_poles = 4
( w: n; M4 x3 U$ E$ M+ P/ E* ? spl.order = 4
4 F1 [ e6 y. l3 O) I& Z spl.knots = knots
4 n$ x+ ]/ ?2 y spl.poles = poles
& w! m& h4 L: W) o' v% [2 x ufSess.Curve.CreateSpline(spl, spline, num_states, states)5 W1 i' g( ?! b8 l
curves.Add(NXObjectManager.Get(spline)); v% G/ O4 H9 K7 s, d
Next. @9 O2 z' w6 Z- C+ e8 U1 A- y. k, B
End Sub6 y5 g* Y6 u1 B! l& n" i1 c# S
' Create a sketch and add all curves we've created to it.& |0 H/ ^3 T- o" a L9 e2 y* s
' Most of this was created by recording create a sketch and editting the result.
+ h0 T( n4 p6 s" R V; R ' Retries with different sketch names to avoid duplicate names.. A7 A$ W* P+ ^( N- a3 O* j
Sub CreateSketch()- {: q( Q/ q$ _8 |4 i/ ]; g" e
Dim theSession As Session = Session.GetSession()
2 i4 {! ? o3 L; i( N Dim workPart As Part = theSession.Parts.Work
8 t0 Z/ o/ K, E1 J5 l Dim displayPart As Part = theSession.Parts.Display5 L$ x$ y! b& d8 U1 I
* G, N8 x$ ~) x0 d ]" d- Y
Dim markId1 As Session.UndoMarkId
3 l; ^. R2 @% y) S+ w4 m: @ markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start")
& K$ E9 w$ t( T! `+ x9 |* E; m4 C
8 v: h8 R7 _: ~& d9 h Dim nullSketch As Sketch = Nothing
! n6 L$ O: T4 i8 G* j) K. Y# _8 t' S3 \/ s; a" ~
Dim sketchInPlaceBuilder1 As SketchInPlaceBuilder
& l# L+ t: ~: _ sketchInPlaceBuilder1 = workPart.Sketches.CreateSketchInPlaceBuilder2(nullSketch)5 C, p) ~4 t0 y8 m
4 }9 G( ]! m+ d. p Dim unit1 As Unit = CType(workPart.UnitCollection.FindObject("Inch"), Unit): f4 ?9 _7 J8 N0 D6 A# {
* m% l; X H" @+ U r- Y; u; B9 c
Dim expression1 As Expression/ ]* e) v/ j8 Y2 \7 [" {
expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)1 \6 M' W: ]$ h/ r
5 E8 w% l+ N P& q
Dim expression2 As Expression
& O0 P# n1 @# D. `) O4 c! r expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)" N7 \' ?: n& i( S
: B; K8 h- F' ]; L, w theSession.SetUndoMarkName(markId1, "'Create Sketch Dialog")
, s1 t" P6 C& H; ]0 u0 o) E1 `8 {9 z7 z
Dim markId2 As Session.UndoMarkId; p+ p; ?6 D0 i, N1 z, D0 }
markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")9 Q, R* q5 e( M4 k$ P0 \! g
$ U) p; z! z1 Y4 e l theSession.DeleteUndoMark(markId2, Nothing)
# `: Y8 e) F- n' X# u9 z/ i
( l) S1 Z+ d' ~! a Dim markId3 As Session.UndoMarkId! u% F+ Z0 t2 p+ x
markId3 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")
" v' v9 Q6 y( X2 A( C' P2 a! Q/ z, O! Z. a2 x" b7 ]
' Inferring constraints and auto dimensions may take long time and is not really required for drawing text.
, J3 O0 |! _! K4 Z" [ theSession.Preferences.Sketch.CreateInferredConstraints = False
' b6 E" \' e/ d5 l' K( }& ~8 y theSession.Preferences.Sketch.ContinuousAutoDimensioning = False3 {3 z& C0 I! m0 d. I( C6 E3 H9 c
theSession.Preferences.Sketch.DimensionLabel = Preferences.SketchPreferences.DimensionLabelType.Expression! {# ~4 D. y p4 D; J
theSession.Preferences.Sketch.TextSizeFixed = True* Q ]3 I. Z' q8 y4 c) f
theSession.Preferences.Sketch.FixedTextSize = 0.12
& _9 [' ?( D, q4 `4 D theSession.Preferences.Sketch.ConstraintSymbolSize = 3.0
8 t! Y: L d; t M6 P theSession.Preferences.Sketch.DisplayObjectColor = False% `) E, o: L h' w
theSession.Preferences.Sketch.DisplayObjectName = False
' C5 k0 Z% t; W* V2 d
8 _0 N3 _2 e9 O8 Q Dim nXObject1 As NXObject( `8 d0 b& M7 O6 Z% X+ X. i4 |
nXObject1 = sketchInPlaceBuilder1.Commit()
0 J w; s1 m; i9 L sketch1 = CType(nXObject1, Sketch)
4 H* j8 {+ i" j& j1 `2 q2 o
g9 W- R* |: ^! _3 K" T Dim markId4 As Session.UndoMarkId3 d7 j5 [$ ]5 p4 p7 R3 p
markId4 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "update")% }4 v$ \ y! ~3 R. B9 w, B, T$ F) C
/ X) I9 M( C- T5 \1 H2 i
Dim nErrs1 As Integer
! n2 t7 T9 c; y nErrs1 = theSession.UpdateManager.DoUpdate(markId4)
$ o. h) L( o$ T& v
# ]& e# @ I! N3 L$ E4 ?. n sketch1.Activate(sketch.ViewReorient.False)
$ a4 B* t) V% V% Q, D. m9 p: f6 ]) K U( Z
Dim curve As DisplayableObject( }8 z F" d! [6 b
For Each curve In curves
; g! z9 v1 p: e4 h1 ]3 T Try
( X6 f3 t' j# r; j6 s+ F( h# h/ F sess.ActiveSketch.AddGeometry(curve)/ N+ s' N: I* @$ j
Catch ex As Exception# N; b+ j) O4 T8 ~* |0 c
MessageBox.Show("Could not add: " + curve.ToString + " to sketch " + ex.Message)$ F- @4 f2 z1 Q8 H# P. ^
End Try* C5 E9 _0 p/ V+ I& T: ]
Next% \7 |, t% l1 H# t% X" k
" L7 \5 U) c& K3 S sess.ActiveSketch.Deactivate(sketch.ViewReorient.False, sketch.UpdateLevel.Model), Z6 t% H/ ? Y: b5 i9 Z# G# ]2 F
/ |9 `; T0 L' |2 U theSession.DeleteUndoMark(markId3, Nothing)- X3 ?) u2 a3 C# R) z% l8 X5 d
theSession.SetUndoMarkName(markId1, "Create Sketch")
2 n) P+ X4 Z3 ~& x, B5 w sketchInPlaceBuilder1.Destroy()
7 z7 B" `+ R) e( |) w% @+ Q0 T4 \6 F; G+ K [5 d1 D3 O+ d
Try
3 e7 `4 j( g' C9 u7 C6 T ' 'Expression is still in use.
6 G4 ~8 m! D* \/ l6 T workPart.Expressions.Delete(expression2). @. z- e6 x" Q0 Y+ H: T8 R+ M
Catch ex As NXException
7 n0 Z& ~% i0 Z; Y2 v ex.AssertErrorCode(1050029)
/ B5 S& Y% b* u7 O7 R End Try" {! s. u, o1 I; q% ]
B1 \" I; j; B( [$ o3 j
Try0 Z0 a( Z, C n5 H
' 'Expression is still in use.! Z/ p7 w; Z* w b: K. R L' c
workPart.Expressions.Delete(expression1)
$ J0 d! O1 _3 {; f: h Catch ex As NXException! q9 ^5 j6 P7 e5 k, }
ex.AssertErrorCode(1050029)
, O* h" a2 z( `8 c7 P5 O- E End Try
( V) S) F3 k) q' n* c4 L% z9 \, R* K. I8 u
End Sub; z) Q7 S- Y! C- U7 z& B2 _1 ]
' Extrude the sketch# \0 W' q! ]+ ?* C4 Z
Sub CreateExtrusion()
& Y1 v* P2 b4 D8 c% S9 V2 |( N( l. G/ |" z3 S
Dim nullFeature As Feature = Nothing2 f: U/ F( t9 U3 q- M" V+ x y2 u
7 C0 P; `; c5 j" `
Dim extrudeBuilder1 As Features.ExtrudeBuilder
% L- J# @8 ]. a0 B/ R% E extrudeBuilder1 = sess.Parts.Work.Features.CreateExtrudeBuilder(nullFeature)) F' d6 r5 S3 L5 d
; i6 q# I* Z& W$ |. k Dim section1 As Section) K7 O8 k2 E* ?) f2 l7 Z
section1 = sess.Parts.Work.Sections.CreateSection(0.000001, 0.001, 0.5)2 ~2 |( W, `! V& U
: h9 g4 m8 Y- }" l Dim featureArray1(0) As Feature
: W# ]3 n0 {$ n3 h8 G featureArray1(0) = sketch1.Feature
, C: f. h2 Q2 ]+ c N3 E& F Dim curveFeatureRule1 As CurveFeatureRule7 d5 ^) t. \! G) ^9 Q; W) A
curveFeatureRule1 = sess.Parts.Work.ScRuleFactory.CreateRuleCurveFeature(featureArray1)
/ O+ X, N( u1 R, b: N& G( i. _9 A* Y/ s/ ^ T* h5 a
Dim rules(0) As SelectionIntentRule
) `. @: A, G# o rules(0) = curveFeatureRule1
D7 W, [! H' U8 Q7 ?5 K. i7 L. ~6 I Dim geoms() As NXObject = sketch1.GetAllGeometry()) p7 `: h" ^% f
Dim helpPoint As Point3d = New Point3d(0, 0, 0)
; B" ~$ p3 U0 A7 |% w& h' X section1.AddToSection(rules, geoms(0), Nothing, Nothing, helpPoint, Section.Mode.Create)
: Z. L% x" W5 D1 L, G
( D( G# s) F. e8 {1 } extrudeBuilder1.Section = section1
) M W7 J3 g5 |) }
' N; ^8 a/ s1 n& v Dim direction1 As NXOpen.Direction9 W; R) Z: I# t) J
direction1 = sess.Parts.Work.Directions.CreateDirection(sketch1, Sense.Forward, SmartObject.UpdateOption.WithinModeling)
t* _4 E! L3 a$ t; b0 i3 |0 V extrudeBuilder1.Direction = direction1
G# C! O* A9 N1 n& a# [. S+ z
1 W1 _: e: ^: B0 N extrudeBuilder1.Limits.StartExtend.Value.RightHandSide = "0"
- Z# o0 G$ X5 K4 ^, ^$ H extrudeBuilder1.Limits.EndExtend.Value.RightHandSide = thickness
. K; V, f4 G7 O6 f, Z/ O: {" b" y4 h( |; T0 j
Dim featureOptions1 As GeometricUtilities.FeatureOptions# D0 B$ r" t% z
featureOptions1 = extrudeBuilder1.FeatureOptions8 P5 Y8 A3 g! c) K6 }" q, d9 F
featureOptions1.BodyType = GeometricUtilities.FeatureOptions.BodyStyle.Solid
0 c! g! d- L1 ?. T0 W' E- g
! o1 p* j3 ^% T4 M' ]: p Dim feature5 As Feature
+ j3 y1 L7 F& f% [# x feature5 = extrudeBuilder1.CommitFeature()
, P" y8 Q: F/ @' \( T# p- C) W' h* x6 g+ z7 q7 o
extrudeBuilder1.Destroy()0 H \+ t/ H# [, ~
/ \4 L9 X* [) T0 X* e End Sub @' z- b" S. x# M: g" V0 `
' Main routine for this journal
) ]* J4 O: [; ?3 A( p2 [1 h7 d Sub Main()( t k$ [$ F! N9 ]) _0 i
sess = Session.GetSession()2 T! z" W; J' T2 v& Z9 y
ufSess = UFSession.GetUFSession()- K6 }3 a+ C3 Y6 B5 E, k; ^7 E
9 i# O E q$ N, g8 ~7 Q
If Not SelectFont() Then
$ ~/ ~4 ]) Q" F7 }4 [# S Return
7 y$ m" H, p% r; O! T( [4 i End If
# h9 `" Q' |5 [8 F+ z/ ~# ~ If Not SelectText() Then
, _! ~' p* h$ c* M2 Q6 w Return# m2 _: v% i, `: V0 L
End If
3 v, J8 X+ P# E( a If Not SelectPosition() Then) h. ~# U& t' N6 W3 N( E ]
Return
R5 p7 Q2 }; I; e f End If9 w- ~3 v6 A# E9 |; Q5 }: T0 s9 C9 D
) O: j5 [% Q# w# I undoMarkId = sess.SetUndoMark(Session.MarkVisibility.Visible, "Create geometry from text")
# q- T' v. k" e) V& S; B( w% ~
2 U+ Y" R$ N1 \9 J- @ path = New GraphicsPath(FillMode.Alternate)
1 d" p( G& R; _( X; x7 K3 b6 [ Dim zero As New System.Drawing.Point(0, 0)6 |3 ]- A& X4 a1 [' @2 c$ A
Dim format As StringFormat = StringFormat.GenericDefault+ s# M# X- ^& y( }3 @
path.AddString(text, font.FontFamily, font.Style, font.SizeInPoints, zero, format)
6 O( q) v: A8 V0 j ]2 \7 g' ]8 l ?, ^( j. _
Dim bounds As RectangleF = path.GetBounds()# B; L* {; @- m% i# C; _
Dim gpi As New GraphicsPathIterator(path)- J4 k! T! R, Q5 `. T! p5 S9 J
gpi.Rewind()% L" ]% N/ S- L9 {
# ^) ~( M+ f( T3 b( K* O) [% w- T) t origin(0) -= bounds.Left. ?( b4 U5 q, N4 u
origin(1) += bounds.Bottom* q& Q7 u" m8 u: J1 p. z
5 [! [6 u. ~ ^4 e" B0 E; D
Dim iSubPath As Integer* p( k# e4 w$ j) `
Dim subPathCount As Integer = gpi.SubpathCount
3 A5 q& z2 E' h4 {* [5 s0 |1 [
3 g& m+ `6 c( S k# l: p For iSubPath = 0 To subPathCount - 1
; o% u" g! {: ^. Z Dim mySubPaths As Integer" n2 C. R3 Y0 u) v. H
Dim IsClosed As Boolean
( i1 \/ ~! |2 N2 V+ } Dim subPathStartIndex, subPathEndIndex As Integer# c$ b* q Z/ N; n6 b3 u; X4 V
Dim stpt As New Point3d
* A# W9 ]: L v Dim endpt As New Point3d
- N R& b8 }1 V1 Z* R! g' {% k$ y# ~5 J
mySubPaths = gpi.NextSubpath(subPathStartIndex, subPathEndIndex, IsClosed)
l! r5 [/ N; e; b Dim pointTypeStartIndex, pointTypeEndIndex As Integer
/ \# |7 e) t8 @& @8 Z, ?4 i/ E Do, S3 ]2 Z' g2 b# m* Y) B2 d, A
Dim subPathPointType As Byte
0 e( F: s; @. n! g+ X Dim numPointsFound As Integer = gpi.NextPathType(subPathPointType, pointTypeStartIndex, pointTypeEndIndex). k! I- v' W" j
Dim type As PathPointType = CType(subPathPointType, PathPointType)
. J! W6 D9 Z, p/ \" B. a+ g( u
, O& n8 O6 ]7 Q$ g+ j+ ]7 ? If type = PathPointType.Line Then
6 W9 J: y$ V( D; v! b CreateLinearPath(pointTypeStartIndex, pointTypeEndIndex)
5 O' _. ?" {0 _ m; N: ~3 ~# J- q ElseIf type = PathPointType.Bezier3 Then O6 z4 _7 h- u6 o& x
CreateSplinePath(pointTypeStartIndex, pointTypeEndIndex)1 H' R! u: A5 ]$ F
End If
; |1 B4 [3 z1 L% n0 c Loop While subPathEndIndex <> pointTypeEndIndex- j7 l2 }5 {, `8 D6 S# g
If IsClosed Then
# O1 ]# O' z3 k, R8 w stpt.x = path.PathPoints(subPathStartIndex).X + origin(0)/ \. m2 s/ \) N9 P; d6 a' w8 f
stpt.y = -path.PathPoints(subPathStartIndex).Y + origin(1)/ M* j$ Z( ]( G1 b$ {/ @; s
stpt.z = 0( i7 X) P t5 O
endpt.x = path.PathPoints(subPathEndIndex).X + origin(0)
" X# H5 ^4 t# p endpt.y = -path.PathPoints(subPathEndIndex).Y + origin(1)
+ g3 ?8 Q& { P' M9 u9 W9 L7 g endpt.z = 0
2 Y5 {2 r- G/ J6 e5 A7 g$ O ' Do not create zero length lines. J p4 V% h) Z
If Math.Abs(stpt.x - endpt.x) > 0.000001 Or Math.Abs(stpt.y - endpt.y) > 0.000001 Then8 s4 I5 H) W! ?% ?
curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))- L: i3 u. U6 `% }0 ~' ^/ L J* t
End If
7 C- ^; ?) Q6 G7 U0 I p End If/ ~# L8 [/ L, v, w
Next( i2 c, N' q, j) l+ j7 o5 }
If SelectThickness() Then
2 J8 R- T1 a$ P3 y$ g8 M( L: s CreateSketch()
) e( g" | Q7 z2 B2 i CreateExtrusion(): g7 H, U3 t7 @. I
End If
9 t- _9 e, t) I End Sub2 I- y5 q) P4 E4 p7 Q8 G, a, N- ?
End Module
/ \# d3 y9 m1 c) A& x3 a9 X4 N+ k$ e' _; f0 \8 p' W; M8 k
! C) {1 L9 c. U; z
9 k. S; n. H5 q |1 d: ~ |
|