Commit Graph

250 Commits

Author SHA1 Message Date
Brecht Van Lommel
606057b3af Fix tweak for #30638: use same BMesh Face area computation functions as Mesh,
it's a bit fuzzy how to compute area for ngons, but at least should be consistent.
2012-03-27 18:26:41 +00:00
Nicholas Bishop
cd882a446a Spelling fix, sentine -> sentinel.
'sentine' apparently means "A place for dregs and dirt; a sink; a sewer" :)
2012-03-27 10:55:20 +00:00
Campbell Barton
09f29c0b70 style/name cleanup: have EDBM_* functions match our style guide and also match BM_ function naming conventions 2012-03-27 04:46:52 +00:00
Campbell Barton
2743f2bb3f fix [#30257] bmesh: Rip "V" don't work on end vertex
added option to edgesplit bmesh operator to take tagged vertices as well so an edge at a boundary can split without splitting off the boundary vertex.

the behavior/speed of the edge split modifier and tool remainss the same, this is only used for rip.
2012-03-26 12:02:41 +00:00
Antony Riakiotakis
c379b78d8a fix #30668 and the rest of #30638.
Port angle stretch code for uvs to bmesh.

Also added comment to clarify previous commit.
2012-03-25 21:18:44 +00:00
Antony Riakiotakis
8c6fc392c2 Comment out the projection to ngon normal plane when calculating ngon area. This is hardly worth the cost since we use an approximation anyway. 2012-03-25 19:13:50 +00:00
Antony Riakiotakis
eb10402365 Fix #30638 and part of #30646.
Problem was that area calculation of polygons was done relative to the xy plane, and with a very obscure (to me at least) algorithm. That meant that vertical ngons would get 0 area. 

Commented initial code in case this is a strange optimization case that someone wants to use and used a cleaner algorithm: first project vertices to the ngon plane, defined by the normal of the ngon and the center (mean) of the ngon vertices. This will only be exact for convex and mostly planar ngons, still it is much better than the previous code.

Also fixed memory leak when stretch display was on.
2012-03-25 19:02:28 +00:00
Campbell Barton
fffe342d87 bmesh inset: another small improvement - use the shared edge vector rather then the cross product between 2 faces if the faces infact share an edge - works best for non planer faces.
also added utility function - BM_loop_other_vert_loop
2012-03-25 14:44:48 +00:00
Campbell Barton
81d8f17843 style cleanup: pep8, indentation 2012-03-24 07:36:32 +00:00
Campbell Barton
2f348d8b5d style cleanup: mainly for mesh code, also some WM function use. 2012-03-24 02:51:46 +00:00
Campbell Barton
3c11379e26 code cleanup: move bmesh inline funcs to headers (avoids compiling the C files). 2012-03-24 01:24:58 +00:00
Campbell Barton
eab6c9498a fix for error with console command history not working, using previous settings. 2012-03-23 07:08:28 +00:00
Campbell Barton
2363ce3ff3 fix [#30632] Edge Split Modifier (creates invalid mesh)
bug was caused by modifying loops vert value in a BM_LOOPS_OF_VERT iterator.
2012-03-23 05:43:56 +00:00
Campbell Barton
24119cb79b minor speedup to vertex split function, avoid a hash lookup when its not needed. 2012-03-23 05:18:03 +00:00
Campbell Barton
7044d80639 code cleanup: remove BMesh * args from query functions which don't need it 2012-03-22 07:53:11 +00:00
Campbell Barton
675628d24d bmesh: debugging function to help resolve issues with corrupt mesh data - BM_mesh_validate() 2012-03-22 05:13:43 +00:00
Antony Riakiotakis
95f66f162c Fix #30504 selecting self-intersecting face loop won't work correctly.
Added generic secondary hash to walker. In faceloop select it is used to remember if edge has been previously visited, in addition to the hash used for faces. This solves the case where walker stops if it finds an already added face.
2012-03-21 21:40:42 +00:00
Sergey Sharybin
ee1dc84239 Fix for crash on selecting loop in cases when some edges aren't connected to any faces. 2012-03-21 17:34:31 +00:00
Campbell Barton
b15255e820 move some bmesh headers into intern/ since they are not used externally. 2012-03-21 12:08:16 +00:00
Campbell Barton
d76c05cd36 style cleanup: bmesh 2012-03-21 09:10:08 +00:00
Campbell Barton
303cecf139 spelling cleanup: tesselate -> tessellate (last of these found) 2012-03-20 22:56:26 +00:00
Campbell Barton
9dd0c4c232 rename define BM_INLINE -> BLI_INLINE to avoid confusion with bmesh defines. 2012-03-20 08:42:26 +00:00
Campbell Barton
be116242d4 style cleanup 2012-03-20 04:27:14 +00:00
Campbell Barton
e6834fcf85 bmesh inset: outset option 2012-03-19 21:40:17 +00:00
Campbell Barton
d91deb9e97 bmesh inset:
option to inset boundaries.
2012-03-19 21:27:24 +00:00
Campbell Barton
305da3a743 bmesh inset:
fix hole when 2+ faces a vert but no edges (would make a hole), now splice the verts back together.
2012-03-19 09:47:32 +00:00
Campbell Barton
6f104aad3a code cleanup: bmesh api - make arg order consistent - htype before hflag or oflag. 2012-03-19 08:36:27 +00:00
Campbell Barton
86796252da bmesh: inset tool, access from face menu (Ctrl+F)
- Even option (like solidify even option)
- Relative option (insets based on lengths of surrounding edges)

TODO: merge tares when 2+ face corners meet but don't form a contiguous region.
2012-03-19 05:45:15 +00:00
Campbell Barton
753056d4e8 BMesh utility functions, not used yet,
- BM_edge_loop_pair incase you need the loops rather then the faces.
- BM_edge_ordered_verts_ex() - accepts a loop argument.
- BM_edge_length_calc() - simple length calc, useful if the edge is in some array, saves assigning a var and using len_v3v2().
2012-03-19 01:57:42 +00:00
Campbell Barton
ef2dc9b175 better error reporting when a bmesh operator fails. (give reason and show char number that fails) 2012-03-18 23:38:31 +00:00
Campbell Barton
1fa0b86c28 fix for own mistake when refactoring bmesh - was treating the iterator as a type flag. 2012-03-18 09:21:24 +00:00
Campbell Barton
4f19c1a995 spelling cleanup 2012-03-18 07:38:51 +00:00
Campbell Barton
bed5ae5366 *picky* fix for edge rotate
- Edge rotate would leave verts selected, this would give problems because those selections would leave edges that would try to rotate when run again. now de-select old verts on edge rotate.

- Rotating into hidden verts gave odd results, now make sure hidden state is ok.

- BMO_slot_buffer_hflag_disable / BMO_slot_buffer_hflag_enable now have flushing for the hide flag too.
2012-03-15 23:23:04 +00:00
Campbell Barton
ea79c470d2 bmesh: Fkey now creates faces from 5 or more disconnected vertices.
Added function: BM_face_create_ngon_vcloud
creating quads and tris use this too since it finds the best face winding direction based on surrounding face (if any)
2012-03-14 22:57:15 +00:00
Antony Riakiotakis
a829a905da fix hang when loop selecting an ngon. We need to check if edge currently walked on has already been added 2012-03-14 13:52:17 +00:00
Campbell Barton
f15c15e992 bmesh py api: finished todo - editable select_history
eg:
  bm.select_history = vert, face, edge

  bm.select_history.add(edge)
2012-03-14 04:46:12 +00:00
Nicholas Bishop
99f72dfbfc Add 'level' field to struct MDisps, companion to 'totdisp'.
Gets initialized when loading old files and updated at the same places
totdisp is updated. Saves having to do log+sqrt to extract level from
totdisp.
2012-03-14 03:10:18 +00:00
Campbell Barton
01b3e9cc9f loopwalker support for selecting the sides of ngons
see: wiki.blender.org/uploads/d/dc/BMesh_NGon_Loop_Select.png
2012-03-13 18:37:31 +00:00
Campbell Barton
b47e2ee907 code/style cleanup for loop walker which was is fairly confusing and hard to extend.
- only have one return at the end of the function.
- break up functionality more clearly between wire/face walk.
- remove unused struct member.
2012-03-13 17:13:44 +00:00
Campbell Barton
a69585573e bmesh python api:
BMesh.select_history.remove/clear/validate functions.
2012-03-13 02:59:42 +00:00
Campbell Barton
aedd4af57e code cleanup/bugfix uninitialized values
- edgebisect bmesh operator used uninialized beauty field.
- BLI_join_dirfile could read from before the string bounds when passed an empty dir string.
- pransform could use an uninitialized projected coordinate (unlikely but possible)
- RNA_property_path_from_ID_check would compare against an uninitialized pointer when the path wasn't found.

also have bmesh walker use BM_edge_other_vert() utility function.
2012-03-12 06:53:47 +00:00
Campbell Barton
ac24d98e24 bmesh: edge loop select
add support for loop selecting boundry edges only - handy for loop selecting the side of an ngon.
2012-03-11 21:47:14 +00:00
Antony Riakiotakis
33d8104716 Fix edge loop selection. Now boundary selection checks only for filled edges to determine when to stop and stops at vertices shared by only 2 edges. 2012-03-11 20:45:58 +00:00
Campbell Barton
b330abc290 remove Object member from BMesh struct - was only used for undo and BMEditMesh already stores an object pointer.
also fix for own mistake with mesh conversion refactor, shape key index was off by 1 when switching editmode.
2012-03-11 19:58:56 +00:00
Campbell Barton
19400d418d fix for debug assignment left in from own commit r44778
also removed private face normal update functions - they were same as public.
2012-03-11 15:27:08 +00:00
Campbell Barton
7fa7e4ba1f bmesh python api additions:
- BMesh.is_wrapped
- BMesh.copy()
- BMesh.clear()
- BMesh.free()
- BMesh.from_object(obj, apply_modifiers=True)
- BMEdge.calc_length()
- BMLoop.calc_normal()
- BMLoop.calc_tangent()
2012-03-11 05:58:22 +00:00
Campbell Barton
050439fd9d bmesh py api - correct class references in docs and rename mesh conversion funcs to ne less confusing. 2012-03-11 04:07:22 +00:00
Campbell Barton
e09ab8883c bmesh:
- moved mesh conversion functions into their own file.

bmesh py api:
- can now create a new empty bmesh without first creating mesh data.
- added function to copy bmesh data back to a mesh.
- bmesh.from_mesh() can now get a mesh which isnt in editmode.
2012-03-10 20:41:19 +00:00
Campbell Barton
b1b07fb951 Speedup for ngon normal calculation
- BM_mesh_normals_update was looping over all faces to find the largest one, this is no longer needed.
- calculating a face normal was looping over every faces corners twice, now only once - using the loops directly (not an iterator).
- face vert locations were being copied an array, now use directly.
- calculating the normals would copy a float vector for the next point in the face, which was never used (only current and previous used).
- was copying vectors to compute the normal, now just assign the float pointers.
2012-03-10 03:25:16 +00:00
Campbell Barton
4908ded534 bmesh fix: faces were being created flipped the wrong way compared to surrounding geometry.
also the last edge was mot taken into account when calculating the correct winding.
2012-03-09 20:29:53 +00:00