import fpformat
Win = Windows()
CurrentPart = CurrentPart()
txtfile = Win.OpenFileDialog('Select 3D Pojnts in TXT,mm',
'TXT files(*.*)|*.txt*',
'.txt')
f = open(txtfile, 'r')
datareader2 = f.read()
f.close()
data_into_list = datareader2.replace('\\n', ',').split(",")
Points_Full = data_into_list
print 'Input Number of Guide Curves (typ - 10), then press ENTER'
NumberOfSections = int(Read())
length = (len(Points_Full) // (NumberOfSections * 3))
print(length)
# Break with While Loop
# Point Ranges
Points_1_range = range(0, (length*3))
Points_2_range = range(length*3, (3*2*length))
Points_3_range = range(3*2*length, (3*3*length))
Points_4_range = range(3*3*length, (3*4*length))
Points_5_range = range(3*4*length, (3*5*length))
Points_6_range = range(3*5*length, (3*6*length))
Points_7_range = range(3*6*length, (3*7*length))
Points_8_range = range(3*7*length, (3*8*length))
Points_9_range = range(3*8*length, (3*9*length))
Points_10_range = range(3*9*length, (3*10*length))
# Convert to floats directly
Points_1 = [float(Points_Full[w]) for w in Points_1_range]
Points_2 = [float(Points_Full[ww]) for ww in Points_2_range]
Points_3 = [float(Points_Full[www]) for www in Points_3_range]
Points_4 = [float(Points_Full[xxxx]) for xxxx in Points_4_range]
Points_5 = [float(Points_Full[xxxxx]) for xxxxx in Points_5_range]
Points_6 = [float(Points_Full[xxxxxx]) for xxxxxx in Points_6_range]
Points_7 = [float(Points_Full[xxxxxxx]) for xxxxxxx in Points_7_range]
Points_8 = [float(Points_Full[xxxxxxxx]) for xxxxxxxx in Points_8_range]
Points_9 = [float(Points_Full[xxxxxxxxx]) for xxxxxxxxx in Points_9_range]
Points_10 = [float(Points_Full[xxxxxxxxxx]) for xxxxxxxxxx in Points_10_range]
cycle = range(length)
###############################################################################
# Helper function: "fix to 4 decimals, then back to float"
# If you don't need the decimal trimming, you can skip fpformat.fix(...) entirely.
###############################################################################
def to_float4(value):
# Convert 'value' to a string with 4 decimals, then back to float
return float(fpformat.fix(value, 4))
###############################################################################
# 1st Spline
###############################################################################
Path1 = CurrentPart.Add3DSketch('Spline1')
Points1 = []
for i in cycle:
ix = i*3
X11 = to_float4(Points_1[ix])
Y11 = to_float4(Points_1[ix+1])
Z11 = to_float4(Points_1[ix+2])
Points1.extend([X11, Y11, Z11])
Path1.AddBspline(Points1)
# sample points for planes or references
SP1 = [Points1[0], Points1[1], Points1[2]]
SP11 = [Points1[150], Points1[151], Points1[152]]
SP21 = [Points1[300], Points1[301], Points1[302]]
CurrentPart.AddPoint('SP1', SP1[0], SP1[1], SP1[2])
CurrentPart.AddPoint('SP11', SP11[0], SP11[1], SP11[2])
CurrentPart.AddPoint('SP21', SP21[0], SP21[1], SP21[2])
###############################################################################
# 2nd Spline
###############################################################################
Path2 = CurrentPart.Add3DSketch('Spline2')
Points2 = []
for i in cycle:
ix = i*3
X12 = to_float4(Points_2[ix])
Y12 = to_float4(Points_2[ix+1])
Z12 = to_float4(Points_2[ix+2])
Points2.extend([X12, Y12, Z12])
Path2.AddBspline(Points2)
SP2 = [Points2[0], Points2[1], Points2[2]]
SP12 = [Points2[150], Points2[151], Points2[152]]
SP22 = [Points2[300], Points2[301], Points2[302]]
CurrentPart.AddPoint('SP2', SP2[0], SP2[1], SP2[2])
CurrentPart.AddPoint('SP12', SP12[0], SP12[1], SP12[2])
CurrentPart.AddPoint('SP22', SP22[0], SP22[1], SP22[2])
###############################################################################
# 3rd Spline
###############################################################################
Path3 = CurrentPart.Add3DSketch('Spline3')
Points3 = []
for i in cycle:
ix = i*3
X13 = to_float4(Points_3[ix])
Y13 = to_float4(Points_3[ix+1])
Z13 = to_float4(Points_3[ix+2])
Points3.extend([X13, Y13, Z13])
Path3.AddBspline(Points3)
SP3 = [Points3[0], Points3[1], Points3[2]]
SP13 = [Points3[150], Points3[151], Points3[152]]
SP23 = [Points3[300], Points3[301], Points3[302]]
CurrentPart.AddPoint('SP3', SP3[0], SP3[1], SP3[2])
CurrentPart.AddPoint('SP13', SP13[0], SP13[1], SP13[2])
CurrentPart.AddPoint('SP23', SP23[0], SP23[1], SP23[2])
###############################################################################
# 4th Spline
###############################################################################
Path4 = CurrentPart.Add3DSketch('Spline4')
Points4 = []
for i in cycle:
ix = i*3
X14 = to_float4(Points_4[ix])
Y14 = to_float4(Points_4[ix+1])
Z14 = to_float4(Points_4[ix+2])
Points4.extend([X14, Y14, Z14])
Path4.AddBspline(Points4)
SP4 = [Points4[0], Points4[1], Points4[2]]
SP14 = [Points4[150], Points4[151], Points4[152]]
SP24 = [Points4[300], Points4[301], Points4[302]]
CurrentPart.AddPoint('SP4', SP4[0], SP4[1], SP4[2])
CurrentPart.AddPoint('SP14', SP14[0], SP14[1], SP14[2])
CurrentPart.AddPoint('SP24', SP24[0], SP24[1], SP24[2])
###############################################################################
# 5th Spline
###############################################################################
Path5 = CurrentPart.Add3DSketch('Spline5')
Points5 = []
for i in cycle:
ix = i*3
X15 = to_float4(Points_5[ix])
Y15 = to_float4(Points_5[ix+1])
Z15 = to_float4(Points_5[ix+2])
Points5.extend([X15, Y15, Z15])
Path5.AddBspline(Points5)
SP5 = [Points5[0], Points5[1], Points5[2]]
SP15 = [Points5[150], Points5[151], Points5[152]]
SP25 = [Points5[300], Points5[301], Points5[302]]
CurrentPart.AddPoint('SP5', SP5[0], SP5[1], SP5[2])
CurrentPart.AddPoint('SP15', SP15[0], SP15[1], SP15[2])
CurrentPart.AddPoint('SP25', SP25[0], SP25[1], SP25[2])
###############################################################################
# 6th Spline
###############################################################################
Path6 = CurrentPart.Add3DSketch('Spline6')
Points6 = []
for i in cycle:
ix = i*3
X16 = to_float4(Points_6[ix])
Y16 = to_float4(Points_6[ix+1])
Z16 = to_float4(Points_6[ix+2])
Points6.extend([X16, Y16, Z16])
Path6.AddBspline(Points6)
SP6 = [Points6[0], Points6[1], Points6[2]]
SP16 = [Points6[150], Points6[151], Points6[152]]
SP26 = [Points6[300], Points6[301], Points6[302]]
CurrentPart.AddPoint('SP6', SP6[0], SP6[1], SP6[2])
CurrentPart.AddPoint('SP16', SP16[0], SP16[1], SP16[2])
CurrentPart.AddPoint('SP26', SP26[0], SP26[1], SP26[2])
###############################################################################
# 7th Spline
###############################################################################
Path7 = CurrentPart.Add3DSketch('Spline7')
Points7 = []
for i in cycle:
ix = i*3
X17 = to_float4(Points_7[ix])
Y17 = to_float4(Points_7[ix+1])
Z17 = to_float4(Points_7[ix+2])
Points7.extend([X17, Y17, Z17])
Path7.AddBspline(Points7)
SP7 = [Points7[0], Points7[1], Points7[2]]
SP17 = [Points7[150], Points7[151], Points7[152]]
SP27 = [Points7[300], Points7[301], Points7[302]]
CurrentPart.AddPoint('SP7', SP7[0], SP7[1], SP7[2])
CurrentPart.AddPoint('SP17', SP17[0], SP17[1], SP17[2])
CurrentPart.AddPoint('SP27', SP27[0], SP27[1], SP27[2])
###############################################################################
# 8th Spline
###############################################################################
Path8 = CurrentPart.Add3DSketch('Spline8')
Points8 = []
for i in cycle:
ix = i*3
X18 = to_float4(Points_8[ix])
Y18 = to_float4(Points_8[ix+1])
Z18 = to_float4(Points_8[ix+2])
Points8.extend([X18, Y18, Z18])
Path8.AddBspline(Points8)
SP8 = [Points8[0], Points8[1], Points8[2]]
SP18 = [Points8[150], Points8[151], Points8[152]]
SP28 = [Points8[300], Points8[301], Points8[302]]
CurrentPart.AddPoint('SP8', SP8[0], SP8[1], SP8[2])
CurrentPart.AddPoint('SP18', SP18[0], SP18[1], SP18[2])
CurrentPart.AddPoint('SP28', SP28[0], SP28[1], SP28[2])
###############################################################################
# 9th Spline
###############################################################################
Path9 = CurrentPart.Add3DSketch('Spline9')
Points9 = []
for i in cycle:
ix = i*3
X19 = to_float4(Points_9[ix])
Y19 = to_float4(Points_9[ix+1])
Z19 = to_float4(Points_9[ix+2])
Points9.extend([X19, Y19, Z19])
Path9.AddBspline(Points9)
SP9 = [Points9[0], Points9[1], Points9[2]]
SP19 = [Points9[150], Points9[151], Points9[152]]
SP29 = [Points9[300], Points9[301], Points9[302]]
CurrentPart.AddPoint('SP9', SP9[0], SP9[1], SP9[2])
CurrentPart.AddPoint('SP19', SP19[0], SP19[1], SP19[2])
CurrentPart.AddPoint('SP29', SP29[0], SP29[1], SP29[2])
###############################################################################
# 10th Spline
###############################################################################
Path10 = CurrentPart.Add3DSketch('Spline10')
Points10 = []
for i in cycle:
ix = i*3
X110 = to_float4(Points_10[ix])
Y110 = to_float4(Points_10[ix+1])
Z110 = to_float4(Points_10[ix+2])
Points10.extend([X110, Y110, Z110])
Path10.AddBspline(Points10)
SP10 = [Points10[0], Points10[1], Points10[2]]
SP20 = [Points10[150], Points10[151], Points10[152]]
SP30 = [Points10[300], Points10[301], Points10[302]]
CurrentPart.AddPoint('SP10', SP10[0], SP10[1], SP10[2])
CurrentPart.AddPoint('SP20', SP20[0], SP20[1], SP20[2])
CurrentPart.AddPoint('SP30', SP30[0], SP30[1], SP30[2])
###############################################################################
# Make Planes from Points
###############################################################################
Plane1 = CurrentPart.AddPlane('FirstPlane', SP1, SP2, SP3)
Plane2 = CurrentPart.AddPlane('MiddlePlane', SP11, SP12, SP13)
Plane3 = CurrentPart.AddPlane('LastPlane', SP21, SP22, SP23)
S1 = CurrentPart.AddSketch('FirstSketch', Plane1)
S2 = CurrentPart.AddSketch('MiddleSketch', Plane2)
S3 = CurrentPart.AddSketch('LastSketch', Plane3)
# Combine your first three sets into one set for each plane
First_Sketch = SP1 + SP2 + SP3 + SP4 + SP5 + SP6 + SP7 + SP8 + SP9 + SP10
Mid_Sketch = SP11 + SP12 + SP13 + SP14 + SP15 + SP16 + SP17 + SP18 + SP19 + SP20
End_Sketch = SP21 + SP22 + SP23 + SP24 + SP25 + SP26 + SP27 + SP28 + SP29 + SP30
print(First_Sketch)
###############################################################################
# Convert to local 2D coordinates and draw lines for each plane’s sketch
###############################################################################
SketchPoints_1 = []
SketchPoints_2 = []
SketchPoints_3 = []
# Each set (SP*) above has 10 triplets => 30 elements
def chunk_triplets(dat):
return [dat[i:i+3] for i in range(0, len(dat), 3)]
# Convert First_Sketch
trip_1 = chunk_triplets(First_Sketch) # 10 sets of [X,Y,Z]
for (xx, yy, zz) in trip_1:
uv = S1.GlobaltoPoint(xx, yy, zz)
SketchPoints_1.append(uv)
# Convert Mid_Sketch
trip_2 = chunk_triplets(Mid_Sketch)
for (xx, yy, zz) in trip_2:
uv = S2.GlobaltoPoint(xx, yy, zz)
SketchPoints_2.append(uv)
# Convert End_Sketch
trip_3 = chunk_triplets(End_Sketch)
for (xx, yy, zz) in trip_3:
uv = S3.GlobaltoPoint(xx, yy, zz)
SketchPoints_3.append(uv)
# Flatten so that AddLines(...) sees them as [x1,y1, x2,y2, x3,y3, ...]
def flatten_and_close(pts2d):
flattened = []
for xy in pts2d:
flattened.append(xy[0])
flattened.append(xy[1])
# Close the profile: add the first point again
flattened.append(flattened[0])
flattened.append(flattened[1])
return flattened
SketchPoints1 = flatten_and_close(SketchPoints_1)
SketchPoints2 = flatten_and_close(SketchPoints_2)
SketchPoints3 = flatten_and_close(SketchPoints_3)
S1.AddLines(SketchPoints1, False)
S2.AddLines(SketchPoints2, False)
S3.AddLines(SketchPoints3, False)
<aside> 📢
Original source code with AI cleanup tasks applied
SplineScript_AI_Clean_01.py.txt
<aside> 📎
</aside>