[Bf-python] Some Recent Patches to BPython

Joseph Gilbert models at paposo.com
Fri May 6 17:24:07 CEST 2005


All the NMesh 'New' methods call new_NMesh_internal() which creates a 
python representation of the C struct. I don't know how memory intenisve 
this is, but it's prob not good for a large number of meshes. It's also 
better to get the object instead of a list of names because of of the 
getObject().setProperty() nature of python - OO is better imho. Of 
course the way to solve that would be to get a pointer to Mesh* rather 
than create the python mimic of the C data - which would require no huge 
memory gobbling by python. There was a reason for doing it this way 
though - (*cough* willian), I thought it was for speed in updating a mesh. 

This however is not the case with scene data. Scene data is represented 
by a pointer to Scene*. Getting the pointer is trivial and should not 
prevent people from getting a list of scene objects.
Calling Scene.getActive().name is not a problem....

PS we should migrate away from using 1/0 or some other numeric as a 
flag. This is bad form an hard to read. If we want to set properties 
they should be done with module level constants.  getRaw(1) is alot less 
descriptive then getRaw(NAMES).


Campbell Barton wrote:

>
>
> Stephen Swaney wrote:
>
>> On Fri, May 06, 2005 at 07:01:07PM +1000, Campbell Barton wrote:
>>
>>> Hi, Recently  have added some small usefull patches to the patch 
>>> tracker.
>>>
>>> Heres a list
>>>
>>>
>>> *** NMesh.GetNames()
>>> https://projects.blender.org/tracker/index.php?func=detail&aid=2523&group_id=9&atid=127 
>>>
>>> - Solves the problem where it is impossible to get mesh objects with 
>>> a fake user/no users. Unless you alredy knew the name.
>>> - Provides a much faster and simpler method the the current Python
>>> # Gets a list of unique nmesh names
>>> nmesh_names = []
>>> for ob in Objects.Get():
>>> ____if ob.getType() == 'Mesh':
>>> ________if ob.getData(name_only=1) not in nmesh_names:
>>> ____________nmesh_names.append( ob.getData(name_only=1) )
>>>
>>> # Now we have a list.
>>
>>
>>
>> I was not aware this was a problem.
>>
>> Based on the rest of the Bpy API, I would expect NMesh to have
>> a Get() method that either returns the named object or a list
>> of all the Nmeshes.  To just get the names and not the entire
>> object, we could apply the name_only=1 metaphor we used in
>> Object.getData().
>>
>>
>>> *** Scene.getActive()
>>> https://projects.blender.org/tracker/index.php?func=detail&aid=2521&group_id=9&atid=127 
>>>
>>> - Solves the problem where Object.GetSelected()[0] was assumed to be 
>>> the active object, which is not always true since the active object 
>>> for a scene does not have to be selected.
>>
>>
>>
>> Is this different than Scene.GetCurrent() ?
>
>
> Hi, the resion not to get the nmesh data is that this can be very 
> CPU/Memory Intensive. Keep in mind that some people use Meshes that 
> just about fill there entire system Ram, so making a copy of ALL NMesh 
> data at once could even crash blender- and is not very efficient.
>
> - Cam
>
>
>
> _______________________________________________
> Bf-python mailing list
> Bf-python at projects.blender.org
> http://projects.blender.org/mailman/listinfo/bf-python





More information about the Bf-python mailing list