[Bf-committers] Re: [Bf-blender-cvs] CVS commit: blender/source/blender/python/api2_2x Curve.c Scene.c matrix.c vector.c vector.h

Campbell Barton cbarton at metavr.com
Sat Oct 7 21:02:44 CEST 2006


Tom M wrote:
>>   Log:
>>   removed some unused vars from Curve and matrix
>>   scn.objects.new(None) - adds a new empty
>
> I'd prefer scn.objects.new(Empty) or such.  The above just seems a
> misuse of None and counterintutive
>
>>    - new objects are selected by default now
>>
>>   further stripped down the vector struct, the wrapped state was 
>> being stored and 2 places.
>
hey Tom,
This issue isnt realy limited to this case, but its a good example of 
problems with the python API.

I thaught about a few ways before adding this and they all have their 
drawbacks.
some requirements are..
1) adding an empty object should be short and something you can memorize 
if you use a few times.
2) adding a new object should be well defined  - users should not add an 
empty in by mistake or as a result of  a request for some other data 
returning None.
3) it should be as consistent as possible with the existing operation of 
scn.objects.new()

IMHO This reads fairly well, as the only object type with no data, it 
fits that None would create an object with no data, where data passed to 
.new() would make new objects of their own kind,
its good on #1 ok for #3 and #2  not so well. esp if you define the data 
beforehand.
ob_empty = scn.objects.new(None)

The alternative is to use a constant, Im resistant to adding 1 constant 
just for this case, which would also make #1 a lot worse
ob_empty = scn.objects.new(Blender.Object.Types.EMPTY)  # could of 
course remove the Blender.

What you may be suggesting is not a popular soluton from an API 
perspective but IMHO easier to use then constants, not so sloppy as 
using None, 'Empty' is also the value of ob.getType() so thats no as 
hard to remember.
ob_empty = scn.objects.new('Empty')


About constants also, the main reason I still use the Python docs a lot 
is to look up constants- say you want to set the fases texface alpha
its something like
face.transp |= Blender.FaceTransp.ALPHA. other face settings are stored 
in Blender.Mesh.FaceModes and Blender.Mesh.FaceFlags and it gets 
confusing as to whats stored where. - Nothing wrong with having settings 
in a constants Dict, but for common operations where there are only a 
few options, Id prefer not to be forced to call on a constants dict.

-- 
Campbell J Barton

133 Hope Street
Geelong West, Victoria 3218 Australia

URL:    http://www.metavr.com
e-mail: cbarton at metavr.com
phone: AU (03) 5229 0241


More information about the Bf-committers mailing list