请选择 进入手机版 | 继续访问电脑版

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

  [复制链接]
4777272 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的解决方案:
先上图:

椭圆旋转2.jpg
代码在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中,进行参数化的控制,如图:
椭圆旋转1.jpg

评分

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

查看全部评分

关于大陆地区Rhino原厂培训中心
深蓝Ansen 发表于 2013-8-30 10:54:07
2
每一个强大的电池背后都有一堆伟大的代码,支持!
yesmely 发表于 2013-8-30 12:58:15
3
本帖最后由 yesmely 于 2013-8-30 14:47 编辑

用这省事多了
Ultrawave 发表于 2013-8-30 15:41:26
4
学习一下
筑梦NARUTO 发表于 2013-8-30 20:59:09
5
学习学习
筑梦NARUTO 发表于 2013-8-30 21:04:33
6
学习学习了,还是希望跟我一起读RHIONPYTHON继续更新
panaone 发表于 2013-8-30 21:06:01
7
来学习了
 楼主| Jorin 发表于 2013-8-30 23:56:34
8
筑梦NARUTO 发表于 2013-8-30 21:04
学习学习了,还是希望跟我一起读RHIONPYTHON继续更新

感谢关注,近期将有连续的更新,希望继续关注。
sunrise10282 发表于 2013-8-31 12:03:30
9
谢谢分享
sunrise10282 发表于 2013-8-31 12:23:19
10
学习了 谢谢Jo大分享,还想请教如何修改,才能使代码能在ghpython中正常运行?copy代码进如ghpython,修改了slider的typle貌似也还不行。
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则