Commit: 54e68e1b1e58af2b0a799307fc180670705b9332
Author: Jonathan deWerd
Date:   Thu Aug 7 23:29:04 2014 -0400
Branches: soc-2014-nurbs
https://developer.blender.org/rB54e68e1b1e58af2b0a799307fc180670705b9332

NURBS UV Editor

===================================================================

M       source/blender/blenkernel/intern/curve.cpp
M       source/blender/editors/curve/editcurve.c
M       source/blender/editors/include/ED_curve.h
M       source/blender/editors/include/ED_uvedit.h
M       source/blender/editors/io/io_rhino_import.cpp
M       source/blender/editors/space_image/image_draw.c
M       source/blender/editors/space_image/space_image.c
M       source/blender/editors/uvedit/uvedit_draw.c
M       source/blender/makesdna/DNA_curve_types.h

===================================================================

diff --git a/source/blender/blenkernel/intern/curve.cpp 
b/source/blender/blenkernel/intern/curve.cpp
index 1909ddb..993b465 100644
--- a/source/blender/blenkernel/intern/curve.cpp
+++ b/source/blender/blenkernel/intern/curve.cpp
@@ -617,12 +617,10 @@ Nurb *BKE_nurb_duplicate(Nurb *nu)
        newnu->trims.first = newnu->trims.last = NULL;
        for (NurbTrim *nt = (NurbTrim*)nu->trims.first; nt; nt=nt->next) {
                NurbTrim *dup_nt = BKE_nurbTrim_duplicate(nt);
-               printf("\tTrim: 0x%lx->0x%lx\n",nt,dup_nt);
                BLI_addtail(&newnu->trims, dup_nt);
        }
        BKE_nurb_clear_cached_UV_mesh(newnu,false);
 
-       printf("Duplicated nurb 0x%lx->0x%lx\n",nu,newnu);
        return newnu;
 }
 
diff --git a/source/blender/editors/curve/editcurve.c 
b/source/blender/editors/curve/editcurve.c
index bb06f29..2a83104 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -1395,6 +1395,7 @@ void ED_curve_deselect_all(EditNurb *editnurb)
        int a;
 
        for (nu = editnurb->nurbs.first; nu; nu = nu->next) {
+               nu->flag2 &= ~CU_SELECTED2;
                if (nu->bezt) {
                        BezTriple *bezt;
                        for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, 
bezt++) {
@@ -1417,6 +1418,7 @@ void ED_curve_select_all(EditNurb *editnurb)
        Nurb *nu;
        int a;
        for (nu = editnurb->nurbs.first; nu; nu = nu->next) {
+               nu->flag2 |= CU_SELECTED2;
                if (nu->bezt) {
                        BezTriple *bezt;
                        for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, 
bezt++) {
@@ -1470,6 +1472,23 @@ void ED_curve_select_swap(EditNurb *editnurb, bool 
hide_handles)
        }
 }
 
+void ED_curve_propagate_selected_pts_to_flag2(EditNurb *editnurb) {
+       Nurb *nu;
+       int numpts, i;
+
+       for (nu=editnurb->nurbs.first; nu; nu=nu->next) {
+               if (nu->type != CU_NURBS) continue;
+               numpts = nu->pntsu * nu->pntsv;
+               nu->flag2 &= ~CU_SELECTED2;
+               for (i=0; i<numpts; i++) {
+                       if (nu->bp[i].f1 & SELECT) {
+                               nu->flag2 |= CU_SELECTED2;
+                               break;
+                       }
+               }
+       }
+}
+
 /******************** transform operator **********************/
 
 void ED_curve_transform(Curve *cu, float mat[4][4])
diff --git a/source/blender/editors/include/ED_curve.h 
b/source/blender/editors/include/ED_curve.h
index 4725cf8..3e93351 100644
--- a/source/blender/editors/include/ED_curve.h
+++ b/source/blender/editors/include/ED_curve.h
@@ -55,7 +55,7 @@ void ED_curve_transform(struct Curve *cu, float mat[4][4]);
 void ED_curve_deselect_all(struct EditNurb *editnurb);
 void ED_curve_select_all(struct EditNurb *editnurb);
 void ED_curve_select_swap(struct EditNurb *editnurb, bool hide_handles);
-
+void ED_curve_propagate_selected_pts_to_flag2(struct EditNurb *editnurb);
 
 void    undo_push_curve(struct bContext *C, const char *name);
 ListBase *object_editcurve_get(struct Object *ob);
diff --git a/source/blender/editors/include/ED_uvedit.h 
b/source/blender/editors/include/ED_uvedit.h
index 04eb829..6e2adac 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -104,7 +104,7 @@ void ED_unwrap_lscm(struct Scene *scene, struct Object 
*obedit, const short sel)
 
 /* uvedit_draw.c */
 void draw_image_cursor(struct ARegion *ar, const float cursor[2]);
-void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct 
Scene *scene, struct Object *obedit, struct Object *obact);
+void draw_uvedit_main(const struct bContext *C, struct SpaceImage *sima, 
struct ARegion *ar, struct Scene *scene, struct Object *obedit, struct Object 
*obact);
 
 /* uvedit_buttons.c */
 void ED_uvedit_buttons_register(struct ARegionType *art);
diff --git a/source/blender/editors/io/io_rhino_import.cpp 
b/source/blender/editors/io/io_rhino_import.cpp
index 815d581..dac256d 100644
--- a/source/blender/editors/io/io_rhino_import.cpp
+++ b/source/blender/editors/io/io_rhino_import.cpp
@@ -255,7 +255,7 @@ static void rhino_import_polycurve(bContext *C, 
ON_PolyCurve *pc, ON_Object *obj
 
 static Nurb *nurb_from_ON_NurbsCurve(ON_NurbsCurve *nc) {
        Nurb *nu = (Nurb *)MEM_callocN(sizeof(Nurb), 
"rhino_imported_NURBS_curve");
-       nu->flag = CU_3D + CU_TRIMMED;
+       nu->flag = (nc->Dimension()==2)? CU_2D : CU_3D;
        nu->type = CU_NURBS;
        nu->resolu = 10;
        nu->resolv = 10;
@@ -285,9 +285,7 @@ static Nurb *nurb_from_ON_NurbsCurve(ON_NurbsCurve *nc) {
        nu->flagu = analyze_knots(nu->knotsu, nu->pntsu+nu->orderu, nu->orderu, 
nc->IsPeriodic());
        double minu,maxu;
        nc->GetDomain(&minu, &maxu);
-       printf("nurb_from_ON_NurbsCurve1 0x%lx: knotsu=0x%lx 
knotsv=0x%lx\n",nu,nu->knotsu,nu->knotsv);
        normalize_knots(nu, 'u');
-       printf("nurb_from_ON_NurbsCurve0 0x%lx: knotsu=0x%lx 
knotsv=0x%lx\n",nu,nu->knotsu,nu->knotsv);
        return nu;
 }
 
@@ -635,7 +633,7 @@ static Nurb* rhino_import_nurbs_surf(bContext *C,
        Object *obedit = CTX_data_edit_object(C);
        Curve *cu = (Curve*)obedit->data;
        Nurb *nu = (Nurb *)MEM_callocN(sizeof(Nurb), 
"rhino_imported_NURBS_surf");
-       nu->flag = CU_3D + CU_TRIMMED;
+       nu->flag = CU_3D;
        nu->type = CU_NURBS;
        nu->resolu = cu->resolu;
        nu->resolv = cu->resolv;
@@ -679,7 +677,6 @@ static Nurb* rhino_import_nurbs_surf(bContext *C,
        
        ListBase *editnurb = object_editcurve_get(obedit);
        BLI_addtail(editnurb, nu);
-       printf("BLI_addtail(editnurb, 0x%lx)\n",(long)nu);
        if (surf_needs_delete) delete surf;
        return nu;
 }
@@ -738,6 +735,7 @@ static void rhino_import_brep_face(bContext *C,
        /* Add the trim curves */
        ON_BrepLoop *outer_loop = face->OuterLoop();
        int loop_count = face->LoopCount();
+       if (loop_count>0) nu->flag |= CU_TRIMMED;
        printf("   outer_loop: 0x%lx\n",long(outer_loop));
        for (int loopnum=0; loopnum<loop_count; loopnum++) {
                ON_BrepLoop *loop = face->Loop(loopnum);
@@ -754,7 +752,6 @@ static void rhino_import_brep_face(bContext *C,
                        Nurb *trim_nurb = rhino_import_curve(C, cu, parentObj, 
parentAttrs, false, true, true);
                        BLI_addtail(nurb_list, trim_nurb);
                }
-               printf("BLI_addtail(&nu->trims, 0x%lx);\n",trim);
                BLI_addtail(&nu->trims, trim);
        }
        
diff --git a/source/blender/editors/space_image/image_draw.c 
b/source/blender/editors/space_image/image_draw.c
index 5f996f9..171aacc 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -798,10 +798,11 @@ void draw_image_main(const bContext *C, ARegion *ar)
 {
        SpaceImage *sima = CTX_wm_space_image(C);
        Scene *scene = CTX_data_scene(C);
+       Object *obact = CTX_data_active_object(C);
        Image *ima;
        ImBuf *ibuf;
        float zoomx, zoomy;
-       bool show_viewer, show_render, show_paint;
+       bool show_viewer, show_render, show_paint, show_nurb;
        void *lock;
 
        /* XXX can we do this in refresh? */
@@ -831,6 +832,7 @@ void draw_image_main(const bContext *C, ARegion *ar)
        show_viewer = (ima && ima->source == IMA_SRC_VIEWER) != 0;
        show_render = (show_viewer && ima->type == IMA_TYPE_R_RESULT) != 0;
        show_paint = (ima && (sima->mode == SI_MODE_PAINT) && (show_viewer == 
false) && (show_render == false));
+       show_nurb = (obact && obact->type == OB_SURF);
 
        if (show_viewer) {
                /* use locked draw for drawing viewer image buffer since the 
compositor
@@ -844,14 +846,16 @@ void draw_image_main(const bContext *C, ARegion *ar)
        ibuf = ED_space_image_acquire_buffer(sima, &lock);
 
        /* draw the image or grid */
-       if (ibuf == NULL)
-               ED_region_grid_draw(ar, zoomx, zoomy);
-       else if (sima->flag & SI_DRAW_TILE)
+       if (ibuf == NULL) {
+               /* NURBS surfaces need to draw their own grid corresponding to 
their own UV coords. */
+               if (!show_nurb) ED_region_grid_draw(ar, zoomx, zoomy);
+       } else if (sima->flag & SI_DRAW_TILE) {
                draw_image_buffer_repeated(C, sima, ar, scene, ima, ibuf, 
zoomx, zoomy);
-       else if (ima && (ima->tpageflag & IMA_TILES))
+       } else if (ima && (ima->tpageflag & IMA_TILES)) {
                draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, 0.0f, 0.0, 
zoomx, zoomy);
-       else
+       } else {
                draw_image_buffer(C, sima, ar, scene, ibuf, 0.0f, 0.0f, zoomx, 
zoomy);
+       }
 
        /* paint helpers */
        if (show_paint)
diff --git a/source/blender/editors/space_image/space_image.c 
b/source/blender/editors/space_image/space_image.c
index d186895..2efeb59 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -682,7 +682,7 @@ static void image_main_area_draw(const bContext *C, ARegion 
*ar)
        /* we set view2d from own zoom and offset each time */
        image_main_area_set_view2d(sima, ar);
 
-       /* we draw image in pixelspace */
+       /* draw grid background, image in pixelspace */
        draw_image_main(C, ar);
 
        /* and uvs in 0.0-1.0 space */
@@ -690,7 +690,8 @@ static void image_main_area_draw(const bContext *C, ARegion 
*ar)
 
        ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
 
-       draw_uvedit_main(sima, ar, scene, obedit, obact);
+       /* draw UV mesh */
+       draw_uvedit_main(C, sima, ar, scene, obedit, obact);
 
        /* check for mask (delay draw) */
        if (ED_space_image_show_uvedit(sima, obedit)) {
diff --git a/source/blender/editors/uvedit/uvedit_draw.c 
b/source/blender/editors/uvedit/uvedit_draw.c
index a1cc23f..fffee0a 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -39,16 +39,21 @@
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
+#include "DNA_curve_types.h"
 
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
 #include "BLI_alloca.h"
 #include "BLI_buffer.h"
 #include "BLI_bitmap.h"
+#include "BLI_rect.h"
+
+#include "BLF_api.h"
 
 #include "BKE_DerivedMesh.h"
 #include "BKE_editmesh.h"
 #include "BKE_scene.h"
+#include "BKE_curve.h"
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -909,25 +914,197 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, 
Object *obedit)
        glPointSize(1.0);
 }
 
-void draw_uvedit_main(SpaceImage *sima, ARegion *ar, Scene *scene, Object 
*obedit, Object *obact)
+void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, 
Scene *scene, Object *obedit, Object *obact)
 {
-       ToolSettings *toolsettings = scene->toolsettings;
-       int show_uvedit, show_uvshadow, show_texpaint_uvshadow;
+       Nurb *nu, *trimnu;
+       NurbTrim *nt;
+       Curve *cu;
+       rctf cur;
+       rcti mask;
+       int i,j;
+       float x_view, y_view; /* XY in view (local, normalized) coord systems */
+       int x_region, y_region; /* XY in window coord systems */
+       int xmax_region, ymax_region, r

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to