[Bf-blender-cvs] [54e68e1] soc-2014-nurbs: NURBS UV Editor
Jonathan deWerd
noreply at git.blender.org
Sat Aug 9 10:18:18 CEST 2014
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. @@
More information about the Bf-blender-cvs
mailing list