|
' ug刻字源码 +QQ 609719845
! H8 @) Q: G& y3 |) E7 o' into geometry using a true type font and- z/ `/ z4 |. I/ }) Z8 B, u9 W
' extrude the result" K( Y- ?* [5 _
5 x4 Y# Z0 L9 A% eOption Strict On9 C1 d- n5 l* ^4 i# C- |
) ^' [( x8 z6 |' o; AImports System# G4 D, L2 @0 H, f' V. _
Imports System.Drawing
/ `6 [4 c N) I; JImports System.Drawing.Drawing2D
, }, T# ?7 h3 gImports System.Windows.Forms
$ E5 m: W$ t* Q2 Z3 mImports System.Collections
+ @: V- }) X+ c t+ w: b0 rImports NXOpen: n% x$ E4 b {1 z
Imports NXOpen.Features
% D; m" ]! ^$ A0 Y; ~) H. DImports NXOpen.UF
) M6 h+ Y( }" V7 r. @4 N, U* s! gImports NXOpen.Utilities
8 G5 Z" b5 b& e) VImports NXOpenUI, x3 p& `, K% U! s# T6 ]! X+ H! u
& h' y8 E4 i2 O% _( W5 x
Module DrawText9 p3 Y, z- d2 T' z
& g2 A* E _& }$ _/ J Private sess As Session
+ w8 o5 e4 I# X f7 _ Private ufSess As UFSession+ f! S& G) i( N8 C0 m( a% K3 S8 ?) o8 J
Private origin(2) As Double
1 k8 I9 Q) c# y5 C& F& F9 z Private path As GraphicsPath
- J' O5 E6 [( g0 D/ D Private text As String
3 \9 Z) T7 h# \ Private font As font
: y$ @% d7 N8 v+ `* k1 R/ [ Private curves As New ArrayList
* X' h2 b5 t- ]5 t, ^ Private sketch1 As sketch* P- M' l$ g; C
Private thickness As String' A7 U3 K4 ^; F3 {6 h5 A' V! }
Private undoMarkId As Session.UndoMarkId1 I! |4 l$ z# R6 ]1 z* H+ X/ q
4 q+ Z/ M% w' `4 g( \* m ' Prompt the user to select a font.& A! q" f# \# }- g
' Return True if successful
: D. q* u! K2 j4 z: j* n) h. J ' The Module level variable 'font' is set to the resulting font.' o8 }4 o R5 \4 Q$ k
Function SelectFont() As Boolean
( b8 _ A) n/ _* s1 P* i Dim fontDlg As FontDialog = New FontDialog
4 K# b3 d. C* E" L+ _' L
6 \8 g4 k8 P6 S3 |9 b* L SelectFont = False ]' l7 W: L, r8 `1 l8 a7 L; p
If fontDlg.ShowDialog() = DialogResult.OK Then
; C, k+ ^, m' r" W" ^ font = fontDlg.Font$ Z ^- c' V, [
SelectFont = True" G, j, R/ }: ]( N8 a/ j) r1 o h6 C
End If6 w% B3 f$ q& ?8 X" [, y/ @
End Function
, [1 g( Y9 J+ @; q6 R* P3 C g$ e ' Prompt the user to select a screen position( c. \$ n( ]' j5 O
' Return True if successful
! g- n/ j2 _+ n" m, u' D' g ' The Module level variable 'origin' is set to the resulting point.
5 |5 ~ e" u0 |/ } Function SelectPosition() As Boolean+ j3 G3 ?6 t+ j2 p! G& e
Dim view As Tag5 F! ~- G6 O4 P! |8 V3 Z
Dim response As Integer p: ]9 R( q8 G
! J& m+ f1 N8 B) L ufSess.Ui.LockUGAccess(UFConstants.UF_UI_FROM_CUSTOM)
. j! v- K% @) ^- P) A! |6 g4 t SelectPosition = False
# r/ g* O) a( O& A n2 G7 |( S d Try
5 l7 N: ]4 g* C8 Z" d ufSess.Ui.SpecifyScreenPosition("选择字体", Nothing, IntPtr.Zero, origin, view, response); w X6 s5 y! Y: ]# {$ K
If response = UFConstants.UF_UI_PICK_RESPONSE Then
% j W" P) `) D; s/ U8 x, U# y; P SelectPosition = True
* L/ n- R( [: E% u" O End If, s" e8 K1 P! {5 a+ t
Finally
; C3 { Z) M( e' ^/ F ' Restore UI state always including in case of error.
2 o( X# c2 i" c+ P* g" U! j ufSess.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)
! s) f% x. J B8 R0 b3 h3 v" O End Try4 p/ D* g }& B6 g
End Function& y, S+ y- Q/ o+ z9 w
' Prompt the user to input a text string to convert.: ?6 I5 [3 d7 l% M6 e
' Return True if successful
$ u4 |8 x" z' x, J9 {# c ' The Module level variable 'text' is set to the resulting string.
+ {1 J; e' @7 p3 c; b& F. U Function SelectText() As Boolean
& r2 P4 c# D8 t1 d# G. k/ ~ text = NXInputBox.GetInputString("输入文字", "Enter String To Convert")$ U$ c% l3 G/ O+ ^+ ?: Y* w
SelectText = False
7 T% A& ?) h" s ^ If text.Length <> 0 Then
2 q; w& a- `# ]1 _, n1 P; K2 m SelectText = True! Z8 T W$ [3 A( ?
End If! f" [% {% n' i& F/ h/ I7 a
End Function9 C# n4 o- }( ~' W d
' Prompt the user to input an expresion text string to convert.: p6 h( z: L. I5 A
' Return True if successful6 b \, X7 h5 S5 @! f
' The Module level variable 'thickness' is set to the resulting string.
$ f8 n# y7 K' X* _& M Function SelectThickness() As Boolean }7 R! X" F3 `
thickness = NXInputBox.GetInputString("输入高度", "输入高度")
( m9 k M% s& M" b3 f+ l SelectThickness = False& ~6 c$ p6 ^- H* G4 y7 Y
If text.Length <> 0 Then5 a. |0 \0 m3 A* Q
SelectThickness = True, k8 g4 q$ Q1 C. m3 x
End If: h3 t8 {7 y" v
End Function. ?- a2 N8 p4 C6 r
' Given a subset of the graphics path between the given indices
$ F8 y! `. `, r- ? ' create lines between the points in the path.
; p0 ?( g% r9 b5 `8 i ' Assumes that caller has selected an appropriate section of the path.
, d# g( N) y! D. S Sub CreateLinearPath(ByVal startIndex As Integer, ByVal endIndex As Integer)
( t2 q+ s% I: @2 w Dim j As Integer$ T! W5 t- {" F4 [( w$ `
For j = startIndex To endIndex - 1* N; g0 C: q2 ^% K8 v
Dim stpt As New Point3d
: _/ t' x; [% e' a Dim endpt As New Point3d$ ]* w5 `+ i9 H) \
stpt.x = path.PathPoints(j).X + origin(0)
" C! H. i* r6 q8 v- W8 Y stpt.y = -path.PathPoints(j).Y + origin(1), P- F1 Q. F6 s% P2 q3 [
stpt.z = 0. J+ v" l" o. A% h3 m
endpt.x = path.PathPoints(j + 1).X + origin(0)" {: w9 L6 y) c6 T& Q
endpt.y = -path.PathPoints(j + 1).Y + origin(1)
7 q+ R8 \5 u- G7 s K0 z7 I* t endpt.z = 0
; c8 p/ C* J7 I- w) O6 _- b curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))
$ ]; z. }( S. K Next; |; E) a, e" I1 @
End Sub
, l h' V- V2 p2 \& A7 y# u" i ' Given a subset of the graphics path between the given indices
4 F7 [7 b; X1 i. p* N ' create splines between the points in the path.$ n4 Q4 q: s6 W* g+ y }0 `$ P$ q; l
' The path contains bezier segments and this converts then to B-splines.
7 z( q* _% I3 i" z% { ' Assumes that caller has selected an appropriate section of the path./ y4 ^7 P. R& V) H% M5 q
Sub CreateSplinePath(ByVal startIndex As Integer, ByVal endIndex As Integer)
, _+ t9 u7 v Z Dim j As Integer! K3 K9 J& |) |! b/ x
For j = startIndex To endIndex - 1 Step 3
8 D6 ]3 X0 r& q" |6 V+ t Dim poles(3, 3) As Double- ?" I- P! t# ~# \( Q
Dim k As Integer+ u5 K5 J5 ]% w3 f" |
For k = 0 To 37 _$ p" w; m$ J y9 D
poles(k, 0) = path.PathPoints(j + k).X + origin(0)
% S/ V2 I1 [) Y9 b7 F7 F( W" m* R- }! V poles(k, 1) = -path.PathPoints(j + k).Y + origin(1)
; L7 n3 z% C4 j |: | poles(k, 2) = 0
p$ J. G5 l4 h _. r poles(k, 3) = 1
& j2 [7 C: @9 _) |' m Next
8 \8 Q# [+ N" t" ^0 `: c Dim knots() As Double = {0, 0, 0, 0, 1, 1, 1, 1}2 o2 _2 w" n! {7 q) N8 [* r
Dim spl As UFCurve.Spline: C. n8 c2 y$ q0 x- r9 N/ }8 ]+ }
Dim spline As Tag
; _! E0 z0 v, `' ]# N& B3 t4 d Dim num_states As Integer
9 U$ L' Y" t! K! J Dim states() As UFCurve.State = Nothing
* Q2 ]+ N3 N- V9 }: @2 F spl.start_param = 0$ ~( I/ T9 E. j- h/ J! r' e9 [
spl.end_param = 1/ w3 `( `- _! P" U# V$ e% S J
spl.is_rational = 0
& u+ F" \3 U+ S' E spl.num_poles = 4
- }7 b- |* b/ ^2 N0 k' I" B spl.order = 4/ P; D# E& l4 x6 U4 y+ T
spl.knots = knots* X9 r/ x( y, I" n! o/ p! A
spl.poles = poles
8 n( T _ s" D" p9 e ufSess.Curve.CreateSpline(spl, spline, num_states, states)
$ A* x" I; L# O! n6 m" u7 o g curves.Add(NXObjectManager.Get(spline))
% d- O3 E& O5 M% n, L, ~3 f2 r1 Q Next& w+ l8 v9 c) j. G7 w
End Sub
) K* O( D. z0 x ' Create a sketch and add all curves we've created to it.; h& `) H! x9 |8 o
' Most of this was created by recording create a sketch and editting the result.8 c. Q1 M* T5 m5 V, m0 S5 j( U
' Retries with different sketch names to avoid duplicate names.
, J2 z# B# H- g0 a' d- o) i Sub CreateSketch(): {; u* D. q x1 _0 z
Dim theSession As Session = Session.GetSession()
7 Z3 S( a1 K7 E u/ p/ L Dim workPart As Part = theSession.Parts.Work
" S, H! d& f% S! J Dim displayPart As Part = theSession.Parts.Display4 f( s) z- s1 I5 S( C7 c: b
7 ]( O. J" s* _" M/ T \% a( V
Dim markId1 As Session.UndoMarkId
' D8 x( v; B# {' O, u markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start")
( i3 Y" x+ D* Z# z/ W* S3 g- |& [+ A
Dim nullSketch As Sketch = Nothing
- `2 C5 B0 }" o# I
- z, B0 t5 \! q' s4 W5 L Dim sketchInPlaceBuilder1 As SketchInPlaceBuilder P- D% A* g" q( h
sketchInPlaceBuilder1 = workPart.Sketches.CreateSketchInPlaceBuilder2(nullSketch)
; W: ^6 e- k) `8 R: ~% l5 n4 ^; {2 T! h% y/ _4 k) |) z
Dim unit1 As Unit = CType(workPart.UnitCollection.FindObject("Inch"), Unit)0 R# T- V; g- s9 n2 H' Z/ F5 X8 B1 }
1 ^ {4 d7 K( g1 c$ D; x
Dim expression1 As Expression( Q. ~7 v ?: t: u6 N! m. o% e
expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)
( E4 ~' @$ L8 p1 x! I! X
+ w& k7 K( @1 ?; @0 K' f8 G% E7 `2 ?' U Dim expression2 As Expression4 k7 n9 j0 c6 }# K% \6 |
expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)
: e6 Y r' s8 `, Q) [( C4 V
/ u( v4 {7 n r- v theSession.SetUndoMarkName(markId1, "'Create Sketch Dialog")5 D& K" i' ~# U+ W. ~
. c$ u: l" W$ |/ A T8 r% T0 I
Dim markId2 As Session.UndoMarkId
* q% ~# L8 R! K/ n markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")9 v( ?- A E I7 N
9 w% S+ I4 e; x3 r4 M. d4 Q5 E theSession.DeleteUndoMark(markId2, Nothing)
4 b- x8 t6 r7 j; j4 Y
5 f$ j3 ?7 f/ Z' q Dim markId3 As Session.UndoMarkId" Q/ l) {+ Z. K8 Y* D
markId3 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")( w* Z5 ]9 e7 P% K: Z1 E9 n$ g
- o4 A- K5 o. H- ` ' Inferring constraints and auto dimensions may take long time and is not really required for drawing text. # C6 D( X) U& ^/ n4 b5 o
theSession.Preferences.Sketch.CreateInferredConstraints = False. }$ T8 e0 d7 u! M N+ L
theSession.Preferences.Sketch.ContinuousAutoDimensioning = False8 z% S4 ~+ N/ Q& }
theSession.Preferences.Sketch.DimensionLabel = Preferences.SketchPreferences.DimensionLabelType.Expression5 U7 N x1 a2 e3 f- F l/ m
theSession.Preferences.Sketch.TextSizeFixed = True% s7 v/ Y& q/ @( a7 U( l Q
theSession.Preferences.Sketch.FixedTextSize = 0.126 f8 X; U0 }. j( t) @
theSession.Preferences.Sketch.ConstraintSymbolSize = 3.0
, i4 B w: O1 _/ a- C: D/ Y theSession.Preferences.Sketch.DisplayObjectColor = False
/ ?! ?( x& f3 }; K theSession.Preferences.Sketch.DisplayObjectName = False) D1 v# M9 @8 ^; _. [& K v% p# r
% T7 {% c7 V% a9 d% S* S6 [. G9 S
Dim nXObject1 As NXObject# R5 Q4 v6 W# v3 ~$ ~7 T
nXObject1 = sketchInPlaceBuilder1.Commit()% K: B5 m4 c) v, R/ u% D" V" ?) }( M
sketch1 = CType(nXObject1, Sketch). k: J, K, y( j d* d
) Z9 @6 z, r9 G+ @8 z M/ K
Dim markId4 As Session.UndoMarkId; Y) D( t9 }$ v: P- i
markId4 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "update")6 D0 m e: | {
: W& b W6 x$ w3 r Dim nErrs1 As Integer6 z3 L, d, I {0 D" h
nErrs1 = theSession.UpdateManager.DoUpdate(markId4): Y5 n) a" f4 H, p
$ [" _0 s, l; I% W2 }4 d" Q. P
sketch1.Activate(sketch.ViewReorient.False)
) Z# @* ~" R2 m7 P! G* ~% V% K; A- d H5 `3 ]7 D
Dim curve As DisplayableObject
3 [4 E/ ~/ S' p$ S6 Q2 d& Q! h For Each curve In curves3 g9 Y# u8 X8 C4 }4 P6 d
Try, N8 R" [& |1 I3 B8 \3 B- p
sess.ActiveSketch.AddGeometry(curve)
1 O }- b r! b7 E! k# b9 z9 `3 a* ^ Catch ex As Exception. `: v9 I w4 ^( F3 ]: D
MessageBox.Show("Could not add: " + curve.ToString + " to sketch " + ex.Message)
+ {+ U1 Q( u) o- _2 e0 I, p End Try7 S0 f* t5 e. v9 P* m( I, N4 m
Next
% D# C g5 g' a' r' @8 U A: E& T
) s" \) M. {$ ]1 y. d6 r sess.ActiveSketch.Deactivate(sketch.ViewReorient.False, sketch.UpdateLevel.Model)
9 t3 W8 A2 m3 x6 N4 ]+ r
: l. m5 R4 `1 ]2 R$ `, F6 L* ], i theSession.DeleteUndoMark(markId3, Nothing)/ r6 L+ g6 f. T% L# @# L2 k
theSession.SetUndoMarkName(markId1, "Create Sketch")
0 g/ S, k3 x. _% ?) a" u sketchInPlaceBuilder1.Destroy()
^/ G5 I+ H/ ?! ]7 s, f0 }+ Q# l/ T8 M
Try
F5 Z/ S, Q9 a* z0 J$ d) | ' 'Expression is still in use. m$ O. I4 X+ e! E; V$ w. R
workPart.Expressions.Delete(expression2)
3 l" `8 @ e/ G# b* r. {; [9 `+ [ Catch ex As NXException
% I& V' M- f0 c ex.AssertErrorCode(1050029)' C* p+ R/ x$ W
End Try
! B& ^) K6 s: @& m- m8 S* M5 y: X2 n1 C+ U
Try8 x+ j( P/ @$ c: Y v1 }# ]
' 'Expression is still in use.: d- p y* t8 D* B' K9 f: _
workPart.Expressions.Delete(expression1)
2 W; t- x+ E! C Catch ex As NXException z/ r9 c( t n% s! X8 b u
ex.AssertErrorCode(1050029)
}( M3 R4 _! a" `1 A0 S0 y End Try: Y3 m/ g" i7 X
- O: B* }3 Y j6 S T3 E
End Sub% K! b" R! d8 Q- u8 S' @3 m; o& _0 x
' Extrude the sketch
1 r {; a5 o! ]7 e0 M8 u Sub CreateExtrusion()
' u9 x4 C" i* o3 I! i; f) {. a0 ^5 O; y ^% Z& k
Dim nullFeature As Feature = Nothing2 P2 y! d% t5 s/ e
. t, B( x) J- Y$ ]8 R1 c Dim extrudeBuilder1 As Features.ExtrudeBuilder1 |% N1 f$ s! X* Q2 B; q; e8 d$ ?
extrudeBuilder1 = sess.Parts.Work.Features.CreateExtrudeBuilder(nullFeature)5 Q6 S+ V" s4 T: U; l' A9 a* z* r' L
7 c: Q7 L6 m7 S5 J+ c- G' v
Dim section1 As Section
! E4 ]" s' r5 K! K7 G1 ^ section1 = sess.Parts.Work.Sections.CreateSection(0.000001, 0.001, 0.5)
' s$ h& \3 }5 T: ]5 E1 g1 ^& m
: z0 Q. t6 L: W9 w7 Y" Z2 H ~$ s Dim featureArray1(0) As Feature9 \! j" h) _- X: o' A: N
featureArray1(0) = sketch1.Feature
6 @6 C. r/ ?# ? Dim curveFeatureRule1 As CurveFeatureRule
6 d/ n8 m7 {$ l8 }9 d) e6 W1 z curveFeatureRule1 = sess.Parts.Work.ScRuleFactory.CreateRuleCurveFeature(featureArray1)
: I. S8 h% b: B7 u/ q3 {: D; I* }& s/ ^$ J( h. [5 D7 U0 o! E
Dim rules(0) As SelectionIntentRule
{+ j {) c$ {4 s8 ` rules(0) = curveFeatureRule15 p, V1 Z( H: f+ A8 ]+ v' A
Dim geoms() As NXObject = sketch1.GetAllGeometry()
* y" U2 w$ ]; i4 b4 o8 m Dim helpPoint As Point3d = New Point3d(0, 0, 0)
4 ^, y- _1 S7 S; e/ Y& e( x section1.AddToSection(rules, geoms(0), Nothing, Nothing, helpPoint, Section.Mode.Create)
- D7 r$ _! Y7 j
/ q8 k, a4 c! n5 d extrudeBuilder1.Section = section1! ]: Q; q7 O4 p$ A
1 N4 N3 ]/ A2 s0 E+ O Dim direction1 As NXOpen.Direction
6 R7 R" `& Q4 L/ W direction1 = sess.Parts.Work.Directions.CreateDirection(sketch1, Sense.Forward, SmartObject.UpdateOption.WithinModeling)
* X7 ^, {6 F4 V5 s5 P5 d$ V+ S extrudeBuilder1.Direction = direction1
a" L1 A+ i9 h) F' x" @2 e
+ W( C& ^1 L' Y) H' v, [; Q/ ~) V extrudeBuilder1.Limits.StartExtend.Value.RightHandSide = "0"
7 B0 q+ k/ b. o extrudeBuilder1.Limits.EndExtend.Value.RightHandSide = thickness
. G9 `8 c4 U; \& X9 V
: \& t0 D) B0 s& o Dim featureOptions1 As GeometricUtilities.FeatureOptions
* H+ i- \! k6 ` featureOptions1 = extrudeBuilder1.FeatureOptions/ w2 L. k1 I; H% h; ]5 k* E
featureOptions1.BodyType = GeometricUtilities.FeatureOptions.BodyStyle.Solid1 c0 z# g& d& b/ [( R. \
0 c, C, ~) o4 T. `* {0 B* H
Dim feature5 As Feature
; t. f5 k; H3 G! S( j7 @ feature5 = extrudeBuilder1.CommitFeature()6 Q* U) o4 [9 ]
4 D+ G# B! _3 ]8 S& x extrudeBuilder1.Destroy()
: W2 v8 d& J, ~- K* h) R4 a; l+ v$ i# m9 h+ z) ~& @
End Sub; }: `0 P. u+ G. m4 @
' Main routine for this journal
$ d6 ]; M, F/ G5 @, p Sub Main()
& t+ y. ~/ |8 J6 H5 L/ w1 k- C+ d- @ sess = Session.GetSession()
% h* b! M5 R+ j! ]; } ufSess = UFSession.GetUFSession()
: D0 M0 H; C: j" }
, o1 }* ?! x& O* C' g1 d: t0 x, P If Not SelectFont() Then
' t: f" _2 m3 u% K: w: r$ Y Return! e! E7 o x4 e1 | C
End If
* C- h+ m j/ @9 L If Not SelectText() Then* a$ D: _4 \* e. k9 i: }
Return
' [2 w, y' H5 ?2 z- W8 }! s End If
% E; K0 J; K& O, L( F2 w+ \! H7 E If Not SelectPosition() Then/ @* q ?% c" {+ e
Return
# A3 t3 J; ]. ~7 Y0 u5 a End If
) j- i& K* X. ]4 r+ S$ b; L! h* E; T7 w2 h* j
undoMarkId = sess.SetUndoMark(Session.MarkVisibility.Visible, "Create geometry from text") r) `2 v9 S9 O
1 M* {& N9 m2 A- s6 m- m: W
path = New GraphicsPath(FillMode.Alternate)' J( K- m% @! T9 S4 B" h
Dim zero As New System.Drawing.Point(0, 0)$ M) i/ j0 @6 o3 v5 H
Dim format As StringFormat = StringFormat.GenericDefault
& D9 x0 V1 d4 ^: h6 q path.AddString(text, font.FontFamily, font.Style, font.SizeInPoints, zero, format)+ K3 v3 p& t" N9 L$ E: x
6 \" o( t. x, J) `7 a Dim bounds As RectangleF = path.GetBounds()8 q2 d" v7 \4 _, m# n
Dim gpi As New GraphicsPathIterator(path)
5 C% o5 i3 I7 A& U* h gpi.Rewind()0 u" M% ?3 ?8 Y+ u
( ?3 {, c6 i0 z2 |' x
origin(0) -= bounds.Left
; Z% C/ G7 Q6 } origin(1) += bounds.Bottom9 p# e6 W( @( t3 x- ^- ?4 B5 }3 b/ e6 m
5 k, I4 l, a# v
Dim iSubPath As Integer; _6 e& I5 F/ P* u/ Q9 m1 _) i2 C
Dim subPathCount As Integer = gpi.SubpathCount5 ^/ e( S7 y* y% u: |
" A$ n; M* }7 |; d9 g- H; s& a$ M For iSubPath = 0 To subPathCount - 14 k" Z6 n9 f7 D1 ?; w" |# \
Dim mySubPaths As Integer
2 p" E1 w: J! y' F Dim IsClosed As Boolean+ a) _9 ^, w8 c% Z
Dim subPathStartIndex, subPathEndIndex As Integer
: [ h, L4 f) ^2 P Dim stpt As New Point3d" |0 J$ N7 B- R, S) R
Dim endpt As New Point3d5 z F" f8 G& g" b3 c9 f! K
* O P: \5 x5 y4 [8 g
mySubPaths = gpi.NextSubpath(subPathStartIndex, subPathEndIndex, IsClosed)
% L6 L+ u5 r* n( E* t Dim pointTypeStartIndex, pointTypeEndIndex As Integer5 d4 K& ^( q- K! U
Do2 u4 s9 @1 E. a4 @! @
Dim subPathPointType As Byte
: l. @& O* d7 R P Dim numPointsFound As Integer = gpi.NextPathType(subPathPointType, pointTypeStartIndex, pointTypeEndIndex): o+ E2 ?, G2 r' l
Dim type As PathPointType = CType(subPathPointType, PathPointType); N% B; Y+ n- o% t8 _; U( F
/ j, V3 V( l; \ U/ Q If type = PathPointType.Line Then
?7 L9 p) y! W! r- W) S5 _ CreateLinearPath(pointTypeStartIndex, pointTypeEndIndex)
p1 V9 j' H: \% Q' U2 o0 O ElseIf type = PathPointType.Bezier3 Then7 y$ u9 T2 u/ W0 G+ |& L \; ?
CreateSplinePath(pointTypeStartIndex, pointTypeEndIndex)
! d. a, ]) a# w2 W' ]+ f! z/ I: Z End If
( I- X0 c$ b0 N+ R+ _& E) z% g Loop While subPathEndIndex <> pointTypeEndIndex
6 H. w9 V8 t$ Q, M' ? If IsClosed Then; q! c7 o8 T' n$ k& s" S m$ v
stpt.x = path.PathPoints(subPathStartIndex).X + origin(0)& z: w: b V0 {" U1 M* B h
stpt.y = -path.PathPoints(subPathStartIndex).Y + origin(1)9 a; a& i% A1 o/ c% e$ g
stpt.z = 0
6 p& F( E7 ~( u8 P: y# g6 W endpt.x = path.PathPoints(subPathEndIndex).X + origin(0)
' T6 @) Y" P' @. p' i& R endpt.y = -path.PathPoints(subPathEndIndex).Y + origin(1)
2 Y5 S, F3 u1 J1 X5 [0 W endpt.z = 0
& \$ }9 k( ~/ T9 Y ' Do not create zero length lines* ^$ p& \- R6 c$ [ l' R! ~
If Math.Abs(stpt.x - endpt.x) > 0.000001 Or Math.Abs(stpt.y - endpt.y) > 0.000001 Then
5 y+ o1 e5 K# I: p curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))
0 B) p! I5 L% Y0 z* L End If6 |. K3 P% h# `' z
End If$ T# _; L: W& B5 B( {- ?8 a8 w
Next' \0 m3 Q) z9 I% L3 R2 V% U
If SelectThickness() Then9 z6 D% Y& N ?( Z: s& O
CreateSketch()
: b5 X% S" c$ H r+ x- a6 |% M+ e CreateExtrusion()
& j1 s8 r% s" v3 G. ^6 s# ` End If
4 H4 _! O; N9 L. P! ^1 N$ } End Sub$ C/ L6 Y5 e& }3 }% i
End Module
+ g5 S8 e2 a1 l2 n6 v1 z5 @. Z. x1 X) g( P9 ]: [5 ~6 U# f
" b; f* c1 q: P8 i* I& T1 F4 L$ B+ k; I, [: [# u. h
|
|