Secondly Im reading that geometry and animate it following the same step that Joon did at the recitation, but in the python enviroment.
Now that I can do that, I will take two curves and rotate one of them. In the animation I set some control points that varys with the movement. Those points sets the center of the orthogonal couple. The record of the animation before breaking rhino was a curve of 4000 pieces. Need to rewrite some way to make the code lighter in elements
The code Im developing is the following:
"""Provides a scripting component.
Inputs:
x: The x script variable
y: The y script variable
Output:
a: The a output variable"""
__author__ = "Alfonso"
__version__ = "2020.10.03"
import rhinoscriptsyntax as rs
plane=rs.WorldXYPlane()
updistances = []
downdistances = []
for lines in uplines:
uppoints = []
uppoints.append(rs.CurveStartPoint(lines))
uppoints.append(rs.CurveEndPoint(lines))
updistances.append(rs.Distance(uppoints[0], uppoints[1]))
for lines in downlines:
downpoints = []
downpoints.append(rs.CurveStartPoint(lines))
downpoints.append(rs.CurveEndPoint(lines))
downdistances.append(rs.Distance(downpoints[0], downpoints[1]))
testing_pair = [downlines[0], uplines[0]
]
testing_starting_point = rs.CurveStartPoint(downlines[0])
#primero down eh
def animate(starting_point, pair, offset):
p1 = starting_point
p2 = rs.CopyObject(p1)
p2 = rs.MoveObject(p2, (0,-offset,0))
c1 = rs.AddCircle(plane, (rs.Distance(rs.CurveStartPoint(pair[0]),rs.CurveEndPoint(pair[0])))/2)
c2 = rs.AddCircle(plane, (rs.Distance(rs.CurveStartPoint(pair[1]),rs.CurveEndPoint(pair[1])))/2)
c1 = rs.MoveObject(c1,p1)
c2 = rs.MoveObject(c2,p2)
intersection =rs.CurveCurveIntersection(c1,c2)
if intersection[0][1][0] > intersection[1][1][0]:
int = intersection[0][1]
else:
int = intersection[1][1]
fl1 = rs.AddLine(p1, int)
fl2 = rs.AddLine(p2, int)
fL1 = rs.ScaleObject(fl1, p1, (2,2,2))
fL2 = rs.ScaleObject(fl2, p2, (2,2,2))
return fL2, fL1
#test =animate(testing_starting_point, testing_pair, offset)[0]
pairs = []
for element in range(len(uplines)):
pair = []
pair.append(downlines[element])
pair.append(uplines[element])
pairs.append(pair)
start = rs.CurveStartPoint(downlines[0])
geometry = []
midpoints = [rs.AddPoint(start[0], start[1]-offset/2,start[2])]
for pair in pairs:
geom = animate(start, pair, offset)
start = rs.CurveEndPoint(geom[0])
geometry.append(geom)
midpoints.append(rs.AddPoint([start[0], start[1]-offset/2,start[2]]))
flat_list = []
for sublist in geometry:
for item in sublist:
flat_list.append(item)
test = flat_list
midp =midpoints
#test = animate(start, pairs[0], offset)
"""Provides a scripting component.
Inputs:
x: The x script variable
y: The y script variable
Output:
a: The a output variable"""
__author__ = "Alfonso"
__version__ = "2020.10.03"
import rhinoscriptsyntax as rs
plane = rs.WorldXYPlane()
#me da que esta primera face del codigo va a ser tan solo formar y
#congelar la geometria? Luego la congelamos y pasamos a moverla . Esto cambiara si cambia la....curva?
# un script vs dos?
Curve_copy1 = rs.CopyObject(Curve)
Curve_copy2 = rs.CopyObject(Curve)
crv_upper = rs.MoveObject(Curve_copy1, [0,offset_value,0])
crv_lower = rs.MoveObject(Curve_copy2, [0,-offset_value,0])
b = rs.AddLine((0,0,0),(0,100,0))
a = rs.MoveObject(b,[0,10,0])
upper_points = []
lower_points = []
upper_points = rs.DivideCurve(crv_upper, segments, create_points = True)
lower_points = rs.DivideCurve(crv_lower, segments, create_points = True)
#Draw the scissors accordingly with the input geom.
up_segments = []
down_segments = []
for pt in range(segments):
local_up = rs.AddLine(lower_points[pt], upper_points[pt+1])
up_segments.append(local_up)
local_down = rs.AddLine(upper_points[pt], lower_points[pt+1])
down_segments.append(local_down)
uplines=up_segments
downlines=down_segments