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
path: root/source
diff options
context:
space:
mode:
authorGeoffrey Bantle <hairbat@yahoo.com>2006-09-18 09:48:10 +0400
committerGeoffrey Bantle <hairbat@yahoo.com>2006-09-18 09:48:10 +0400
commita36377abd9951504f21b39b42d86c90e2f47cb55 (patch)
tree4a08f961bff11bf80b67b9c2e897909c5814ace5 /source
parent66bc9589a5ea6993398843a4c279d68eb1cfb232 (diff)
-> Extrude Vertex Groups
Small fix, extrude did not copy vertex weights.
Diffstat (limited to 'source')
-rw-r--r--source/blender/src/editmesh_lib.c81
1 files changed, 71 insertions, 10 deletions
diff --git a/source/blender/src/editmesh_lib.c b/source/blender/src/editmesh_lib.c
index 2d729cf94d9..3234ddb7589 100644
--- a/source/blender/src/editmesh_lib.c
+++ b/source/blender/src/editmesh_lib.c
@@ -791,14 +791,33 @@ short extrudeflag_face_indiv(short flag, float *nor)
for(efa= em->faces.last; efa; efa= efa->prev) {
if(efa->f & SELECT) {
v1= addvertlist(efa->v1->co);
+ if(efa->v1->totweight){
+ v1->dw = MEM_dupallocN(efa->v1->dw);
+ v1->totweight = efa->v1->totweight;
+ }
+
v2= addvertlist(efa->v2->co);
+ if(efa->v2->totweight){
+ v2->dw = MEM_dupallocN(efa->v2->dw);
+ v2->totweight = efa->v2->totweight;
+ }
+
v3= addvertlist(efa->v3->co);
+ if(efa->v3->totweight){
+ v3->dw = MEM_dupallocN(efa->v3->dw);
+ v3->totweight = efa->v3->totweight;
+ }
+
v1->f1= v2->f1= v3->f1= 1;
VECCOPY(v1->no, efa->n);
VECCOPY(v2->no, efa->n);
VECCOPY(v3->no, efa->n);
if(efa->v4) {
v4= addvertlist(efa->v4->co);
+ if(efa->v4->totweight){
+ v4->dw = MEM_dupallocN(efa->v4->dw);
+ v4->totweight = efa->v4->totweight;
+ }
v4->f1= 1;
VECCOPY(v4->no, efa->n);
}
@@ -870,11 +889,20 @@ short extrudeflag_edges_indiv(short flag, float *nor)
/* make the faces */
for(eed= em->edges.first; eed; eed= eed->next) {
if(eed->f & flag) {
- if(eed->v1->tmp.v == NULL)
+ if(eed->v1->tmp.v == NULL){
eed->v1->tmp.v = addvertlist(eed->v1->co);
- if(eed->v2->tmp.v == NULL)
+ if(eed->v1->totweight){
+ eed->v1->tmp.v->dw = MEM_dupallocN(eed->v1->dw);
+ eed->v1->tmp.v->totweight = eed->v1->totweight;
+ }
+ }
+ if(eed->v2->tmp.v == NULL){
eed->v2->tmp.v = addvertlist(eed->v2->co);
-
+ if(eed->v2->totweight){
+ eed->v2->tmp.v->dw = MEM_dupallocN(eed->v2->dw);
+ eed->v2->tmp.v->totweight = eed->v2->totweight;
+ }
+ }
if(eed->dir==1)
addfacelist(eed->v1, eed->v2,
eed->v2->tmp.v, eed->v1->tmp.v,
@@ -919,6 +947,10 @@ short extrudeflag_verts_indiv(short flag, float *nor)
for(eve= em->verts.first; eve; eve= eve->next) {
if(eve->f & flag) {
eve->tmp.v = addvertlist(eve->co);
+ if(eve->totweight){
+ eve->tmp.v->dw = MEM_dupallocN(eve->dw);
+ eve->tmp.v->totweight = eve->totweight;
+ }
addedgelist(eve, eve->tmp.v, NULL);
}
else eve->tmp.v = NULL;
@@ -1051,11 +1083,20 @@ static short extrudeflag_edge(short flag, float *nor)
for(eed= em->edges.last; eed; eed= eed->prev) {
if(eed->f & SELECT) {
if(eed->f2<2) {
- if(eed->v1->tmp.v == NULL)
+ if(eed->v1->tmp.v == NULL){
eed->v1->tmp.v = addvertlist(eed->v1->co);
- if(eed->v2->tmp.v == NULL)
+ if(eed->v1->totweight){
+ eed->v1->tmp.v->dw = MEM_dupallocN(eed->v1->dw);
+ eed->v1->tmp.v->totweight = eed->v1->totweight;
+ }
+ }
+ if(eed->v2->tmp.v == NULL){
eed->v2->tmp.v = addvertlist(eed->v2->co);
-
+ if(eed->v2->totweight){
+ eed->v2->tmp.v->dw = MEM_dupallocN(eed->v2->dw);
+ eed->v2->tmp.v->totweight = eed->v2->totweight;
+ }
+ }
/* if del_old, the preferred normal direction is exact
* opposite as for keep old faces
*/
@@ -1074,14 +1115,34 @@ static short extrudeflag_edge(short flag, float *nor)
/* step 3: make new faces from faces */
for(efa= em->faces.last; efa; efa= efa->prev) {
if(efa->f & SELECT) {
- if (efa->v1->tmp.v == NULL)
+ if (efa->v1->tmp.v == NULL){
efa->v1->tmp.v = addvertlist(efa->v1->co);
- if (efa->v2->tmp.v ==NULL)
+ if(efa->v1->totweight){
+ efa->v1->tmp.v->dw = MEM_dupallocN(efa->v1->dw);
+ efa->v1->tmp.v->totweight = efa->v1->totweight;
+ }
+ }
+ if (efa->v2->tmp.v ==NULL){
efa->v2->tmp.v = addvertlist(efa->v2->co);
- if (efa->v3->tmp.v ==NULL)
+ if(efa->v2->totweight){
+ efa->v2->tmp.v->dw = MEM_dupallocN(efa->v2->dw);
+ efa->v2->tmp.v->totweight = efa->v2->totweight;
+ }
+ }
+ if (efa->v3->tmp.v ==NULL){
efa->v3->tmp.v = addvertlist(efa->v3->co);
- if (efa->v4 && (efa->v4->tmp.v == NULL))
+ if(efa->v3->totweight){
+ efa->v3->tmp.v->dw = MEM_dupallocN(efa->v3->dw);
+ efa->v3->tmp.v->totweight = efa->v3->totweight;
+ }
+ }
+ if (efa->v4 && (efa->v4->tmp.v == NULL)){
efa->v4->tmp.v = addvertlist(efa->v4->co);
+ if(efa->v4->totweight){
+ efa->v4->tmp.v->dw = MEM_dupallocN(efa->v4->dw);
+ efa->v4->tmp.v->totweight = efa->v4->totweight;
+ }
+ }
if(del_old==0) { // keep old faces means flipping normal
if(efa->v4)