[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18556] branches/blender2.5/blender/source /blender: 2.5: uv editor

Brecht Van Lommel brecht at blender.org
Sat Jan 17 23:14:10 CET 2009


Revision: 18556
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18556
Author:   blendix
Date:     2009-01-17 23:14:08 +0100 (Sat, 17 Jan 2009)

Log Message:
-----------
2.5: uv editor
- mouse select, loop select, select linked, unlink selection operators.
- added edge selection mode.
- fix 2.45 bug with unitialized theme colors, which caused the active face
  and face centers to be not drawn.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/interface/resources.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_draw.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_intern.h
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-17 18:35:33 UTC (rev 18555)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-17 22:14:08 UTC (rev 18556)
@@ -8492,8 +8492,12 @@
 			do_versions_windowmanager_2_50(screen);
 		
 		/* struct audio data moved to renderdata */
-		for(scene= main->scene.first; scene; scene= scene->id.next)
+		for(scene= main->scene.first; scene; scene= scene->id.next) {
 			scene->r.audio = scene->audio;
+
+			if(!scene->toolsettings->uv_selectmode)
+				scene->toolsettings->uv_selectmode= UV_SELECT_VERTEX;
+		}
 		
 		/* shader, composit and texture node trees have id.name empty, put something in
 		 * to have them show in RNA viewer and accessible otherwise.
@@ -8501,7 +8505,8 @@
 		for(ma= main->mat.first; ma; ma= ma->id.next) {
 			if(ma->nodetree && strlen(ma->nodetree->id.name)==0)
 				strcpy(ma->nodetree->id.name, "NTShader Nodetree");
-	}
+		}
+
 		/* and composit trees */
 		for(sce= main->scene.first; sce; sce= sce->id.next) {
 			if(sce->nodetree && strlen(sce->nodetree->id.name)==0)

Modified: branches/blender2.5/blender/source/blender/editors/interface/resources.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/resources.c	2009-01-17 18:35:33 UTC (rev 18555)
+++ branches/blender2.5/blender/source/blender/editors/interface/resources.c	2009-01-17 22:14:08 UTC (rev 18556)
@@ -511,8 +511,10 @@
 	SETCOL(btheme->tima.vertex, 0xff, 0x70, 0xff, 255);
 	SETCOL(btheme->tima.vertex_select, 0xff, 0xff, 0x70, 255);
 	btheme->tima.vertex_size= 2;
+	btheme->tima.facedot_size= 2;
 	SETCOL(btheme->tima.face,   0, 50, 150, 40);
 	SETCOL(btheme->tima.face_select, 200, 100, 200, 80);
+	SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128);
 
 	/* space imageselect */
 	btheme->timasel= btheme->tv3d;

Modified: branches/blender2.5/blender/source/blender/editors/space_image/image_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/image_header.c	2009-01-17 18:35:33 UTC (rev 18555)
+++ branches/blender2.5/blender/source/blender/editors/space_image/image_header.c	2009-01-17 22:14:08 UTC (rev 18556)
@@ -223,12 +223,6 @@
 	case 8: /* Border Select Pinned */
 		borderselect_sima(UV_SELECT_PINNED);
 		break;
-	case 2: /* Unlink Selection */
-		unlink_selection();
-		break;
-	case 3: /* Linked UVs */
-		select_linked_tface_uv(2);
-		break;
 	case 7: /* Pinned UVs */
 		select_pinned_tface_uv();
 		break;
@@ -1207,9 +1201,11 @@
 			uiBlockBeginAlign(block);
 			
 			uiDefIconButBitS(block, TOG, SCE_SELECT_VERTEX, B_REDR, ICON_VERTEXSEL,
-				xco,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode (Ctrl Tab 1)");
+				xco,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode");
+			uiDefIconButBitS(block, TOG, SCE_SELECT_EDGE, B_REDR, ICON_EDGESEL,
+				xco+=XIC,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Edge select mode");
 			uiDefIconButBitS(block, TOG, SCE_SELECT_FACE, B_REDR, ICON_FACESEL,
-				xco+=XIC,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Face select mode (Ctrl Tab 3)");
+				xco+=XIC,yco,XIC,YIC, &scene->selectmode, 1.0, 0.0, 0, 0, "Face select mode");
 
 			uiBlockEndAlign(block);
 		}
@@ -1218,6 +1214,8 @@
 
 			uiDefIconButS(block, ROW, B_REDR, ICON_VERTEXSEL,
 				xco,yco,XIC,YIC, &scene->toolsettings->uv_selectmode, 1.0, UV_SELECT_VERTEX, 0, 0, "Vertex select mode");
+			uiDefIconButS(block, ROW, B_REDR, ICON_EDGESEL,
+				xco+=XIC,yco,XIC,YIC, &scene->toolsettings->uv_selectmode, 1.0, UV_SELECT_EDGE, 0, 0, "Edge select mode");
 			uiDefIconButS(block, ROW, B_REDR, ICON_FACESEL,
 				xco+=XIC,yco,XIC,YIC, &scene->toolsettings->uv_selectmode, 1.0, UV_SELECT_FACE, 0, 0, "Face select mode");
 			uiDefIconButS(block, ROW, B_REDR, ICON_MESH,

Modified: branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/space_image.c	2009-01-17 18:35:33 UTC (rev 18555)
+++ branches/blender2.5/blender/source/blender/editors/space_image/space_image.c	2009-01-17 22:14:08 UTC (rev 18556)
@@ -493,7 +493,7 @@
 #endif
 			ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
 
-		if(ibuf->rect || ibuf->rect_float)
+		if(ibuf && (ibuf->rect || ibuf->rect_float))
 			return ibuf;
 	}
 

Modified: branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_draw.c	2009-01-17 18:35:33 UTC (rev 18555)
+++ branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_draw.c	2009-01-17 22:14:08 UTC (rev 18556)
@@ -412,25 +412,26 @@
 /* draws uv's in the image space */
 static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
 {
+	ToolSettings *settings;
 	EditMesh *em;
 	EditFace *efa, *efa_act;
 	MTFace *tf, *activetf = NULL;
 	DerivedMesh *finaldm, *cagedm;
 	char col1[4], col2[4];
 	float pointsize;
-	int drawfaces, lastsel, sel;
+	int drawfaces, interpedges, lastsel, sel;
 	Image *ima= sima->image;
  	
 	em= ((Mesh*)obedit->data)->edit_mesh;
 	activetf= EM_get_active_mtface(em, &efa_act, NULL, 0); /* will be set to NULL if hidden */
 
+	settings= scene->toolsettings;
+
 	drawfaces= draw_uvs_face_check(scene);
-	
-#if 0
-	calc_image_view(G.sima, 'f');	/* float */
-	myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
-	glLoadIdentity();
-#endif
+	if(settings->uv_flag & UV_SYNC_SELECTION)
+		interpedges= (scene->selectmode & SCE_SELECT_VERTEX);
+	else
+		interpedges= (settings->uv_selectmode == UV_SELECT_VERTEX);
 
 	/* 1. draw shadow mesh */
 	
@@ -442,7 +443,7 @@
 
 			/* when sync selection is enabled, all faces are drawn (except for hidden)
 			 * so if cage is the same as the final, theres no point in drawing this */
-			if(!((scene->toolsettings->uv_flag & UV_SYNC_SELECTION) && (cagedm == finaldm)))
+			if(!((settings->uv_flag & UV_SYNC_SELECTION) && (cagedm == finaldm)))
 				draw_uvs_dm_shadow(finaldm);
 			
 			/* release derivedmesh again */
@@ -614,37 +615,75 @@
 			glColor4ubv((unsigned char *)col2); 
 			
 			if(G.f & G_DRAWEDGES) {
-				glShadeModel(GL_SMOOTH);
 				UI_GetThemeColor4ubv(TH_VERTEX_SELECT, col1);
 				lastsel = sel = 0;
 
-				for(efa= em->faces.first; efa; efa= efa->next) {
-					tf= (MTFace *)efa->tmp.p; /* visible faces cached */
+				if(interpedges) {
+					glShadeModel(GL_SMOOTH);
 
-					if(tf) {
-						glBegin(GL_LINE_LOOP);
-						sel = (uvedit_uv_selected(scene, efa, tf, 0) ? 1 : 0);
-						if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
-						glVertex2fv(tf->uv[0]);
-						
-						sel = uvedit_uv_selected(scene, efa, tf, 1) ? 1 : 0;
-						if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
-						glVertex2fv(tf->uv[1]);
-						
-						sel = uvedit_uv_selected(scene, efa, tf, 2) ? 1 : 0;
-						if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
-						glVertex2fv(tf->uv[2]);
-						
-						if(efa->v4) {
-							sel = uvedit_uv_selected(scene, efa, tf, 3) ? 1 : 0;
+					for(efa= em->faces.first; efa; efa= efa->next) {
+						tf= (MTFace *)efa->tmp.p; /* visible faces cached */
+
+						if(tf) {
+							glBegin(GL_LINE_LOOP);
+							sel = (uvedit_uv_selected(scene, efa, tf, 0)? 1 : 0);
 							if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
-							glVertex2fv(tf->uv[3]);
+							glVertex2fv(tf->uv[0]);
+							
+							sel = uvedit_uv_selected(scene, efa, tf, 1)? 1 : 0;
+							if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+							glVertex2fv(tf->uv[1]);
+							
+							sel = uvedit_uv_selected(scene, efa, tf, 2)? 1 : 0;
+							if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+							glVertex2fv(tf->uv[2]);
+							
+							if(efa->v4) {
+								sel = uvedit_uv_selected(scene, efa, tf, 3)? 1 : 0;
+								if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+								glVertex2fv(tf->uv[3]);
+							}
+							
+							glEnd();
 						}
-						
-						glEnd();
 					}
+
+					glShadeModel(GL_FLAT);
 				}
-				glShadeModel(GL_FLAT);
+				else {
+					for(efa= em->faces.first; efa; efa= efa->next) {
+						tf= (MTFace *)efa->tmp.p; /* visible faces cached */
+
+						if(tf) {
+							glBegin(GL_LINES);
+							sel = (uvedit_edge_selected(scene, efa, tf, 0)? 1 : 0);
+							if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+							glVertex2fv(tf->uv[0]);
+							glVertex2fv(tf->uv[1]);
+							
+							sel = uvedit_edge_selected(scene, efa, tf, 1)? 1 : 0;
+							if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+							glVertex2fv(tf->uv[1]);
+							glVertex2fv(tf->uv[2]);
+							
+							sel = uvedit_edge_selected(scene, efa, tf, 2)? 1 : 0;
+							if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+							glVertex2fv(tf->uv[2]);
+							
+							if(efa->v4) {
+								glVertex2fv(tf->uv[3]);
+
+								sel = uvedit_edge_selected(scene, efa, tf, 3)? 1 : 0;
+								if(sel != lastsel) { glColor4ubv(sel ? (GLubyte *)col1 : (GLubyte *)col2); lastsel = sel; }
+								glVertex2fv(tf->uv[3]);
+							}
+
+							glVertex2fv(tf->uv[0]);
+							
+							glEnd();
+						}
+					}
+				}
 			}
 			else {
 				/* no nice edges */

Modified: branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_intern.h	2009-01-17 18:35:33 UTC (rev 18555)
+++ branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_intern.h	2009-01-17 22:14:08 UTC (rev 18556)
@@ -56,6 +56,10 @@
 void uvedit_face_select(struct Scene *scene, struct EditFace *efa, struct MTFace *tf);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list