Notifications
Clear all

[Closed] Append sub-arrays of diferent sizes into an array ?

Hello all, I have a new question about how to append arrays with sub-array… in a special case…

I have thoses two array …
MyBonesPerVert #(3, 2) and myVertexWeight#(0.105833, 0.788333, 0.105833, 0.839333, 0.160667)
And I want this :myWeightPerVertList#(#(0.105833, 0.788333, 0.105833), #(0.839333, 0.160667))

Here I am so far

myWeightPerVertList = #()

	 for BonNo = 1 to MyBonesPerVert.count do
	(
		myBoneNumber = MyBonesPerVert[BonNo] 

		for vert = 1 to myVertexWeight.count by  myBoneNumber do
		(
			append myWeightPerVertList #(myVertexWeight[vert],myVertexWeight[vert+1] ) --==> here's the obvious issue I see
		)
		myWeightPerVertList

	)

I simply don’t find how to append my array! help please !
Blobynator

5 Replies

this example should help you to understand how collect array of arrays, and it might be also helpful for what you are trying to do (Skin? ;))

fn getSkinVertData =
 (
 	if iskindof (sk = modpanel.getcurrentobject()) Skin do
 	(
 		for v=1 to skinops.getNumberVertices sk collect 
 		(
 			bones = #()
 			weights = #()
 			for k=1 to skinops.GetVertexWeightCount sk v do 
 			(
 				append bones (skinops.GetVertexWeightBoneID sk v k)
 				append weights (skinops.GetVertexWeight sk v k)
 			)
 			#(bones, weights)
 		)
 	)
 )	  

And one more example with values only


 MyBonesPerVert = #(3, 2, 4)
 MyVertexWeight = #(0.105833, 0.788333, 0.105833, 0.839333, 0.160667, 0.123, 0.256, 0.5698, 0.58979)
 fn makeSubArr arrVals: subsCnt: =
 (
 	local resultArr = #()
 	for j in subsCnt do
 	(
 		tmpArr = #()
 		for i = 1 to arrVals.count where i < j+1 do (append tmpArr arrVals[1] ; deleteItem arrVals 1)
 		append resultArr tmpArr
 	) ; resultArr
 ) 
 makeSubArr arrVals:MyVertexWeight subsCnt:MyBonesPerVert
 --> #(#(0.105833, 0.788333, 0.105833), #(0.839333, 0.160667), #(0.123, 0.256, 0.5698, 0.58979))
 

Thanks both of you : )

You’ve solve my current problem… and my next in one shot : )

Actually, I’d be greatfull if I could have a tiny explanation about how works the second example ? I have well integrated it in my script, it works well, and I know I could use it for similar cases but I am a bit frustrated not understand it plainly. Especially the loop part and why I cant have this last bit ” RSTA_SortVertWeight arrVals:MyVertexWeight subsCnt:MyBonesPerVert ” inside the function itself… which would be easier to use then in my tool…

Thanks !

What about for-loop and which one?
Yup. You can use “RSTA_SortVertWeight” as function name
In next example I added more values for spliting where sum is greather the actual array items count. Process stops when arrVals count == 0.


 MyBonesPerVert = #(3, 2, 5, 6)
 MyVertexWeight = #(0.105833, 0.788333, 0.105833, 0.839333, 0.160667, 0.123, 0.256, 0.5698, 0.58979)
 fn RSTA_SortVertWeight arrVals: subsCnt: =
 (
	 local resultArr = #()
	 for j in subsCnt while arrVals.count > 0 do
	 (
		tmpArr = #()
		 for i = 1 to arrVals.count where i <= j do (append tmpArr arrVals[1] ; deleteItem arrVals 1)
		 append resultArr tmpArr
	 ) ; resultArr
 ) 
-- and then execute like this
 RSTA_SortVertWeight arrVals:MyVertexWeight subsCnt:MyBonesPerVert