使用 Python/Rhinoscript 在 Rhinoceros 中进行 3D 建模 平移/复制/伸缩/旋转(二)

前言:

小编在这里即将开启一个新系列学习课程,主要内容为基于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。
 '''

在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值