[Closed] Appending to an Array?
Hi everyone, i have a question.
I’m trying to append a large number of objects to an array.
All my objects name start the same way “Shape_whateverComesNextAfter”
So i’d like to append them all in an array using the similarity in the name since all the control objects i’ll ever use will be named that way.
So i’ve tried writing it this way
shps=#()
shapeAll= $Shape_*
append shps shapeAll
The order in which my shapes get appended doesn’t matter for what i want to use my array.
Obviously it doesn’t work otherwise i wouldn’t post on this forum
If anybody can help me it would be greatly appreciated.
Thanks for your time.
I think, this appends only the variable shapeAll into the array, not each Shape-object. I would try this:
shps=#()
append shps #($Shape_*)
Edit: Updated Code.
Use collect to loop through the objects and create an array on the fly:
shps = for obj in $Shape_* collect obj
Or:
shps = $Shape_* as array
And to add more objects to this array later on, you can use the join function to merge two arrays:
join shps (for obj in $Blah_* collect obj)
Martijn
an alternative to ‘join’ that you might encounter is += ;
a = #(1,2,3)
#(1, 2, 3)
b = #(4,5,6)
#(4, 5, 6)
a += b
#(1, 2, 3, 4, 5, 6)
a
#(1, 2, 3, 4, 5, 6)
This mostly finds use when you don’t want to work on the array in-place;
a = #(1,2,3)
#(1, 2, 3)
b = #(4,5,6)
#(4, 5, 6)
c = a+b
#(1, 2, 3, 4, 5, 6)
c
#(1, 2, 3, 4, 5, 6)
a
#(1, 2, 3)
Question again. Appending in the array worked fine using collect. I get an error though when i try to run the rest of the code. If you guys can help it would be great. Thanks again.
Code:
fn zeroOutControllers=
(
local
shpsPR= for obj in $Shape_* collect obj
-- Zero Out Position and Rotation Controllers for all the Control Shapes
for i = 1 to 62 do
(
-- Zero Out Position
posL= position_list()
shpsPR[i].position.controller= posL
shpsPR[i].position.controller.available.controller= position_xyz()
posL.setactive 2
posL.setname 1 "Zero"
posL.setname 2 "Animation"
-- Zero Out Rotation
rotL= rotation_list()
shpsPR[i].rotation.controller= rotL
shpsPR[i].rotation.controller.available.controller= euler_xyz()
rotL.setactive 2
rotL.setname 1 "Zero"
rotL.setname 2 "Animation"
)
)
Error Message:
zeroOutControllers()
– Error occurred in i loop; filename: C:\Documents and Settings\guillaume.boucher\Desktop\zero out.ms; position: 272
– Frame:
– i: 62
– rotL: undefined
– posL: Controller:Position_List
– called in zeroOutControllers(); filename: C:\Documents and Settings\guillaume.boucher\Desktop\zero out.ms; position: 665
– Frame:
– shpsPR: #($Shape_COM, $Shape_Shoulder_Right_FK, $Shape_Arm_Right_FK, $Shape_Elbow_Right_FK, $Shape_Hand_Right_FK, $Shape_Shoulder_Left_FK, $Shape_Arm_Left_FK, $Shape_Elbow_Left_FK, $Shape_Hand_Left_FK, $Shape_SpineBottom_FK, $Shape_SpineMiddle_FK, $Shape_SpineTop_FK, $Shape_Leg_Right_FK, $Shape_Calf_Right_FK, $Shape_Foot_Right_FK, $Shape_FootToes_Right_FK, $Shape_Leg_Left_FK, $Shape_Calf_Left_FK, $Shape_Foot_Left_FK, $Shape_FootToes_Left_FK, …)
– Unknown property: “pos” in undefined
OK