背景
今天是农历五月初五、端午节,粽子是今天的必吃项目,粽叶是如何去包裹粽子内的食材?是不是要先展开粽叶呢…
曲面展开是一个老生常谈的话题,在多次的技术支持与教学中都会碰到这个话题。这里总结一下相关内容,以方便有遇到相同问题的用户参考。
Rhino 中的展开工具
Rhino 中提供了几个不同的展开指令,包括 UnrollSrf, Smash 与 Squish , 对于这三个指令的差异总结如下
-
UnrollSrf 可以精确的展开单曲率曲面(曲面的一个方向是直线)与可展开曲面(某些行业称呼为直纹面),且支持多重曲面,能反馈展开前后物件的面积差异。
-
Smash 可以展开单曲率与双曲率曲面,不支持多重曲面,曲面被展开前后的周长接近但面积会因为形状不同存在一些差异。 Smash 指令基于 UnrollSrf 指令扩展而来。
-
Squish 可以展开单曲率曲面、双曲率曲面与网格,不支持多重曲面,提供一些参数来控制展开前后的变形。
请注意:遇到曲面展开时 这三个命令的优先顺序, 我们推荐是 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)
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 网站可以找到很多,例如:
- Squisher, https://www.food4rhino.com/en/app/squisher
- Fabtools,https://www.food4rhino.com/en/app/fabtools
- LunchBox, https://www.food4rhino.com/en/app/lunchbox
ShapeMap
对于一些复杂的形状,前面的这些工具可能也无法完全胜任,或你需要的不仅仅是展开曲面,而是需要在复杂的造型上布置纹理,强烈推荐你试试 ShapeMap,
- 下载地址 https://www.food4rhino.com/en/app/shapemap
- 使用方法与详细说明请浏览这里
后记
- 目前* Grasshopper 1 中没有提供原生的展开工具运算器 是指本贴发布日期之前,我们的开发工程师会在后期的版本中陆续增加,烦请耐心等候
- RhinoPython 如何入门?推荐 跟我读 《RhinoPython 101》系列视频教学
- 参考资料 Advanced Flattening 高级展开工具Squish
- 如果大家对Rhino的这些展开工具存在一些疑问或者问题,烦请大家回帖讨论
- 如果前面的描述中存在任何错误与纰漏,也麻烦大家回帖指正,顺祝各位粽子节快乐!