Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/mesh/editmesh.c')
-rw-r--r--source/blender/editors/mesh/editmesh.c67
1 files changed, 38 insertions, 29 deletions
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index 5cf0a0b1de6..49872eae897 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -76,12 +76,12 @@
#include "LBM_fluidsim.h"
-#include "BIF_retopo.h"
#include "ED_mesh.h"
#include "ED_object.h"
-#include "ED_util.h"
+#include "ED_retopo.h"
#include "ED_screen.h"
+#include "ED_util.h"
#include "ED_view3d.h"
#include "RNA_access.h"
@@ -798,7 +798,7 @@ EditMesh *make_editMesh(Scene *scene, Object *ob)
em= MEM_callocN(sizeof(EditMesh), "editmesh");
- em->selectmode= scene->selectmode; // warning needs to be synced
+ em->selectmode= scene->toolsettings->selectmode; // warning needs to be synced
em->act_face = NULL;
em->totvert= tot= me->totvert;
em->totedge= me->totedge;
@@ -1078,7 +1078,7 @@ void load_editMesh(Scene *scene, Object *ob, EditMesh *em)
else
VECCOPY(mvert->co, eve->co);
- mvert->mat_nr= 255; /* what was this for, halos? */
+ mvert->mat_nr= 32767; /* what was this for, halos? */
/* vertex normal */
VECCOPY(nor, eve->no);
@@ -1164,14 +1164,14 @@ void load_editMesh(Scene *scene, Object *ob, EditMesh *em)
/* mat_nr in vertex */
if(me->totcol>1) {
mvert= me->mvert+mface->v1;
- if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr;
+ if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr;
mvert= me->mvert+mface->v2;
- if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr;
+ if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr;
mvert= me->mvert+mface->v3;
- if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr;
+ if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr;
if(mface->v4) {
mvert= me->mvert+mface->v4;
- if(mvert->mat_nr == (char)255) mvert->mat_nr= mface->mat_nr;
+ if(mvert->mat_nr == (char)32767) mvert->mat_nr= mface->mat_nr;
}
}
@@ -1380,10 +1380,10 @@ void remake_editMesh(Scene *scene, Object *ob)
/* *************** Operator: separate parts *************/
static EnumPropertyItem prop_separate_types[] = {
- {0, "SELECTED", "Selection", ""},
- {1, "MATERIAL", "By Material", ""},
- {2, "LOOSE", "By loose parts", ""},
- {0, NULL, NULL, NULL}
+ {0, "SELECTED", 0, "Selection", ""},
+ {1, "MATERIAL", 0, "By Material", ""},
+ {2, "LOOSE", 0, "By loose parts", ""},
+ {0, NULL, 0, NULL, NULL}
};
/* return 1: success */
@@ -1502,7 +1502,7 @@ static int mesh_separate_material(Scene *scene, Base *editbase)
/* clear selection, we're going to use that to select material group */
EM_clear_flag_all(em, SELECT);
/* select the material */
- editmesh_select_by_material(em, curr_mat);
+ EM_select_by_material(em, curr_mat);
/* and now separate */
if(0==mesh_separate_selected(scene, editbase)) {
BKE_mesh_end_editmesh(me, em);
@@ -1552,13 +1552,13 @@ static int mesh_separate_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Base *base= CTX_data_active_base(C);
- int retval= 0;
+ int retval= 0, type= RNA_enum_get(op->ptr, "type");
- if(RNA_enum_is_equal(op->ptr, "type", "SELECTED"))
+ if(type == 0)
retval= mesh_separate_selected(scene, base);
- else if(RNA_enum_is_equal(op->ptr, "type", "MATERIAL"))
+ else if(type == 1)
retval= mesh_separate_material (scene, base);
- else if(RNA_enum_is_equal(op->ptr, "type", "LOOSE"))
+ else if(type == 2)
retval= mesh_separate_loose(scene, base);
if(retval) {
@@ -1571,7 +1571,7 @@ static int mesh_separate_exec(bContext *C, wmOperator *op)
void MESH_OT_separate(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Mesh Separate";
+ ot->name= "Separate";
ot->idname= "MESH_OT_separate";
/* api callbacks */
@@ -1615,8 +1615,8 @@ typedef struct EditEdgeC
typedef struct EditFaceC
{
int v1, v2, v3, v4;
- unsigned char mat_nr, flag, f, h, fgonf;
- short pad1;
+ unsigned char flag, f, h, fgonf, pad1;
+ short mat_nr;
} EditFaceC;
typedef struct EditSelectionC{
@@ -1653,26 +1653,35 @@ void EM_init_index_arrays(EditMesh *em, int forVert, int forEdge, int forFace)
if (forVert) {
em->totvert= BLI_countlist(&em->verts);
- g_em_vert_array = MEM_mallocN(sizeof(*g_em_vert_array)*em->totvert, "em_v_arr");
- for (i=0,eve=em->verts.first; eve; i++,eve=eve->next)
- g_em_vert_array[i] = eve;
+ if(em->totvert) {
+ g_em_vert_array = MEM_mallocN(sizeof(*g_em_vert_array)*em->totvert, "em_v_arr");
+
+ for (i=0,eve=em->verts.first; eve; i++,eve=eve->next)
+ g_em_vert_array[i] = eve;
+ }
}
if (forEdge) {
em->totedge= BLI_countlist(&em->edges);
- g_em_edge_array = MEM_mallocN(sizeof(*g_em_edge_array)*em->totedge, "em_e_arr");
- for (i=0,eed=em->edges.first; eed; i++,eed=eed->next)
- g_em_edge_array[i] = eed;
+ if(em->totedge) {
+ g_em_edge_array = MEM_mallocN(sizeof(*g_em_edge_array)*em->totedge, "em_e_arr");
+
+ for (i=0,eed=em->edges.first; eed; i++,eed=eed->next)
+ g_em_edge_array[i] = eed;
+ }
}
if (forFace) {
em->totface= BLI_countlist(&em->faces);
- g_em_face_array = MEM_mallocN(sizeof(*g_em_face_array)*em->totface, "em_f_arr");
- for (i=0,efa=em->faces.first; efa; i++,efa=efa->next)
- g_em_face_array[i] = efa;
+ if(em->totface) {
+ g_em_face_array = MEM_mallocN(sizeof(*g_em_face_array)*em->totface, "em_f_arr");
+
+ for (i=0,efa=em->faces.first; efa; i++,efa=efa->next)
+ g_em_face_array[i] = efa;
+ }
}
}