|
' ug刻字源码 +QQ 609719845) M [8 ~: y) D
' into geometry using a true type font and- t2 \6 P& Q4 U* G
' extrude the result
4 N- [- M5 N1 ^4 X/ k/ j9 _% n, Y2 {( d4 F, k
Option Strict On2 g# ^. w- C$ U! z+ T" d7 t
* Z' {; [3 N0 n% D& `. Q
Imports System$ g. ]! Q* a3 A1 v; R; \/ N* a8 G
Imports System.Drawing1 s1 e3 I; i; n# H* D$ ]
Imports System.Drawing.Drawing2D; F/ Q2 V: H# }$ [8 @3 S! `
Imports System.Windows.Forms
. z0 _, T7 N9 L& \! _% \# u- pImports System.Collections
2 K0 {/ j- ]4 sImports NXOpen
3 J4 i0 g4 p. LImports NXOpen.Features
" s# C6 L. [+ Q$ B9 [Imports NXOpen.UF* H6 J: D6 @6 s" J; `1 S& E* S/ i
Imports NXOpen.Utilities
( g! i* a* z4 }7 u" Q W' S9 t& |# OImports NXOpenUI4 k. k) x. }" x1 n8 t- {
7 }+ S" N- o$ j! y a* @4 RModule DrawText
( b/ p$ A6 v( w( u5 T$ r$ t" Q+ B: Y3 F
Private sess As Session
; ^- Z# D2 \ S! J# I Private ufSess As UFSession
8 P ] ^! ]7 G, P- C$ C Private origin(2) As Double
- C: y# K \! e+ I Private path As GraphicsPath
0 }$ A7 `: d1 x Private text As String
6 K& r1 _* v7 L Private font As font o* ?5 M/ E5 Z/ Z; C* X
Private curves As New ArrayList. `# V( r( a1 O; B
Private sketch1 As sketch: y7 }- V7 v$ D/ J1 C
Private thickness As String# O( Q2 X# Z9 ` T3 s: {4 F9 j
Private undoMarkId As Session.UndoMarkId
. u: G) F: P! r5 d& K: ^
/ z) f6 ^+ f6 V% c7 D4 R, c0 \% i4 F ' Prompt the user to select a font.
# T' c o. S( v ' Return True if successful
3 k" p5 w8 X/ b$ B/ j9 M: H ' The Module level variable 'font' is set to the resulting font.
; Z! r0 m' ?) H6 g Function SelectFont() As Boolean
' X; _( {! j9 P6 o( V4 i Dim fontDlg As FontDialog = New FontDialog
( Q8 q: s3 B; U$ I" r+ z
/ o* Q. [9 u9 q- K0 H$ x SelectFont = False
, M1 K( A2 ]' \! e) h+ g; ] If fontDlg.ShowDialog() = DialogResult.OK Then/ N) R* x2 G" T. \: o% ]$ {
font = fontDlg.Font) g% Q9 m' c. u4 b
SelectFont = True0 a$ c& k- X0 X* n" L" d' s
End If: ?- p6 R( [% x! I- u+ g% i( u
End Function
9 V' N, z) J' j/ n( Z ' Prompt the user to select a screen position
5 }% ~1 z6 w/ {1 ? ' Return True if successful
* X3 K/ C0 x; ]+ U ' The Module level variable 'origin' is set to the resulting point.7 U; A% m& u( \5 D2 K3 j( J$ V
Function SelectPosition() As Boolean
8 l! c, X* J5 o' d7 v4 c Dim view As Tag+ o- O. U( }( t2 m
Dim response As Integer
# U$ p/ o# e* b7 |. h8 A! e+ n: y2 T# [: d1 a
ufSess.Ui.LockUGAccess(UFConstants.UF_UI_FROM_CUSTOM)4 h" ]3 C/ F* e5 a
SelectPosition = False5 R9 ~) o6 [2 E- \
Try
8 R m1 ]' s0 f' R! L ufSess.Ui.SpecifyScreenPosition("选择字体", Nothing, IntPtr.Zero, origin, view, response)
+ X' q: @7 ]6 f0 }* ~2 ` If response = UFConstants.UF_UI_PICK_RESPONSE Then& ]! X; ? ?- T! Z( i0 t# A
SelectPosition = True
, w- G! x+ A3 a% C' h End If
% [" b: d; k5 }& f2 O4 O. L Finally* t; d- _. C# j) X, ~
' Restore UI state always including in case of error.3 Z9 j: n2 H- K
ufSess.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)
5 l8 J, q$ `( d, u/ c End Try
7 @! E y( K/ T8 `5 }' [' E. ] End Function
0 }8 L1 t2 i8 T. A ' Prompt the user to input a text string to convert.
, ]2 ?2 w# Q9 j4 C7 F ' Return True if successful
& k7 e" ^1 |' I+ K' p j/ r K ' The Module level variable 'text' is set to the resulting string.
( q% L4 y0 M* ~# P5 }' b Function SelectText() As Boolean
1 g% H3 r4 x4 p9 i, j text = NXInputBox.GetInputString("输入文字", "Enter String To Convert")' D6 [/ G" u Z4 O0 O/ Y
SelectText = False
& |$ K7 e6 y& {/ Y& v If text.Length <> 0 Then6 m# u+ y: ~. h; o& z
SelectText = True
1 ]+ E; e9 t7 ]8 q: w9 V4 X End If
& {' h9 y+ \! v$ F3 M End Function
2 l9 C B7 @9 a0 Y6 _8 Q/ i5 ~! K3 _ ' Prompt the user to input an expresion text string to convert.9 f( d9 B5 N% c4 u8 N' A: t6 y
' Return True if successful' ]. W! I# ^, `* A: T: A
' The Module level variable 'thickness' is set to the resulting string.7 Z3 D2 h& @7 Y2 B
Function SelectThickness() As Boolean
6 D1 V5 z( r7 |: k6 S! u thickness = NXInputBox.GetInputString("输入高度", "输入高度")
) N# X& ]- N0 i, x SelectThickness = False/ O& G B$ E4 a) I: c! s
If text.Length <> 0 Then
* m7 c( O; w8 i2 s, s. x SelectThickness = True
# B% Z+ s; z$ `1 w End If8 v) m; W8 M0 R( K$ U
End Function9 P1 K) C7 ~" J- u8 ]/ A+ b: ]' l
' Given a subset of the graphics path between the given indices 3 A) V: Z3 @* q/ K3 ?) T3 d
' create lines between the points in the path.
E# R) e. y3 ^& [" k% u; M. U ' Assumes that caller has selected an appropriate section of the path.. n \" }: h, U1 W# S! g
Sub CreateLinearPath(ByVal startIndex As Integer, ByVal endIndex As Integer)/ ?" R& Y1 {$ @1 i4 o! n' i
Dim j As Integer! z" T9 |; p! r$ _
For j = startIndex To endIndex - 1/ n s0 l( N2 z6 C* i8 F
Dim stpt As New Point3d
# [0 a/ s5 w' y4 A) |; T- }; k Dim endpt As New Point3d0 y9 o& ~5 ^2 R( s0 K
stpt.x = path.PathPoints(j).X + origin(0)6 B0 F$ x; v* J
stpt.y = -path.PathPoints(j).Y + origin(1)
2 C- A' J: b% V' q: E1 x: s stpt.z = 0
0 X$ m: ?6 c: [( }4 ~5 b; O, T endpt.x = path.PathPoints(j + 1).X + origin(0). b) u" M! R! J1 L& y% J9 n
endpt.y = -path.PathPoints(j + 1).Y + origin(1)
6 N$ \0 c5 h0 P* k8 ~, m endpt.z = 0/ u @! a: H; l& f8 c7 Z
curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))# z# b9 W U9 [& ]) \
Next
! Y; N: L2 ?: q( G End Sub
( @, P9 Z5 J7 f! o/ y0 ? ' Given a subset of the graphics path between the given indices 3 n; R$ u* v+ Y! L; _
' create splines between the points in the path.! ~! y& E$ ^) L: R) `$ P, n7 N
' The path contains bezier segments and this converts then to B-splines.
$ T) O# F; `" k' i/ X ' Assumes that caller has selected an appropriate section of the path.
, j+ h* y4 {2 Z Sub CreateSplinePath(ByVal startIndex As Integer, ByVal endIndex As Integer)5 p2 L4 Y2 t! L; ~+ J8 \
Dim j As Integer
" |8 S! U/ Z8 @ For j = startIndex To endIndex - 1 Step 3
4 t. i. n8 q& j: P8 t3 ]6 S Dim poles(3, 3) As Double
8 o4 a7 \4 @' V2 x' m) a Dim k As Integer9 Y! P$ e2 d: z2 V# }0 ?) c: e' y8 N! H
For k = 0 To 39 p3 X3 ^2 q# I: s% k
poles(k, 0) = path.PathPoints(j + k).X + origin(0)
+ x6 D8 X" s! a+ G4 W6 | poles(k, 1) = -path.PathPoints(j + k).Y + origin(1)& f7 p) _2 z7 x' _8 J
poles(k, 2) = 0
: _/ i4 W, Z$ c9 z G poles(k, 3) = 1
; u5 b5 }# u8 e/ X& d Next
4 `6 q5 ~' R) G" w Dim knots() As Double = {0, 0, 0, 0, 1, 1, 1, 1}
w* h* s+ Z% @$ P% v1 O* _3 A6 W Dim spl As UFCurve.Spline( z# `" E7 P3 i. J, [- Y8 r
Dim spline As Tag
6 Y. @- h- m) C; o- t* w Dim num_states As Integer
M1 q1 s1 k( d8 Q Dim states() As UFCurve.State = Nothing) u; z/ V: A: `, N" M
spl.start_param = 0
7 _: f3 s# Y3 k2 O1 f spl.end_param = 1
+ P }# Q$ i8 z* u4 G2 N spl.is_rational = 04 J. z7 Q2 I8 U# I" d- M' a
spl.num_poles = 4
9 q1 a2 R1 Y" g" `6 P spl.order = 4
- l7 G7 b) U: y W spl.knots = knots
: F, K. d3 o) n6 i8 z spl.poles = poles
2 o: n% J. w8 R! V1 X ufSess.Curve.CreateSpline(spl, spline, num_states, states)/ U8 V( ^' p8 p: h
curves.Add(NXObjectManager.Get(spline)), n; V; w* ]) X7 q$ [+ [7 f
Next
* \% R, y0 C+ {' | End Sub4 N4 r/ w w M# B, r* R
' Create a sketch and add all curves we've created to it.6 s. s7 P. V" e; e
' Most of this was created by recording create a sketch and editting the result.
" m" \, } k. X3 U8 K ' Retries with different sketch names to avoid duplicate names.
6 W; N+ }4 s9 e& I2 J Sub CreateSketch()8 {$ \2 @$ e9 p- o- m; Y
Dim theSession As Session = Session.GetSession()
, \' q. _$ p+ q- p% ?! Q Dim workPart As Part = theSession.Parts.Work* G; P- o. s5 }
Dim displayPart As Part = theSession.Parts.Display F+ v. h- ?# d8 V
$ Y3 ]& O' U ~
Dim markId1 As Session.UndoMarkId; c8 }7 X9 O H$ R, n$ N. E
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start")
3 Q) o, N7 z9 e
" G, M8 J; T t Y Dim nullSketch As Sketch = Nothing+ X: q& k! x/ b: ?
! u( J5 L9 o9 I) v; |( q/ y$ U Dim sketchInPlaceBuilder1 As SketchInPlaceBuilder" v6 b/ M6 O/ h
sketchInPlaceBuilder1 = workPart.Sketches.CreateSketchInPlaceBuilder2(nullSketch)6 Z/ w" W# V, d, U
# |; P# v. x# R- A# k/ L
Dim unit1 As Unit = CType(workPart.UnitCollection.FindObject("Inch"), Unit)' t3 z$ F @: ^. [
3 |* G: G- w6 u& t) X
Dim expression1 As Expression
' j: F1 S9 K, o$ s" J expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)
C) U) Q) i5 v
4 R0 p4 x. _+ { Dim expression2 As Expression. Y3 Z. U9 a$ `# D) l
expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)5 [: {8 c2 H5 T+ Y
V# Y P( y" K& {5 r# y
theSession.SetUndoMarkName(markId1, "'Create Sketch Dialog")
& ~' c5 G0 }6 j6 \2 J
4 Q) U3 s0 y7 k% J6 i J6 q' Z Dim markId2 As Session.UndoMarkId
1 T5 n& U' q) O6 Y' l markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")
: K4 ]/ s+ k+ B, r5 N
) I( ^$ l$ u/ [' z theSession.DeleteUndoMark(markId2, Nothing)
$ Q9 L) H3 _; ]# \. y6 f9 M8 G+ c
Dim markId3 As Session.UndoMarkId$ `2 J* S- f& ]& d! P1 M5 E( b
markId3 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")! L7 J5 G' t; [6 P0 @
8 y, E# a" a8 S4 h: c
' Inferring constraints and auto dimensions may take long time and is not really required for drawing text.
7 y8 E% H, T) b0 N: C4 G d theSession.Preferences.Sketch.CreateInferredConstraints = False; e# X* a6 I s# b: F8 C% I' Y
theSession.Preferences.Sketch.ContinuousAutoDimensioning = False; A. g$ }8 z5 u% o
theSession.Preferences.Sketch.DimensionLabel = Preferences.SketchPreferences.DimensionLabelType.Expression. w* v2 Z3 i% v3 w3 r' d- \
theSession.Preferences.Sketch.TextSizeFixed = True
5 A: k" B8 r2 H% q0 g3 y5 }: O U theSession.Preferences.Sketch.FixedTextSize = 0.125 B; f, h: L2 O; |4 Z4 a1 c
theSession.Preferences.Sketch.ConstraintSymbolSize = 3.0( ?' t$ G( Y. ^& r3 @7 I
theSession.Preferences.Sketch.DisplayObjectColor = False
! E3 R0 d1 c# r+ H theSession.Preferences.Sketch.DisplayObjectName = False
3 q" _7 f U( s' M3 P3 u, x4 r1 p, X% p* {/ [) n; r
Dim nXObject1 As NXObject4 S. ~( X1 f( E+ c/ N
nXObject1 = sketchInPlaceBuilder1.Commit()4 O q5 }' ~8 u4 t
sketch1 = CType(nXObject1, Sketch)
1 i" e& z' ]* o% i2 G
9 V1 ]+ R, X5 _- c' p, ~ Dim markId4 As Session.UndoMarkId
% i6 Y' ]+ v& u: } markId4 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "update")
1 b" Q8 J: k- K2 y8 {* b6 @$ T7 ?" M( F: i$ A9 K
Dim nErrs1 As Integer% M# A0 s2 a# J# l
nErrs1 = theSession.UpdateManager.DoUpdate(markId4)
" d6 a! U7 O6 P' y$ W/ n6 T2 u( ]2 U, f8 X, F/ I& ?; a, r1 _
sketch1.Activate(sketch.ViewReorient.False)
3 k2 w# d3 _! g( y) Q* O9 I: s) \- ` D
Dim curve As DisplayableObject7 ?3 P- L9 {; c- o' `! d# f9 k
For Each curve In curves
" R1 j" U2 C# M) g Try
# ^ N4 H8 n) n$ D, U sess.ActiveSketch.AddGeometry(curve), f( U/ {# K+ F% X
Catch ex As Exception ?- w* N1 ?) ^2 n
MessageBox.Show("Could not add: " + curve.ToString + " to sketch " + ex.Message)
2 Y/ v9 l* w$ I/ {# r1 y End Try
: J! B9 r w7 w8 n Next
- W$ q3 Z( E6 h% G9 c' o& R( X# k& d8 _9 ?
sess.ActiveSketch.Deactivate(sketch.ViewReorient.False, sketch.UpdateLevel.Model)
1 H7 a6 W( E$ Y- f$ I! q
1 H7 A1 A) o# s theSession.DeleteUndoMark(markId3, Nothing)
- c: e7 {4 o( b) N, y K8 B theSession.SetUndoMarkName(markId1, "Create Sketch")1 ~$ L. @: Q( K" Z8 B- x
sketchInPlaceBuilder1.Destroy(); y5 S- E, Y8 D0 P) \* n: q
* p5 `* \3 |, z* l
Try
$ o# p' c% {5 |) F ' 'Expression is still in use.
& d5 y5 S: N- ]0 W% ?- G workPart.Expressions.Delete(expression2)
5 `# z7 S# Q6 l" w, a- y% t z) S6 p Catch ex As NXException1 w8 N( Z( L& N, R K, v
ex.AssertErrorCode(1050029)& h+ \* v- `( E2 d% X7 Q. _0 m
End Try
/ r: ^1 a% v3 Q& F; U+ \1 b' ^+ F& w! g
Try
. m4 M8 e' o- o& n- y0 G _( d ' 'Expression is still in use.4 J( L( V2 T Y: p1 P+ Y+ X! \6 D
workPart.Expressions.Delete(expression1)
' y& ~9 L8 N% E/ p# y) ~4 @7 f7 b Catch ex As NXException, q8 X/ f" ~+ y- s/ `# h
ex.AssertErrorCode(1050029)0 O, b2 N7 d8 F8 C& Q
End Try
$ S4 t7 ?5 I: [& E8 u8 l
! s% \7 J8 i' K+ T* i+ [ End Sub3 m# e4 z6 E) D# V( a
' Extrude the sketch
( c% q, \/ L X( ]& G$ A: ~& W+ } Sub CreateExtrusion()! C# N) O+ B: C9 v4 `
2 Q2 ~4 v. T8 ]$ t9 U+ Y. S Dim nullFeature As Feature = Nothing
, E7 w& o! o+ f3 F6 w4 M6 L/ k& r. ~( ^2 M/ A6 g8 s2 x
Dim extrudeBuilder1 As Features.ExtrudeBuilder
, t+ v+ A7 ]: o' H0 I# w& V9 ?$ J f extrudeBuilder1 = sess.Parts.Work.Features.CreateExtrudeBuilder(nullFeature)/ P q- R% n/ T) @4 a+ T7 L+ q' O
3 u. ~: B' [" D0 b& P6 X Dim section1 As Section
' |$ b9 W5 g" m H% M+ k section1 = sess.Parts.Work.Sections.CreateSection(0.000001, 0.001, 0.5); m$ c" m& z8 {5 h. \2 V: x! ?; }+ y
2 \1 B- V; b" i) T. @2 \9 m
Dim featureArray1(0) As Feature8 j/ T& ]9 ~" B
featureArray1(0) = sketch1.Feature
( L7 C0 W9 F5 X/ }" f) x/ i- c Dim curveFeatureRule1 As CurveFeatureRule n/ ^) n& p" Z. `' O
curveFeatureRule1 = sess.Parts.Work.ScRuleFactory.CreateRuleCurveFeature(featureArray1)/ L. C- d! P& Q+ {
( R; Y, U' `) M$ M s( [) C8 Q Dim rules(0) As SelectionIntentRule7 z% E# X2 F( @( x: ^0 e( |: i
rules(0) = curveFeatureRule1
4 U1 i4 s0 V: C( x) n5 ^ Dim geoms() As NXObject = sketch1.GetAllGeometry()
. b& @9 {! m& K1 [$ I* @ Dim helpPoint As Point3d = New Point3d(0, 0, 0)
) U- k6 L* v: U' N* _" n section1.AddToSection(rules, geoms(0), Nothing, Nothing, helpPoint, Section.Mode.Create)$ s0 E- R& F7 e& s" w: `# n
* b% s4 T& A# u$ p2 w9 Z X, F
extrudeBuilder1.Section = section1' _0 B6 Y2 K& }1 M1 p' o; d) F
9 j' a7 R8 |% X: S+ J( c. j Dim direction1 As NXOpen.Direction
+ A, D! y. c! I b3 i3 v" b. m2 Z direction1 = sess.Parts.Work.Directions.CreateDirection(sketch1, Sense.Forward, SmartObject.UpdateOption.WithinModeling)# N# ]* c7 S. o8 Q4 r! P' M! h+ ]
extrudeBuilder1.Direction = direction1
, K4 N! F( G3 ~; o
( E! Z, x0 g+ y7 u5 k$ t j extrudeBuilder1.Limits.StartExtend.Value.RightHandSide = "0"
( `* m: c% M- {, { extrudeBuilder1.Limits.EndExtend.Value.RightHandSide = thickness. _2 M2 X" S3 F9 k5 E
( ?6 f7 g# P; b" d( u
Dim featureOptions1 As GeometricUtilities.FeatureOptions+ @ C8 e$ j N9 }# H* X& p- Z
featureOptions1 = extrudeBuilder1.FeatureOptions
& c! ]! r% k( `' x9 h8 V' k' O featureOptions1.BodyType = GeometricUtilities.FeatureOptions.BodyStyle.Solid
1 \+ V& e3 [1 U" z' ^
5 X0 {9 R% t# }7 x( C Dim feature5 As Feature
) m. [, @8 i4 Y6 @ a) S/ h6 [ feature5 = extrudeBuilder1.CommitFeature()
( j/ |+ o! t3 X% I& L& u/ m) e3 h/ {2 a2 h( [% b5 {
extrudeBuilder1.Destroy()
; A+ ?* ?- z' } F# _$ ^# c0 X. x! u# e# x1 f! A, u3 g
End Sub( k l# y- K) F
' Main routine for this journal4 H. }3 _+ F3 y, W- K" H- c1 Q z2 e
Sub Main()
5 `2 S4 `8 [& w; m) U( t8 B2 P( @1 c sess = Session.GetSession()
+ U& ]$ u$ Y$ ]8 N ufSess = UFSession.GetUFSession()
8 L$ ?6 t: s, O, T) y! g9 a
* w' R L) {0 r* e; L5 q* t- p If Not SelectFont() Then" I+ v+ _: b6 E2 o3 P, P
Return
5 N, d4 f1 ]- y8 o/ s/ a End If
8 Y9 Y4 c1 e2 x. N If Not SelectText() Then
3 ^' b4 T4 Z1 I+ V8 I+ Z. ~ Return4 t2 G, H4 B" S' A
End If5 |: B5 A& Y' z6 N2 j) W& d
If Not SelectPosition() Then7 D& R: A. j' b' I. G1 [5 S
Return
% o) @) U+ T. A9 y2 \9 v End If! `3 u6 T* R; O4 H! M
# j: W; h; n [2 {" g% L9 x6 S undoMarkId = sess.SetUndoMark(Session.MarkVisibility.Visible, "Create geometry from text")
s; N* ~ M& e) p9 S# C: ]5 f; j" \
& {- X5 Y; `. ]+ U, _/ w3 Q$ a) X4 w path = New GraphicsPath(FillMode.Alternate)' R- t9 F2 @6 R
Dim zero As New System.Drawing.Point(0, 0)" d5 X5 b( w- l4 o& s
Dim format As StringFormat = StringFormat.GenericDefault2 A1 Z$ y7 t6 `
path.AddString(text, font.FontFamily, font.Style, font.SizeInPoints, zero, format)
1 P; D" x% E( R6 |5 F6 [" X- w2 _6 o
Dim bounds As RectangleF = path.GetBounds()
* e+ ~6 `$ T' ^ Dim gpi As New GraphicsPathIterator(path)4 s* J4 E- l' }6 D
gpi.Rewind()3 I" }$ F: |+ v1 G6 \
" Q% W$ a' J; q0 H k5 ?
origin(0) -= bounds.Left
- ~3 o/ k- Z `0 `. o S4 W origin(1) += bounds.Bottom$ }0 P8 [. z* ?. r
! A/ N$ J! X* u9 H/ i: j7 s
Dim iSubPath As Integer$ |! S0 m2 t; @. A0 j
Dim subPathCount As Integer = gpi.SubpathCount
2 c' ]+ r1 L- {& B8 O! h+ z3 f: I1 B! n9 c
For iSubPath = 0 To subPathCount - 1
: b+ M, {5 D# R Dim mySubPaths As Integer$ N3 `' Z& P: l+ |; \
Dim IsClosed As Boolean2 J S4 z9 Q9 }' g
Dim subPathStartIndex, subPathEndIndex As Integer
3 V& j5 f0 e* R9 X$ F' } Dim stpt As New Point3d
6 K" z3 c2 ~# q$ ~8 a2 |- U+ { Dim endpt As New Point3d
8 _ T! n; ^8 ^ f# ?! C* j s2 S1 x( s8 \
mySubPaths = gpi.NextSubpath(subPathStartIndex, subPathEndIndex, IsClosed). P. B& l, }) N/ A. z$ M
Dim pointTypeStartIndex, pointTypeEndIndex As Integer
, a! A" K. ?5 I. @+ w- q Do
+ {4 J3 H4 L y9 U Dim subPathPointType As Byte
: H" S! P+ y* S3 D) [0 k" g) d2 r Dim numPointsFound As Integer = gpi.NextPathType(subPathPointType, pointTypeStartIndex, pointTypeEndIndex)) N5 A( L | a' J6 V
Dim type As PathPointType = CType(subPathPointType, PathPointType)
/ k) u0 ~) c/ n& {* p' ~
+ g# r4 {4 v6 H* [, n$ X4 J If type = PathPointType.Line Then
! d5 ^1 m$ {* ]" q5 n& H( n+ D9 T+ P3 A CreateLinearPath(pointTypeStartIndex, pointTypeEndIndex)
5 Y% b! q, \/ l( f# [& v ElseIf type = PathPointType.Bezier3 Then6 b" s \) x. p' V2 w
CreateSplinePath(pointTypeStartIndex, pointTypeEndIndex), V# ~- t/ x3 m3 H7 d: I
End If/ Z! l6 a, t0 D2 `' J# b
Loop While subPathEndIndex <> pointTypeEndIndex
* E6 L; s g+ ]' S8 } If IsClosed Then
4 }/ L, s& Z3 E8 X2 D; b stpt.x = path.PathPoints(subPathStartIndex).X + origin(0)! H7 O& C7 t% S1 W" z; N
stpt.y = -path.PathPoints(subPathStartIndex).Y + origin(1)6 s) q9 Y; N9 w: `0 ]
stpt.z = 0
* W& z; k) W. F" C endpt.x = path.PathPoints(subPathEndIndex).X + origin(0)
1 y0 U" y! a# X( @ endpt.y = -path.PathPoints(subPathEndIndex).Y + origin(1)* X& N5 P# C1 h( g$ ^9 v/ m# a
endpt.z = 0
. e4 b4 l$ D: F9 j+ H ' Do not create zero length lines
' F2 ]& _! F* y' }/ L' ] W, H If Math.Abs(stpt.x - endpt.x) > 0.000001 Or Math.Abs(stpt.y - endpt.y) > 0.000001 Then s4 o5 I6 f/ ?7 ^) E8 @; n$ q7 {( F
curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))9 ]- }2 p; [, F5 h, {: S
End If. s1 V* X0 S) \4 U9 b
End If
T1 ^- k, F8 l, |& N Next
1 U5 I4 y) V" p# I If SelectThickness() Then
- ]" d9 E, y" g+ i" q CreateSketch()* a2 @3 [: P9 y
CreateExtrusion()+ h& e+ h' K' x O6 @ T
End If
) r! r/ {8 ^( Q3 F- F End Sub
% H1 ~1 @0 P1 V; N7 aEnd Module, x& k8 q% M2 p% {/ d# t
' D1 V, l& f$ E9 Q, i2 v
; P. L5 \& ?, w# y: n+ w
3 C& I, o( q$ o3 h/ b |
|