请教:用GH如何提取Rhino物件的userString?

private void RunScript(Brep x, object y, ref object A, ref object B)
{
A = x.GetUserStrings();
B = x.GetUserString(“1”);
}
我使用以上代码得到的结果是空,请教大神们怎么做才是对的呢?测试文件如下:
测试GetUserString.3dm (24.1 KB)
测试GetUserString.gh (5.2 KB)

这个是物件的属性,所以我一般都是用guid去操作的,像这样。

var obj = RhinoDoc.ActiveDoc.Objects.FindId(x);
 A = obj.Attributes.GetUserString("1");


测试GetUserString.gh (5.4 KB)



你使用的函数其实有两套
一套是基于geometry的,一套是基于rhinodoc的
因为你是要从rhino文件中的物体内提取用户字典,在这里就必须用rhinodoc的这个函数
也就是说得先用guid从rhino获取这个特定物体,然后才能获取用户字典

基于geometry的这个函数,适用于 不属于rhino文档内的物体
例如GH生成的,还没有bake到rhino的,没有分配guid的物体。
然后你在GH中赋予了这个物体一些用户字典。
就可以用这个函数获取字典
如下图


做一些补充

一:月神回复的相关知识
绿色短线其实是物体和Guid的强制转换,如果物体存在于犀牛文档中,则这个强制转换是成功的,例如下面一个蓝色框,以及月神的回复内的用法。
如果该物体是GH生成的,并不存在于rhino中,则该强制转换会失败,例如上一个蓝色框。

二:结合我上一个回帖,注意红色框内,这个犀牛物体我其实是在属性栏给定了price=5000的值
但是当你使用基于geometry的SetUserString 和GetUserString时,他会把这个geometry当作GH内的geometry,给一个1000的价格并不会覆盖犀牛文档内我给的5000价格,然后获取价格时,也会获取到1000的价格,而不是5000

4 个赞

大神太厉害了,十万分感谢 :pray:

多谢大神赐教 :pray:

请问大神,是否有方法可以把user string赋予到gh生成的物体,然后bake出来让物体继续保留user string呢?: )

建议直接使用elefront插件。