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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-01-29 00:43:43 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-01-29 00:43:43 +0300
commit7114486e8bba4fafb8f4f0dca10140bee1e0c9fb (patch)
tree896672ed20caa09d9eb4d39b41a54acb82611cc2 /source/blender/editors/uvedit
parentdb9accc1d17d99e4b8bd53ffff326cd45f85a3fb (diff)
2.5:
* UV Editor Transform, translate, rotate, scale, live unwrap, snap, gesture, etc work. * Also for selection operators, used OPERATOR_FINISHED|OPERATOR_PASS_THROUGH instead of just OPERATOR_PASS_THROUGH to make gestures work, seems more correct to me.
Diffstat (limited to 'source/blender/editors/uvedit')
-rw-r--r--source/blender/editors/uvedit/uvedit_intern.h4
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c128
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c19
3 files changed, 62 insertions, 89 deletions
diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h
index ea188848e1e..eb58562239e 100644
--- a/source/blender/editors/uvedit/uvedit_intern.h
+++ b/source/blender/editors/uvedit/uvedit_intern.h
@@ -44,10 +44,6 @@ struct wmOperatorType;
#define TF_PIN_MASK(id) (TF_PIN1 << id)
#define TF_SEL_MASK(id) (TF_SEL1 << id)
-/* state testing */
-int uvedit_test(struct Object *obedit);
-int uvedit_test_silent(struct Object *obedit);
-
/* visibility and selection */
int uvedit_face_visible_nolocal(struct Scene *scene, struct EditFace *efa);
int uvedit_face_visible(struct Scene *scene, struct Image *ima, struct EditFace *efa, struct MTFace *tf);
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 38e959aeff7..24b664daa13 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -56,6 +56,8 @@
#include "IMB_imbuf_types.h" // XXX remove?
+#include "BIF_transform.h"
+
#include "ED_mesh.h"
#include "ED_screen.h"
@@ -77,7 +79,7 @@ void uvface_setsel__internal(bContext *C, SpaceImage *sima, Scene *scene, Object
/************************* state testing ************************/
-int uvedit_test_silent(Object *obedit)
+int ED_uvedit_test_silent(Object *obedit)
{
if(obedit->type != OB_MESH)
return 0;
@@ -85,12 +87,12 @@ int uvedit_test_silent(Object *obedit)
return EM_texFaceCheck(((Mesh*)obedit->data)->edit_mesh);
}
-int uvedit_test(Object *obedit)
+int ED_uvedit_test(Object *obedit)
{
// XXX if(!obedit)
// XXX error("Enter Edit Mode to perform this action");
- return uvedit_test_silent(obedit);
+ return ED_uvedit_test_silent(obedit);
}
/************************* assign image ************************/
@@ -160,7 +162,7 @@ void ED_uvedit_set_tile(Scene *scene, Object *obedit, Image *ima, int curtile, i
MTFace *tf;
/* verify if we have something to do */
- if(!ima || !uvedit_test_silent(obedit))
+ if(!ima || !ED_uvedit_test_silent(obedit))
return;
/* skip assigning these procedural images... */
@@ -436,69 +438,6 @@ int uvedit_center(Scene *scene, Image *ima, Object *obedit, float *cent, int mod
return 0;
}
-/************************** constraints ****************************/
-
-void uvedit_constrain_square(Scene *scene, Image *ima, EditMesh *em)
-{
- EditFace *efa;
- MTFace *tf;
-
- /* if 1 vertex selected: doit (with the selected vertex) */
- for(efa= em->faces.first; efa; efa= efa->next) {
- if(efa->v4) {
- tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-
- if(uvedit_face_visible(scene, ima, efa, tf)) {
- if(uvedit_uv_selected(scene, efa, tf, 0)) {
- if(tf->uv[1][0] == tf->uv[2][0] ) {
- tf->uv[1][1]= tf->uv[0][1];
- tf->uv[3][0]= tf->uv[0][0];
- }
- else {
- tf->uv[1][0]= tf->uv[0][0];
- tf->uv[3][1]= tf->uv[0][1];
- }
-
- }
-
- if(uvedit_uv_selected(scene, efa, tf, 1)) {
- if(tf->uv[2][1] == tf->uv[3][1] ) {
- tf->uv[2][0]= tf->uv[1][0];
- tf->uv[0][1]= tf->uv[1][1];
- }
- else {
- tf->uv[2][1]= tf->uv[1][1];
- tf->uv[0][0]= tf->uv[1][0];
- }
-
- }
-
- if(uvedit_uv_selected(scene, efa, tf, 2)) {
- if(tf->uv[3][0] == tf->uv[0][0] ) {
- tf->uv[3][1]= tf->uv[2][1];
- tf->uv[1][0]= tf->uv[2][0];
- }
- else {
- tf->uv[3][0]= tf->uv[2][0];
- tf->uv[1][1]= tf->uv[2][1];
- }
- }
-
- if(uvedit_uv_selected(scene, efa, tf, 3)) {
- if(tf->uv[0][1] == tf->uv[1][1] ) {
- tf->uv[0][0]= tf->uv[3][0];
- tf->uv[2][1]= tf->uv[3][1];
- }
- else {
- tf->uv[0][1]= tf->uv[3][1];
- tf->uv[2][0]= tf->uv[3][0];
- }
- }
- }
- }
- }
-}
-
/************************** find nearest ****************************/
typedef struct NearestHit {
@@ -652,6 +591,41 @@ static void find_nearest_uv_vert(Scene *scene, Image *ima, EditMesh *em, float c
}
}
+int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], float uv[2])
+{
+ EditMesh *em= ((Mesh*)obedit->data)->edit_mesh;
+ EditFace *efa;
+ MTFace *tf;
+ float mindist, dist;
+ int i, nverts, found= 0;
+
+ mindist= 1e10f;
+ uv[0]= co[0];
+ uv[1]= co[1];
+
+ for(efa= em->faces.first; efa; efa= efa->next) {
+ tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+
+ if(uvedit_face_visible(scene, ima, efa, tf)) {
+ nverts= efa->v4? 4: 3;
+
+ for(i=0; i<nverts; i++) {
+ dist= fabs(co[0]-tf->uv[i][0]) + fabs(co[1]-tf->uv[i][1]);
+
+ if(dist<=mindist) {
+ mindist= dist;
+
+ uv[0]= tf->uv[i][0];
+ uv[1]= tf->uv[i][1];
+ found= 1;
+ }
+ }
+ }
+ }
+
+ return found;
+}
+
/*********************** loop select ***********************/
static void uv_vertex_loop_flag(UvMapVert *first)
@@ -1323,9 +1297,6 @@ static int stitch_exec(bContext *C, wmOperator *op)
MEM_freeN(uv_average);
}
- // XXX if(sima->flag & SI_BE_SQUARE)
- // XXX uvedit_constrain_square(scene, sima->image, em);
-
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); // XXX
@@ -1747,7 +1718,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- return OPERATOR_FINISHED;
+ return OPERATOR_PASS_THROUGH|OPERATOR_FINISHED;
}
static int select_exec(bContext *C, wmOperator *op)
@@ -1947,7 +1918,7 @@ void borderselect_sima(bContext *C, SpaceImage *sima, Scene *scene, Image *ima,
int val, ok = 1;
short mval[2], select;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
val= 0; // XXX get_border(&rect, 3);
select = 0; // XXX (val==LEFTMOUSE) ? 1 : 0;
@@ -2236,7 +2207,7 @@ void snap_uv_curs_to_pixels(SpaceImage *sima, View2D *v2d)
int snap_uv_curs_to_sel(Scene *scene, Image *ima, Object *obedit, View2D *v2d)
{
- if(!uvedit_test(obedit)) return 0;
+ if(!ED_uvedit_test(obedit)) return 0;
return uvedit_center(scene, ima, obedit, v2d->cursor, 0);
}
@@ -2244,7 +2215,7 @@ void snap_menu_sima(SpaceImage *sima, Scene *scene, Object *obedit, View2D *v2d)
{
short event;
- if(!uvedit_test(obedit) || !v2d) return; /* !G.v2d should never happen */
+ if(!ED_uvedit_test(obedit) || !v2d) return; /* !G.v2d should never happen */
event = 0; // XXX pupmenu("Snap %t|Selection -> Pixels%x1|Selection -> Cursor%x2|Selection -> Adjacent Unselected%x3|Cursor -> Selection%x4|Cursor -> Pixel%x5");
switch (event) {
@@ -2515,7 +2486,7 @@ void pin_tface_uv(Scene *scene, Image *ima, Object *obedit, int mode)
EditFace *efa;
MTFace *tface;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
for(efa= em->faces.first; efa; efa= efa->next) {
tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
@@ -2547,7 +2518,7 @@ void select_pinned_tface_uv(Scene *scene, Image *ima, Object *obedit)
EditFace *efa;
MTFace *tface;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
for(efa= em->faces.first; efa; efa= efa->next) {
tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
@@ -2597,11 +2568,16 @@ void ED_keymap_uvedit(wmWindowManager *wm)
// XXX not working?
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, KM_ALT)->ptr, "extend", 1);
+ /* generates event, needs to be after select to work */
+ WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
+
WM_keymap_add_item(keymap, "UV_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "UV_OT_unlink_selection", LKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "UV_OT_de_select_all", AKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "UV_OT_select_invert", IKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "UV_OT_stitch", VKEY, KM_PRESS, 0, 0);
+
+ transform_keymap_for_space(wm, keymap, SPACE_IMAGE);
}
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 0fe907677f3..de5838823d1 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -53,6 +53,7 @@
#include "PIL_time.h"
#include "ED_mesh.h"
+#include "ED_uvedit.h"
#include "uvedit_intern.h"
#include "uvedit_parametrizer.h"
@@ -166,12 +167,12 @@ void unwrap_lscm(Scene *scene, Object *obedit, short seamcut)
short fillholes = scene->toolsettings->uvcalc_flag & UVCALC_FILLHOLES;
/* add uvs if there not here */
- if (!uvedit_test(obedit)) {
+ if (!ED_uvedit_test(obedit)) {
#if 0
if (em && em->faces.first)
EM_add_data_layer(&em->fdata, CD_MTFACE);
- if (!uvedit_test(obedit))
+ if (!ED_uvedit_test(obedit))
return;
if (G.sima && G.sima->image) /* this is a bit of a kludge, but assume they want the image on their mesh when UVs are added */
@@ -219,7 +220,7 @@ void minimize_stretch_tface_uv(Scene *scene, Object *obedit)
unsigned short event = 0;
short fillholes = scene->toolsettings->uvcalc_flag & UVCALC_FILLHOLES;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
handle = construct_param_handle(scene, em, 1, fillholes, 1);
@@ -309,7 +310,7 @@ void pack_charts_tface_uv(Scene *scene, Object *obedit)
EditMesh *em= ((Mesh*)obedit->data)->edit_mesh;
ParamHandle *handle;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
handle = construct_param_handle(scene, em, 1, 0, 1);
param_pack(handle);
@@ -330,7 +331,7 @@ void average_charts_tface_uv(Scene *scene, Object *obedit)
EditMesh *em= ((Mesh*)obedit->data)->edit_mesh;
ParamHandle *handle;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
handle = construct_param_handle(scene, em, 1, 0, 1);
param_average(handle);
@@ -349,20 +350,20 @@ void average_charts_tface_uv(Scene *scene, Object *obedit)
static ParamHandle *liveHandle = NULL;
-void unwrap_lscm_live_begin(Scene *scene, Object *obedit)
+void ED_uvedit_live_unwrap_begin(Scene *scene, Object *obedit)
{
EditMesh *em= ((Mesh*)obedit->data)->edit_mesh;
short abf = scene->toolsettings->unwrapper == 1;
short fillholes = scene->toolsettings->uvcalc_flag & UVCALC_FILLHOLES;
- if(!uvedit_test(obedit)) return;
+ if(!ED_uvedit_test(obedit)) return;
liveHandle = construct_param_handle(scene, em, 0, fillholes, 1);
param_lscm_begin(liveHandle, PARAM_TRUE, abf);
}
-void unwrap_lscm_live_re_solve(void)
+void ED_uvedit_live_unwrap_re_solve(void)
{
if (liveHandle) {
param_lscm_solve(liveHandle);
@@ -370,7 +371,7 @@ void unwrap_lscm_live_re_solve(void)
}
}
-void unwrap_lscm_live_end(short cancel)
+void ED_uvedit_live_unwrap_end(short cancel)
{
if (liveHandle) {
param_lscm_end(liveHandle);