While there is no built-in solution other than multiple keystrokes, an addon can easily add this.
This small script adds a "Duplicate without parenting" operator and connects it to the shortcut ⇧ Shift⎇ AltD This is available in object and armature edit modes.
import bpy
bl_info = {
"name": "Duplicate object(s) without parenting",
"author": "sambler",
"version": (1,0),
"blender": (2, 65, 0),
"location": "Shift-Alt-D",
"description": "Duplicate selected objects or bones without copying the parent connection",
"warning": "",
"wiki_url": "https://github.com/sambler/addonsByMe/blob/master/duplicate_without_parent.py",
"tracker_url": "https://github.com/sambler/addonsByMe/issues",
"category": "Object",
}
class DuplicateWithoutParent(bpy.types.Operator):
"""Duplicate selection without parenting"""
bl_idname = "object.duplicate_no_parent"
bl_label = "Duplicate without parenting"
@classmethod
def poll(cls, context):
return context.active_object is not None
def execute(self, context):
if context.active_object.type == 'ARMATURE' and context.active_object.mode == 'EDIT':
bpy.ops.armature.duplicate()
for b in context.selected_bones:
b.parent = None
else:
bpy.ops.object.duplicate()
bpy.ops.object.parent_clear(type='CLEAR')
return bpy.ops.transform.translate('INVOKE_DEFAULT')
addon_keymaps = []
def register():
bpy.utils.register_module(__name__)
if bpy.app.background: return
wm = bpy.context.window_manager
kc = wm.keyconfigs.addon
if kc:
km = kc.keymaps.new('Armature', space_type='EMPTY')
kmi = km.keymap_items.new(DuplicateWithoutParent.bl_idname, 'D', 'PRESS', alt=True, shift=True)
addon_keymaps.append((km, kmi))
km = kc.keymaps.new('Object Mode', space_type='EMPTY')
kmi = km.keymap_items.new(DuplicateWithoutParent.bl_idname, 'D', 'PRESS', alt=True, shift=True)
addon_keymaps.append((km, kmi))
def unregister():
for km, kmi in addon_keymaps:
km.keymap_items.remove(kmi)
addon_keymaps.clear()
bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()