前言:
小编在这里即将开启一个新系列学习课程,主要内容为基于Rhino的3D打印学习,具体包括Rhino中的Python使用,Grasshopper的功能,讲解视频会陆续更新在B站,希望大家多多支持!
关于相关学习、技术的问题都可以通过B站私信、评论区进行交流!
公众号: AI知识物语 B站:出门吃三碗饭
1:从线中获取点的信息
#Finding Points from Lines
import rhinoscriptsyntax as rs
#data inputs
#crvID = rs.GetObject('select a curve', rs.filter.curve)
lineID = rs.GetObject('select a line', rs.filter.curve)
#objID = rs.GetObject('select a shape', rs.filter.curve)
#find points from input line/curve/shape
startPt = rs.CurveStartPoint(lineID)
midPt = rs.CurveMidPoint(lineID)
endPt = rs.CurveEndPoint(lineID)
#print out data
print 'startPt: ', startPt
print 'midPt: ', midPt
print 'endPt: ', endPt
#render points
rs.AddPoint(startPt)
rs.AddPoint(midPt)
endPtID = rs.AddPoint(endPt)
print 'endPtID: ', endPtID
'''
lineID = rs.GetObject('select a line', rs.filter.curve) 提示用户选择一条直线。
使用Rhino API函数从选择的直线对象中提取起点、中点和终点坐标:
startPt = rs.CurveStartPoint(lineID) 获取直线的起点坐标
midPt = rs.CurveMidPoint(lineID) 获取直线的中点坐标
endPt = rs.CurveEndPoint(lineID) 获取直线的终点坐标
将这些点的坐标打印到控制台:
print 'startPt: ', startPt
print 'midPt: ', midPt
print 'endPt: ', endPt
使用 rs.AddPoint() 函数在Rhino视图中渲染这些点:
rs.AddPoint(startPt)
rs.AddPoint(midPt)
endPtID = rs.AddPoint(endPt) 将终点的ID保存在变量 endPtID 中
打印终点ID:
print 'endPtID: ', endPtID
'''
红线区域为Rhino Space中线段的起点,中点,终点
2:旋转
#Transformation - Rotation
import rhinoscriptsyntax as rs
#data inputs
crvID = rs.GetObject('select a curve', rs.filter.curve)
ptID = rs.GetObject('select a point', rs.filter.point)
#find points from input line/curve/shape
startPt = rs.CurveStartPoint(crvID)
midPt = rs.CurveMidPoint(crvID)
endPt = rs.CurveEndPoint(crvID)
#run transformation
rs.RotateObject(crvID, ptID, 15, None, True)
'''
获取用户选择的曲线和点:
crvID = rs.GetObject('select a curve', rs.filter.curve) 提示用户选择一条曲线
ptID = rs.GetObject('select a point', rs.filter.point) 提示用户选择一个点
从选择的曲线中提取起点、中点和终点坐标:
startPt = rs.CurveStartPoint(crvID)
midPt = rs.CurveMidPoint(crvID)
endPt = rs.CurveEndPoint(crvID)
执行旋转变换:
rs.RotateObject(crvID, ptID, 15, None, True)
crvID: 要旋转的曲线对象
ptID: 旋转中心点对象
15: 旋转角度(以度为单位)
None: 旋转轴(这里使用默认的Z轴)
True: 表示是相对旋转,而不是绝对旋转
'''
3:伸缩(Scale)
#Transformation - Scale
import rhinoscriptsyntax as rs
#data inputs
crvID = rs.GetObject('select a curve', rs.filter.curve)
#ptID = rs.GetObject('select a point', rs.filter.point)
#find centroid of closed shape
centroid = rs.CurveAreaCentroid(crvID)[0]
print centroid
rs.AddPoint(centroid)
#run transformation
rs.ScaleObject(crvID, centroid, (1,2,.5), True)
'''
取用户选择的曲线对象:
crvID = rs.GetObject('select a curve', rs.filter.curve) 提示用户选择一条曲线
计算选择的闭合形状的质心(centroid):
centroid = rs.CurveAreaCentroid(crvID)[0] 使用 rs.CurveAreaCentroid() 函数计算曲线对象的质心坐标
print centroid 打印质心坐标
rs.AddPoint(centroid) 在Rhino视图中添加一个点来标记质心位置
执行缩放变换:
rs.ScaleObject(crvID, centroid, (1,2,.5), True)
crvID: 要缩放的曲线对象
centroid: 缩放中心点(即刚刚计算的质心)
(1,2,.5): 缩放比例,分别为x、y、z轴方向的缩放因子
True: 表示是相对缩放,而不是绝对缩放
'''
4:复制和移动
#Transformation - Copy/Move
import rhinoscriptsyntax as rs
#data inputs
crvID = rs.GetObject('select a curve', rs.filter.curve)
ptFrm = rs.GetObject('select FROM point', rs.filter.point)
ptTo = rs.GetObject('select TO point', rs.filter.point)
#find point coordinates and over-write point variables with values
ptFrm = rs.PointCoordinates(ptFrm)
ptTo = rs.PointCoordinates(ptTo)
#find centroid of closed shape
#centroid = rs.CurveAreaCentroid(crvID)[0]
#print centroid
#rs.AddPoint(centroid)
#run transformation
translation = ptTo - ptFrm
rs.MoveObject(crvID, translation)
#rs.CopyObject(crvID, translation)
'''
获取用户选择的曲线和两个点:
crvID = rs.GetObject('select a curve', rs.filter.curve) 提示用户选择一条曲线
ptFrm = rs.GetObject('select FROM point', rs.filter.point) 提示用户选择一个"从"点
ptTo = rs.GetObject('select TO point', rs.filter.point) 提示用户选择一个"到"点
获取两个点的坐标:
ptFrm = rs.PointCoordinates(ptFrm)
ptTo = rs.PointCoordinates(ptTo)
计算平移向量:
translation = ptTo - ptFrm 通过计算"到"点和"从"点的坐标差得到平移向量
执行平移变换:
rs.MoveObject(crvID, translation)
crvID: 要平移的曲线对象
translation: 平移向量
注释掉的代码部分:
#centroid = rs.CurveAreaCentroid(crvID)[0] 计算曲线对象的质心坐标
#print centroid 打印质心坐标
#rs.AddPoint(centroid) 在Rhino视图中添加一个点来标记质心位置
#rs.CopyObject(crvID, translation) 创建选择曲线的副本,并将其平移
'''
5:结合平移/复制/旋转操作
#Transformation - Putting it All Together
import rhinoscriptsyntax as rs
#data inputs
crvID = rs.GetObject('select a curve', rs.filter.curve)
ptTo = rs.GetObject('select TO point', rs.filter.point)
#find point coordinates and over-write point variables with values
ptTo = rs.PointCoordinates(ptTo)
#find centroid of closed shape
centroid = rs.CurveAreaCentroid(crvID)[0]
#run transformation
translation = ptTo - centroid
newCrv = rs.RotateObject(crvID, centroid, 25, None, True)
newCrv = rs.MoveObject(newCrv, translation)
rs.ScaleObject(newCrv, ptTo, (.8,.8,.8), False)
'''
获取用户选择的曲线和一个参考点:
crvID = rs.GetObject('select a curve', rs.filter.curve) 提示用户选择一条曲线
ptTo = rs.GetObject('select TO point', rs.filter.point) 提示用户选择一个"到"点
获取"到"点的坐标:
ptTo = rs.PointCoordinates(ptTo)
计算曲线对象的质心:
centroid = rs.CurveAreaCentroid(crvID)[0] 使用 rs.CurveAreaCentroid() 函数计算曲线对象的质心坐标
执行复合变换:
translation = ptTo - centroid 计算平移向量
newCrv = rs.RotateObject(crvID, centroid, 25, None, True) 将选择的曲线对象绕质心旋转25度
newCrv = rs.MoveObject(newCrv, translation) 将旋转后的曲线对象沿着计算出的平移向量进行平移
rs.ScaleObject(newCrv, ptTo, (.8,.8,.8), False) 将平移后的曲线对象相对于"到"点进行缩放,缩放比例为x、y、z轴方向均为0.8
这段代码的工作原理如下:
用户先选择一条曲线对象和一个参考点。
脚本计算选择曲线对象的质心坐标。
首先将选择的曲线对象绕质心旋转25度,得到一个新的曲线对象newCrv。
然后将旋转后的曲线对象newCrv沿着从质心到"到"点的向量进行平移。
最后将平移后的曲线对象newCrv相对于"到"点进行缩放,缩放比例为x、y、z轴方向均为0.8。
'''