NCF参数化建筑论坛

标题: 用户数据usertext如何在GH中设置及读取? [打印本页]

作者: woodwest    时间: 2017-2-19 20:35
标题: 用户数据usertext如何在GH中设置及读取?
各位高手、大师,我碰到一个问题,解了好几天,不得其法。需求如下:在rhino中,用户数据usertext可以粘贴到物体上,可以多次累加,修改,读取等操作。
在rhino的命令行上,使用setusertext,及getusertext可以方便地读取。在Rhino Python Editor里面也有代码的示例,我已经测试成功了!可以像批处理一样地运用rs.setusertext,及rs.getusertext函数来使用。


但我们更多是在GH中快速编程,需要封存GH的过程数据存在某一个物体本身当中,GH现在本身没有用户数据usertext的电池,我想通过GH里面的Python插件来编写这些功能。
现在遇到的问题有几个:
1、GH中的setusertext 写不进去
2、GH中的getusertext 读不出来
3、希望在建立了物体,Bake出物体形状的同时,将usertext同时就写到物体当中去,方便以后的步骤来读取。


在GHPython中,这样设定电池倒是绿了,只是数据感觉写不进去
[attach]46701[/attach]

上面的代码为:
import rhinoscriptsyntax as rs
if object_id:
  print  object_id
  print key
  print value
  rs.SetUserText(object_id, key, value)

结果没有反应,用rhino命令行中的getusertext去查询,找不到任何附加的数据。
感觉 rs.SetUserText(不起作用。


再写另一个getusertex的代码,发现有usertext的物体,却取不出任何数据,感觉很是奇怪?
[attach]46702[/attach]
上面的代码为:
import rhinoscriptsyntax as rs
if object_WP:
    print object_WP
    print type(object_WP)
    print  rs.GetUserText(object_WP, "len")
    a = rs.GetUserText(object_WP, "len")


在GHpython script 编辑器中,每次按下“test”按钮时,对应
print object_WP的结果都会变出不同的数值,例如:
08adc2f6-e081-4e46-a4f2-a63c3da438eb
2ad6e3f8-8ec7-4f77-a4bd-55ef60280644
ed7c3655-3cd2-4027-81a9-a2503f995fa9
……………………
这是怎么回事啊?
有那位大使能帮我解答一下,不胜感激!
如果有VB in GH的代码也可以看看。
附注:在一个叫SEG的插件中,倒是有类似的电池,但是这组插件时不时会报错,或者时间加密,版本加密引出退出,实在不敢就轻易使用这个插件。



作者: 疏影    时间: 2017-2-19 22:43
本帖最后由 疏影 于 2017-2-19 23:09 编辑

[attach]46703[/attach]当你将曲线接入Python中时,其实是复制拷贝了一份。已经不是元数据
作者: woodwest    时间: 2017-2-23 17:04
非常感谢大师的点提!
只是我按照上面的语句输入以后,出现错误:
Runtime error (MissingMemberException): 'NoneType' object has no attribute 'CurveGeometry'
说的是在:
b=Rhino.RhinoDoc.ActiveDoc.Objects.Find(x).CurveGeometry
的.Find(x)之后的东西找不到!
大师能否帮我看看,问题在哪里?

[attach]46753[/attach]

我的错误的源代码为:import rhinoscriptsyntax as rs
import Rhino.RhinoDoc as rd
import scriptcontext as sc
import Rhino

print x
print type(x)

b=Rhino.RhinoDoc.ActiveDoc.Objects.Find(x).CurveGeometry
print b
print type(b)

a=sc.doc.Objects.AddCurve(b)

print a
print type(a)
rs.SetUserText(a, 'LEN',12)
c=rs.GetUserText(a,'LEN')

作者: woodwest    时间: 2017-2-23 17:13
还有大师所言的:"当你将曲线接入Python中时,其实是复制拷贝了一份。已经不是元数据",那么主要要注意的就是: 如何找到元数据的ID值?
我尝试使用:Rhino.RhinoDoc.ActiveDoc.Objects.Find(x)
去找x,x直接连在Curve电池上,但是没有结果.
去哪儿可以找到RhinoDoc.ActiveDoc.Objects.Find的范例参考?




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