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

标题: 关于import 的模块 rhino.geometry , system.guid etc [打印本页]

作者: miaomiao    时间: 2014-10-7 22:58
标题: 关于import 的模块 rhino.geometry , system.guid etc
Jorin , 看完您的视频,感觉明白很多。但是今天下载筑梦NARUTO的梦露大夏。彻底又蒙圈了。很多方法完全查不到。
请解释下这些模块的使用。尤其是rhinocommand SDk.



自由论坛-Rhino(犀牛)中国技术支持与推广中心 — Shaper3d-第7页 - Powered by Discuz!.png (21.18 KB, 下载次数: 28)

完全晕了

完全晕了

作者: Jorin    时间: 2014-10-8 08:52
本帖最后由 Jorin 于 2014-10-8 09:23 编辑

视频中讲解的是 Rhino Python Script 的部分。

而你发的截图是用python直接调用 rhinocommon 。

那么他们之间有什么关系呢?

RhinoCommon是Rhino提供给开发者用于开发插件的函数库,它基于Rhino和微软的.net framework,所以你可以通过VB.Net、C#、Python等多种语言去调用RhinoCommon提供给我们可以操作Rhino的函数。它主要是面向开发插件的程序员而不是设计师的。当然它可以做一些相对底层的事情,假如你有这种需求的话,恐怕只能用 RhinoCommon了。

而RhinoPythonScript是面向设计师的参数化设计工具,它本身也是调用RhinoCommon写成的,也就是说内部执行过程最终都要用到 RhinoCommon的函数。 只不过scirpt简化了 RhinoCommon 中一些设计师需要花很多精力去学习但是对设计并没有过多帮助的部分,例如 script 中弱化了面向对象程序设计的一些概念。所以说 Python Script 上手非常容易,不用你把厚厚一本《Python 学习手册》全部学完再来写代码。

对于只是用 Python 来做参数化设计,而不是用它来开发插件或做一些相对底层的事情的话,Python Script 就完全够用了。

对于做梦露大厦之类的造型来说,不用调用 RhinoCommon ,只使用Rhino Python Script 或者只使用Grasshpooper 完全都是可以做的出来的。你需要的是思路,用什么工具,取决于你自己的选择。

总之,RhinoPythonScript 就像是玩手动档的汽车,而 RhinoCommon 更像是自己动手玩改装了,不上赛道,两者在城市道路上几乎没什么区别。

如果对 RhinoCommon 有兴趣的话,可以看这里:
http://wiki.mcneel.com/developer/rhinocommon
这个页面可以下载到开发文档,页面最下面也有很多例子。



作者: Jorin    时间: 2014-10-8 09:12
顺便解释一下你发的图里的几个库。
import Rhino
就是导入 RhinoCommon 中的所有函数和对象。
import System.Guid
这个库并不是 Rhino 提供给你的,而是Windows 提供的,给每个物件分配 ID 序列号以及区分不同的物件等,电脑就是通过GUID来找到不同物件的。包括Windows中的每个程序,都是有GUID的。
import scriptcontext
大多数情况用于对当前文档的操作。例如把计算好的物件添加到场景中等等。RhinoComon库里面已经包含了这个库里面全部的内容,这里只是把常用的提出来放到这个库里面。
作者: 筑梦NARUTO    时间: 2014-10-8 10:19
Jorin 发表于 2014-10-8 08:52
视频中讲解的是 Rhino Python Script 的部分。

而你发的截图是用python直接调用 rhinocommon 。

那个梦露大厦只是为了练习rhinocommon时写的。。。rhinopython相当于开发者利用rhinocommon写的一些函数,用起来很方便,简洁上手很快,rhinocommon比较底层,用起来比较难,需要有点面向对象的基础,pythonscript函数是开发者用rhinocommon改写的,所以函数有些不全,但也差不多够用了。
作者: Jorin    时间: 2014-10-8 10:39
本帖最后由 Jorin 于 2014-10-8 10:48 编辑
筑梦NARUTO 发表于 2014-10-8 10:19
那个梦露大厦只是为了练习rhinocommon时写的。。。rhinopython相当于开发者利用rhinocommon写的一些函数, ...

并不是改写的啦,RhinoPythonScript 本来就是 RhinoCommon的一个开发实例,rhinoscriptsytax中的每个函数,都调用了一堆 RhinoCommon 的对象。也就是说RhinoPyhonScript本来就是 用RhinoCommon 写的。
例如 rs.AddCurve() 函数,是这样定义的:

[mw_shl_code=python,true]import scriptcontext
import rhinoscript.utility as rhutil
import Rhino
import System.Guid
def AddCurve(points, degree=3):
    points = rhutil.coerce3dpointlist(points, True)
    curve = Rhino.Geometry.Curve.CreateControlPointCurve(points, degree)
    if not curve: raise Exception("unable to create control point curve from given points")
    rc = scriptcontext.doc.Objects.AddCurve(curve)
    if rc==System.Guid.Empty: raise Exception("Unable to add curve to document")
    scriptcontext.doc.Views.Redraw()
    return rc[/mw_shl_code]



作者: miaomiao    时间: 2014-10-8 19:08
感谢Jorin和筑梦NARUTO的解释。如果我要用的方法 python 里没有,是不是就必须去用RhinoCommon。比方说:我想找一个几何体的中心点center point.(找了很久没找到). 请jorin,有时间出个这方面的教程、感激-----
作者: ktcandy    时间: 2015-10-24 22:40
miaomiao 发表于 2014-10-8 19:08
感谢Jorin和筑梦NARUTO的解释。如果我要用的方法 python 里没有,是不是就必须去用RhinoCommon。比方说:我 ...

用 BoundingBox 得到包裹几何体的方块的八个顶点的坐标,任选其中两对角点,求中点。你看可以不?
  1. import rhinoscriptsyntax as rs

  2. def getCenterPointOf(obj):
  3.     box = rs.BoundingBox(obj)
  4.     if box:
  5.         startPoint = box[0]
  6.         endPoint = box[6]
  7.         mid_x = (startPoint[0] + endPoint[0])/2
  8.         mid_y = (startPoint[1] + endPoint[1])/2
  9.         mid_z = (startPoint[2] + endPoint[2])/2
  10.         midPoint = [mid_x, mid_y, mid_z]
  11.         return midPoint
复制代码

作者: 筑梦NARUTO    时间: 2015-10-25 16:09
ktcandy 发表于 2015-10-24 22:40
用 BoundingBox 得到包裹几何体的方块的八个顶点的坐标,任选其中两对角点,求中点。你看可以不?

这样好些
  1. def getCenterPointOf(obj):
  2.     box = rs.BoundingBox(obj)
  3.     if box:
  4.         startPoint = box[0]
  5.         endPoint = box[6]
  6.         mid_x = (startPoint[0] + endPoint[0])/2
  7.         mid_y = (startPoint[1] + endPoint[1])/2
  8.         mid_z = (startPoint[2] + endPoint[2])/2
  9.         midPoint = rs.AddPoint([mid_x, mid_y, mid_z])
  10.         return midPoint
复制代码

作者: ktcandy    时间: 2015-10-25 21:17
筑梦NARUTO 发表于 2015-10-25 16:09
这样好些

的确返回一个点对象比较合理,哈哈。




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