Revision: 38799
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38799
Author:   psy-fi
Date:     2011-07-28 20:52:36 +0000 (Thu, 28 Jul 2011)
Log Message:
-----------
tag seams in UV editor operator:
-operator now works (Y to tag, Ctrl-Y to tag selection) but live update seems 
problematic, investigating

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c

Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c  
2011-07-28 19:52:17 UTC (rev 38798)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c  
2011-07-28 20:52:36 UTC (rev 38799)
@@ -1951,7 +1951,7 @@
                                        preview->previewOrig[bufferIterator*2] 
= mt->uv[element->tfindex][0];
                                        preview->previewOrig[bufferIterator*2 + 
1] = mt->uv[element->tfindex][1];
                                        /* stitchable uv's will be green, 
non-stitchable red */
-                                       
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_STITCHABLE, 
&preview->previewOrigColors[bufferIterator]);
+                                       
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_STITCHABLE, (unsigned char 
*)&preview->previewOrigColors[bufferIterator]);
                                        bufferIterator++;
 
                                        if(efa->v4){
@@ -1968,7 +1968,7 @@
 
                                        preview->previewOrig[bufferIterator*2] 
= mt->uv[element->tfindex][0];
                                        preview->previewOrig[bufferIterator*2 + 
1] = mt->uv[element->tfindex][1];
-                                       
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_UNSTITCHABLE, 
&preview->previewOrigColors[bufferIterator]);
+                                       
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_UNSTITCHABLE, (unsigned char 
*)&preview->previewOrigColors[bufferIterator]);
                                        bufferIterator++;
                                }
                        }else{
@@ -2010,12 +2010,12 @@
                                        preview->previewOrig[bufferIterator*4 + 
3] = mt->uv[(element->tfindex + 1)%nverts][1];
 
                                        if(element->flag & 
STITCH_EDGE_STITCHABLE){
-                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_STITCHABLE, 
&preview->previewOrigColors[bufferIterator*2]);
-                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_STITCHABLE, 
&preview->previewOrigColors[bufferIterator*2+1]);
+                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_STITCHABLE, (unsigned char 
*)&preview->previewOrigColors[bufferIterator*2]);
+                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_STITCHABLE, (unsigned char 
*)&preview->previewOrigColors[bufferIterator*2+1]);
                                        }else
                                        {
-                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_UNSTITCHABLE, 
&preview->previewOrigColors[bufferIterator*2]);
-                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_UNSTITCHABLE, 
&preview->previewOrigColors[bufferIterator*2+1]);
+                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_UNSTITCHABLE, (unsigned char 
*)&preview->previewOrigColors[bufferIterator*2]);
+                                               
UI_GetThemeColor4ubv(TH_STITCH_PREVIEW_UNSTITCHABLE, (unsigned char 
*)&preview->previewOrigColors[bufferIterator*2+1]);
                                        }
                                        bufferIterator++;
 
@@ -4234,7 +4234,7 @@
 }
 
 
-static int seams_from_islands_exec(bContext *C, wmOperator *op)
+static int seams_from_islands_exec(bContext *C, wmOperator *UNUSED(op))
 {
        UvVertMap *vmap;
        Object *ob = CTX_data_edit_object(C);
@@ -4358,11 +4358,42 @@
        Object *ob = CTX_data_edit_object(C);
        Scene *scene = CTX_data_scene(C);
        SpaceImage *sima = CTX_wm_space_image(C);
+       EditMesh *em= BKE_mesh_get_editmesh((Mesh*)ob->data);
 
        char selection = RNA_boolean_get(op->ptr, "selection");
 
+       if(selection){
+               EditFace *efa;
 
+               for(efa = em->faces.first; efa; efa = efa->next){
+                       MTFace *mt = CustomData_em_get(&em->fdata, efa->data, 
CD_MTFACE);
 
+                       const char SELECTION = TF_SEL1 | TF_SEL2 | TF_SEL3 | 
TF_SEL4;
+                       if(mt->flag & SELECTION){
+                               int nverts = efa->v4? 4 : 3;
+                               int i;
+                               for(i = 0; i < nverts; i++){
+                                       if((mt->flag & TF_SEL_MASK(i)) && 
(mt->flag & TF_SEL_MASK((i + 1)%nverts))){
+                                               (*(&efa->e1 + i))->seam = 1;
+                                       }
+                               }
+                       }
+               }
+       }else{
+               float co[2];
+               NearestHit hit;
+               Image *ima= CTX_data_edit_image(C);
+
+               RNA_float_get_array(op->ptr, "location", co);
+
+               find_nearest_uv_edge(scene, ima, em, co, &hit);
+               if(hit.efa){
+                       (*(&hit.efa->e1 + hit.edge))->seam = 1;
+               }
+       }
+
+       BKE_mesh_end_editmesh((Mesh*)ob->data, em);
+
        uvedit_live_unwrap_update(sima, scene, ob);
        DAG_id_tag_update(ob->data, 0);
        WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data);
@@ -4370,7 +4401,18 @@
        return OPERATOR_FINISHED;
 }
 
+static int mark_seam_uv_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+       ARegion *ar= CTX_wm_region(C);
+       float co[2];
 
+       UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], 
&co[0], &co[1]);
+       RNA_float_set_array(op->ptr, "location", co);
+
+       return mark_seam_uv_exec(C, op);
+}
+
+
 static void UV_OT_mark_seam_uv(wmOperatorType *ot)
 {
        /* identifiers */
@@ -4382,10 +4424,13 @@
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
        /* api callbacks */
+       ot->invoke= mark_seam_uv_invoke;
        ot->exec= mark_seam_uv_exec;
        ot->poll= ED_operator_uvedit;
 
        RNA_def_boolean(ot->srna, "selection", 0, "Selection", "Mark edge seams 
for selection");
+       RNA_def_float_vector(ot->srna, "location", 2, NULL, -FLT_MAX, FLT_MAX,
+               "Location", "Mouse location in normalized coordinates, 0.0 to 
1.0 is within the image bounds.", -100.0f, 100.0f);
 }
 
 /* ************************** registration **********************************/

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to