Python --- 用RhinoPython做椭圆表面上升斜线示例

  [复制链接]
跳转到指定楼层
5472372 Jorin 发表于 2013-8-30 10:05:41 楼主
本帖最后由 Jorin 于 2013-8-30 11:25 编辑

Ansen在Grasshopper板块帮助解决了椭圆表面上升斜线的问题,原帖如下:
http://bbs.rhino3d.asia/thread-23173-1-1.html
这里按照Ansen的思路,来一个RhinoPython的解决方案:
先上图:


代码在GH参数化控制:


具体的做法大家参考代码:
  1. import rhinoscriptsyntax as rs
  2. import math
  3. def creatEllipses(arrEllipses,trans,count):
  4.     ellipse=rs.AddEllipse(rs.WorldXYPlane(),10,6)
  5.     arrEllipses.append(ellipse)
  6.     translation=trans
  7.     for i in range(count-1):
  8.         arrEllipses.append(rs.CopyObject(ellipse,(0,0,translation)))
  9.         translation=translation+trans
  10.     return arrEllipses
  11. def addEndpointlist(arrEllipses,rotate,count):
  12.     p=rotate/count
  13.     s=0.0
  14.     def remain(x):
  15.         y=math.pi*2
  16.         if x<=y:
  17.             return x
  18.         else:
  19.             x=remain(x-y)
  20.             return x
  21.     for ellipse in arrEllipses:
  22.         rs.CurveSeam(ellipse,remain(s))
  23.         s=s+p
  24.     return arrEllipses
  25. def divideEllipses(arrEllipses,seg):
  26.     arrPoints=[]
  27.     for ellipse in arrEllipses:
  28.         points=rs.DivideCurve(ellipse,seg)
  29.         arrPoints.append(points)
  30.     return arrPoints
  31. def  ToggleListDimension(inlist):
  32.     return ([ [row[col] for row in inlist] for col in range(len(inlist[0]))])
  33. def addCurvemine (arrPoints):
  34.     arrCurves=[]
  35.     for points in arrPoints:
  36.         curve=rs.AddCurve(points)
  37.         arrCurves.append(curve)
  38.     return arrCurves
  39. def addPipemine(arrCurves,radius):
  40.     arrPipes=[]
  41.     for curve in arrCurves:
  42.         pipe=rs.AddPipe(curve,0,radius)
  43.         arrPipes.append(pipe[0])
  44.     return arrPipes
  45. def main():
  46.     arrEllipses=[]
  47.     trans=4
  48.     count=8
  49.     seg=10
  50.     rotate=4
  51.     arrPoints=[]
  52.     radius=0.3
  53.     arrPipes=[]
  54.     arrEllipses=creatEllipses(arrEllipses,trans,count)
  55.     arrEllipses=addEndpointlist(arrEllipses,rotate,count)
  56.     arrPoints=divideEllipses(arrEllipses,seg)
  57.     arrPoints=ToggleListDimension(arrPoints)
  58.     arrCurves=addCurvemine(arrPoints)
  59.     arrPipes=addPipemine(arrCurves,radius)
  60. if __name__=="__main__":
  61.     main()
复制代码
[/hide]
以上代码稍做修改,就可以放如GHpython中,进行参数化的控制,如图:

评分

参与人数 2技术 +4 坛币 +3 收起 理由
深蓝Ansen + 3 + 3 很给力!
Jessesn + 1 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享
关于大陆地区Rhino原厂培训中心
UAS-tribe 发表于 2017-1-23 10:25:10
72
查看如何in噢代码
GREAT123456 发表于 2016-12-2 11:33:33
71
学习下,还不知道咋个用python分组哦
misilx 发表于 2016-11-29 18:09:07
70
厉害,这个确实方便很多
kejh 发表于 2016-6-21 12:51:00
69
不错,学习一下哈!
boboco 发表于 2016-6-19 04:25:02
68
感謝大大的分享
開始玩python 很有幫助!!!
boboco 发表于 2016-6-19 04:22:30
67
感謝大大的分享 開始玩python 很有幫助!!!
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则