|
' ug刻字源码 +QQ 609719845
! }( t% `- i. U2 ]) s) ]' into geometry using a true type font and% t& F* b9 ~0 y& Z1 @, q
' extrude the result
# M) q+ j0 x. k% c' r8 X( x# g7 [: [3 E8 i
Option Strict On
{0 m- m2 f k1 \8 D( a3 p5 c8 ~( S) c0 M: `* B
Imports System
. p0 f- q5 @: _8 g" {7 T0 y SImports System.Drawing
$ j" u% Y2 S" u( N8 t+ w: [# yImports System.Drawing.Drawing2D
4 p9 k2 d; b6 {4 q8 JImports System.Windows.Forms
- b$ ?8 z% o+ v3 _/ ^Imports System.Collections- V) A& Z1 z* o8 a# |$ N
Imports NXOpen
0 d1 H+ k" |9 R: ?Imports NXOpen.Features! E# O U# w: M
Imports NXOpen.UF
4 ]! D/ a4 R3 g5 M( J2 dImports NXOpen.Utilities s, p& y6 H" x& W1 p
Imports NXOpenUI
' \4 R% I4 l2 i# ^$ A2 E
; F3 `# [# s3 NModule DrawText! E3 z9 l4 E8 m/ S) Z1 N) |
% U/ o5 A) y* J7 S
Private sess As Session3 z; c9 T4 V2 Y0 q5 _
Private ufSess As UFSession1 |2 m; W) N- M2 G/ y3 o6 O" c$ _
Private origin(2) As Double
- R. ]& a) ]4 v Private path As GraphicsPath9 s$ G1 \2 W/ _9 }9 W
Private text As String+ u _3 j' k+ i6 e5 m) M) _
Private font As font, F0 R' g9 }4 u7 @ t# f, {, e- S
Private curves As New ArrayList( v% L0 K- O- `# o5 X
Private sketch1 As sketch
- [. y4 J8 a" j Private thickness As String) }+ C9 T1 t! c$ a! @
Private undoMarkId As Session.UndoMarkId: o, v+ ]2 \0 B! Q- g9 A( u; D
! B5 z4 C1 N2 Y) S" b* \
' Prompt the user to select a font.
8 e2 E/ j! ?( }; Y- v ' Return True if successful
5 R7 {* O3 h" n# v6 I ' The Module level variable 'font' is set to the resulting font.
! f! X+ F% `4 w# h Function SelectFont() As Boolean$ [" _3 l+ C8 l' ]
Dim fontDlg As FontDialog = New FontDialog$ W+ H: N/ P1 Y
- y/ \' a1 F7 W7 L1 B/ T# N SelectFont = False
( |. o: |3 }4 @; m9 ]3 i If fontDlg.ShowDialog() = DialogResult.OK Then4 y- D" L1 P3 f- w
font = fontDlg.Font, I$ l! o1 O* B8 F5 f, c
SelectFont = True
& J4 I9 p1 ?; r' E& j! l End If: E, _# A7 r' E [2 Z: _
End Function) j; v+ H- i! g9 H* z+ Q- Q
' Prompt the user to select a screen position
8 \. V1 ~' F8 t/ }; f; s ' Return True if successful
K; F; {, ~6 h ' The Module level variable 'origin' is set to the resulting point.7 I, M( n: C7 t0 T7 {- ]
Function SelectPosition() As Boolean# c: n) ], h, |2 @6 m
Dim view As Tag9 R9 `6 W5 n5 b/ [) ?( ?
Dim response As Integer- S# n. o4 D9 S
; Z' i2 {" \+ Y4 a) w n7 F8 k ufSess.Ui.LockUGAccess(UFConstants.UF_UI_FROM_CUSTOM)
) h) }" _2 @9 M5 U0 n* q SelectPosition = False
3 H, h6 `4 G$ w- a+ s Try
9 `0 Q# M5 u& `+ i ufSess.Ui.SpecifyScreenPosition("选择字体", Nothing, IntPtr.Zero, origin, view, response)
' ?" t0 ^4 K6 \. W. o. z If response = UFConstants.UF_UI_PICK_RESPONSE Then
# }6 m$ x- T+ e3 b SelectPosition = True7 z6 G0 \9 W" v9 H5 g
End If
' Z( Y' }. j' s: R ? Finally
9 K# l/ Q# Z+ P$ t. Y% t. w" a ' Restore UI state always including in case of error.) c4 ]# I3 H! _& X3 X
ufSess.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM)4 M" v! l( f8 j j3 \+ L& `+ O
End Try
6 S4 A, |% u0 { End Function
7 z* ~- t3 i# r ' Prompt the user to input a text string to convert.
+ F# c9 l( I- i( M- ~9 x4 H& U6 I ' Return True if successful
2 v8 G2 F, O! d2 m3 p ' The Module level variable 'text' is set to the resulting string., u: g4 e4 }; X' [- P
Function SelectText() As Boolean
3 Y, R7 U! q' D+ R9 f1 q# x text = NXInputBox.GetInputString("输入文字", "Enter String To Convert")
2 ^, U, D) N) O' o$ f- ? SelectText = False
" f0 Q R9 s5 m$ u If text.Length <> 0 Then# }" ~& w$ c4 E, e9 _
SelectText = True4 q7 p: } x7 l, r& A1 o- k/ V
End If
$ o- N2 G/ C0 Q/ q2 [* a End Function8 a$ L3 P; H G
' Prompt the user to input an expresion text string to convert.$ d: q) x! r! E! e& D
' Return True if successful' x9 Q% E+ w' Y6 x+ v, F4 ~
' The Module level variable 'thickness' is set to the resulting string.
* p/ x; O3 P* D/ S* C8 E9 _ Function SelectThickness() As Boolean
! W; v8 F5 _$ `6 w( w thickness = NXInputBox.GetInputString("输入高度", "输入高度")" C0 k- X/ m( B3 U p& W2 \
SelectThickness = False" [( F' G$ ?$ H1 o2 l
If text.Length <> 0 Then
6 p4 X/ s8 n; u' w; }; j1 P SelectThickness = True6 \7 N& @( y/ O7 @- u, F; U8 n
End If
5 \; Y" V* K1 J6 P) Y; H End Function
5 t, Y& [( u3 j3 |0 f ' Given a subset of the graphics path between the given indices
: o W6 m' x7 v2 s& s. T d ' create lines between the points in the path.6 k$ U4 z2 T2 E" V C7 y* q
' Assumes that caller has selected an appropriate section of the path.
: S0 f4 q) N1 z8 u" M4 s) s% D: {2 v Sub CreateLinearPath(ByVal startIndex As Integer, ByVal endIndex As Integer)
$ ?! N7 _6 O k: B0 [ o Dim j As Integer
1 u9 B3 N' K3 w: d For j = startIndex To endIndex - 1 y% Y( P% W: a
Dim stpt As New Point3d5 d/ D8 E" ^) h# ?+ ^. v6 z
Dim endpt As New Point3d
) ?; k" j- R2 n$ [+ U! h6 Z4 w8 A stpt.x = path.PathPoints(j).X + origin(0)6 d8 R( i9 B8 p/ _3 q: u4 `
stpt.y = -path.PathPoints(j).Y + origin(1)
, _( B" K- N- o$ _ stpt.z = 0
4 w. _4 _9 v7 n# D# J0 F endpt.x = path.PathPoints(j + 1).X + origin(0)
) ^# l' g0 Q. k8 t$ m endpt.y = -path.PathPoints(j + 1).Y + origin(1)! y( m8 e7 f' s2 E1 E
endpt.z = 01 f5 Y: _- j- }: i
curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))" L2 W" [6 T. A
Next
# w2 K1 a& X& z4 y9 K6 w) ] End Sub
7 l0 w5 ^. @4 h: k1 ]9 I: ~& ^8 @ ' Given a subset of the graphics path between the given indices
/ J! V3 C8 l/ A1 ]0 {) P ' create splines between the points in the path.+ o6 |# n; C! ~7 ]% w) A4 k" }
' The path contains bezier segments and this converts then to B-splines.
4 B" U' A) D" B7 u" f" A" n ' Assumes that caller has selected an appropriate section of the path.
5 u. `; N0 v L9 F5 Z( O; Z% b6 W Sub CreateSplinePath(ByVal startIndex As Integer, ByVal endIndex As Integer)
/ K3 |! V9 }& q8 U& I1 i6 U Dim j As Integer
- p2 L) t4 {; I C For j = startIndex To endIndex - 1 Step 3+ K$ z0 l8 {! P
Dim poles(3, 3) As Double
G- v& z0 q& C5 x( j, g Dim k As Integer
; K( A$ N1 G( p0 f. s For k = 0 To 3
/ O+ i+ W8 e3 C9 l- ~ A" d# ` poles(k, 0) = path.PathPoints(j + k).X + origin(0)
( N/ Y% p# i4 T& t# o& P- R poles(k, 1) = -path.PathPoints(j + k).Y + origin(1)) R: t3 k8 S/ l' J; N2 ~: H
poles(k, 2) = 0; D- \+ w; o. U7 `5 J& L
poles(k, 3) = 1
# a' L& y5 I' U' {: `* ^8 g0 r Next
$ q+ s( P1 r3 h Dim knots() As Double = {0, 0, 0, 0, 1, 1, 1, 1}* F# l9 `; `! ~" g1 m1 ^, Z
Dim spl As UFCurve.Spline1 S( z+ D: G0 o' ]! E" h* v% l
Dim spline As Tag
! I5 N% }& ~( E3 \9 v: E* I& D. y6 Q Dim num_states As Integer
) Z# m8 `+ a7 B9 q* M& w Dim states() As UFCurve.State = Nothing
8 r5 b' G9 V3 F: e5 \& ^; y spl.start_param = 0
5 l1 Z- O- d$ @2 V/ Y& { spl.end_param = 1
# V2 H: H- X1 o3 U5 i/ \- S' k spl.is_rational = 0
- t( @1 X4 p' E% T# r! Z spl.num_poles = 4
* H1 a$ O9 G" e: G spl.order = 4: W$ y9 Z% d# j3 I2 W. g
spl.knots = knots: u1 c4 c) A' s+ I. ]5 ]
spl.poles = poles7 y$ R1 @7 q1 N$ k& c1 _ E7 p
ufSess.Curve.CreateSpline(spl, spline, num_states, states)6 M' G9 M) ?7 \2 }3 I
curves.Add(NXObjectManager.Get(spline))' H( z0 F- u1 a
Next
, z0 A4 [4 v1 }2 _5 {& |7 t End Sub" e) ~- f7 g# U% V
' Create a sketch and add all curves we've created to it.3 a2 l. ]5 F6 P7 n* i
' Most of this was created by recording create a sketch and editting the result.0 Z C, Q: q' w5 `. }* b
' Retries with different sketch names to avoid duplicate names.9 }( p" Z3 j0 e6 p7 r
Sub CreateSketch()
& Q# c& q6 [# J, F8 U$ y1 ~$ O; I | Dim theSession As Session = Session.GetSession()) x- W$ ]6 u. p0 q" P k2 g* i
Dim workPart As Part = theSession.Parts.Work
2 N( n% f# \* O+ s+ h/ f p8 y Dim displayPart As Part = theSession.Parts.Display
% V6 s' B+ J. s, \8 t0 Z2 h
& y3 C2 @% D0 ?4 a T" s Dim markId1 As Session.UndoMarkId) z3 Q5 E: V" r0 q5 x2 C) z
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start")
. c/ F2 s9 o m
& C5 `* F4 A6 _2 c: j: H' p Dim nullSketch As Sketch = Nothing
( G2 `! f: P3 h6 W: C! N
$ Q: Q+ r: j6 J5 W7 \6 w" N: V Dim sketchInPlaceBuilder1 As SketchInPlaceBuilder- C0 {6 @* k; k, {4 [% y0 m
sketchInPlaceBuilder1 = workPart.Sketches.CreateSketchInPlaceBuilder2(nullSketch). J! }8 ~1 I5 y: x+ T+ ?
3 s t& T, `# C% m- y4 n Dim unit1 As Unit = CType(workPart.UnitCollection.FindObject("Inch"), Unit)" o) v- S l. ]+ w: v# {3 K/ z
& B4 Q3 {( H' h7 `5 S8 P
Dim expression1 As Expression
& ~/ `7 d9 Q! X. b6 t/ A3 @ expression1 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)
) N& f1 m" W; O; U+ K; g# [) e# p9 w( F& K8 L
Dim expression2 As Expression9 }: Q2 g( Y$ Q5 [$ |( H( ^* r
expression2 = workPart.Expressions.CreateSystemExpressionWithUnits("0", unit1)& M: ]; [! U, k3 O
7 A7 a( R) i8 U" {8 C$ [ theSession.SetUndoMarkName(markId1, "'Create Sketch Dialog")/ g+ t0 X/ T0 h0 o* t8 o8 a
& T4 {% P" y5 A) k$ n+ ^ Dim markId2 As Session.UndoMarkId& b0 n& B4 [* R: l
markId2 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")
0 @) @, s9 q; F9 p" p1 `, V/ L8 ]# D8 N3 b# T1 v0 t' c
theSession.DeleteUndoMark(markId2, Nothing). H; D' h- C1 U4 G8 V5 i
/ ]9 r, f1 U; O/ p8 Y, B; a" V Dim markId3 As Session.UndoMarkId; e8 E7 r9 o% _1 r" V+ |: Y
markId3 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Create Sketch")
; ]9 }& C/ y5 k3 C3 z3 P* p
4 [" U2 M" W# y8 K& H; Z ' Inferring constraints and auto dimensions may take long time and is not really required for drawing text.
# D6 K" ]: a% l7 V theSession.Preferences.Sketch.CreateInferredConstraints = False, z7 h/ _5 M( B9 Y2 o" K8 T& N
theSession.Preferences.Sketch.ContinuousAutoDimensioning = False
9 q& X9 ^* F2 Y8 f' P& h theSession.Preferences.Sketch.DimensionLabel = Preferences.SketchPreferences.DimensionLabelType.Expression1 U7 J4 W- I( H
theSession.Preferences.Sketch.TextSizeFixed = True( z' y7 n a5 x, n( E
theSession.Preferences.Sketch.FixedTextSize = 0.12+ z4 h% C1 \% v# C: G) e6 m
theSession.Preferences.Sketch.ConstraintSymbolSize = 3.0& m$ F1 u4 Y9 d1 h! {" I) R6 m
theSession.Preferences.Sketch.DisplayObjectColor = False
2 g0 K4 }! q; G. G$ x8 V theSession.Preferences.Sketch.DisplayObjectName = False. `4 h9 \$ \, Y3 s: V- ?
) O# `) q; z, ]& w2 c" u! O Dim nXObject1 As NXObject4 c+ |& A* I. z
nXObject1 = sketchInPlaceBuilder1.Commit()& G& N2 F W- i$ d8 ]
sketch1 = CType(nXObject1, Sketch)8 O2 L3 Z+ c# x, S( M! J g
6 i6 ^6 u& [7 j% o) P @ Dim markId4 As Session.UndoMarkId
6 B' `& H3 E6 a; [3 |, }; i markId4 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "update")
0 e' H8 V2 E; l
S& P/ {8 M' O- G Dim nErrs1 As Integer
3 ?% X! m, Q3 z0 } nErrs1 = theSession.UpdateManager.DoUpdate(markId4)1 M' l- Y' f3 A/ B
g9 f# ^) }: Y: E
sketch1.Activate(sketch.ViewReorient.False)
' U! F" D' `+ S4 {2 E8 K8 G8 f
% R, W* f% \% ` Dim curve As DisplayableObject3 Z( ^! c7 f. i f0 l4 u
For Each curve In curves3 y: a" ~8 }4 Z/ y4 y
Try
( A( g- f+ D# u4 v+ { sess.ActiveSketch.AddGeometry(curve)
! q. ^; b5 @7 x$ N7 d4 b3 M Catch ex As Exception
; F G+ n) ? [/ { MessageBox.Show("Could not add: " + curve.ToString + " to sketch " + ex.Message)
( f& q* s4 H* d" Y' \9 |9 U7 i End Try ^) g0 F1 l+ r; e- y$ f" |: ]
Next* G5 F: ~) y+ j1 [4 h) \9 R/ K
, C! h9 `$ i7 W/ d sess.ActiveSketch.Deactivate(sketch.ViewReorient.False, sketch.UpdateLevel.Model)" [% X& M, X% m$ P$ x
' @. x6 y& Q X2 q# F+ m
theSession.DeleteUndoMark(markId3, Nothing)/ ^0 h7 a/ N! r! m, z' v( d& g
theSession.SetUndoMarkName(markId1, "Create Sketch")
0 b: ^" D1 j( j9 ? sketchInPlaceBuilder1.Destroy()- V; j$ k [9 ~" Z3 t5 M* x
1 e+ f- U( L' U: ^6 K' g& D+ H( h
Try; p# d9 U9 w& F Y' [/ d$ h
' 'Expression is still in use.3 o5 I: L2 G+ o, r2 U
workPart.Expressions.Delete(expression2)
+ z( n# _. p4 H; B, v Catch ex As NXException
' q: C5 e" Y3 m) G) F) ? ex.AssertErrorCode(1050029), y/ |% B% J8 r. C! h/ A5 {+ r
End Try
( n# Y B, E8 K2 X7 y) M" r* M- e; G& b
Try
B$ |# N5 k1 K! Q3 ?; l& f ' 'Expression is still in use.) p, K8 @* c% n Z% j2 @/ c
workPart.Expressions.Delete(expression1)
% b+ r5 ^/ q. z2 R6 b. J) m3 B; t Catch ex As NXException
8 c1 s, ]1 R8 Z6 K Y0 V' m ex.AssertErrorCode(1050029)' S: N C$ ?) V
End Try
/ ]6 w* ]1 N7 c( S3 M$ a! Y4 P7 W/ B) u
End Sub
- k8 J" J. Y6 o- r: Q ' Extrude the sketch! S4 B) y2 |/ s, f. i
Sub CreateExtrusion()
" A. S$ U. Y5 l0 X2 }7 n& h0 c4 o; D6 y$ C5 L; l0 i/ ^8 a
Dim nullFeature As Feature = Nothing
; ~4 O4 M6 o8 g, ~, G/ p, ?2 C+ E
2 c, w3 f1 \) @ Dim extrudeBuilder1 As Features.ExtrudeBuilder1 Y5 L F; y+ P: \# \& C* V r
extrudeBuilder1 = sess.Parts.Work.Features.CreateExtrudeBuilder(nullFeature)
' g. }" y; }& V1 O9 t' J8 R4 V4 E' [) r% e
Dim section1 As Section4 c% ]2 B& h; L! g7 q- b4 b
section1 = sess.Parts.Work.Sections.CreateSection(0.000001, 0.001, 0.5); Q2 ^" w$ u3 {* m( K/ z/ r9 V+ H
. \5 _8 \) z* P$ n( i Dim featureArray1(0) As Feature
( q3 f: W) D8 l featureArray1(0) = sketch1.Feature
( M+ \8 w# j( D1 ~ Dim curveFeatureRule1 As CurveFeatureRule
, f1 n' [5 h1 W' s curveFeatureRule1 = sess.Parts.Work.ScRuleFactory.CreateRuleCurveFeature(featureArray1)
& w, X& w3 P0 B1 T8 R/ t4 l) Z8 ]% E6 I7 y; o8 C
Dim rules(0) As SelectionIntentRule [9 x$ s; G8 }# m4 ~
rules(0) = curveFeatureRule1
' w$ U0 f4 [% t }# D Dim geoms() As NXObject = sketch1.GetAllGeometry()
3 P3 ]! k, C0 K) n6 b v Dim helpPoint As Point3d = New Point3d(0, 0, 0)& j. g4 r: \. |' s
section1.AddToSection(rules, geoms(0), Nothing, Nothing, helpPoint, Section.Mode.Create)
9 l8 j7 W" v" u; f
/ m2 A. w R2 A: T( v6 d$ `. f8 c2 f' Z extrudeBuilder1.Section = section1! Y. m. V& Z& P9 O% Y8 I
F. T5 w- {% T8 z& t. z
Dim direction1 As NXOpen.Direction. I* e: f# Z( G6 L
direction1 = sess.Parts.Work.Directions.CreateDirection(sketch1, Sense.Forward, SmartObject.UpdateOption.WithinModeling)& E- f& D3 e# q, d( `: |
extrudeBuilder1.Direction = direction1
' {* x) Q @1 L1 i! d6 X* l* y
# c3 \) @4 u, T- @ extrudeBuilder1.Limits.StartExtend.Value.RightHandSide = "0"6 I/ X! \6 v* O" j- \4 w5 \* c
extrudeBuilder1.Limits.EndExtend.Value.RightHandSide = thickness
; _8 I; T9 R3 S9 Q6 o( b9 K% J: O1 I3 @
Dim featureOptions1 As GeometricUtilities.FeatureOptions0 x; C% N6 ~/ {
featureOptions1 = extrudeBuilder1.FeatureOptions1 K- j9 f3 d+ m2 Y' ]
featureOptions1.BodyType = GeometricUtilities.FeatureOptions.BodyStyle.Solid
+ m' \2 h0 a9 I2 M
" n5 \ |6 R$ q' U6 P1 q: Q- ~9 S Dim feature5 As Feature$ h i' r7 }) Y7 {, x8 M& X& ?
feature5 = extrudeBuilder1.CommitFeature()3 T& l( M9 }5 {
) E' q* z9 u; Y3 Y* q, l5 ~ extrudeBuilder1.Destroy()$ i3 C h: d: y, ~! {- S
) \5 q2 a+ c W( B: w$ M" A" R t/ G End Sub. K0 N! P* Y/ [. L9 w+ b
' Main routine for this journal7 K: G1 _7 @) \% b: a* |: w) s( q
Sub Main()
" t' ?* ?8 a( R- V% f' _" t4 e sess = Session.GetSession()
- T* K8 I& ]5 D8 I, t( K# j8 x- } ufSess = UFSession.GetUFSession()
& C4 L5 k% [) D: A5 E) Q$ z1 ^( A6 a% [4 U( I
If Not SelectFont() Then! @0 w4 P% p2 \5 I& n
Return: I' r/ l& e6 t: x
End If
) J/ h) j/ K! L6 R/ ] If Not SelectText() Then
7 v8 b2 Q5 R$ \ Return" d2 {; v* u, R1 _; c" k- S
End If
& Y- _1 K: C5 N$ J: k9 g3 H If Not SelectPosition() Then0 |) M5 Q W: b! s H
Return
3 S6 n* r$ s: Y* f* J) _# g* p End If7 u( h, A- W8 Q' B+ ]2 t8 ]5 W: A
( \/ I3 n$ I. C9 ?3 C+ T5 A
undoMarkId = sess.SetUndoMark(Session.MarkVisibility.Visible, "Create geometry from text")
0 U) t# }! | p5 q3 M+ x' ~" e( u, N% b* Z7 o
path = New GraphicsPath(FillMode.Alternate)
9 E0 v: ~6 F9 b" o. F3 ` Dim zero As New System.Drawing.Point(0, 0)
# N* ?* q4 g1 Q$ h4 n& A; A Dim format As StringFormat = StringFormat.GenericDefault
" A" t- p% M, n( _ path.AddString(text, font.FontFamily, font.Style, font.SizeInPoints, zero, format)( K g* V! V. j1 {! g( C
2 V# }6 R* V/ L) Q/ o% f Dim bounds As RectangleF = path.GetBounds()
" B& a5 G9 W2 f" B, F+ S0 O: @ Dim gpi As New GraphicsPathIterator(path). p1 ]5 A% x7 }2 d( ^
gpi.Rewind()4 l" x( l3 x% _* r/ I3 p
& |/ c5 q- h/ N7 j
origin(0) -= bounds.Left
+ } R% O- o" i; O9 C8 o0 n( ~$ \" q# J origin(1) += bounds.Bottom8 ]) V- V8 ^0 D; q$ b0 C' ~) K
/ ]) e! n; m, K- F Dim iSubPath As Integer* j, [' P/ G0 w6 n" G# H' U
Dim subPathCount As Integer = gpi.SubpathCount
( X0 { }# D" }* X4 w. d& N0 G, H8 w" |' y/ B6 F; E3 j
For iSubPath = 0 To subPathCount - 1
! f9 i' o! X9 n. M5 m Dim mySubPaths As Integer
0 R) P0 U0 K' S2 _ Dim IsClosed As Boolean7 j3 _* o% B' K% O
Dim subPathStartIndex, subPathEndIndex As Integer
% s1 ~- E/ Y' j: c8 i Dim stpt As New Point3d
- X: s/ D. _3 |4 w3 v6 q3 o Dim endpt As New Point3d* B$ A( S# N, g. C6 {" D
T; [9 H/ e: Y9 Q) i8 A t
mySubPaths = gpi.NextSubpath(subPathStartIndex, subPathEndIndex, IsClosed)
1 J8 z0 A/ S, J7 q+ s% ?" _, |; c Dim pointTypeStartIndex, pointTypeEndIndex As Integer1 X' u& k6 F: i* F; r- n4 D
Do0 T$ |6 M8 Y: g5 l$ n, o/ n
Dim subPathPointType As Byte* r- {. H* v/ w7 ]& V. R; e5 Q# E
Dim numPointsFound As Integer = gpi.NextPathType(subPathPointType, pointTypeStartIndex, pointTypeEndIndex)
7 M& J; n/ r5 Y. U: p; e2 f Dim type As PathPointType = CType(subPathPointType, PathPointType)
/ I9 T7 b2 V& v0 M% T/ B: _7 T
2 D% R# w5 b: Y3 d* T4 G, `3 B2 A If type = PathPointType.Line Then
4 K% G3 a8 @6 s, ^9 q# S: e" z+ N+ D CreateLinearPath(pointTypeStartIndex, pointTypeEndIndex)
8 b% Q* P+ F5 G" E1 O ElseIf type = PathPointType.Bezier3 Then. Z: p6 X @0 E
CreateSplinePath(pointTypeStartIndex, pointTypeEndIndex)
; _2 p( B# M+ @9 E/ Z1 ?. | End If+ R( n8 n- F8 o" e/ Y! f
Loop While subPathEndIndex <> pointTypeEndIndex
2 l/ Z/ k( ~& N2 P If IsClosed Then
7 B8 R6 z6 h. N stpt.x = path.PathPoints(subPathStartIndex).X + origin(0)1 ^( O$ \; M' C2 r3 \, [8 p
stpt.y = -path.PathPoints(subPathStartIndex).Y + origin(1)
# l) c4 S) B, F( E* k stpt.z = 0
* j/ q4 F( F/ h( P% _ endpt.x = path.PathPoints(subPathEndIndex).X + origin(0)
5 k+ t2 F9 V4 Y endpt.y = -path.PathPoints(subPathEndIndex).Y + origin(1)
& s \0 I. p, e# }% Z9 | endpt.z = 0
2 }9 y$ b+ A; A: V ' Do not create zero length lines
7 m( K3 l! R3 d- ? If Math.Abs(stpt.x - endpt.x) > 0.000001 Or Math.Abs(stpt.y - endpt.y) > 0.000001 Then8 q. e) s! S) [. ?( _
curves.Add(sess.Parts.Work.Curves.CreateLine(stpt, endpt))
' t: c Y3 ?6 C X9 ?) ~, T2 s End If; |5 \) V! n; l: u
End If
0 W, \5 q; s& r' |) V* G6 _ Next1 C" L# E' Q, v4 u! v
If SelectThickness() Then! b8 S8 H- a1 x; L4 E/ R
CreateSketch()
: I5 R& Y; M& ~, X CreateExtrusion()
$ D$ S' Y# |8 b. b, s End If
1 D( M$ U o. `/ F; k5 K End Sub
R* V. S9 D/ A/ V% GEnd Module
: J3 r3 N( d1 y7 q Z" D9 q
, X4 T* E6 z( L4 i% v+ f( [3 {" Y" A/ ]2 c: Z$ Q& w7 p, `" m
m, m. q9 t. G$ h3 Z2 b
|
|