# Duplicate child wihout parenting

Is there any way that I can duplicate children of other objects without automatically parenting it?

I mean, Each time after duplicating child objects (more often when making helper bones in a rig), it seems I have to manually clear the parent after that. So I wonder if there is any existing operation for that. Thanks!

• Well, if you say so... :P Just wondering if I missed any "awesome hidden undocumented" tricks. Something like to copy full rna path by a new introduced shortcut v.s. by manually typing. Hmm, if there isn't, probably I should talk to devs like Campbell directly as a small feature request. (not on SE for sure) Maybe by Shift Alt D to duplicate without auto-parenting, something like that. Is THAT convenient enough? ;) But before that, I have to make sure it isn't an existing operation. – Leon Cheung Dec 1 '15 at 15:09
• it probably makes sense to have a dedicated operator built in, but the docs don't show any exist at the moment. – zeffii Dec 1 '15 at 15:17

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": "",
"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')

def register():
bpy.utils.register_module(__name__)

if bpy.app.background: return

wm = bpy.context.window_manager
if kc:
km = kc.keymaps.new('Armature', space_type='EMPTY')
kmi = km.keymap_items.new(DuplicateWithoutParent.bl_idname, 'D', 'PRESS', alt=True, shift=True)

km = kc.keymaps.new('Object Mode', space_type='EMPTY')
kmi = km.keymap_items.new(DuplicateWithoutParent.bl_idname, 'D', 'PRESS', alt=True, shift=True)

def unregister():