GetAllHighlevelData vs. GetLowlevelDataAddressR
-
On 31/05/2015 at 04:41, xxxxxxxx wrote:
Hi All,
regarding the softselection tag, trying to call GetAllHighlevelData() as stated at
VariableTag.GetAllHighlevelData
()
I receive an error message:TypeError: Unknown data of variable tag type.
I managed to work around with LowlevelData see code below:
But I don´t understand the
ByteSeq.\__add\_\_
( other )
function.
What are we supposed to add at offset?
It seems to have no influence on the buffer.
Has anyone an idea how we should use it?Thanks in advance
MartinLowlevelDataAddress:
import c4d, array def mSetAllHighlevelData(variableTag, values) : #pack 32 bit float b = array.array('f',values) buff = b.tostring() wdata = variableTag.GetLowlevelDataAddressW() if len(wdata)==len(buff) : wdata[0:len(buff)] = buff return def mGetAllHighlevelData(variableTag) : #unpack 32 bit float data = variableTag.GetLowlevelDataAddressR() a = array.array('f') a.fromstring(data) weightarray = a.tolist() return weightarray def main() : tags = op.GetTags() for ta in tags: if ta.GetType()== c4d.Tsoftselection: print "____________________________" print "Softselection" #set up a list dcount = ta.GetDataCount() values = [1] * dcount weightarray = mGetAllHighlevelData(ta) print weightarray, "before" mSetAllHighlevelData(ta, values) weightarray = mGetAllHighlevelData(ta) print weightarray, "after" c4d.EventAdd() if __name__=='__main__': main()
-
On 01/06/2015 at 07:58, xxxxxxxx wrote:
Hi Martin,
VariableTag.GetAllHighlevelData() doesn't support softselection tag (Tsoftselection). This is why you get the error "Unknown data of variable tag type."
In fact, VariableTag.GetAllHighlevelData() is just a wrapper around VariableTag.GetLowlevelDataAddressR(). It currently supports Tpoint, Ttangent, Tline, Tpolygon, Tsegment, Tvertexmap, Tnormal and Tuvw tag types.ByteSeq.__add__() defines the "+" operator and does the same as ByteSeq.GetOffset():
seq = data + 4 seq = data.GetOffset(4)
ByteSeq.__add__() doesn't modify the ByteSeq object, it returns a new ByteSeq object at the given offset.
-
On 01/06/2015 at 11:43, xxxxxxxx wrote:
Hi Yannick,
Thanks for the reply !
Still, it might be good to write a small note in brackets into the sdk "not implemented yet" or something else. It was a little confusing at the beginning.
(I know it´s not supported yet, too, but it might be more consistent to write the sitckytexture tag data in 32 bit ,too, like the uv tag and not in double 64 bit, I´m not sure, there could be good reasons to do so.)For
newdata = data.__add__(5)
I receive an error message: "NotImplemented"
fornewdata = data + 5
I receive an error message:
TypeError: unsupported operand type(s) for +: 'c4d.storage.ByteSeq' and 'int'I assume it´s not supported, too.
Best wishes
Martin -
On 02/06/2015 at 02:34, xxxxxxxx wrote:
Hi Martin,
There seem to have an issue with ByteSeq.__add__()/+ operator. Sorry I had not tested it before.
ByteSeq.GetOffset() does exactly the same so please use it instead. -
On 09/06/2015 at 01:21, xxxxxxxx wrote:
Hi Yannick,
thanks for the confirmation.
Best wishes
Martin