[Bf-python] Doubts while porting VRM to blender 2.6x (sort faces arbitrarily)

Campbell Barton ideasman42 at gmail.com
Tue Jun 5 12:54:12 CEST 2012


On Fri, Jun 1, 2012 at 3:06 PM, Antonio Ospite <ospite at studenti.unina.it> wrote:
> Hi
>
> I am reusing this thread, AFAICS most of my questions are still valid
> with the current BMesh API, see the comments inlined below.
>
> On Wed, 15 Feb 2012 23:37:09 +0100
> Antonio Ospite <ospite at studenti.unina.it> wrote:
>
>> I am trying to port VRM (http://vrm.ao2.it) to blender 2.6x and I'd
>> like to discuss some of the problems I am facing, in the hope that I can
>> save some time in case someone else has solved those problems already,
>> or to see if future development in blender (I am thinking to BMesh
>> here) could help me to keep the script more manageable. I can release
>> it after 2.63, 2.64 or 2.65 I am definitely not in a hurry here.
>>
>> When I firstly wrote VRM I abused the Mesh and NMesh classes to
>> store the result of the various rendering steps (projected coordinates
>> of vertices, faces color, info about face visibility, etc.), this way I
>> could concentrate more on the algorithms and less on the data
>> structures.
>>
>> To do that I used to sort objects in a scene and also sort faces in a
>> mesh according to certain criteria, removing, adding and splitting
>> faces; and the old NMesh class allowed some of these operations.
>>
>> The new API appears to be stricter about mesh data processing: data has
>> to be taken out, processed and then re-added in to a mesh [...]
>
> BMesh is more flexible about mesh data processing but I am still missing
> some features.
>
>> I am listing here some hypothetic API I could use to keep on abusing the
>> blender data structures as I am doing right now :), if you have some
>> time to think about them I will appreciate if you could tell me if
>> those make sense to you too.
>>
>> I could use something like:
>> scene.objects.sort(key=some key based on objects properties)
>> mesh.faces.sort(key=some key [face index?] based on faces and vertices
>> properties)
>>
>
> This would be handy for my use case, maybe it is a bit of a stretch to
> use modeling structures for rendering operations, so I will accept a
> "you're doing it wrong" type of comments here :)
>
>> This would allow to do the sorting in a more flexible way,
>> bpy.ops.mesh.sort_faces() looks quite limited for my use case.
>>
>> Moreover, I would be happy if I was able to split a face along a plane,
>> something like:
>> mesh.split_face(face_index, plane_co, plane_normal)
>>
>
> This has been added to bmesh.utils, thanks!
>
> [...]
>>
>> Adding and removing individual faces could be handy too:
>> face = mesh.faces.pop(index)
>> mesh.faces.insert(new_index, face)
>
> IIUC in BMesh, mesh.faces.remove(BMFace) and mesh.faces.new() cannot be
> used to fake pop() and insert(), as removing a face will make it dead.
>
> I see that the index in a BMFace can be altered, so what about
> something like BMFaceSeq.sort_by_index() to reorder faces according to
> the reordered index values? Mh but we have to ensure that the index
> values are valid, so maybe not a great idea.
>
>> The question is: is there any chance that functionalities similar to the
>> ones I described could be added to blender? Could these be useful to
>> other scripts as well?
>>
>
> This question boils down to: is the ability to sort faces arbitrarily
> (or other elements) something modeling tools can make use of?

replying on a single issue if face sorting, while you cant ensure
order when adding faces - which may be added at any index.
there is support for sorting: see
BM_mesh_remap

adding support for something like this isnt so hard:
  faces.sort(key=lambda f: f.calc_area())

>> Alternatively I will end up having my own data structures for scene,
>> objects and meshes, which is OK too, but that is not lazy enough for
>> my taste.
>>
>
> Thanks again,
>   Antonio
>
> P.S. Please reply inline, avoid top-posting if you can, so I can follow
> the conversation better.
>
> --
> Antonio Ospite
> http://ao2.it
>
> A: Because it messes up the order in which people normally read text.
>   See http://en.wikipedia.org/wiki/Posting_style
> Q: Why is top-posting such a bad thing?
> _______________________________________________
> Bf-python mailing list
> Bf-python at blender.org
> http://lists.blender.org/mailman/listinfo/bf-python



-- 
- Campbell



More information about the Bf-python mailing list