# Sketch for possible glitch3d addon bl_info = {

"name": "Glitch3D",
"category": "Object",

}

import bpy

class ObjectCursorArray(bpy.types.Operator):

"""Object Cursor Array"""
bl_idname = "object.cursor_array"
bl_label = "Cursor Array"
bl_options = {'REGISTER', 'UNDO'}

total = bpy.props.IntProperty(name="Steps", default=2, min=1, max=100)

def execute(self, context):
    scene = context.scene
    cursor = scene.cursor_location
    obj = scene.objects.active
    for i in range(self.total):
        obj_new = obj.copy()
        scene.objects.link(obj_new)
        factor = i / self.total
        obj_new.location = (obj.location * factor) + (cursor * (1.0 - factor))
    return {'FINISHED'}

def menu_func(self, context):

self.layout.operator(ObjectCursorArray.bl_idname)

# store keymaps here to access after registration addon_keymaps = []

def register():

bpy.utils.register_class(ObjectCursorArray)
bpy.types.VIEW3D_MT_object.append(menu_func)

# handle the keymap
wm = bpy.context.window_manager
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode', space_type='EMPTY')
kmi = km.keymap_items.new(ObjectCursorArray.bl_idname, 'SPACE', 'PRESS', ctrl=True, shift=True)
kmi.properties.total = 4
addon_keymaps.append(km)

def unregister():

bpy.utils.unregister_class(ObjectCursorArray)
bpy.types.VIEW3D_MT_object.remove(menu_func)

# handle the keymap
wm = bpy.context.window_manager
for km in addon_keymaps:
    wm.keyconfigs.addon.keymaps.remove(km)
# clear the list
del addon_keymaps[:]

if __name__ == “__main__”:

register()