【Tips】Rhino 中如何展开曲面

背景

今天是农历五月初五、端午节,粽子是今天的必吃项目,粽叶是如何去包裹粽子内的食材?是不是要先展开粽叶呢…

曲面展开是一个老生常谈的话题,在多次的技术支持与教学中都会碰到这个话题。这里总结一下相关内容,以方便有遇到相同问题的用户参考。

Rhino 中的展开工具

Rhino 中提供了几个不同的展开指令,包括 UnrollSrf, SmashSquish , 对于这三个指令的差异总结如下

  • UnrollSrf 可以精确的展开单曲率曲面(曲面的一个方向是直线)与可展开曲面(某些行业称呼为直纹面),且支持多重曲面,能反馈展开前后物件的面积差异。

  • Smash 可以展开单曲率与双曲率曲面,不支持多重曲面,曲面被展开前后的周长接近但面积会因为形状不同存在一些差异。 Smash 指令基于 UnrollSrf 指令扩展而来。
    Smash

  • Squish 可以展开单曲率曲面、双曲率曲面与网格,不支持多重曲面,提供一些参数来控制展开前后的变形。
    Squish

:warning: 请注意:遇到曲面展开时 这三个命令的优先顺序, 我们推荐是 UnRollSrf > Squish > Smash, 关于这三个指令的不同使用方法,请查看帮助文件中的详细说明,

Grasshopper 中的展开工具

目前* Grasshopper 1 中没有提供原生的展开工具运算器,意味着前面的三个指令都在当前 Grasshopper 1 中无法找到对应的原生运算器,这里提供两个不同的方法来让大家在 Grasshopper 中用上这三个不同的指令展开曲面,

利用 GhPython 等工具调用相关函数

这三个指令 ( 严格的说只有两个,因为 Smash 是 UnrollSrf Plus 版)都已经写入 RhinoCommon 中,其中 UnrollSrf 很早就可以在 Rhino.Python RhinoScriptSyntax 中载入,这里简单的示范 GhPython 直接调用 Rhino.Python 中的 UnrollSurface 函数,

import rhinoscriptsyntax as rs
Faces = rs.UnrollSurface(Srf, Explode)

UnrollSrfGhPython

Squish 函数是从 Rhino7.5 开始加入至 RhinoCommon, 现在也可以直接利用 GhPython 来直接调用它展开曲面,这里简单的示范如何来以默认展开参数来展开一个双曲曲面;

import Rhino.Geometry as rg

squisher = rg.Squisher()
sp = rg.SquishParameters.Default
surface = Srf

Faces = rg.Squisher.SquishSurface(squisher,sp,surface)

第三方插件

有很多第三方插件也提供类似的展开工具,大部分都调用 RhinoCommon 中现有的函数,在 Foold4Rhino 网站可以找到很多,例如:

ShapeMap

对于一些复杂的形状,前面的这些工具可能也无法完全胜任,或你需要的不仅仅是展开曲面,而是需要在复杂的造型上布置纹理,强烈推荐你试试 ShapeMap,


sm03

后记

  • 目前* Grasshopper 1 中没有提供原生的展开工具运算器 是指本贴发布日期之前,我们的开发工程师会在后期的版本中陆续增加,烦请耐心等候 :nerd_face:
  • RhinoPython 如何入门?推荐 跟我读 《RhinoPython 101》系列视频教学 :point_left:
  • 参考资料 Advanced Flattening 高级展开工具Squish :point_left:
  • 如果大家对Rhino的这些展开工具存在一些疑问或者问题,烦请大家回帖讨论 :clap:
  • 如果前面的描述中存在任何错误与纰漏,也麻烦大家回帖指正,顺祝各位粽子节快乐!:tada:


老师 利用GhPython照做做咋就运行错误呢?哪里出错了?麻烦指导

错误提示你有注意?提醒你 Srf 需要 Surface 类型、但目前得到的是 Str, 你需要手动指定 Srf 端的数据类型为 Surface

我利用翻译软件看了 没理解Surface 类型的意思 谢谢老师回复


好了 谢谢老师

1 个赞