Hello all,
I wrote a very simple script, it just toggle between wire/textured display mode of the selected/edited object.
The script is this:
import bpy
myob = bpy.context.active_object
if (myob.draw_type == 'WIRE'):
myob.draw_type = 'TEXTURED'
else:
myob.draw_type = 'WIRE'
My question is where I have to put the script, so I can use it also with other scenes, and how to create a shortcut to it in order to speed up things.
Thanks in advance.
CoDEmanX
(CoDEmanX)
June 26, 2012, 11:59am
2
make this an operator by deriving the bpy.types.Operator class and add keymapping, example:
import bpy
bl_info = {
"name": "Manipulator Hotkeys",
"description": "Bind manipulator modes to keys",
"author": "CoDEmanX",
"version": (0, 1),
"warning": "Rougly written, hope it works.",
"category": "3D View"
}
class VIEW3D_OT_manipulator_toggle(bpy.types.Operator):
'''Toggle manipulator mode in 3D View space'''
bl_idname = "view3d.manipulator_toggle"
bl_label = "Manipulator Set Mode"
@classmethod
def poll(cls, context):
return True
#return context.space_data.type == 'VIEW_3D'
def execute(self, context):
# Could use context.space_data instead, but works from console etc. this way
for a in context.screen.areas:
if a.type == 'VIEW_3D':
for sp in a.spaces:
if sp.type == 'VIEW_3D':
sp.show_manipulator = True
t = sp.use_manipulator_translate
r = sp.use_manipulator_rotate
sp.use_manipulator_translate = \
sp.use_manipulator_rotate = \
sp.use_manipulator_scale = False
if t:
sp.use_manipulator_rotate = True
elif r:
sp.use_manipulator_scale = True
else:
sp.use_manipulator_translate = True
return {'FINISHED'}
def register():
bpy.utils.register_class(VIEW3D_OT_manipulator_toggle)
kc = bpy.context.window_manager.keyconfigs.addon
if kc:
km = kc.keymaps.new(name="3D View", space_type="VIEW_3D")
kmi = km.keymap_items.new('view3d.manipulator_toggle', 'NUMPAD_MINUS', 'PRESS', shift=True)
# Could pass settings to operator properties here
#kmi.properties.mode = (False, True, False)
def unregister():
bpy.utils.unregister_class(VIEW3D_OT_manipulator_toggle)
kc = bpy.context.window_manager.keyconfigs.addon
if kc:
km = kc.keymaps["3D View"]
for kmi in km.keymap_items:
if kmi.idname == 'view3d.manipulator_toggle':
km.keymap_items.remove(kmi)
break
if __name__ == "__main__":
register()
Hi CoDEmanX,
I’m trying to modify your code, just starting from the beginning, but when I install the addon, I cannot turn it on:
import bpy
bl_info = {
"name": "tkmk Wire Toggle",
"description": "Toggle between wire and textured mode for selected objects",
"author": "Thinkinmonkey",
"version": (1, 0),
"blender": (2, 63, 0),
"category": "Object"}
class OBJECT_tkmk_wireToggle(bpy.types.Operator):
bl_idname = "object.tkmk_wireToggle"
bl_label = "Wire Textured toggle"
def execute(self, context):
# Does the main code go here, right?
return {'FINISHED'}
def register():
bpy.utils.register_class(OBJECT_tkmk_wireToggle)
def unregister():
bpy.utils.unregister_class(OBJECT_tkmk_wireToggle)
if __name__ == "__main__":
register()
What’s wrong?
Thanks again.
CoDEmanX
(CoDEmanX)
June 26, 2012, 3:24pm
4
import bpy
bl_info = {
"name": "tkmk Wire Toggle",
"description": "Toggle between wire and textured mode for selected objects",
"author": "Thinkinmonkey, CoDEmanX",
"version": (1, 0),
"category": "Object"
}
class OBJECT_OT_drawtype_toggle(bpy.types.Operator):
'''Toggle manipulator mode in 3D View space'''
bl_idname = "object.drawtype_toggle"
bl_label = "Manipulator Set Mode"
@classmethod
def poll(cls, context):
return context.active_object
def execute(self, context):
ob = context.active_object
if ob.draw_type == 'WIRE':
ob.draw_type = 'TEXTURED'
else:
ob.draw_type = 'WIRE'
return {'FINISHED'}
def register():
bpy.utils.register_class(OBJECT_OT_drawtype_toggle)
kc = bpy.context.window_manager.keyconfigs.addon
if kc:
km = kc.keymaps.new(name="3D View", space_type="VIEW_3D")
kmi = km.keymap_items.new('object.drawtype_toggle', 'Q', 'PRESS', alt=True)
# Could pass settings to operator properties here
#kmi.properties.mode = (False, True, False)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_drawtype_toggle)
kc = bpy.context.window_manager.keyconfigs.addon
if kc:
km = kc.keymaps["3D View"]
for kmi in km.keymap_items:
if kmi.idname == 'object.drawtype_toggle':
km.keymap_items.remove(kmi)
break
if __name__ == "__main__":
register()
this works
hotkey is Alt+Q but you can change it of course
Thanks a lot CoDEmanX for the code and explanations.
CoDEmanX
(CoDEmanX)
June 26, 2012, 3:51pm
6
just if people wonder: we talked on IRC
poll() gets called before execute() gets called. if it returns true, execute() will be executed, but if it returns false, it won’t
i let it return the active object, which means: if there is active_object, then execute, otherwise don’t
After deleting an object, active_object will be None.
If you use the hotkey / operator without the poll(), you’ll get errors, 'cause active_object is None and you’ll get follow up errors like NoneType object has no property “draw_type”