【问题标题】:How to construct an Interval in Python in Grasshopper如何在 Grasshopper 中用 Python 构造一个区间
【发布时间】:2019-05-24 09:07:27
【问题描述】:

使用Grasshopper:如果我将domain 传递给Python 组件,python 会将其视为一个间隔。我可以对其进行操作,如下:

print x
x.Grow(x[0]-y)
x.Grow(x[1]+y)

print x    
print type(x)
print dir(x)

哪些打印:

20.3596657850938,87.5596657850938
19.3596657850938,88.5596657850938
<type 'Interval'>
['CompareTo', 'EpsilonEquals', 'Equals', 'FromIntersection', 'FromUnion', 'GetHashCode', 'GetObjectData', 'GetType', 'Grow', 'IncludesInterval', 'IncludesParameter', 'IsDecreasing', 'IsIncreasing', 'IsSingleton', 'IsValid', 'Item', 'Length', 'MakeIncreasing', 'Max', 'MemberwiseClone', 'Mid', 'Min', 'NormalizedIntervalAt', 'NormalizedParameterAt', 'ParameterAt', 'ParameterIntervalAt', 'ReferenceEquals', 'Reverse', 'Swap', 'T0', 'T1', 'ToString', 'Unset', '__add__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__', '__rsub__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__sub__', '__subclasshook__']

但是,我不知道如何构建一个新的。它们看起来非常有用,我想更多地使用它们。

我已尝试导入 interval 模块 (Runtime error (ImportException): No module named interval)。我尝试将列表转换为间隔:Interval([1,2])Runtime error (UnboundNameException): name 'Interval' is not defined

不知道区间是属于蟒蛇、铁蟒还是蚱蜢。

如何创建新的间隔?

【问题讨论】:

    标签: python ironpython grasshopper


    【解决方案1】:

    在一些帮助下,我最终得到了:

    print "x is sent in as a domain from the input to this function"
    print x, type(x)
    print x.GetType().FullName
    print x.GetType().Assembly.Location
    
    print "\nThere seem to be two types of intervals, Rhino and grasshopper. Now sure why you'd use a Grasshopper interval, but here it is anyway:"
    import Grasshopper as gh
    y = gh.Kernel.Types.GH_Interval()
    print y, type(y)
    print y.GetType().FullName
    print y.GetType().Assembly.Location
    
    print "\nTo make a Rhino interval get it from the Rhino.Geometry module"
    import Rhino.Geometry.Interval as interval
    z = interval(0,1)
    print z, type(z)
    print z.GetType().FullName
    print z.GetType().Assembly.Location
    
    print "\nz is the same as x:", z == x
    

    给出:

    x is sent in as a domain from the input to this function
    0,1 <type 'Interval'>
    Rhino.Geometry.Interval
    C:\Program Files\Rhinoceros 5 (64-bit)\System\RhinoCommon.dll
    
    There seem to be two types of intervals, Rhino and grasshopper. Now sure why you'd use a Grasshopper interval, but here it is anyway:
    0.0 To 0.0 <type 'GH_Interval'>
    Grasshopper.Kernel.Types.GH_Interval
    C:\Program Files\Common Files\McNeel\Rhinoceros\5.0\Plug-ins\Grasshopper (b45a29b1-4343-4035-989e-044e8580d9cf)\0.9.76.0\Grasshopper.dll
    
    To make a Rhino interval get it from the Rhino.Geometry module
    0,1 <type 'Interval'>
    Rhino.Geometry.Interval
    C:\Program Files\Rhinoceros 5 (64-bit)\System\RhinoCommon.dll
    
    z is the same as x: True
    

    如果我们解包:IronPython 的 type() 函数实际上返回一个 PythonType 包装 .NET 类型。 .GetType() 直接获取 .NET 类型。所以type(x) 给了&lt;type 'Interval'&gt; 这不是很有帮助,而x.GetType().FullName 给了Rhino.Geometry.Interval 它告诉我如何到达它。

    这在Rhino docs here 中有介绍,它有很多有用的属性和方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2020-11-01
      • 2013-03-24
      相关资源
      最近更新 更多