我目前正在使用Rhino中的python脚本编辑器开发一个脚本。由于我目前在Windows机器上工作,脚本编辑器使用IronPython作为语言。你知道吗
在同一个脚本中,我想与具有pythonapi的FE软件(Straus7)进行交互。在这样做时,我遇到了一些问题,因为ctypes模块在IronPython中的工作方式与在常规Python中的工作方式不同。尤其是,我在使用以下命令初始化数组时发现了问题:
ctypes.c_double*3
例如,如果我想获得有限元模型中一个节点#1的XYZ坐标,我将编写以下代码:
XYZType = ctypes.c_double*3
XYZ = XYZType()
node_num = 1
st.St7GetNodeXYZ(1,node_num,XYZ)
这将返回一个变量XYZ,它是一个三维数组,这样:
XYZ -> <straus_userfunctions.c_double_Array_3 at 0xc5787b0>
XYZ[0] = -0.7xxxxx -> (X_coord)
XYZ[1] = -0.8xxxxx -> (Y_coord)
XYZ[2] = -0.9xxxxx -> (Z_coord)
另一方面,我在IronPython中复制了相同的脚本,出现以下错误消息
Message: expected c_double, got c_double_Array_3
很明显,如果我把变量XYZ改成c\u double,那么它就变成了一个只包含一个条目的双变量,这个条目对应于数组的第一个元素(在本例中是X坐标)
这种情况是相当恼人的所有有限元软件,矩阵和数组的使用是广泛使用。因此,我想问,现在是否有人对这种情况有一个简单的解决办法。你知道吗
我在考虑使用数组第一个元素的内存分配来获得其余元素,但我不太确定如何做到这一点。你知道吗
非常感谢。杰拉德
我发现在使用IronPython时,需要显式地将“三个double的数组”转换为“指向double的指针”。因此,如果您将Grasshopper与Strand7/Straus7 API一起使用,则需要添加如下额外的位:
目前我还没有访问IronPython或Strand7/Straus7的权限,但是从内存中就可以做到这一点。如果这对你不起作用,你可以发邮件给Strand7支持部门——你通常会在一天左右的时间内收到类似的反馈。你知道吗
相关问题 更多 >
编程相关推荐