- add BM_face_edge_share_loop(f, e) -- edge version of existing BM_face_vert_share_loop(f, v)
- simplify BM_edge_ordered_verts_ex(), check could be reduced.
- use BM_ELEM_INTERNAL_TAG for bmesh_jfke(), not BM_ELEM_TAG to avoid clobbering tagged data tools might use.
Was a bmesh todo, main issue was with shape keys, now disabled any changes to
the shape key data layer, and disabled the option altogether when editing
non-basis shape keys.
Don't create empty tesselated faces layers in edit derivedmesh, these are
being created on the fly so this will conflicted, and use loop data for
opengl attributes for edit derivedmesh drawing.
In fact there were several issues fixed (all of them regressions since bmesh merge):
- Creating navmesh crashed because creating new faces for mesh was trying to set
default values for all customdata layers in this face. This requires memory
pool created for this datablock.
Usually this pool is creating on creating datablock if there're some elements
to be stored in this block. In cases of regular primitive creating it wasn't
an issue because they doesn't create customdata layers, they only creates
geometry.
Navigation mesh creates geometry and customdata layers (CD_RECAST layer)
which used to confuse a bit custom data functions. Solved by ensuring there's
memory pool created for polygons datablock after adding new custom data layer.
Most probably it's better to be resolved on CD level (like smarter track on
changed amount of stored data and so) but prefer not to make such global changes
so close to the release.
- Toggling edit mode lead to loosing recast datalayer. Solved by adding recast
layer to bmesh mask so it'll be copied to/from edit mesh.
- Some part of code assumed raycast layer is in face datablock, some that it's in
polygon datablock. Made it to be in polygons datablock.
Kind of temporary solution to make navmesh working, probably it'll fail if one
will want to edit navmesh by hand after it was generated.
Proper way would be to ensure the whole navmesh things are using ngons.
Disable operator register and redo flags because it might modify non-mesh
data when in edit mode. This doesn't work properly with current undo stack
design.
This call is still needed when loading editmesh because some operations
are not creating CD layer for new loops (like crating new face) and
to prevent loosing all sculpted data when running disps correct
displacement maps should be allocated on loading edit mesh.
This feature did have a number of flaws and caused some controversy, so removal is the better option. Hiding nodes without prior connections would just hide all the sockets, leaving an unusable node. Better way is to use the ctrl+h shortcut to explicitly hide unused sockets when necessary.
This was caused by how keymap is guessing for importer/exporter:
- In some cases if detected wrong keymap like for IMPORT_CURVE_OT_svg
curve editing context was used because of CURVE_OT substring in
operator name
- In other cases no keymap was detected because of substrings
WM_keymap_guess_opname cheched.
Fixed by using Window keymap for any operator with EXPORT_/IMPORT_ substring
which seems to detect importer/exporter operator and only them nicely.
- dont do name based object lookup to find the object for a mesh undo state (possibly object is renamed inbetween undos which would crash)
- remove some todo comments for things that are working as they should.