1
$\begingroup$

I want to write an addon that can combine two selections with a logical AND.

For example, the user use via normal gui

bpy.ops.mesh.select_similar(type='LENGTH')

and

bpy.ops.mesh.select_similar(type='DIR').

Then he calls the addon, the addon gets the current selection, the selection made before, combine them and write the selection back.

My problem is I don't know how I can access these history data via python nor if it's possible. This would be my favorite way of workflow for the addon.

I can extend the addon with a call to store the actual selection, so the user make a similar select, call the addon to store the current selection, make another similar select and call the addon to combine the both selections and write it back.

For this way I need to store a customized boolean at the bmesh faces/edges/vertices data, but I can't figure it out how. If I try to store custom data I run in these error:

bm.faces[0]['and_select'] = False
Traceback (most recent call last):
File "", line 1, in
AttributeError: BMElem[key]: invalid key, must be a BMLayerItem

An example how this must be done would help.

$\endgroup$
  • $\begingroup$ I don't see a purpose for your intended addon. If you use select similar in the UI, the current selection will be extended. There's really no need to "combine" selections by script. $\endgroup$ – CoDEmanX Nov 9 '14 at 15:51
  • $\begingroup$ I don´t want to extend the selection, i want the intersection of two different selections. Such as do a binary AND operation. $\endgroup$ – rigoletto Nov 10 '14 at 18:11
  • $\begingroup$ I see, check out my addon border deselect outer then. I recommend pink vertex's solution however for your particular problem. $\endgroup$ – CoDEmanX Nov 10 '14 at 19:50
2
$\begingroup$

Don't use the string key. Instead use a direct reference for the layer:

layer = bm.faces.layers.int.new('layer_name')
bm.faces[0][layer] = 0

There is no boolean layer available.

The selection history works only for single verts/edges/faces.

You can use the bmesh operators similar_faces, similar_edges, similar_verts which will return the selection.

Links to the source: bmo_similar.c, bmesh_operators.h

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.