Hi,
I’m trying to write a python script creating various simple objects.
I want some of them to have no faces, i.e. only vertices and edges.
How can I do that?
Blender version: v2.49b
Here’s a part of my current script which already allows creating, placing, rotating and coloring of new objects:
def TestObjects():
sc = Blender.Scene.GetCurrent()
cube = Blender.Mesh.Primitives.Cube(1.0)
####################
# first object in selection list
# ob = Blender.Object.GetSelected()[0]
# get the Mesh version of our cube, not NMesh
# me = Blender.Mesh.Get( ob.data.name )
# create some materials
red = Blender.Material.New('Red')
red.rgbCol = 1,0,0 # red, green, blue values
green = Blender.Material.New('Green')
green.rgbCol = 0,1,0 # red, green, blue values
blue = Blender.Material.New('Blue')
blue.rgbCol = 0,0,1 # red, green, blue values
# add the material list to our ObData
cube.materials = [red, green, blue ]
# set the face materials of our cube
# we can set all faces the same color like this
for f in cube.faces:
f.mat = 0
# or for fun, we can alternate colors like this
for i in range(len(cube.faces)):
cube.faces[i].mat = i % 3
####################
sc.objects.new(cube,'Mesh')
cylinder = Blender.Mesh.Primitives.Cylinder(32, 2.0, 6.0)
# print cylinder.faces[0]
# cylinder.faces.clear()
# cylinder.RotX = math.radians( 90 )
obj = sc.objects.new(cylinder,'Mesh')
obj.RotX = math.radians( 45 )
obj.RotY = math.radians( 45 )
obj.RotZ = math.radians( 45 )
obj.LocX = 0
obj.LocY = 0
obj.LocZ = 5
# obj.setLocation(1,2,3)
# obj.setEuler([math.radians( 90 ),0,0])
# uvsphere = Blender.Mesh.Primitives.UVsphere(32, 32, 3.0)
# sc.objects.new(uvsphere,'Mesh')
# icosphere = Blender.Mesh.Primitives.Icosphere(2, 4.0)
# sc.objects.new(icosphere,'Mesh')
# grid = Blender.Mesh.Primitives.Grid(32, 32, 5.0)
# sc.objects.new(grid,'Mesh')
# plane = Blender.Mesh.Primitives.Plane(6.0)
# sc.objects.new(plane,'Mesh')
TestObjects()
Blender.Window.RedrawAll()
Blender.Window.WaitCursor(0)
edit: Solved using:
cylinder.faces.delete(0,range(len(cylinder.faces)));
If you know of any better way, let me know.
I would also like to know what the first argument to delete is! Couldn’t find anything about it in the official API: http://www.blender.org/documentation/249PythonDoc/
Did I miss something?
I also found the interesting “scripts->mesh->solid wireframe” script along the way. But I think just removing the faces will be more lightweight for what I want (no rendering in my case anyway).