讨论 --- 【已解决】怎么把控制点拉回到曲面上。不要重新成体

[复制链接]
筑梦NARUTO 发表于 2017-2-22 14:25:13
楼主
本帖最后由 筑梦NARUTO 于 2017-2-22 15:55 编辑

不要重新成体是啥意思,你能示范一下你要的结果么我是不是给你发过一段代码用于移动控制单的呀
  1. #coding=utf-8
  2. import Rhino.Geometry as rg
  3. import Rhino as r
  4. import rhinoscriptsyntax as rs
  5. import scriptcontext as sc

  6. result,grips = r.Input.RhinoGet.GetGrips("选择要移动的控制点")
  7. surface = rs.GetObject("选择用于干扰的曲面",rs.filter.surface)
  8. dis = {}
  9. if (result == r.Commands.Result.Success and surface):
  10.     geo_surface = sc.doc.Objects.Find(surface).Geometry
  11.     for i in grips:
  12.         oid = i.OwnerId
  13.         obj = sc.doc.Objects.Find(oid)
  14.         if (obj and dis.has_key(oid)==False):
  15.             dis.Add(oid,obj)
  16.         Bool = geo_surface.Faces[0].DuplicateSurface().ClosestPoint(i.Geometry.Location)
  17.         if Bool[0]:
  18.             cpt = geo_surface.Faces[0].DuplicateSurface().PointAt(Bool[1],Bool[2])
  19.             i.Move(cpt)
  20. for guid in dis:
  21.     if dis[guid]:
  22.         sc.doc.Objects.GripUpdate(dis[guid],True)
  23. sc.doc.Views.Redraw()
复制代码


关于大陆地区Rhino原厂培训中心
筑梦NARUTO 发表于 2017-2-22 21:49:31
2
魔龙教主 发表于 2017-2-22 19:21
拉回和投影不能针对控制点,这段代码是解决这个问题吗?弱弱地问一句,这些代码是不是可以用巨集来运行?我 ...

最好用Rhinopython编辑器运行。或者把代码做成按钮运行。
不知道rhinopython的可以先看下jorin大大的视频教程http://bbs.rhino3d.asia/thread-22775-1-1.html
筑梦NARUTO 发表于 2017-2-22 21:49:41
3
魔龙教主 发表于 2017-2-22 19:21
拉回和投影不能针对控制点,这段代码是解决这个问题吗?弱弱地问一句,这些代码是不是可以用巨集来运行?我 ...

最好用Rhinopython编辑器运行。或者把代码做成按钮运行。
不知道rhinopython的可以先看下jorin大大的视频教程http://bbs.rhino3d.asia/thread-22775-1-1.html
筑梦NARUTO 发表于 2017-2-25 16:18:57
4
DAKA_Ye 发表于 2017-2-25 12:18
可以把是投影效果的投影到曲线跟曲面的代码分别也发下吗?谢谢

曲线的
  1. #coding=utf-8
  2. import Rhino.Geometry as rg
  3. import Rhino as r
  4. import rhinoscriptsyntax as rs
  5. import scriptcontext as sc

  6. result,grips = r.Input.RhinoGet.GetGrips("选择要移动的控制点")
  7. curve = rs.GetObject("选择用于干扰的曲线",rs.filter.curve)
  8. dis = {}
  9. if (result == r.Commands.Result.Success and curve):
  10.     geo_curve = sc.doc.Objects.Find(curve).Geometry
  11.     t = 0
  12.     for i in grips:
  13.         oid = i.OwnerId
  14.         obj = sc.doc.Objects.Find(oid)
  15.         if (obj and dis.has_key(oid)==False):
  16.             dis.Add(oid,obj)
  17.         Bool = geo_curve.ClosestPoint(i.Geometry.Location,t)
  18.         if Bool[0]:
  19.             cpt = geo_curve.PointAt(Bool[1])
  20.             i.Move(cpt)
  21. for guid in dis:
  22.     if dis[guid]:
  23.         sc.doc.Objects.GripUpdate(dis[guid],True)

  24. sc.doc.Views.Redraw()
复制代码
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则