[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13541] trunk/blender/source/blender/src/ transform.c: === Custom Transform Orientation ===
Martin Poirier
theeth at yahoo.com
Sun Feb 3 19:24:13 CET 2008
Revision: 13541
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13541
Author: theeth
Date: 2008-02-03 19:24:13 +0100 (Sun, 03 Feb 2008)
Log Message:
-----------
=== Custom Transform Orientation ===
Switch away from using selected list in editmesh, since it isn't always up to date.
This fixes the bug where CTO where not created correctly with box/lasso selecting elements and many others.
Modified Paths:
--------------
trunk/blender/source/blender/src/transform.c
Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c 2008-02-03 17:08:54 UTC (rev 13540)
+++ trunk/blender/source/blender/src/transform.c 2008-02-03 18:24:13 UTC (rev 13541)
@@ -234,10 +234,11 @@
/* Vertice Selected */
if (G.scene->selectmode & SCE_SELECT_VERTEX && (G.totvertsel == 1 || G.totvertsel == 2 || G.totvertsel == 3)) {
if (G.totvertsel == 1) {
- EditSelection *ese;
+ /* EditSelection *ese; */
EditVert *eve = NULL;
float normal[3];
+ /*
for (ese = em->selected.first; ese; ese = ese->next)
{
if ( ese->type == EDITVERT ) {
@@ -245,7 +246,16 @@
break;
}
}
+ */
+ for (eve = em->verts.first; eve; eve = eve->next)
+ {
+ if (eve->f & SELECT)
+ {
+ break;
+ }
+ }
+
if (eve == NULL)
return -1;
@@ -264,10 +274,12 @@
strcpy(name, "Vertex");
}
else if (G.totvertsel == 2) {
- EditSelection *ese;
+ /* EditSelection *ese; */
+ EditVert *eve;
EditVert *v1 = NULL, *v2 = NULL;
float normal[3];
-
+
+ /*
for (ese = em->selected.first; ese; ese = ese->next)
{
if ( ese->type == EDITVERT ) {
@@ -280,7 +292,21 @@
}
}
}
+ */
+ for (eve = em->verts.first; eve; eve = eve->next)
+ {
+ if ( eve->f & SELECT ) {
+ if (v1 == NULL) {
+ v1 = eve;
+ }
+ else {
+ v2 = eve;
+ break;
+ }
+ }
+ }
+
if (v2 == NULL)
return -1;
@@ -299,10 +325,12 @@
strcpy(name, "Edge");
}
else if (G.totvertsel == 3) {
- EditSelection *ese;
+ /* EditSelection *ese; */
+ EditVert *eve;
EditVert *v1 = NULL, *v2 = NULL, *v3 = NULL;
float normal[3], tangent[3], cotangent[3];
+ /*
for (ese = em->selected.first; ese; ese = ese->next)
{
if ( ese->type == EDITVERT ) {
@@ -318,7 +346,24 @@
}
}
}
+ */
+ for (eve = em->verts.first; eve; eve = eve->next)
+ {
+ if ( eve->f & SELECT ) {
+ if (v1 == NULL) {
+ v1 = eve;
+ }
+ else if (v2 == NULL) {
+ v2 = eve;
+ }
+ else {
+ v3 = eve;
+ break;
+ }
+ }
+ }
+
if (v3 == NULL)
return -1;
@@ -345,10 +390,11 @@
/* Edge Selected */
else if(G.scene->selectmode & SCE_SELECT_EDGE && (G.totedgesel == 1 || G.totedgesel == 2)) {
if (G.totedgesel == 1) {
- EditSelection *ese;
+ /* EditSelection *ese; */
EditEdge *eed = NULL;
float normal[3];
+ /*
for (ese = em->selected.first; ese; ese = ese->next)
{
if ( ese->type == EDITEDGE ) {
@@ -356,7 +402,15 @@
break;
}
}
+ */
+ for (eed = em->edges.first; eed; eed = eed->next)
+ {
+ if ( eed->f & SELECT ) {
+ break;
+ }
+ }
+
if (eed == NULL)
return -1;
@@ -376,11 +430,13 @@
}
/* If selected edges form a triangle */
else if (G.totedgesel == 2 && G.totvertsel == 3) {
- EditSelection *ese;
+ /* EditSelection *ese; */
+ EditEdge *eed;
EditEdge *e1 = NULL, *e2 = NULL;
EditVert *v1 = NULL, *v2 = NULL, *v3 = NULL;
float normal[3], tangent[3], cotangent[3];
+ /*
for (ese = em->selected.first; ese; ese = ese->next)
{
if ( ese->type == EDITEDGE ) {
@@ -393,7 +449,21 @@
}
}
}
+ */
+ for (eed = em->edges.first; eed; eed = eed->next)
+ {
+ if ( eed->f & SELECT ) {
+ if (e1 == NULL) {
+ e1 = eed;
+ }
+ else {
+ e2 = eed;
+ break;
+ }
+ }
+ }
+
if (e1->v1 == e2->v1) {
v1 = e1->v2;
v2 = e1->v1;
@@ -440,14 +510,11 @@
}
/* Face Selected */
else if(G.scene->selectmode & SCE_SELECT_FACE && G.totfacesel == 1) {
- EditSelection *ese;
+ /* EditSelection *ese; */
EditFace *efa = NULL;
float normal[3], tangent[3];
- if (confirm == 0 && confirmSpace(set, "Face") == 0) {
- return -1;
- }
-
+ /*
for (ese = em->selected.first; ese; ese = ese->next)
{
if ( ese->type == EDITFACE ) {
@@ -455,10 +522,23 @@
break;
}
}
+ */
+
+ for (efa = em->faces.first; efa; efa = efa->next)
+ {
+ if (efa->f & SELECT)
+ {
+ break;
+ }
+ }
if (efa == NULL)
return -1;
+ if (confirm == 0 && confirmSpace(set, "Face") == 0) {
+ return -1;
+ }
+
VECCOPY(normal, efa->n);
VecSubf(tangent, efa->v2->co, efa->v1->co);
More information about the Bf-blender-cvs
mailing list