Last time I tried, I gave up on JScript (it seemed impossible) and got something to work in Python.

si = Application
from win32com.client import constants as C # win32com.client.constants

oObj = si.Selection(0)
oICEAttrMats = oObj.ActivePrimitive.AddICEAttribute("MyString", C.siICENodeDataString, C.siICENodeStructureArray, C.siICENodeContextSingleton)
oICEAttrMats.DataArray2D = ["a", "b", "c", "d"]

x = oICEAttrMats.DataArray2D
print x
print len(x)
print len(x[0])
print len(x[0][0])

for d in x[0][0]:
    print d


# (((u'a', u'b', u'c', u'd'),),)
# 1
# 1
# 4
# a
# b
# c
# d





On 12/03/2013 5:18 AM, Eugen Sares wrote:
Ok... I'm trying this workaround:
- Create custom ICEAttributes instead of the factory ones via scripting, with exactly the same type. - Create a simple ICE graph that reads from the custom attributes and writes to the factory attr via scripting.

I've managed to write the "MaterialID" this way, but with "Materials" I have the problem that I cannot create an equal string array custom attribute:

<JScript>
var oObj = CreatePrim("grid", "MeshSurface", "", "");
oICEAttrMats = oObj.ActivePrimitive.AddICEAttribute("MyString", siICENodeDataString, siICENodeStructureArray, siICENodeContextSingleton);
oICEAttrMats.DataArray = ["a", "b", "c", "d"];
</JScript>
// WARNING : 3392 - Invalid offset specified while extracting data from this attribute: <Attribute: MyString>

The DataType, StructType and ContextType of that string array attribute is exactly the same as the factory "Materials" attribute.
(I checked in XSI_SAMPLES\ICE\Modelling_Materials.scn)

What's wrong now?
Thanks,
Eugen



Am 11.03.2013 18:46, schrieb Stephen Blair:
I don't think it is possible.

MaterialID becomes undefined/uninitialized pretty quick...
http://screencast.com/t/HeNPz4qgwlh

On 11/03/2013 12:25 PM, Eugen Sares wrote:
Thanks, Steven!
IsDefined is read-only, by the looks.
So how do I write to it to define it (outside of ICE), when it cannot be written until it's defined??


Am 11.03.2013 17:15, schrieb Stephen Blair:
MaterialID isn't defined. Seems that you cannot set MaterialID.DataArray unless IsDefined is True

On 11/03/2013 11:44 AM, Eugen Sares wrote:
Whereas this throws a warning:
<JScript>
NewScene("", "false");
var oObj = CreatePrim("grid", "MeshSurface", "", "");
SetValue("grid.polymsh.geom.subdivu", 2, null);
SetValue("grid.polymsh.geom.subdivv", 2, null);
var oICEAttr = oObj.ActivePrimitive.GetICEAttributeFromName("MaterialID"); oICEAttr.DataArray = [0,1,2,3]; // WARNING : 3403 - The data is not set on this ICEAttribute: MaterialID

var oProp = oObj.AddProperty("AttributeDisplay");
SetValue(oObj.Name + ".AttributeDisplay.attrname", "MyLong", null);
</JScript>



Reply via email to