[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12092] trunk/blender/source/blender: Local Image View for UV/Editmode
Campbell Barton
cbarton at metavr.com
Wed Sep 19 12:54:49 CEST 2007
Revision: 12092
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12092
Author: campbellbarton
Date: 2007-09-19 12:54:49 +0200 (Wed, 19 Sep 2007)
Log Message:
-----------
Local Image View for UV/Editmode
When mapping multiple images on 1 mesh, the UV coordinates often overlap and in many cases you only want to edit the uv coords for the faces applied to that image,
this is an option that only displays UV's for faces use the currently displayed image.
Modified Paths:
--------------
trunk/blender/source/blender/include/BIF_drawimage.h
trunk/blender/source/blender/include/BIF_editsima.h
trunk/blender/source/blender/include/blendef.h
trunk/blender/source/blender/makesdna/DNA_space_types.h
trunk/blender/source/blender/src/drawimage.c
trunk/blender/source/blender/src/editsima.c
trunk/blender/source/blender/src/header_image.c
trunk/blender/source/blender/src/headerbuttons.c
trunk/blender/source/blender/src/space.c
trunk/blender/source/blender/src/transform_conversions.c
Modified: trunk/blender/source/blender/include/BIF_drawimage.h
===================================================================
--- trunk/blender/source/blender/include/BIF_drawimage.h 2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/include/BIF_drawimage.h 2007-09-19 10:54:49 UTC (rev 12092)
@@ -44,7 +44,8 @@
void calc_image_view(struct SpaceImage *sima, char mode);
void drawimagespace(struct ScrArea *sa, void *spacedata);
void draw_tfaces(void);
-void image_changed(struct SpaceImage *sima, int dotile);
+void image_changed(struct SpaceImage *sima, struct Image *image);
+void image_set_tile(struct SpaceImage *sima, int dotile);
void image_home(void);
void image_viewmove(int mode);
void image_viewzoom(unsigned short event, int invert);
Modified: trunk/blender/source/blender/include/BIF_editsima.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editsima.h 2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/include/BIF_editsima.h 2007-09-19 10:54:49 UTC (rev 12092)
@@ -37,9 +37,15 @@
#define TF_PIN_MASK(id) (TF_PIN1 << id)
#define TF_SEL_MASK(id) (TF_SEL1 << id)
+
+/* this checks weather a face is drarn without the local image check */
+#define SIMA_FACEDRAW_CHECK_NOLOCAL(efa) \
+ ((G.sima->flag & SI_SYNC_UVSEL) ? (efa->h==0) : (efa->h==0 && efa->f & SELECT))
-#define SIMA_FACEDRAW_CHECK(efa) \
- ((G.sima->flag & SI_SYNC_UVSEL) ? (efa->h==0) : (efa->h==0 && efa->f & SELECT))
+/* this check includes the local image check - (does the faces image match the space image?) */
+#define SIMA_FACEDRAW_CHECK(efa, tf) \
+ ((G.sima->flag & SI_LOCAL_UV) ? ((tf->tpage==G.sima->image) ? SIMA_FACEDRAW_CHECK_NOLOCAL(efa):0) : (SIMA_FACEDRAW_CHECK_NOLOCAL(efa)))
+
#define SIMA_FACESEL_CHECK(efa, tf) \
((G.sima->flag & SI_SYNC_UVSEL) ? (efa->f & SELECT) : (!(~tf->flag & (TF_SEL1|TF_SEL2|TF_SEL3)) &&(!efa->v4 || tf->flag & TF_SEL4)))
#define SIMA_FACESEL_SET(efa, tf) \
Modified: trunk/blender/source/blender/include/blendef.h
===================================================================
--- trunk/blender/source/blender/include/blendef.h 2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/include/blendef.h 2007-09-19 10:54:49 UTC (rev 12092)
@@ -303,9 +303,9 @@
#define B_SIMAGEHOME 351
#define B_SIMABROWSE 352
#define B_SIMAGELOAD 353
-#define B_SIMAGEDRAW 354
-#define B_BE_SQUARE 355
-#define B_SIMAGEDRAW1 356
+#define B_SIMAGETILE1 354
+#define B_SIMAGETILE2 355
+#define B_BE_SQUARE 356
#define B_TWINANIM 357
#define B_SIMAGEREPLACE 358
#define B_CLIP_UV 359
@@ -337,7 +337,9 @@
#define B_SIMA_PLAY 386
#define B_SIMA_RECORD 387
#define B_SIMAPIN 388
+#define B_SIMA3DVIEWDRAW 389
+
/* BUTS: 400 */
#define B_BUTSHOME 401
#define B_BUTSPREVIEW 402
Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h 2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h 2007-09-19 10:54:49 UTC (rev 12092)
@@ -480,6 +480,7 @@
#define SI_PREVSPACE 1<<15
#define SI_FULLWINDOW 1<<16
#define SI_SYNC_UVSEL 1<<17
+#define SI_LOCAL_UV 1<<18
/* SpaceText flags (moved from DNA_text_types.h) */
Modified: trunk/blender/source/blender/src/drawimage.c
===================================================================
--- trunk/blender/source/blender/src/drawimage.c 2007-09-19 09:15:16 UTC (rev 12091)
+++ trunk/blender/source/blender/src/drawimage.c 2007-09-19 10:54:49 UTC (rev 12092)
@@ -286,57 +286,78 @@
extern int EM_texFaceCheck(void); /* from editmesh.c */
/* called to assign images to UV faces */
-void image_changed(SpaceImage *sima, int dotile)
+void image_changed(SpaceImage *sima, Image *image)
{
MTFace *tface;
EditMesh *em = G.editMesh;
EditFace *efa;
- if(sima->image==NULL)
+ if(image==NULL)
sima->flag &= ~SI_DRAWTOOL;
if(sima->mode!=SI_TEXTURE || !EM_texFaceCheck())
return;
/* skip assigning these procedural images... */
- if(sima->image) {
- if(sima->image->type==IMA_TYPE_R_RESULT)
- return;
- if(sima->image->type==IMA_TYPE_COMPOSITE)
- return;
+ if(image && (image->type==IMA_TYPE_R_RESULT || image->type==IMA_TYPE_COMPOSITE))
+ return;
+
+ for (efa= em->faces.first; efa; efa= efa->next) {
+ tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (efa->h==0 && efa->f & SELECT) {
+ if (image) {
+ tface->tpage= image;
+ tface->mode |= TF_TEX;
+
+ if(image->tpageflag & IMA_TILES) tface->mode |= TF_TILES;
+ else tface->mode &= ~TF_TILES;
+
+ if(image->id.us==0) id_us_plus(&image->id);
+ else id_lib_extern(&image->id);
+ } else {
+ tface->tpage= NULL;
+ tface->mode &= ~TF_TEX;
+ }
+ }
}
+ /* change the space image after because SIMA_FACEDRAW_CHECK uses the space image
+ * to check if the face is displayed in UV-localview */
+ sima->image = image;
+
+ object_uvs_changed(OBACT);
+ allqueue(REDRAWBUTSEDIT, 0);
+}
+void image_set_tile(SpaceImage *sima, int dotile)
+{
+ MTFace *tface;
+ EditMesh *em = G.editMesh;
+ EditFace *efa;
+
+ if(sima->mode!=SI_TEXTURE || !EM_texFaceCheck())
+ return;
+
+ /* skip assigning these procedural images... */
+ if(sima->image && (sima->image->type==IMA_TYPE_R_RESULT || sima->image->type==IMA_TYPE_COMPOSITE))
+ return;
+
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if (efa->f & SELECT) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-
+ tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
if(dotile==2) {
tface->mode &= ~TF_TILES;
- } else {
- if (sima->image) {
- tface->tpage= sima->image;
- tface->mode |= TF_TEX;
-
- if(sima->image->tpageflag & IMA_TILES) tface->mode |= TF_TILES;
- else tface->mode &= ~TF_TILES;
-
- if(sima->image->id.us==0) id_us_plus(&sima->image->id);
- else id_lib_extern(&sima->image->id);
- } else {
- tface->tpage= NULL;
- tface->mode &= ~TF_TEX;
- }
-
- if(dotile) tface->tile= sima->curtile;
+ } else if (dotile) {
+ tface->tile= sima->curtile;
}
}
}
+
object_uvs_changed(OBACT);
allqueue(REDRAWBUTSEDIT, 0);
}
+
void uvco_to_areaco(float *vec, short *mval)
{
float x, y;
@@ -448,10 +469,8 @@
if (G.obedit) {
glColor3ub(112, 112, 112);
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if(!(mface->flag & ME_HIDE) && (mface->flag & ME_FACE_SEL)) {*/
- /*if(!(efa->flag & ME_HIDE) && (efa->f & SELECT)) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
glBegin(GL_LINE_LOOP);
glVertex2fv(tface->uv[0]);
glVertex2fv(tface->uv[1]);
@@ -474,9 +493,8 @@
glEnable(GL_BLEND);
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if(efa->f & SELECT) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
if( SIMA_FACESEL_CHECK(efa, tface) )
glColor4ubv((GLubyte *)col2);
else
@@ -494,10 +512,8 @@
}
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if (efa->f & SELECT) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
cpack(0x0);
glBegin(GL_LINE_LOOP);
glVertex2fv(tface->uv[0]);
@@ -529,14 +545,12 @@
}
/* draw active face edges */
- /*if (activetface){*/
/* colors: R=u G=v */
activetface = get_active_mtface(&efa, NULL, 0);
if (activetface) {
setlinestyle(2);
- tface=activetface;
- /*mface=activemface;*/
-
+ tface=activetface;
+
cpack(0x0);
glBegin(GL_LINE_LOOP);
glVertex2fv(tface->uv[0]);
@@ -574,9 +588,8 @@
bglBegin(GL_POINTS);
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if (efa->f & SELECT) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
if(SIMA_UVSEL_CHECK(efa, tface, 0)); else bglVertex2fv(tface->uv[0]);
if(SIMA_UVSEL_CHECK(efa, tface, 1)); else bglVertex2fv(tface->uv[1]);
if(SIMA_UVSEL_CHECK(efa, tface, 2)); else bglVertex2fv(tface->uv[2]);
@@ -594,9 +607,8 @@
bglBegin(GL_POINTS);
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if (efa->f & SELECT) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
if(tface->unwrap & TF_PIN1) bglVertex2fv(tface->uv[0]);
if(tface->unwrap & TF_PIN2) bglVertex2fv(tface->uv[1]);
if(tface->unwrap & TF_PIN3) bglVertex2fv(tface->uv[2]);
@@ -613,9 +625,8 @@
bglBegin(GL_POINTS);
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if (efa->f & SELECT) {*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ tface= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tface)) {
if(!SIMA_UVSEL_CHECK(efa, tface, 0)); else bglVertex2fv(tface->uv[0]);
if(!SIMA_UVSEL_CHECK(efa, tface, 1)); else bglVertex2fv(tface->uv[1]);
if(!SIMA_UVSEL_CHECK(efa, tface, 2)); else bglVertex2fv(tface->uv[2]);
@@ -793,9 +804,8 @@
image_transform_but_attr(&imx, &imy, &step, &digits);
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if ((efa->f & SELECT)) { */
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ if (SIMA_FACEDRAW_CHECK(efa, tf)) {
if (SIMA_UVSEL_CHECK(efa, tf, 0)) {
cent[0]+= tf->uv[0][0];
@@ -858,10 +868,8 @@
}
for (efa= em->faces.first; efa; efa= efa->next) {
- /*if (!(efa->f & SELECT)) continue;*/
- if (SIMA_FACEDRAW_CHECK(efa)) {
- tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list