On 27/01/2017 at 15:34, xxxxxxxx wrote:
I am trying to set up a User Data preset. So far, I have some radio buttons. The user chooses a preset. He then makes some changes. I want him to be able to click on a button and the data is transferred to a User Preset. Here is what I have:
import c4d
import collections
Type = collections.namedtuple('Type', 'name value_id presets')
Preset = collections.namedtuple('Preset', 'name group_id')
Container = [
Type('Spritz! v2', 13, {
0: Preset('Classic Beer', 21),
1: Preset('Cool Pop', 216),
2: Preset('Dew', 244),
3: Preset('Fridge', 272),
4: Preset('Summer', 440),
5: Preset('Mountain', 1),
6: Preset('Cooler', 300),
7: Preset('Picnic', 328),
8: Preset('Heat Wave', 356),
9: Preset('Drive-in', 384),
10: Preset('User Preset 1', 480),
11: Preset('User Preset 2', 541),
12: Preset('User Preset 3', 574),
13: Preset('User Preset 4', 607),
}),
]
Ids = {
'on_off_switch': 184,
'bake_button': 432,
}
def get_selected_type(rig) :
return Container[0]
def update_parameters(rig) :
obj = doc.SearchObject('Spritz!')
=============================================================================
Internals start here
=============================================================================
g = {
'dcount': None,
# Automatically computed from the Container
data. Contains
# the IDs of the groups that are hidden except if they're selected
# by their preset value.
'group_ids': None,
}
def update_visibility(rig) :
build_caches()
selected_type = get_selected_type(rig)
preset_value = rig[c4d.ID_USERDATA, selected_type.value_id]
selected_preset = selected_type.presets[preset_value]
print (preset_value)
for desc_id, desc_bc in rig.GetUserDataContainer() :
elem_id = desc_id[1].id
if elem_id not in g['group_ids']:
continue
# Update the parameter to its new hidden status if it doesn't correspend.
hidden = (elem_id != selected_preset.group_id)
if bool(desc_bc[c4d.DESC_HIDE]) ^ hidden:
desc_bc[c4d.DESC_HIDE] = hidden
rig.SetUserDataContainer(desc_id, desc_bc)
def build_caches() :
#Updates caches in g
if they're not already built.
if g['group_ids'] is None:
g['group_ids'] = group_ids = set()
for type_ in Container:
for preset in type_.presets.itervalues() :
group_ids.add(preset.group_id)
def main() :
rig = op.GetObject()
# Check if the data on the rig has changed. If it hasn't, we can
# stop here already.
dcount = rig.GetDirty(c4d.DIRTYFLAGS_DATA)
if dcount == g.get('dcount') :
return
g['dcount'] = dcount
update_parameters(rig)
update_visibility(rig)
def user_presets() :
Set_UP1 = 537
Set_UP2 = 536
Set_UP3 = 539
Set_UP4 = 540
#Classic Beer
Classic_Beer_MASTER_Coalesce = rig[c4d.ID_USERDATA, 196]
Classic_Beer_Coalesce_Amount = rig[c4d.ID_USERDATA, 197]
Classic_Beer_BIG_and_SMALL_Random_Scale = rig[c4d.ID_USERDATA, 198]
Classic_Beer_Mesh_Density = rig[c4d.ID_USERDATA, 199]
Classic_Beer_BIG_Drops = rig[c4d.ID_USERDATA, 201]
Classic_Beer_BIG_Count = rig[c4d.ID_USERDATA, 202]
Classic_Beer_BIG_Size = rig[c4d.ID_USERDATA, 203]
Classic_Beer_Random_Seed_BIG = rig[c4d.ID_USERDATA, 204]
Classic_Beer_SMALL_Drops = rig[c4d.ID_USERDATA, 206]
Classic_Beer_SMALL_Count = rig[c4d.ID_USERDATA, 207]
Classic_Beer_SMALL_Size = rig[c4d.ID_USERDATA, 208]
Classic_Beer_Random_Seed_SMALL = rig[c4d.ID_USERDATA, 209]
Classic_Beer_MICRO_Drops = rig[c4d.ID_USERDATA, 211]
Classic_Beer_MICRO_Coalesce_Amount = rig[c4d.ID_USERDATA, 214]
Classic_Beer_MICRO_Count = rig[c4d.ID_USERDATA, 212]
Classic_Beer_MICRO_Size = rig[c4d.ID_USERDATA, 213]
Classic_Beer_Random_Seed_MICRO = rig[c4d.ID_USERDATA, 215]
Classic_Beer_MIST = rig[c4d.ID_USERDATA, 190]
Classic_Beer_MIST_Amount = rig[c4d.ID_USERDATA, 191]
Classic_Beer_MIST_Droplet_Size = rig[c4d.ID_USERDATA, 192]
Classic_Beer_Random_Seed_MIST = rig[c4d.ID_USERDATA, 193]
Classic_Beer_Random_Scale_MIST = rig[c4d.ID_USERDATA, 194]
#User Preset 1
UP1_MASTER_Coalesce = rig[c4d.ID_USERDATA, 507]
UP1_Coalesce_Amount = rig[c4d.ID_USERDATA, 508]
UP1_BIG_and_SMALL_Random_Scale = rig[c4d.ID_USERDATA, 509]
UP1r_Mesh_Density = rig[c4d.ID_USERDATA, 510]
UP1_BIG_Drops = rig[c4d.ID_USERDATA, 512]
UP1_BIG_Count = rig[c4d.ID_USERDATA, 513]
UP1_BIG_Size = rig[c4d.ID_USERDATA, 514]
UP1_Random_Seed_BIG = rig[c4d.ID_USERDATA, 515]
UP1_SMALL_Drops = rig[c4d.ID_USERDATA, 517]
UP1_SMALL_Count = rig[c4d.ID_USERDATA, 518]
UP1_SMALL_Size = rig[c4d.ID_USERDATA, 519]
UP1_Random_Seed_SMALL = rig[c4d.ID_USERDATA, 520]
UP1_MICRO_Drops = rig[c4d.ID_USERDATA, 523]
UP1_MICRO_Coalesce_Amount = rig[c4d.ID_USERDATA, 5214]
UP1_MICRO_Count = rig[c4d.ID_USERDATA, 525]
UP1_MICRO_Size = rig[c4d.ID_USERDATA, 526]
UP1_Random_Seed_MICRO = rig[c4d.ID_USERDATA, 527]
UP1_MIST = rig[c4d.ID_USERDATA, 531]
UP1_MIST_Amount = rig[c4d.ID_USERDATA, 532]
UP1_MIST_Droplet_Size = rig[c4d.ID_USERDATA, 533]
UP1_Random_Seed_MIST = rig[c4d.ID_USERDATA, 534]
UP1_Random_Scale_MIST = rig[c4d.ID_USERDATA, 535]
if rig[c4d.ID_USERDATA, Set_UP1] == 1: #resets User Preset 1 button
if preset_value == 0:
UP1_MASTER_Coalesce = Classic_Beer_MASTER_Coalesce
UP1_Coalesce_Amount = Classic_Beer_Coalesce_Amount
UP1_BIG_and_SMALL_Random_Scale = Classic_Beer_BIG_and_SMALL_Random_Scale
UP1_Mesh_Density = Classic_Beer_Mesh_Density
UP1_BIG_Drops = Classic_Beer_BIG_Drops
UP1_BIG_Count = Classic_Beer_BIG_Count
UP1_BIG_Size = Classic_Beer_BIG_Size
UP1_Random_Seed_BIG = Classic_Beer_Random_Seed_BIG
UP1_SMALL_Drops = Classic_Beer_SMALL_Drops
UP1_SMALL_Count = Classic_Beer_SMALL_Count
UP1_SMALL_Size = Classic_Beer_SMALL_Size
UP1_Random_Seed_SMALL = Classic_Beer_Random_Seed_SMALL
UP1_MICRO_Drops = Classic_Beer_MICRO_Drops
UP1_MICRO_Coalesce_Amount = Classic_Beer_MICRO_Coalesce_Amount
UP1_MICRO_Count = Classic_Beer_MICRO_Count
UP1_MICRO_Size = Classic_Beer_MICRO_Size
UP1_Random_Seed_MICRO = Classic_Beer_Random_Seed_MICRO
UP1_MIST = Classic_Beer_MIST
UP1_MIST_Amount = Classic_Beer_MIST_Amount
UP1_MIST_Droplet_Size = Classic_Beer_MIST_Droplet_Size
UP1_Random_Seed_MIST = Classic_Beer_Random_Seed_MIST
UP1_Random_Scale_MIST = Classic_Beer_Random_Scale_MIST
rig[c4d.ID_USERDATA, Set_UP1] = 0
The radio button selector shows and hides the controls for its specific preset nicely (probably because Niklas wrote the code :)
But then, it all goes to hell. Can anyone help? Thanks.