* stopped bpy from importing automaticaly as decieded in the meeting.
* removed Blender.Main, since we agree it will be called bpy, renamed files also.
* updated epydocs from this and last commit.
* updated scripts to use bpy.*, and bugfix's for widgetwizard
This commit is contained in:
Campbell Barton 2007-03-26 19:44:44 +00:00
parent e968f6ec4b
commit 2b8bed8598
23 changed files with 291 additions and 312 deletions

@ -47,6 +47,7 @@ from the lib3ds project (http://lib3ds.sourceforge.net/) sourcecode.
######################################################
import Blender
import bpy
from Blender import Object, Material
import BPyMesh
@ -877,7 +878,7 @@ def save_3ds(filename):
time1= Blender.sys.time()
Blender.Window.WaitCursor(1)
scn= Blender.Main.scenes.active
scn= bpy.scenes.active
# Initialize the main chunk (primary):
primary = _3ds_chunk(PRIMARY)

@ -117,7 +117,8 @@ Loader is based on 3ds loader from www.gametutorials.com (Thanks DigiBen).
# Importing modules
import Blender
from Blender import Mesh, Main, Object, Material, Image, Texture, Lamp, Mathutils
import bpy
from Blender import Mesh, Object, Material, Image, Texture, Lamp, Mathutils
from Blender.Mathutils import Vector
import BPyImage
@ -864,7 +865,7 @@ def load_3ds(filename, PREF_UI= True):
##IMAGE_SEARCH
scn= Main.scenes.active
scn= bpy.scenes.active
SCN_OBJECTS = scn.objects
SCN_OBJECTS.selected = [] # de select all

@ -39,7 +39,7 @@ Hidden bones are ignored, and optionally only operate on selected bones.
# --------------------------------------------------------------------------
import Blender
from Blender import Main
import bpy
Vector= Blender.Mathutils.Vector
@ -248,7 +248,7 @@ def main():
User interface function that gets the options and calls armature_symetry()
'''
scn= Main.scenes.active
scn= bpy.scenes.active
arm_ob= scn.objects.active
if not arm_ob or arm_ob.type!='Armature':

@ -19,6 +19,7 @@
import Blender
import bpy
import BPyMesh_redux # seperated because of its size.
# reload(BPyMesh_redux)
redux= BPyMesh_redux.redux
@ -384,14 +385,13 @@ def getMeshFromObject(ob, container_mesh=None, apply_modifiers=True, vgroups=Tru
'''
if not scn:
scn= Blender.Main.scenes.active
scn= bpy.scenes.active
if not container_mesh:
mesh = Blender.Mesh.New()
mesh = bpy.meshes.new(ob.name)
else:
mesh= container_mesh
mesh.verts= None
ob_type = ob.type
dataname = ob.getData(1)
tempob= None

@ -22,6 +22,7 @@
# --------------------------------------------------------------------------
import Blender
import bpy
Vector= Blender.Mathutils.Vector
Ang= Blender.Mathutils.AngleBetweenVecs
CrossVecs= Blender.Mathutils.CrossVecs
@ -642,7 +643,7 @@ def redux(ob, REDUX=0.5, BOUNDRY_WEIGHT=2.0, REMOVE_DOUBLES=False, FACE_AREA_WEI
# Example usage
def main():
Blender.Window.EditMode(0)
scn= Blender.Main.scenes.active
scn= bpy.scenes.active
active_ob= scn.objects.active
t= Blender.sys.time()
redux(active_ob, 0.5)

@ -39,6 +39,7 @@ as empties or armatures.
# --------------------------------------------------------------------------
import Blender
import bpy
import BPyMessages
Vector= Blender.Mathutils.Vector
Euler= Blender.Mathutils.Euler
@ -310,7 +311,7 @@ def bvh_node_dict2objects(bvh_nodes, IMPORT_START_FRAME= 1, IMPORT_LOOP= False):
if IMPORT_START_FRAME<1:
IMPORT_START_FRAME= 1
scn= Blender.Main.scenes.active
scn= bpy.scenes.active
scn.objects.selected = []
objects= []
@ -442,7 +443,7 @@ def bvh_node_dict2armature(bvh_nodes, IMPORT_START_FRAME= 1, IMPORT_LOOP= False)
scn= Blender.Main.scenes.active
scn= bpy.scenes.active
scn.objects.selected = []
@ -749,7 +750,7 @@ def main():
if __name__ == '__main__':
main()
'''
scn = Blender.Main.scenes.active
scn = bpy.scenes.active
for ob in list(scn.objects): scn.objects.unlink(ob)
load_bvh_ui('/test.bvh', False)
'''

@ -812,4 +812,5 @@ cmdBuffer.append(cmdLine(' ', 0, 0))
def main():
Draw.Register(draw_gui, handle_event, handle_button_event)
main()
if __name__ == '__main__':
main()

@ -50,6 +50,7 @@ A pop-up will provide further options, if the results of a method are not adequa
# Made by Ideasman/Campbell 2005/06/15 - cbarton@metavr.com
import Blender
import bpy
from Blender import Window
from Blender.Mathutils import MidpointVecs, Vector, CrossVecs
from Blender.Mathutils import AngleBetweenVecs as _AngleBetweenVecs_
@ -520,7 +521,7 @@ def main():
is_editmode = Window.EditMode()
if is_editmode: Window.EditMode(0)
ob = Blender.Main.scenes.active.objects.active
ob = bpy.scenes.active.objects.active
if ob == None or ob.type != 'Mesh':
BPyMessages.Error_NoMeshActive()
return

@ -17,6 +17,7 @@ Optionaly you can skin between the original and new faces to make a watertight s
from Blender import *
import bpy
import BPyMesh
# reload(BPyMesh)
import BPyMessages
@ -100,7 +101,7 @@ def lengthFromAngle(angle):
def main():
scn = Main.scenes.active
scn = bpy.scenes.active
ob = scn.objects.active
if not ob or ob.type != 'Mesh':

@ -63,6 +63,7 @@ This script will work with object types: Mesh, Metaballs, Text3d, Curves and Nur
import Blender
import bpy
import BPyMesh
def copy_vgroups(source_ob, target_ob):
@ -85,7 +86,7 @@ def copy_vgroups(source_ob, target_ob):
def apply_deform():
scn= Blender.Main.scenes.active
scn= bpy.scenes.active
#Blender.Window.EditMode(0)
NAME_LENGTH = 19

@ -43,10 +43,11 @@ menu of the 3d View.
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
from Blender import *
import bpy
global renameCount
renameCount = 0
obsel = Main.scenes.active.objects.context
obsel = bpy.scenes.active.objects.context
def setDataNameWrapper(ob, newname):
if ob.getData(name_only=1) == newname:

@ -39,11 +39,11 @@ http://mediawiki.blender.org/index.php/Scripts/Manual/UV_Calculate/Follow_active
from Blender import *
import bpy
import BPyMesh
reload(BPyMesh)
def extend():
scn = Main.scenes.active
scn = bpy.scenes.active
ob = scn.objects.active
# print ob, ob.type

@ -38,7 +38,7 @@ Use this script in face select mode for texturing between textured faces.
from Blender import *
import bpy
def mostUsedImage(imageList): # Returns the image most used in the list.
if not imageList:
@ -70,7 +70,7 @@ def mostUsedImage(imageList): # Returns the image most used in the list.
def main():
scn = Main.scenes.active
scn = bpy.scenes.active
ob = scn.objects.active
if ob == None or ob.type != 'Mesh':
Draw.PupMenu('ERROR: No mesh object in face select mode.')

@ -35,6 +35,7 @@ __bpydoc__ = """\
from Blender import *
import bpy
import BPyMesh
# reload(BPyMesh)
@ -504,7 +505,7 @@ PREF_MARGIN_DIV= 512):
Window.RedrawAll()
def main():
scn = Main.scenes.active
scn = bpy.scenes.active
PREF_ACT_ONLY = Draw.Create(1)
PREF_SEL_ONLY = Draw.Create(1)

@ -40,6 +40,7 @@ http://mediawiki.blender.org/index.php/Scripts/Manual/UV_Calculate/Click_project
# --------------------------------------------------------------------------
import Blender
import bpy
import BPyMesh
import BPyWindow
@ -74,7 +75,7 @@ def mousedown_wait():
def main():
scn = Blender.Main.scenes.active
scn = bpy.scenes.active
ob = scn.objects.active
if not ob or ob.type!='Mesh':
return

@ -827,20 +827,18 @@ def main():
global USER_STRETCH_ASPECT
global USER_ISLAND_MARGIN
objects= Main.scenes.active.objects
objects= bpy.scenes.active.objects
# Use datanames as kesy so as not to unwrap a mesh more then once.
obList = dict([(ob.getData(name_only=1), ob) for ob in objects.context if ob.type == 'Mesh'])
# we can will tag them later.
obList = [ob for ob in objects.context if ob.type == 'Mesh']
# Face select object may not be selected.
ob = objects.active
if ob and ob.sel == 0 and ob.type == 'Mesh':
# Add to the list
obList[ob.getData(name_only=1)] = ob
obList =[ob]
del objects
obList = obList.values() # turn from a dict to a list.
if not obList:
Draw.PupMenu('error, no selected mesh objects')
return
@ -913,30 +911,34 @@ def main():
# Assume face select mode! an annoying hack to toggle face select mode because Mesh dosent like faceSelectMode.
if USER_SHARE_SPACE:
# Sort by data name so we get consistand results
# Sort by data name so we get consistant results
try: obList.sort(key = lambda ob: ob.getData(name_only=1))
except: obList.sort(lambda ob1, ob2: cmp( ob1.getData(name_only=1), ob2.getData(name_only=1) ))
collected_islandList= []
Window.WaitCursor(1)
time1 = sys.time()
# Tag as False se we dont operate on teh same mesh twice.
bpy.meshes.tag = False
for ob in obList:
me = ob.getData(mesh=1)
if me.tag or me.lib:
continue
# Tag as used
me.tag = True
if not me.faceUV: # Mesh has no UV Coords, dont bother.
me.faceUV= True
if USER_ONLY_SELECTED_FACES:
SELECT_FLAG = Mesh.FaceFlags.SELECT
HIDE_FLAG = Mesh.FaceFlags.HIDE
def use_face(f_flag):
if f_flag & HIDE_FLAG: return False
elif f_flag & SELECT_FLAG: return True
else: return False
meshFaces = [thickface(f) for f in me.faces if use_face(f.flag)]
meshFaces = [thickface(f) for f in me.faces if f.flag & SELECT_FLAG]
else:
meshFaces = map(thickface, me.faces)
@ -945,7 +947,6 @@ def main():
Window.DrawProgressBar(0.1, 'SmartProj UV Unwrapper, mapping "%s", %i faces.' % (me.name, len(meshFaces)))
# =======
# Generate a projection list from face normals, this is ment to be smart :)

@ -66,6 +66,7 @@ The widget is added and you are returned to the first screen for adding another
###################################################################
import Blender
import bpy
from Blender import Mesh,Object,Material,Window,IpoCurve,Ipo,Text3d
from Blender.BGL import *
from Blender.Draw import *
@ -103,7 +104,7 @@ def delCurve(ipo):
def verifyIpocurve(ky,index):
ipo = ky.ipo
if ipo == None:
nip = Ipo.New("Key","keyipo")
nip = bpy.ipos.new("keyipo", "Key")
ky.ipo = nip
ipo = ky.ipo
if index == 0:
@ -342,8 +343,8 @@ def setupDrivers(ob,ctrl,type):
ipo.driverObject = ctrl
ipo.driverChannel = IpoCurve.LOC_Z
delCurve(ipo)
ipo.v((0,0))
ipo.v((1,1))
ipo.append((0,0))
ipo.append((1,1))
ipo.recalc()
ipo2 = verifyIpocurve(ky,shapes[1].val)
@ -351,8 +352,8 @@ def setupDrivers(ob,ctrl,type):
ipo2.driverObject = ctrl
ipo2.driverChannel = IpoCurve.LOC_X
delCurve(ipo2)
ipo2.v((0,0))
ipo2.v((1,1))
ipo2.append((0,0))
ipo2.append((1,1))
ipo2.recalc()
ipo3 = verifyIpocurve(ky,shapes[2].val)
@ -360,7 +361,7 @@ def setupDrivers(ob,ctrl,type):
ipo3.driverObject = ctrl
ipo3.driverChannel = IpoCurve.LOC_X
delCurve(ipo3)
ipo3.v((-1,1))
ipo3.append((-1,1))
ipo3.append((0,0))
ipo3.recalc()
@ -388,13 +389,9 @@ def build(type):
return
loc = Window.GetCursorPos()
range = makeRange(type,rangename.val)
controller = makeController(rangename.val)
text = makeText(rangename.val)
sce.link(range)
sce.link(controller)
sce.link(text)
range = makeRange(sce, type,rangename.val)
controller = makeController(sce, rangename.val)
text = makeText(sce, rangename.val)
range.restrictRender = True
controller.restrictRender = True
@ -413,179 +410,158 @@ def build(type):
#Create the text
def makeText(name):
ob = Object.New("Text",name+".name")
def makeText(sce, name):
txt = Text3d.New(name+".name")
txt.setDrawMode(Text3d.DRAW3D)
txt.setAlignment(Text3d.MIDDLE)
txt.setText(name)
ob.link(txt)
ob = sce.objects.new(txt)
ob.setEuler((3.14159/2,0,0))
return ob
#Create the mesh controller
def makeController(name):
ob = Object.New("Mesh",name+".ctrl")
me = Mesh.New(name+".ctrl")
me.verts.extend(-0.15,0, 0)
me.verts.extend( 0,0, 0.15)
me.verts.extend( 0.15,0, 0)
me.verts.extend( 0,0,-0.15)
v = me.verts
c = [(v[0],v[1],v[2],v[3])]
me.edges.extend(c)
ob.link(me)
def makeController(sce, name):
me = bpy.meshes.new(name+".ctrl")
ob = sce.objects.new(me)
me.verts.extend([\
(-0.15,0, 0),\
( 0,0, 0.15),\
( 0.15,0, 0),\
( 0,0,-0.15)])
me.edges.extend([(0,1,2,3)])
return ob
#Create the mesh range
def makeRange(type,name):
ob = Object.New("Mesh",name)
def makeRange(sce,type,name):
#ob.setDrawMode(8) # Draw Name
me = Mesh.New(name)
l=[]
me = bpy.meshes.new(name)
ob = sce.objects.new(me)
if type == SHAPE1_ONE_ZERO:
me.verts.extend(-0.15,0,0)
me.verts.extend( 0.15,0,0)
me.verts.extend(-0.15,0,1)
me.verts.extend( 0.15,0,1)
me.verts.extend(-0.25,0,.1)
me.verts.extend(-0.25,0,-.10)
me.verts.extend(0.25,0,.1)
me.verts.extend(0.25,0,-0.10)
v = me.verts
l = [(v[0],v[1],v[3],v[2]),(v[4],v[5],v[0]),(v[6],v[7],v[1])]
me.edges.extend(l)
ob.link(me)
me.verts.extend([\
(-0.15,0,0),\
( 0.15,0,0),\
(-0.15,0,1),\
( 0.15,0,1),\
(-0.25,0,.1),\
(-0.25,0,-.10),\
(0.25,0,.1),\
(0.25,0,-0.10)])
me.edges.extend([(0,1,3,2),(4,5,0),(6,7,1)])
elif type == SHAPE1_TOGGLE:
me.verts.extend(-0.15,0,-0.5)
me.verts.extend( 0.15,0,-0.5)
me.verts.extend( 0.15,0, 0.5)
me.verts.extend(-0.15,0, 0.5)
me.verts.extend(-0.15,0, 1.5)
me.verts.extend( 0.15,0, 1.5)
v = me.verts
l = [(v[0],v[1],v[2],v[3]),(v[3],v[4],v[5],v[2])]
me.edges.extend(l)
ob.link(me)
me.verts.extend([\
(-0.15,0,-0.5),\
( 0.15,0,-0.5),\
( 0.15,0, 0.5),\
(-0.15,0, 0.5),\
(-0.15,0, 1.5),\
( 0.15,0, 1.5)])
me.edges.extend([(0,1,2,3),(3,4,5,2)])
elif type == SHAPE1_ZERO_MONE:
me.verts.extend(-0.15,0,0)
me.verts.extend( 0.15,0,0)
me.verts.extend(-0.15,0,-1)
me.verts.extend( 0.15,0,-1)
me.verts.extend(-0.25,0,.1)
me.verts.extend(-0.25,0,-.10)
me.verts.extend(0.25,0,.1)
me.verts.extend(0.25,0,-0.10)
v = me.verts
l = [(v[0],v[1],v[3],v[2]),(v[4],v[5],v[0]),(v[6],v[7],v[1])]
me.edges.extend(l)
ob.link(me)
me.verts.extend([\
(-0.15,0,0),\
( 0.15,0,0),\
(-0.15,0,-1),\
( 0.15,0,-1),\
(-0.25,0,.1),\
(-0.25,0,-.10),\
(0.25,0,.1),\
(0.25,0,-0.10)])
me.edges.extend([(0,1,3,2),(4,5,0),(6,7,1)])
elif type in [SHAPE1_ONE_MONE,SHAPE2_EXCLUSIVE]:
me.verts.extend(-0.15,0,-1)
me.verts.extend( 0.15,0,-1)
me.verts.extend(-0.15,0,1)
me.verts.extend( 0.15,0,1)
me.verts.extend(-0.25,0,.1)
me.verts.extend(-0.25,0,-.10)
me.verts.extend(0.25,0,.1)
me.verts.extend(0.25,0,-0.10)
me.verts.extend(-0.15,0,0)
me.verts.extend( 0.15,0,0)
me.verts.extend([\
(-0.15,0,-1),\
( 0.15,0,-1),\
(-0.15,0,1),\
( 0.15,0,1),\
(-0.25,0,.1),\
(-0.25,0,-.10),\
(0.25,0,.1),\
(0.25,0,-0.10),\
(-0.15,0,0),\
( 0.15,0,0)])
v = me.verts
l = [(v[0],v[1],v[3],v[2]),(v[4],v[5],v[8]),(v[6],v[7],v[9])]
l = [(0,1,3,2),(4,5,8),(6,7,9)]
me.edges.extend(l)
ob.link(me)
elif type == SHAPE2_T:
me.verts.extend(-1,0,0)
me.verts.extend( 1,0,0)
me.verts.extend( 1,0,-1)
me.verts.extend(-1,0,-1)
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,-1),\
(-1,0,-1)])
v = me.verts
l = [(v[0],v[1],v[2],v[3])]
me.edges.extend(l)
ob.link(me)
me.edges.extend([(0,1,2,3)])
elif type == SHAPE2_INVT:
me.verts.extend(-1,0,0)
me.verts.extend( 1,0,0)
me.verts.extend( 1,0,1)
me.verts.extend(-1,0,1)
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,1),\
(-1,0,1)])
v = me.verts
l = [(v[0],v[1],v[2],v[3])]
me.edges.extend(l)
ob.link(me)
me.edges.extend([(0,1,2,3)])
elif type == SHAPE2_PLUS:
me.verts.extend(-1,0,-1)
me.verts.extend( 1,0,-1)
me.verts.extend( 1,0,1)
me.verts.extend(-1,0,1)
me.verts.extend([\
(-1,0,-1),\
( 1,0,-1),\
( 1,0,1),\
(-1,0,1)])
me.edges.extend([(0,1,2,3)])
v = me.verts
l = [(v[0],v[1],v[2],v[3])]
me.edges.extend(l)
ob.link(me)
elif type == SHAPE2_V:
me.verts.extend(0,0,0)
me.verts.extend(1,0,0)
me.verts.extend(1,0,1)
me.verts.extend(0,0,1)
v = me.verts
l = [(v[0],v[1],v[2],v[3])]
me.edges.extend(l)
ob.link(me)
me.verts.extend([\
(0,0,0),\
(1,0,0),\
(1,0,1),\
(0,0,1)])
me.edges.extend([(0,1,2,3)])
ob.setEuler((0,-0.78539,0))
elif type == SHAPE3_INVT:
me.verts.extend(-1,0,0)
me.verts.extend( 1,0,0)
me.verts.extend( 1,0,1)
me.verts.extend(-1,0,1)
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,1),\
(-1,0,1)])
v = me.verts
l = [(v[0],v[1],v[2],v[3])]
me.edges.extend(l)
ob.link(me)
me.edges.extend([(0,1,2,3)])
elif type == SHAPE3_T:
me.verts.extend(-1,0,0)
me.verts.extend( 1,0,0)
me.verts.extend( 1,0,-1)
me.verts.extend(-1,0,-1)
me.verts.extend([\
(-1,0,0),\
( 1,0,0),\
( 1,0,-1),\
(-1,0,-1)])
v = me.verts
l = [(v[0],v[1],v[2],v[3])]
me.edges.extend(l)
ob.link(me)
me.edges.extend([(0,1,2,3)])
elif type == SHAPE4_X:
me.verts.extend(0,0,-1)
me.verts.extend(1,0,-1)
me.verts.extend(1,0,0)
me.verts.extend(1,0,1)
me.verts.extend(0,0,1)
me.verts.extend(-1,0,1)
me.verts.extend(-1,0,0)
me.verts.extend(-1,0,-1)
v = me.verts
l = [(v[0],v[1]),(v[1],v[2]),(v[2],v[3]),(v[3],v[4]),(v[4],v[5]),(v[5],v[6]),(v[6],v[7]),(v[7],v[0])]
me.edges.extend(l)
ob.link(me)
me.verts.extend([\
(0,0,-1),\
(1,0,-1),\
(1,0,0),\
(1,0,1),\
(0,0,1),\
(-1,0,1),\
(-1,0,0),\
(-1,0,-1)])
me.edges.extend([(0,1),(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,0)])
ob.setEuler((0,-0.78539,0))
return ob
@ -606,7 +582,7 @@ EVENT_BACK = 103
#get the list of shapes from the selected object
def shapeMenuText():
ob = Blender.Scene.GetCurrent().objects.active
ob = bpy.scenes.active.objects.active
if not ob:
return ""

@ -65,7 +65,7 @@
#include "api2_2x/Camera.h"
#include "api2_2x/Draw.h"
#include "api2_2x/Registry.h"
#include "api2_2x/Main.h" /* for the "bpy" default module */
#include "api2_2x/BPyModule.h" /* for the "bpy" default module */
/* for scriptlinks */
#include "DNA_lamp_types.h"
@ -116,6 +116,7 @@ int setup_armature_weakrefs()
*support for packages here e.g. import `package.module` */
static struct _inittab BPy_Inittab_Modules[] = {
{"Blender", M_Blender_Init},
{"bpy", M_BPy_Init},
{NULL, NULL}
};
@ -1972,8 +1973,9 @@ void init_ourImport( void )
m = PyImport_AddModule( "__builtin__" );
d = PyModule_GetDict( m );
/* add in "bpy" as a default module */
PyDict_SetItemString(d, "bpy", Main_Init() );
/* add in "bpy" as a default module
* This has been disabled, import like Blender*/
/*PyDict_SetItemString(d, "bpy", M_BPy_Init() );*/
EXPP_dict_set_item_str( d, "__import__", import );
}

@ -34,7 +34,7 @@
#include "MEM_guardedalloc.h" /* for MEM_callocN */
#include "DNA_space_types.h" /* SPACE_VIEW3D, SPACE_SEQ */
#include "DNA_scene_types.h"
#include "DNA_object_types.h" /* MainSeq_new */
#include "DNA_object_types.h" /* LibBlockSeq_new */
#include "DNA_texture_types.h"
#include "DNA_curve_types.h"
#include "DNA_ipo_types.h"
@ -103,7 +103,7 @@
#include "Text.h"
#include "Sound.h"
#include "NLA.h"
#include "Main.h"
#include "BPyModule.h"
#include "Scene.h"
#include "Library.h"
@ -115,22 +115,22 @@
#include "DNA_screen_types.h"
static PyObject *MainSeq_CreatePyObject( Link *iter, int type )
static PyObject *LibBlockSeq_CreatePyObject( Link *iter, int type )
{
BPy_MainSeq *seq = PyObject_NEW( BPy_MainSeq, &MainSeq_Type);
BPy_LibBlockSeq *seq = PyObject_NEW( BPy_LibBlockSeq, &LibBlockSeq_Type);
seq->iter = iter;
seq->type = type;
return (PyObject *)seq;
}
static int MainSeq_len( BPy_MainSeq * self )
static int LibBlockSeq_len( BPy_LibBlockSeq * self )
{
ListBase *lb = wich_libbase(G.main, self->type);
return BLI_countlist( lb );
}
static PyObject * MainSeq_subscript(BPy_MainSeq * self, PyObject *key)
static PyObject * LibBlockSeq_subscript(BPy_LibBlockSeq * self, PyObject *key)
{
char *name;
char *lib= NULL;
@ -188,16 +188,16 @@ static PyObject * MainSeq_subscript(BPy_MainSeq * self, PyObject *key)
( PyExc_KeyError, "Requested data does not exist") );
}
static PyMappingMethods MainSeq_as_mapping = {
( inquiry ) MainSeq_len, /* mp_length */
( binaryfunc ) MainSeq_subscript, /* mp_subscript */
static PyMappingMethods LibBlockSeq_as_mapping = {
( inquiry ) LibBlockSeq_len, /* mp_length */
( binaryfunc ) LibBlockSeq_subscript, /* mp_subscript */
( objobjargproc ) 0, /* mp_ass_subscript */
};
/************************************************************************
*
* Python MainSeq_Type iterator (iterates over GroupObjects)
* Python LibBlockSeq_Type iterator (iterates over GroupObjects)
*
************************************************************************/
@ -205,7 +205,7 @@ static PyMappingMethods MainSeq_as_mapping = {
* Initialize the interator index
*/
static PyObject *MainSeq_getIter( BPy_MainSeq * self )
static PyObject *LibBlockSeq_getIter( BPy_LibBlockSeq * self )
{
/* we need to get the first base, but for selected context we may need to advance
to the first selected or first conext base */
@ -221,15 +221,15 @@ static PyObject *MainSeq_getIter( BPy_MainSeq * self )
self->iter = link;
return EXPP_incr_ret ( (PyObject *) self );
} else {
return MainSeq_CreatePyObject(link, self->type);
return LibBlockSeq_CreatePyObject(link, self->type);
}
}
/*
* Return next MainOb.
* Return next LibBlockSeq iter.
*/
static PyObject *MainSeq_nextIter( BPy_MainSeq * self )
static PyObject *LibBlockSeq_nextIter( BPy_LibBlockSeq * self )
{
PyObject *object;
Link *link;
@ -246,7 +246,7 @@ static PyObject *MainSeq_nextIter( BPy_MainSeq * self )
return object;
}
PyObject *MainSeq_getActive(BPy_MainSeq *self)
PyObject *LibBlockSeq_getActive(BPy_LibBlockSeq *self)
{
switch (self->type) {
case ID_SCE:
@ -280,7 +280,7 @@ PyObject *MainSeq_getActive(BPy_MainSeq *self)
"Only Scene and Image types have the active attribute" );
}
static int MainSeq_setActive(BPy_MainSeq *self, PyObject *value)
static int LibBlockSeq_setActive(BPy_LibBlockSeq *self, PyObject *value)
{
switch (self->type) {
case ID_SCE:
@ -350,7 +350,7 @@ static int MainSeq_setActive(BPy_MainSeq *self, PyObject *value)
"Only Scene and Image types have the active attribute" );
}
static int MainSeq_setTag(BPy_MainSeq *self, PyObject *value)
static int LibBlockSeq_setTag(BPy_LibBlockSeq *self, PyObject *value)
{
int param = PyObject_IsTrue( value );
ID *id;
@ -390,7 +390,7 @@ Mesh *add_mesh__internal(char *name)
}
/* used for new and load */
PyObject *MainSeq_new(BPy_MainSeq *self, PyObject * args, PyObject *kwd)
PyObject *LibBlockSeq_new(BPy_LibBlockSeq *self, PyObject * args, PyObject *kwd)
{
ID *id = NULL;
char *name=NULL, *filename=NULL, *ipo_type;
@ -581,7 +581,7 @@ PyObject *MainSeq_new(BPy_MainSeq *self, PyObject * args, PyObject *kwd)
}
PyObject *MainSeq_unlink(BPy_MainSeq *self, PyObject * args)
PyObject *LibBlockSeq_unlink(BPy_LibBlockSeq *self, PyObject * args)
{
PyObject *pyobj;
@ -660,7 +660,7 @@ PyObject *MainSeq_unlink(BPy_MainSeq *self, PyObject * args)
"Only types Scene, Group and Text can unlink" );
}
static int MainSeq_compare( BPy_MainSeq * a, BPy_MainSeq * b )
static int LibBlockSeq_compare( BPy_LibBlockSeq * a, BPy_LibBlockSeq * b )
{
return ( a->type == b->type) ? 0 : -1;
}
@ -669,40 +669,40 @@ static int MainSeq_compare( BPy_MainSeq * a, BPy_MainSeq * b )
* repr function
* callback functions building meaninful string to representations
*/
static PyObject *MainSeq_repr( BPy_MainSeq * self )
static PyObject *LibBlockSeq_repr( BPy_LibBlockSeq * self )
{
return PyString_FromFormat( "[Main Iterator]");
return PyString_FromFormat( "[LibBlockSeq Iterator]");
}
static PyGetSetDef MainSeq_getseters[] = {
static PyGetSetDef LibBlockSeq_getseters[] = {
{"active",
(getter)MainSeq_getActive, (setter)MainSeq_setActive,
(getter)LibBlockSeq_getActive, (setter)LibBlockSeq_setActive,
"active object",
NULL},
{"tag",
(getter)NULL, (setter)MainSeq_setTag,
(getter)NULL, (setter)LibBlockSeq_setTag,
"tag all data in True or False (write only)",
NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
static struct PyMethodDef BPy_MainSeq_methods[] = {
{"new", (PyCFunction)MainSeq_new, METH_VARARGS | METH_KEYWORDS,
static struct PyMethodDef BPy_LibBlockSeq_methods[] = {
{"new", (PyCFunction)LibBlockSeq_new, METH_VARARGS | METH_KEYWORDS,
"(name) - Create a new object in this scene from the obdata given and return a new object"},
{"unlink", (PyCFunction)MainSeq_unlink, METH_VARARGS,
{"unlink", (PyCFunction)LibBlockSeq_unlink, METH_VARARGS,
"unlinks the object from the scene"},
{NULL, NULL, 0, NULL}
};
/*****************************************************************************/
/* Python MainSeq_Type structure definition: */
/* Python LibBlockSeq_Type structure definition: */
/*****************************************************************************/
PyTypeObject MainSeq_Type = {
PyTypeObject LibBlockSeq_Type = {
PyObject_HEAD_INIT( NULL ) /* required py macro */
0, /* ob_size */
/* For printing, in format "<module>.<name>" */
"Blender MainSeq", /* char *tp_name; */
sizeof( BPy_MainSeq ), /* int tp_basicsize; */
"Blender LibBlockSeq", /* char *tp_name; */
sizeof( BPy_LibBlockSeq ), /* int tp_basicsize; */
0, /* tp_itemsize; For allocation */
/* Methods to implement standard operations */
@ -711,14 +711,14 @@ PyTypeObject MainSeq_Type = {
NULL, /* printfunc tp_print; */
NULL, /* getattrfunc tp_getattr; */
NULL, /* setattrfunc tp_setattr; */
( cmpfunc ) MainSeq_compare, /* cmpfunc tp_compare; */
( reprfunc ) MainSeq_repr, /* reprfunc tp_repr; */
( cmpfunc ) LibBlockSeq_compare, /* cmpfunc tp_compare; */
( reprfunc ) LibBlockSeq_repr, /* reprfunc tp_repr; */
/* Method suites for standard classes */
NULL, /* PyNumberMethods *tp_as_number; */
NULL, /* PySequenceMethods *tp_as_sequence; */
&MainSeq_as_mapping, /* PyMappingMethods *tp_as_mapping; */
&LibBlockSeq_as_mapping, /* PyMappingMethods *tp_as_mapping; */
/* More standard operations (here for binary compatibility) */
@ -751,13 +751,13 @@ PyTypeObject MainSeq_Type = {
/*** Added in release 2.2 ***/
/* Iterators */
( getiterfunc) MainSeq_getIter, /* getiterfunc tp_iter; */
( iternextfunc ) MainSeq_nextIter, /* iternextfunc tp_iternext; */
( getiterfunc) LibBlockSeq_getIter, /* getiterfunc tp_iter; */
( iternextfunc ) LibBlockSeq_nextIter, /* iternextfunc tp_iternext; */
/*** Attribute descriptor and subclassing stuff ***/
BPy_MainSeq_methods, /* struct PyMethodDef *tp_methods; */
BPy_LibBlockSeq_methods, /* struct PyMethodDef *tp_methods; */
NULL, /* struct PyMemberDef *tp_members; */
MainSeq_getseters, /* struct PyGetSetDef *tp_getset; */
LibBlockSeq_getseters, /* struct PyGetSetDef *tp_getset; */
NULL, /* struct _typeobject *tp_base; */
NULL, /* PyObject *tp_dict; */
NULL, /* descrgetfunc tp_descr_get; */
@ -780,50 +780,46 @@ PyTypeObject MainSeq_Type = {
};
/*-----------------------Main module Init())-----------------------------*/
/*-----------------------------BPy module Init())-----------------------------*/
static char M_Main_doc[] = "The Blender.Main submodule";
static char M_BPy_Init_doc[] = "The bpy module";
PyObject *Main_Init( void )
void M_BPy_Init( void )
{
PyObject *submodule;
PyObject *module;
PyObject *dict;
if( PyType_Ready( &MainSeq_Type ) < 0 )
return NULL;
if( PyType_Ready( &Config_Type ) < 0 ) /* see Config.c */
return NULL;
submodule = Py_InitModule3( "Blender.Main", NULL, M_Main_doc );
dict = PyModule_GetDict( submodule );
PyType_Ready( &LibBlockSeq_Type );
PyType_Ready( &Config_Type );
/*submodule = Py_InitModule3( "Blender.Main", NULL, M_Main_doc );*/
module = Py_InitModule3( "bpy", NULL, M_BPy_Init_doc );
dict = PyModule_GetDict( module );
PyDict_SetItemString( dict, "libraries", Library_Init( ) );
/* Python Data Types */
PyModule_AddObject( submodule, "scenes", MainSeq_CreatePyObject(NULL, ID_SCE) );
PyModule_AddObject( submodule, "objects", MainSeq_CreatePyObject(NULL, ID_OB) );
PyModule_AddObject( submodule, "meshes", MainSeq_CreatePyObject(NULL, ID_ME) );
PyModule_AddObject( submodule, "curves", MainSeq_CreatePyObject(NULL, ID_CU) );
PyModule_AddObject( submodule, "metaballs", MainSeq_CreatePyObject(NULL, ID_MB) );
PyModule_AddObject( submodule, "materials", MainSeq_CreatePyObject(NULL, ID_MA) );
PyModule_AddObject( submodule, "textures", MainSeq_CreatePyObject(NULL, ID_TE) );
PyModule_AddObject( submodule, "images", MainSeq_CreatePyObject(NULL, ID_IM) );
PyModule_AddObject( submodule, "lattices", MainSeq_CreatePyObject(NULL, ID_LT) );
PyModule_AddObject( submodule, "lamps", MainSeq_CreatePyObject(NULL, ID_LA) );
PyModule_AddObject( submodule, "cameras", MainSeq_CreatePyObject(NULL, ID_CA) );
PyModule_AddObject( submodule, "ipos", MainSeq_CreatePyObject(NULL, ID_IP) );
PyModule_AddObject( submodule, "worlds", MainSeq_CreatePyObject(NULL, ID_WO) );
PyModule_AddObject( submodule, "fonts", MainSeq_CreatePyObject(NULL, ID_VF) );
PyModule_AddObject( submodule, "texts", MainSeq_CreatePyObject(NULL, ID_TXT) );
PyModule_AddObject( submodule, "sounds", MainSeq_CreatePyObject(NULL, ID_SO) );
PyModule_AddObject( submodule, "groups", MainSeq_CreatePyObject(NULL, ID_GR) );
PyModule_AddObject( submodule, "armatures", MainSeq_CreatePyObject(NULL, ID_AR) );
PyModule_AddObject( submodule, "actions", MainSeq_CreatePyObject(NULL, ID_AC) );
PyModule_AddObject( module, "scenes", LibBlockSeq_CreatePyObject(NULL, ID_SCE) );
PyModule_AddObject( module, "objects", LibBlockSeq_CreatePyObject(NULL, ID_OB) );
PyModule_AddObject( module, "meshes", LibBlockSeq_CreatePyObject(NULL, ID_ME) );
PyModule_AddObject( module, "curves", LibBlockSeq_CreatePyObject(NULL, ID_CU) );
PyModule_AddObject( module, "metaballs", LibBlockSeq_CreatePyObject(NULL, ID_MB) );
PyModule_AddObject( module, "materials", LibBlockSeq_CreatePyObject(NULL, ID_MA) );
PyModule_AddObject( module, "textures", LibBlockSeq_CreatePyObject(NULL, ID_TE) );
PyModule_AddObject( module, "images", LibBlockSeq_CreatePyObject(NULL, ID_IM) );
PyModule_AddObject( module, "lattices", LibBlockSeq_CreatePyObject(NULL, ID_LT) );
PyModule_AddObject( module, "lamps", LibBlockSeq_CreatePyObject(NULL, ID_LA) );
PyModule_AddObject( module, "cameras", LibBlockSeq_CreatePyObject(NULL, ID_CA) );
PyModule_AddObject( module, "ipos", LibBlockSeq_CreatePyObject(NULL, ID_IP) );
PyModule_AddObject( module, "worlds", LibBlockSeq_CreatePyObject(NULL, ID_WO) );
PyModule_AddObject( module, "fonts", LibBlockSeq_CreatePyObject(NULL, ID_VF) );
PyModule_AddObject( module, "texts", LibBlockSeq_CreatePyObject(NULL, ID_TXT) );
PyModule_AddObject( module, "sounds", LibBlockSeq_CreatePyObject(NULL, ID_SO) );
PyModule_AddObject( module, "groups", LibBlockSeq_CreatePyObject(NULL, ID_GR) );
PyModule_AddObject( module, "armatures", LibBlockSeq_CreatePyObject(NULL, ID_AR) );
PyModule_AddObject( module, "actions", LibBlockSeq_CreatePyObject(NULL, ID_AC) );
/* Other Types */
PyModule_AddObject( submodule, "config", Config_CreatePyObject() );
return submodule;
PyModule_AddObject( module, "config", Config_CreatePyObject() );
}

@ -1,5 +1,4 @@
/*
* $Id$
*
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
*
@ -30,16 +29,16 @@
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
#ifndef EXPP_MAIN_H
#define EXPP_MAIN_H
#ifndef EXPP_BPYMODULE_H
#define EXPP_BPYMODULE_H
#include <Python.h>
/* The Main PyType Object defined in Main.c */
extern PyTypeObject MainSeq_Type;
extern PyTypeObject LibBlockSeq_Type;
#define BPy_MainSeq_Check(v) \
((v)->ob_type == &MainSeq_Type)
#define BPy_LibBlockSeq_Check(v) \
((v)->ob_type == &LibBlockSeq_Type)
/* Main sequence, iterate on the libdatas listbase*/
typedef struct {
@ -47,9 +46,9 @@ typedef struct {
Link *iter; /* so we can iterate over the listbase */
short type; /* store the ID type such as ID_ME */
} BPy_MainSeq;
} BPy_LibBlockSeq;
PyObject *Main_Init( void );
void M_BPy_Init( void );
#endif /* EXPP_MAIN_H */

@ -93,7 +93,6 @@ struct ID; /*keep me up here */
#include "Window.h"
#include "World.h"
#include "Types.h"
#include "Main.h"
/**********************************************************/
/* Python API function prototypes for the Blender module. */
@ -987,6 +986,5 @@ void M_Blender_Init(void)
PyDict_SetItemString(dict, "Texture", Texture_Init());
PyDict_SetItemString(dict, "Window", Window_Init());
PyDict_SetItemString(dict, "World", World_Init());
PyDict_SetItemString(dict, "Main", Main_Init());
}

@ -12,7 +12,7 @@ The Blender Python API Reference
-----------
- L{Blender}
- L{bpy<Bpy>} (automatically imported)
- L{bpy<Bpy>}
Submodules:
-----------

@ -60,10 +60,10 @@ Example::
import os
sound_dir = '/home/me/soundfiles/'
sounds_new = []
for filename in os.listdir(sound_dir):
if filename.lower().endswith('.wav'):
for fname in os.listdir(sound_dir):
if fname.lower().endswith('.wav'):
try:
snd = bpy.sounds.load(sound_dir + filename)
snd = bpy.sounds.new(filename = sound_dir + fname)
except:
snd = None
@ -93,50 +93,50 @@ Example::
Window.RedrawAll()
@var scenes: iterator for L{scene<Scene.Scene>} data
@type scenes: L{dataIterator}
@type scenes: L{LibBlockSeq}
@var objects: iterator for L{object<Object.Object>} data
@type objects: L{dataIterator}
@type objects: L{LibBlockSeq}
@var meshes: iterator for L{mesh<Mesh.Mesh>} data
@type meshes: L{dataIterator}
@type meshes: L{LibBlockSeq}
@var curves: iterator for L{curve<Curve.Curve>} data
@type curves: L{dataIterator}
@type curves: L{LibBlockSeq}
@var metaballs: iterator for L{metaball<Metaball.Metaball>} data
@type metaballs: L{dataIterator}
@type metaballs: L{LibBlockSeq}
@var materials: iterator for L{material<Material.Material>} data
@type materials: L{dataIterator}
@type materials: L{LibBlockSeq}
@var textures: iterator for L{texture<Texture.Texture>} data
@type textures: L{dataIterator}
@type textures: L{LibBlockSeq}
@var images: iterator for L{image<Image.Image>} data
@type images: L{dataIterator}
@type images: L{LibBlockSeq}
@var lattices: iterator for L{lattice<Lattice.Lattice>} data
@type lattices: L{dataIterator}
@type lattices: L{LibBlockSeq}
@var lamps: iterator for L{lamp<Lamp.Lamp>} data
@type lamps: L{dataIterator}
@type lamps: L{LibBlockSeq}
@var cameras: iterator for L{camera<Camera.Camera>} data
@type cameras: L{dataIterator}
@type cameras: L{LibBlockSeq}
@var ipos: iterator for L{ipo<Ipo.Ipo>} data
@type ipos: L{dataIterator}
@type ipos: L{LibBlockSeq}
@var worlds: iterator for L{world<World.World>} data
@type worlds: L{dataIterator}
@type worlds: L{LibBlockSeq}
@var fonts: iterator for L{font<Font.Font>} data
@type fonts: L{dataIterator}
@type fonts: L{LibBlockSeq}
@var texts: iterator for L{text<Text.Text>} data
@type texts: L{dataIterator}
@type texts: L{LibBlockSeq}
@var sounds: iterator for L{sound<Sound.Sound>} data
@type sounds: L{dataIterator}
@type sounds: L{LibBlockSeq}
@var groups: iterator for L{group<Group.Group>} data
@type groups: L{dataIterator}
@type groups: L{LibBlockSeq}
@var armatures: iterator for L{armature<Armature.Armature>} data
@type armatures: L{dataIterator}
@type armatures: L{LibBlockSeq}
@var actions: iterator for L{action<NLA.Action>} data
@type actions: L{dataIterator}
@var libraries: L{New library<LibData>} submodule
@type libraries: L{New library<LibData>}
@type actions: L{LibBlockSeq}
@var libraries: L{librarySeq<LibData>} submodule
@type libraries: L{librarySeq<LibData>}
"""
class dataIterator:
class LibBlockSeq:
"""
Generic Data Access
===================
@ -208,21 +208,28 @@ class dataIterator:
- L{texts}
This can also be used to set the active data.
>>> bpy.images.active = bpy.images.load('/home/me/someimage.jpg')
>>> bpy.images.active = bpy.images.new(filename = '/home/me/someimage.jpg')
"""
def new(name):
def new(name="", filename=""):
"""
This function returns a new datablock
This function returns a new datablock containing no data or loaded from a file.
Exceptions
==========
Images optionally accept 2 extra arguments: bpy.images.new(name, width=256, height=256)
Use the filename keyword string values to load data from a file, this works with L{images}, L{texts}, L{sounds}, L{fonts} only.
>>> sound = bpy.sounds.new('newsound', '~/mysound.wav') # uses the first string given for the name.
>>> sound = bpy.sounds.new(filename = '~/mysound.wav') # will use the filename to make the name.
Images optionally accept 3 arguments: bpy.images.new(name, width=256, height=256)
The width and height must br between 4 and 5000 if no args are given they will be 256.
Ipos need 2 arguments: bpy.ipos.new(name, type) type must be a string can be
Ipos need 2 arguments: bpy.ipos.new(name, type) type must be a string (use in place of filename) can be...
- 'Camera'
- 'World'
- 'Material'
@ -243,17 +250,6 @@ class dataIterator:
@rtype: datablock
"""
def load(filename):
"""
This function loads a new datablock from a file.
applies to:
- L{fonts}
- L{sounds}
- L{images}
Other types will raise an error.
@rtype: datablock
"""
def unlink(datablock):
"""