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:
Diffstat (limited to 'source/blender/editors/transform/transform_conversions.c')
-rw-r--r--source/blender/editors/transform/transform_conversions.c166
1 files changed, 40 insertions, 126 deletions
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 63b15fec3b8..9b6aff67da1 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -122,10 +122,12 @@
#include "ED_anim_api.h"
#include "ED_armature.h"
#include "ED_editparticle.h"
+#include "ED_image.h"
#include "ED_keyframing.h"
#include "ED_keyframes_edit.h"
#include "ED_mesh.h"
#include "ED_types.h"
+#include "ED_uvedit.h"
#include "ED_view3d.h"
#include "UI_view2d.h"
@@ -139,7 +141,6 @@
//#include "BDR_drawaction.h" // list of keyframes in action
//#include "BDR_editobject.h" // reset_slowparents()
//#include "BDR_gpencil.h"
-//#include "BDR_unwrapper.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -157,11 +158,6 @@ extern ListBase editelems;
#include "BLO_sys_types.h" // for intptr_t support
-/************ STUBS TO GET COMPILE ************/
-void transform_aspect_ratio_tface_uv(float *a1, float *a2) {}
-
-
-
/* local function prototype - for Object/Bone Constraints */
static short constraints_list_needinv(TransInfo *t, ListBase *list);
@@ -2380,11 +2376,11 @@ void flushTransSeq(TransInfo *t)
/* ********************* UV ****************** */
-static void UVsToTransData(TransData *td, TransData2D *td2d, float *uv, int selected)
+static void UVsToTransData(SpaceImage *sima, TransData *td, TransData2D *td2d, float *uv, int selected)
{
float aspx, aspy;
- transform_aspect_ratio_tface_uv(&aspx, &aspy);
+ ED_space_image_uv_aspect(sima, &aspx, &aspy);
/* uv coords are scaled by aspects. this is needed for rotations and
proportional editing to be consistent with the stretchted uv coords
@@ -2418,61 +2414,35 @@ static void UVsToTransData(TransData *td, TransData2D *td2d, float *uv, int sele
static void createTransUVs(bContext *C, TransInfo *t)
{
-#if 0 // TRANSFORM_FIX_ME
SpaceImage *sima = (SpaceImage*)CTX_wm_space_data(C);
+ Image *ima = CTX_data_edit_image(C);
+ Scene *scene = CTX_data_scene(C);
TransData *td = NULL;
TransData2D *td2d = NULL;
MTFace *tf;
int count=0, countsel=0;
int propmode = t->flag & T_PROP_EDIT;
- int efa_s1,efa_s2,efa_s3,efa_s4;
EditMesh *em = ((Mesh *)t->obedit->data)->edit_mesh;
EditFace *efa;
- if(is_uv_tface_editing_allowed()==0) return;
+ if(!ED_uvedit_test(t->obedit)) return;
/* count */
- if (sima->flag & SI_BE_SQUARE && !propmode) {
- for (efa= em->faces.first; efa; efa= efa->next) {
- /* store face pointer for second loop, prevent second lookup */
- tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- if (simaFaceDraw_Check(efa, tf)) {
- efa->tmp.p = tf;
-
- efa_s1 = simaUVSel_Check(efa, tf, 0);
- efa_s2 = simaUVSel_Check(efa, tf, 1);
- efa_s3 = simaUVSel_Check(efa, tf, 2);
- if (efa->v4) {
- efa_s4 = simaUVSel_Check(efa, tf, 3);
- if ( efa_s1 || efa_s2 || efa_s3 || efa_s4 ) {
- countsel += 4; /* all corners of this quad need their edges moved. so we must store TD for each */
- }
- } else {
- /* tri's are delt with normally when SI_BE_SQUARE's enabled */
- if (efa_s1) countsel++;
- if (efa_s2) countsel++;
- if (efa_s3) countsel++;
- }
- } else {
- efa->tmp.p = NULL;
- }
- }
- } else {
- for (efa= em->faces.first; efa; efa= efa->next) {
- tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- if (simaFaceDraw_Check(efa, tf)) {
- efa->tmp.p = tf;
-
- if (simaUVSel_Check(efa, tf, 0)) countsel++;
- if (simaUVSel_Check(efa, tf, 1)) countsel++;
- if (simaUVSel_Check(efa, tf, 2)) countsel++;
- if (efa->v4 && simaUVSel_Check(efa, tf, 3)) countsel++;
- if(propmode)
- count += (efa->v4)? 4: 3;
- } else {
- efa->tmp.p = NULL;
- }
+ 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)) {
+ efa->tmp.p = tf;
+
+ if (uvedit_uv_selected(scene, efa, tf, 0)) countsel++;
+ if (uvedit_uv_selected(scene, efa, tf, 1)) countsel++;
+ if (uvedit_uv_selected(scene, efa, tf, 2)) countsel++;
+ if (efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) countsel++;
+ if(propmode)
+ count += (efa->v4)? 4: 3;
+ } else {
+ efa->tmp.p = NULL;
}
}
@@ -2491,81 +2461,36 @@ static void createTransUVs(bContext *C, TransInfo *t)
td= t->data;
td2d= t->data2d;
- if (sima->flag & SI_BE_SQUARE && !propmode) {
- for (efa= em->faces.first; efa; efa= efa->next) {
- tf=(MTFace *)efa->tmp.p;
- if (tf) {
- efa_s1 = simaUVSel_Check(efa, tf, 0);
- efa_s2 = simaUVSel_Check(efa, tf, 1);
- efa_s3 = simaUVSel_Check(efa, tf, 2);
-
- if (efa->v4) {
- efa_s4 = simaUVSel_Check(efa, tf, 3);
-
- if ( efa_s1 || efa_s2 || efa_s3 || efa_s4 ) {
- /* all corners of this quad need their edges moved. so we must store TD for each */
-
- UVsToTransData(td, td2d, tf->uv[0], efa_s1);
- if (!efa_s1) td->flag |= TD_SKIP;
- td++; td2d++;
-
- UVsToTransData(td, td2d, tf->uv[1], efa_s2);
- if (!efa_s2) td->flag |= TD_SKIP;
- td++; td2d++;
-
- UVsToTransData(td, td2d, tf->uv[2], efa_s3);
- if (!efa_s3) td->flag |= TD_SKIP;
- td++; td2d++;
-
- UVsToTransData(td, td2d, tf->uv[3], efa_s4);
- if (!efa_s4) td->flag |= TD_SKIP;
- td++; td2d++;
- }
- } else {
- /* tri's are delt with normally when SI_BE_SQUARE's enabled */
- if (efa_s1) UVsToTransData(td++, td2d++, tf->uv[0], 1);
- if (efa_s2) UVsToTransData(td++, td2d++, tf->uv[1], 1);
- if (efa_s3) UVsToTransData(td++, td2d++, tf->uv[2], 1);
- }
- }
- }
- } else {
- for (efa= em->faces.first; efa; efa= efa->next) {
- /*tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
- if (simaFaceDraw_Check(efa, tf)) {*/
- if ((tf=(MTFace *)efa->tmp.p)) {
- if (propmode) {
- UVsToTransData(td++, td2d++, tf->uv[0], simaUVSel_Check(efa, tf, 0));
- UVsToTransData(td++, td2d++, tf->uv[1], simaUVSel_Check(efa, tf, 1));
- UVsToTransData(td++, td2d++, tf->uv[2], simaUVSel_Check(efa, tf, 2));
- if(efa->v4)
- UVsToTransData(td++, td2d++, tf->uv[3], simaUVSel_Check(efa, tf, 3));
- } else {
- if(simaUVSel_Check(efa, tf, 0)) UVsToTransData(td++, td2d++, tf->uv[0], 1);
- if(simaUVSel_Check(efa, tf, 1)) UVsToTransData(td++, td2d++, tf->uv[1], 1);
- if(simaUVSel_Check(efa, tf, 2)) UVsToTransData(td++, td2d++, tf->uv[2], 1);
- if(efa->v4 && simaUVSel_Check(efa, tf, 3)) UVsToTransData(td++, td2d++, tf->uv[3], 1);
- }
+ for (efa= em->faces.first; efa; efa= efa->next) {
+ if ((tf=(MTFace *)efa->tmp.p)) {
+ if (propmode) {
+ UVsToTransData(sima, td++, td2d++, tf->uv[0], uvedit_uv_selected(scene, efa, tf, 0));
+ UVsToTransData(sima, td++, td2d++, tf->uv[1], uvedit_uv_selected(scene, efa, tf, 1));
+ UVsToTransData(sima, td++, td2d++, tf->uv[2], uvedit_uv_selected(scene, efa, tf, 2));
+ if(efa->v4)
+ UVsToTransData(sima, td++, td2d++, tf->uv[3], uvedit_uv_selected(scene, efa, tf, 3));
+ } else {
+ if(uvedit_uv_selected(scene, efa, tf, 0)) UVsToTransData(sima, td++, td2d++, tf->uv[0], 1);
+ if(uvedit_uv_selected(scene, efa, tf, 1)) UVsToTransData(sima, td++, td2d++, tf->uv[1], 1);
+ if(uvedit_uv_selected(scene, efa, tf, 2)) UVsToTransData(sima, td++, td2d++, tf->uv[2], 1);
+ if(efa->v4 && uvedit_uv_selected(scene, efa, tf, 3)) UVsToTransData(sima, td++, td2d++, tf->uv[3], 1);
}
}
}
if (sima->flag & SI_LIVE_UNWRAP)
- unwrap_lscm_live_begin();
-#endif
+ ED_uvedit_live_unwrap_begin(t->scene, t->obedit);
}
void flushTransUVs(TransInfo *t)
{
-#if 0 // TRANSFORM_FIX_ME
+ SpaceImage *sima = t->sa->spacedata.first;
TransData2D *td;
int a, width, height;
- Object *ob= OBACT;
- EditMesh *em = ((Mesh *)ob->data)->edit_mesh;
float aspx, aspy, invx, invy;
- transform_aspect_ratio_tface_uv(&aspx, &aspy);
- transform_width_height_tface_uv(&width, &height);
+ ED_space_image_uv_aspect(sima, &aspx, &aspy);
+ ED_space_image_size(sima, &width, &height);
invx= 1.0f/aspx;
invy= 1.0f/aspy;
@@ -2574,28 +2499,20 @@ void flushTransUVs(TransInfo *t)
td->loc2d[0]= td->loc[0]*invx;
td->loc2d[1]= td->loc[1]*invy;
- if((G.sima->flag & SI_PIXELSNAP) && (t->state != TRANS_CANCEL)) {
+ if((sima->flag & SI_PIXELSNAP) && (t->state != TRANS_CANCEL)) {
td->loc2d[0]= (float)floor(width*td->loc2d[0] + 0.5f)/width;
td->loc2d[1]= (float)floor(height*td->loc2d[1] + 0.5f)/height;
}
}
-
- if((G.sima->flag & SI_BE_SQUARE) && (t->flag & T_PROP_EDIT)==0 && (t->state != TRANS_CANCEL))
- be_square_tface_uv(em);
-
- /* this is overkill if G.sima->lock is not set, but still needed */
- object_uvs_changed(ob);
-#endif
}
int clipUVTransform(TransInfo *t, float *vec, int resize)
{
-#if 0 // TRANSFORM_FIX_ME
TransData *td;
int a, clipx=1, clipy=1;
float aspx, aspy, min[2], max[2];
- transform_aspect_ratio_tface_uv(&aspx, &aspy);
+ ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy);
min[0]= min[1]= 0.0f;
max[0]= aspx; max[1]= aspy;
@@ -2635,11 +2552,8 @@ int clipUVTransform(TransInfo *t, float *vec, int resize)
}
return (clipx || clipy);
-#endif
-return 0;
}
-
/* ********************* ACTION/NLA EDITOR ****************** */
/* Called by special_aftertrans_update to make sure selected gp-frames replace