[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16116] branches/soc-2008-nicholasbishop/ source/blender: Added a Del Higher button to multires, removes levels higher than the currently selected one.
Nicholas Bishop
nicholasbishop at gmail.com
Thu Aug 14 19:36:08 CEST 2008
Revision: 16116
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16116
Author: nicholasbishop
Date: 2008-08-14 19:36:08 +0200 (Thu, 14 Aug 2008)
Log Message:
-----------
Added a Del Higher button to multires, removes levels higher than the currently selected one.
Modified Paths:
--------------
branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h 2008-08-14 17:24:39 UTC (rev 16115)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h 2008-08-14 17:36:08 UTC (rev 16116)
@@ -30,7 +30,6 @@
struct DerivedMesh;
struct Mesh;
struct MFace;
-struct Multires;
struct Object;
typedef struct MultiresSubsurf {
@@ -43,8 +42,6 @@
int index;
} IndexNode;
-void multires_free(struct Multires*);
-
void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace *mface,
const int totvert, const int totface);
@@ -89,14 +86,14 @@
int x, y, ax, ay;
} MultiresDisplacer;
-void multires_load_old(struct DerivedMesh *, struct Multires *);
void multires_force_update(struct Object *ob);
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, struct DerivedMesh*,
struct Mesh *, int, int);
-int multiresModifier_switch_level(struct Object *ob, const int);
-void multiresModifier_join(struct Object *ob);
+int multiresModifier_switch_level(struct Object *, const int);
+void multiresModifier_join(struct Object *);
+void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int distance,
int updateblock, int simple);
void multiresModifier_setLevel(void *mmd_v, void *ob_v);
@@ -110,3 +107,8 @@
void multires_displacer_anchor_vert(MultiresDisplacer *d, const int);
void multires_displacer_jump(MultiresDisplacer *d);
void multires_displace(MultiresDisplacer *d, float out[3]);
+
+/* Related to the old multires */
+struct Multires;
+void multires_load_old(struct DerivedMesh *, struct Multires *);
+void multires_free(struct Multires*);
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-08-14 17:24:39 UTC (rev 16115)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-08-14 17:36:08 UTC (rev 16116)
@@ -758,6 +758,40 @@
mrdm->release(mrdm);
}
+/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */
+void multiresModifier_del_levels(struct MultiresModifierData *mmd, struct Object *ob, int direction)
+{
+ Mesh *me = get_mesh(ob);
+ int distance = mmd->totlvl - mmd->lvl;
+ MDisps *mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS);
+
+ multires_force_update(ob);
+
+ if(mdisps && distance > 0 && direction == 1) {
+ int skip = multires_side_tot[distance] - 1;
+ int st = multires_side_tot[mmd->totlvl - 1];
+ int totdisp = multires_quad_tot[mmd->lvl - 1];
+ int i, j, x, y;
+
+ for(i = 0; i < me->totface; ++i) {
+ float (*disps)[3] = MEM_callocN(sizeof(float) * 3 * totdisp, "multires del disps");
+
+ for(j = 0, y = 0; y < st; y += skip) {
+ for(x = 0; x < st; x += skip) {
+ VecCopyf(disps[j], mdisps[i].disps[y * st + x]);
+ ++j;
+ }
+ }
+
+ MEM_freeN(mdisps[i].disps);
+ mdisps[i].disps = disps;
+ mdisps[i].totdisp = totdisp;
+ }
+ }
+
+ mmd->totlvl = mmd->lvl;
+}
+
void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int distance, int updateblock, int simple)
{
DerivedMesh *final = NULL;
@@ -783,7 +817,7 @@
if(!mdisps)
mdisps = CustomData_add_layer(&me->fdata, CD_MDISPS, CD_DEFAULT, NULL, me->totface);
- if(mdisps->disps && !updateblock) {
+ if(mdisps->disps && !updateblock && mmd->totlvl > 2) {
DerivedMesh *orig, *mrdm;
MultiresModifierData mmd_sub;
@@ -814,7 +848,7 @@
}
- if(final && !updateblock) {
+ if(final) {
DerivedMesh *orig;
orig = CDDM_from_mesh(me, NULL);
Modified: branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c 2008-08-14 17:24:39 UTC (rev 16115)
+++ branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c 2008-08-14 17:36:08 UTC (rev 16116)
@@ -1684,6 +1684,16 @@
}
}
+static void multiresModifier_del_higher_button(void *mmd_v, void *ob_v)
+{
+ MultiresModifierData *mmd = mmd_v;
+
+ if(mmd && ob_v) {
+ multiresModifier_del_levels(mmd, ob_v, 1);
+ BIF_undo_push("Delete higher");
+ }
+}
+
static int modifier_is_fluid_particles(ModifierData *md) {
if(md->type == eModifierType_ParticleSystem) {
if(((ParticleSystemModifierData *)md)->psys->part->type == PART_FLUID)
@@ -1854,7 +1864,7 @@
} else if (md->type==eModifierType_Explode) {
height = 94;
} else if (md->type==eModifierType_Multires) {
- height = 72;
+ height = 94;
}
/* roundbox 4 free variables: corner-rounding, nop, roundbox type, shade */
uiDefBut(block, ROUNDBOX, 0, "", x-10, y-height-2, width, height-2, NULL, 5.0, 0.0, 12, 40, "");
@@ -2491,6 +2501,8 @@
uiBlockBeginAlign(block);
but = uiDefBut(block,BUT,B_MODIFIER_RECALC,"Reshape", lx,(cy-=24),buttonWidth/2,19,0,0,0,0,0,"Copy vertices from another selected mesh into the current level");
uiButSetFunc(but, multiresModifier_reshape_button, mmd, ob);
+ but = uiDefBut(block,BUT,B_MODIFIER_RECALC,"Del Higher", lx+buttonWidth/2,cy,buttonWidth/2,19,0,0,0,0,0,"Copy vertices from another selected mesh into the current level");
+ uiButSetFunc(but, multiresModifier_del_higher_button, mmd, ob);
}
uiBlockEndAlign(block);
More information about the Bf-blender-cvs
mailing list