[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27192] trunk/blender/source/blender/ editors/mesh: [#19918] edit mode with mesh only having edges without faces+face select mode
Martin Poirier
theeth at yahoo.com
Sun Feb 28 18:47:49 CET 2010
Revision: 27192
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27192
Author: theeth
Date: 2010-02-28 18:47:49 +0100 (Sun, 28 Feb 2010)
Log Message:
-----------
[#19918] edit mode with mesh only having edges without faces+face select mode
Make select all operator select mode sensitive (it won't select elements that aren't selectable)
Patch by Sergey Sharybin (nazgul) (slightly modified)
Modified Paths:
--------------
trunk/blender/source/blender/editors/mesh/editmesh_lib.c
trunk/blender/source/blender/editors/mesh/editmesh_mods.c
trunk/blender/source/blender/editors/mesh/mesh_intern.h
Modified: trunk/blender/source/blender/editors/mesh/editmesh_lib.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_lib.c 2010-02-28 17:42:05 UTC (rev 27191)
+++ trunk/blender/source/blender/editors/mesh/editmesh_lib.c 2010-02-28 17:47:49 UTC (rev 27192)
@@ -63,6 +63,26 @@
#include "mesh_intern.h"
+/* Helpers for EM_set_flag_all_selectmode */
+#define SET_EVE_FLAG(eve, flag) \
+ if (eve->h==0) { \
+ if (flag & SELECT && !(eve->f & SELECT)) { \
+ ++selvert; \
+ } \
+ eve->f |= flag; \
+ }
+
+#define SET_EED_FLAG(eed, flag) \
+ if (eed->h==0) { \
+ if (flag & SELECT && !(eed->f & SELECT)) { \
+ ++seledge; \
+ } \
+ eed->f |= flag; \
+ SET_EVE_FLAG(eed->v1, flag); \
+ SET_EVE_FLAG(eed->v2, flag); \
+ }
+
+
/* ****************** stats *************** */
int EM_nfaces_selected(EditMesh *em)
@@ -500,6 +520,70 @@
}
}
+void EM_set_flag_all_selectmode(EditMesh *em, int flag)
+{
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ int selvert= 0, seledge= 0, selface= 0;
+
+ if (em->selectmode & SCE_SELECT_VERTEX) {
+ /* If vertex select mode enabled all the data could be affected */
+ for (eve= em->verts.first; eve; eve= eve->next) if(eve->h==0) eve->f |= flag;
+ for (eed= em->edges.first; eed; eed= eed->next) if(eed->h==0) eed->f |= flag;
+ for (efa= em->faces.first; efa; efa= efa->next) if(efa->h==0) efa->f |= flag;
+
+ if (flag & SELECT) {
+ selvert= em->totvert;
+ seledge= em->totedge;
+ selface= em->totface;
+ }
+ } else if (em->selectmode & SCE_SELECT_EDGE) {
+ /* If edge select mode is enabled we should affect on all edges, faces and */
+ /* vertices, connected to them */
+
+ for (eed= em->edges.first; eed; eed= eed->next) {
+ SET_EED_FLAG(eed, flag)
+ }
+
+ for (efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ efa->f |= flag;
+
+ if (flag & SELECT) {
+ ++selface;
+ }
+ }
+ }
+ } else if (em->selectmode & SCE_SELECT_FACE) {
+ /* No vertex and edge select mode, only face selection */
+ /* In face select mode only edges and vertices belongs to faces should be affected */
+
+ for (efa= em->faces.first; efa; efa= efa->next) {
+ if(efa->h==0) {
+ efa->f |= flag;
+ SET_EED_FLAG(efa->e1, flag);
+ SET_EED_FLAG(efa->e2, flag);
+ SET_EED_FLAG(efa->e3, flag);
+
+ if (efa->e4) {
+ SET_EED_FLAG(efa->e4, flag);
+ }
+
+ if (flag & SELECT) {
+ ++selface;
+ }
+ }
+ }
+ }
+
+ if(flag & SELECT) {
+ em->totvertsel= selvert;
+ em->totedgesel= seledge;
+ em->totfacesel= selface;
+ }
+ }
/* flush for changes in vertices only */
void EM_deselect_flush(EditMesh *em)
{
Modified: trunk/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_mods.c 2010-02-28 17:42:05 UTC (rev 27191)
+++ trunk/blender/source/blender/editors/mesh/editmesh_mods.c 2010-02-28 17:47:49 UTC (rev 27192)
@@ -3382,12 +3382,12 @@
if(EM_nvertices_selected(em))
EM_clear_flag_all(em, SELECT);
else
- EM_set_flag_all(em, SELECT);
+ EM_set_flag_all_selectmode(em, SELECT);
}
void EM_select_all(EditMesh *em)
{
- EM_set_flag_all(em, SELECT);
+ EM_set_flag_all_selectmode(em, SELECT);
}
void EM_deselect_all(EditMesh *em)
Modified: trunk/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_intern.h 2010-02-28 17:42:05 UTC (rev 27191)
+++ trunk/blender/source/blender/editors/mesh/mesh_intern.h 2010-02-28 17:47:49 UTC (rev 27192)
@@ -97,6 +97,7 @@
void EM_remove_selection(EditMesh *em, void *data, int type);
void EM_clear_flag_all(EditMesh *em, int flag);
void EM_set_flag_all(EditMesh *em, int flag);
+void EM_set_flag_all_selectmode(EditMesh *em, int flag);
void EM_data_interp_from_verts(EditMesh *em, EditVert *v1, EditVert *v2, EditVert *eve, float fac);
void EM_data_interp_from_faces(EditMesh *em, EditFace *efa1, EditFace *efa2, EditFace *efan, int i1, int i2, int i3, int i4);
More information about the Bf-blender-cvs
mailing list