NCF参数化建筑论坛

标题: 【python】python如何使用带out参数的方法 [打印本页]

作者: 月之眼    时间: 2018-11-7 16:24
标题: 【python】python如何使用带out参数的方法
以Curve.DivideByCount()方法为例,讲解如何用python使用带out参数的方法。

当我们在Rhinocommon SDK中搜索DivideByCount方法会看到如下介绍:[attach]50760[/attach]


我们看到Curve.DivideByCount()方法有两个方法重载,我们使用第二个方法。


[attach]50761[/attach]

第二个方法中,我们可以看到第三个参数是 out  Point3d[] points,python中是没有out参数定义的,那我们该如何使用这个重载方法呢,在python中使用前,我们先看看C#中如何使用。


[attach]50762[/attach]

在C#中我们先定义一个空数组pts,用out关键字传入方法就可以调用方法了(注:curve参数类型为Curve,count参数类型为int),我们可以试着在Python中也用同样的写法测试一下,但是会报错。


[attach]50763[/attach]

我们会看到一个类型错误,Curve.DivideByCount()方法需要一个StrongBox[Array[Point3d]]类型,不是list,所以我们谷歌查一下这个StrongBox[]类型,就知道该如何写了。


[attach]50764[/attach]

在gh中的写法如下。out参数的使用主要是定义一个参数类型的参数(注:案例中为outpts),再把这个参数传入方法调用就ok啦。最后我们使用Value属性调用返回的值。具体代码如下:(注:curve参数类型为Curve,count参数类型为int)


[attach]50765[/attach]

作者: 落寞醉    时间: 2018-11-12 00:23
本帖最后由 落寞醉 于 2018-11-12 01:37 编辑

不知楼主 遇到这样的情形没:如果 是vb ByRef 类型的返回值,就回出错,“值不在预期的范围内” 如果是ByVal 类型就没问题。 可有问题解决。 是不是所有com组件的调用都是如此?
作者: 月之眼    时间: 2018-11-12 11:22
落寞醉 发表于 2018-11-12 00:23
不知楼主 遇到这样的情形没:如果 是vb ByRef 类型的返回值,就回出错,“值不在预期的范围内” 如果是ByVa ...

我不会VB,C#的ref是可以这么引用的
作者: 落寞醉    时间: 2018-11-14 01:25
我也不会用VB,不过每种语言都差不多。 其实就是传递地址和传递数值的差别。 在ironpython中传递地址有问题,但在cpython中就可以。  后来没办法,就把少部分用cpython来做,再把结果交互给ironpython.虽然也能解决问题,就是感觉特别扭。




欢迎光临 NCF参数化建筑论坛 (http://bbs.ncf-china.com/) Powered by Discuz! X3.2