Blender Stack Exchange is a question and answer site for people who use Blender to create 3D graphics, animations, or games. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a script that takes in positional data and creates a cube based on their positions. Each time I run the script, I've noticed that the old cubes are still showing up in the User Perspective. It's a pain to go through each cube and manually delete them.

I've googled for a while to find a solution to no avail. I know that

for ob in

Allows me to iterate through the objects in the scene. I get


but I don't know how to use the API to select only cubes to remove and I don't know how to remove them. Is unlinking the same thing as removing the cubes from the user perspective?

share|improve this question
up vote 8 down vote accepted

This should do the trick, first iterate through everything in your scene, next check if it is as mesh and check if it is a cube (by name using the first 4 chars), then remove it. Also, make sure you are in object mode when running the script.

import bpy

scene = bpy.context.scene

for ob in scene.objects:
    if ob.type == 'MESH' and"Cube"): = True
    else: = False


Unlinking an object from a scene does not remove it entirely.

Condensed version of the same script thanks to CoDEmanX.

import bpy    
for ob in bpy.context.scene.objects: = ob.type == 'MESH' and"Cube")
share|improve this answer
1"Cube") is more efficient self-explaining, and the call to delete() can be moved outside the loop - all selected objects are deleted by a single call. Note that the delete operator will fail if in editmode! Other than that, it's the optimal solution, would cause trouble 'cause of users (scenes and mesh datablocks). – CoDEmanX Apr 21 '14 at 23:47
@CoDEmanX Thanks for the hints, need to start practising more "idiomatic blender python" – iKlsR Apr 21 '14 at 23:50
You're welcome =) Now that I think about it... Shouldn't there be an else clause to deselect all objects that could be selected but don't match the condition? – CoDEmanX Apr 21 '14 at 23:53
@CoDEmanX Another good catch ;), I would have chosen to just deselect everything prior to the loop but that's better. – iKlsR Apr 21 '14 at 23:57
It could actually be condensed to = ob.type == 'MESH' and"Cube"), although it's a bit less clear in the visual appearance. – CoDEmanX Apr 22 '14 at 0:02

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.