Rhino(犀牛)中国技术支持与推广中心

标题: 【已解决】求助rhinopython提示SyntaxError: unexpected token [打印本页]

作者: xysong56    时间: 2016-7-3 19:14
标题: 【已解决】求助rhinopython提示SyntaxError: unexpected token
本帖最后由 筑梦NARUTO 于 2016-7-5 08:57 编辑
  1. import rhinoscriptsyntax as rs

  2. def smoothingvector(point,prev_point,next_point,s):
  3.     pm = (prev_point + next_point)/2
  4.     va = rs.VectorCreate(pm,point)
  5.     vm = rs.VectorScale(va,s)
  6.     return vm
  7.    
  8. def smoothingcurve(curve_id,s):
  9.     curve_point = rs.CurvePoints(curve_id)
  10.     new_curve_point=[]
  11.    
  12.     for i in range(1,len(curve_point)-1):
  13.         vm = smoothingvector(curve_point[i],curve_point[i-1],curve_point[i+1],s)
  14.         new_curve_point.append(rs.PointAdd(curve_point[i],vm)

  15.     knot = rs.CurveKnots(curve_id)
  16.     degree = rs.CurveDegree(curve_id)
  17.     weights = rs.CurveWeights(curve_id)
  18.     new_curve_id = rs.AddNurbsCurve(new_curve_points,knot,degree,weights)
  19.     if new_curve_id: rs.DeleteObject(curve_id)
  20.     return new_curve_id

  21. def iterativeshortencurve():
  22.     curve_id = rs.GetObject("Open curve to smooth",4,True)
  23.     if curve_id is None or rs.IsCurveClosed(curve_id): return
  24.    
  25.     min = rs.Distance(rs.CurveStartPoint(curve_id),rs.CurveEndPoint(curve_id))
  26.     max = rs.CurveLength(curve_id)
  27.     goal = rs.GetReal("goal length",0.5*(min+max),min,max)
  28.     if goal is None: return
  29.    
  30.     while rs.CurveLength(curve_id)>goal:
  31.         rs.EnableRedraw(False)
  32.         curve_id = smoothingcurve(curve_id, 0.1)
  33.         rs.EnableRedraw(True)
  34.         if curve_id is None: break
  35.         
  36. iterativeshortencurve()
复制代码

QQ图片20160703190628.jpg (222.13 KB, 下载次数: 44)

QQ图片20160703190628.jpg

作者: xysong56    时间: 2016-7-3 19:16
照着rhinopython101码的,不知道为什么提示语法错误
作者: xysong56    时间: 2016-7-3 19:18
@筑梦NARUTO
作者: xysong56    时间: 2016-7-3 19:39
rhinopython101 的42页内容

QQ图片20160703193358.png (156.41 KB, 下载次数: 57)

QQ图片20160703193358.png

作者: 筑梦NARUTO    时间: 2016-7-3 22:35
new_curve_point.append(rs.PointAdd(curve_point[i],vm))这句少写了一个括号
作者: 筑梦NARUTO    时间: 2016-7-3 22:53
错误有点多,我给你修改了,这下就可以运行达到书上的效果了。
  1. #coding=utf-8
  2. import rhinoscriptsyntax as rs

  3. def smoothingvector(point,prev_point,next_point,s):
  4.     pm = (prev_point + next_point)/2
  5.     va = rs.VectorCreate(pm,point)
  6.     vm = rs.VectorScale(va,s)
  7.     return vm
  8.    
  9. def smoothingcurve(curve_id,s):
  10.     curve_point = rs.CurvePoints(curve_id)
  11.     new_curve_point=[]
  12.     #还有一个逻辑错误就是你这里没有把起始点和终点加入列表
  13.     new_curve_point.append(curve_point[0])
  14.     for i in range(1,len(curve_point)-1):
  15.         vm = smoothingvector(curve_point[i],curve_point[i-1],curve_point[i+1],s)
  16.         #curve_point写错了
  17.         new_curve_point.append(rs.PointAdd(curve_point[i],vm))
  18.         #少了一个后括号
  19.     new_curve_point.append(curve_point[-1])
  20.     knot = rs.CurveKnots(curve_id)
  21.     degree = rs.CurveDegree(curve_id)
  22.     weights = rs.CurveWeights(curve_id)
  23.     new_curve_id = rs.AddNurbsCurve(new_curve_point,knot,degree,weights)
  24.     #new_curve_point写成new_curve_points了
  25.     #if new_curve_id: rs.DeleteObject(curve_id)
  26.     #把这句删了才能体现过程,达到和书的效果一样
  27.     return new_curve_id

  28. def iterativeshortencurve():
  29.     curve_id = rs.GetObject("Open curve to smooth",4,True)
  30.     if curve_id is None or rs.IsCurveClosed(curve_id): return
  31.    
  32.     min = rs.Distance(rs.CurveStartPoint(curve_id),rs.CurveEndPoint(curve_id))
  33.     max = rs.CurveLength(curve_id)
  34.     goal = rs.GetReal("goal length",0.5*(min+max),min,max)
  35.     if goal is None: return
  36.    
  37.     while rs.CurveLength(curve_id)>goal:
  38.         rs.EnableRedraw(False)
  39.         curve_id = smoothingcurve(curve_id, 0.1)
  40.         rs.EnableRedraw(True)
  41.         if curve_id is None: break
  42.         
  43. iterativeshortencurve()
复制代码


QQ截图20160703225850.png (52.22 KB, 下载次数: 46)

QQ截图20160703225850.png

作者: xysong56    时间: 2016-7-4 19:09
筑梦NARUTO 发表于 2016-7-3 22:35
new_curve_point.append(rs.PointAdd(curve_point,vm))这句少写了一个括号

月神好厉害




欢迎光临 Rhino(犀牛)中国技术支持与推广中心 (http://bbs.rhino3d.asia/) Powered by Discuz! X3.2