def process(self, ga): item_info = lwsdk.LWItemInfo() object_info = lwsdk.LWObjectInfo() instancer_funcs = lwsdk.LWItemInstancerFuncs() instance_info = lwsdk.LWItemInstanceInfo() interface_info = lwsdk.LWInterfaceInfo() current_time = interface_info.curTime autokey_is_on = ((interface_info.generalFlags & lwsdk.LWGENF_AUTOKEY) != 0) selected_item = interface_info.selected_items()[0] selected_item_id = lwsdk.itemid_to_str(selected_item) # find the Instancer that owns the selected object found_instancer = None obj = item_info.first(lwsdk.LWI_OBJECT, None) while obj and (not found_instancer): instancer = object_info.instancer(obj) if instancer: instance = instancer_funcs.first(instancer) while instance and (not found_instancer): if instance_info.item(instance) == selected_item: # found it! found_instancer = instancer break instance = instancer_funcs.next(instancer, instance) obj = item_info.next(obj) if not found_instancer: print >>sys.stderr, 'Object "%s" is NOT instanced!' % item_info.name(selected_item) return lwsdk.AFUNC_OK instances = [] instance = instancer_funcs.first(found_instancer) while instance: if instance_info.item(instance) == selected_item: instances.append(instance) instance = instancer_funcs.next(found_instancer, instance) # values used for progress current_index = 1.0 target_index = len(instances) * 1.0 for instance in instances: pos = instance_info.pos(instance, 0) # Note: InstanceInfo.rotation() returns radians! rot = instance_info.rotation(instance, 0) scl = instance_info.scale(instance, 0) lwsdk.command("SelectItem %s" % selected_item_id) lwsdk.command("Clone 1") lwsdk.command("Position %s" % str(pos)) # Note: Rotation expects degrees! lwsdk.command("Rotation %s" % str(Vector.to_degrees(rot))) lwsdk.command("Scale %s" % str(scl)) if not autokey_is_on: lwsdk.command("CreateKey %f" % current_time) lwsdk.command("StatusMsg {%f}Baking instances..." % (current_index / target_index)) current_index += 1.0 lwsdk.command("SelectItem %s" % selected_item_id) lwsdk.command("StatusMsg Baking complete.") return lwsdk.AFUNC_OK
def process(self, ga): item_info = lwsdk.LWItemInfo() object_info = lwsdk.LWObjectInfo() instancer_funcs = lwsdk.LWItemInstancerFuncs() instance_info = lwsdk.LWItemInstanceInfo() interface_info = lwsdk.LWInterfaceInfo() current_time = interface_info.curTime autokey_is_on = ((interface_info.generalFlags & lwsdk.LWGENF_AUTOKEY) != 0) selected_item = interface_info.selected_items()[0] selected_item_id = lwsdk.itemid_to_str(selected_item) # find the Instancer that owns the selected object found_instancer = None obj = item_info.first(lwsdk.LWI_OBJECT, None) while obj and (not found_instancer): instancer = object_info.instancer(obj) if instancer: instance = instancer_funcs.first(instancer) while instance and (not found_instancer): if instance_info.item(instance) == selected_item: # found it! found_instancer = instancer break instance = instancer_funcs.next(instancer, instance) obj = item_info.next(obj) if not found_instancer: print >> sys.stderr, 'Object "%s" is NOT instanced!' % item_info.name( selected_item) return lwsdk.AFUNC_OK instances = [] instance = instancer_funcs.first(found_instancer) while instance: if instance_info.item(instance) == selected_item: instances.append(instance) instance = instancer_funcs.next(found_instancer, instance) # values used for progress current_index = 1.0 target_index = len(instances) * 1.0 for instance in instances: pos = instance_info.pos(instance, 0) # Note: InstanceInfo.rotation() returns radians! rot = instance_info.rotation(instance, 0) scl = instance_info.scale(instance, 0) lwsdk.command("SelectItem %s" % selected_item_id) lwsdk.command("Clone 1") lwsdk.command("Position %s" % str(pos)) # Note: Rotation expects degrees! lwsdk.command("Rotation %s" % str(Vector.to_degrees(rot))) lwsdk.command("Scale %s" % str(scl)) if not autokey_is_on: lwsdk.command("CreateKey %f" % current_time) lwsdk.command("StatusMsg {%f}Baking instances..." % (current_index / target_index)) current_index += 1.0 lwsdk.command("SelectItem %s" % selected_item_id) lwsdk.command("StatusMsg Baking complete.") return lwsdk.AFUNC_OK