[Bf-blender-cvs] [bc9d359] soc-2014-nurbs: Got RNA working and frontend for adding trims
Jonathan deWerd
noreply at git.blender.org
Fri Aug 22 10:59:44 CEST 2014
Commit: bc9d3591de230e55b547ed0f40d3accada55bb6d
Author: Jonathan deWerd
Date: Thu Aug 21 21:25:57 2014 -0600
Branches: soc-2014-nurbs
https://developer.blender.org/rBbc9d3591de230e55b547ed0f40d3accada55bb6d
Got RNA working and frontend for adding trims
===================================================================
M release/scripts/startup/bl_ui/space_image.py
M source/blender/blenkernel/BKE_curve.h
M source/blender/blenkernel/intern/curve.cpp
M source/blender/blenloader/intern/readfile.c
M source/blender/editors/include/ED_screen.h
M source/blender/editors/io/io_rhino_import.cpp
M source/blender/editors/screen/screen_ops.c
M source/blender/editors/uvedit/uvedit_draw.c
M source/blender/editors/uvedit/uvedit_ops.c
M source/blender/makesdna/DNA_curve_types.h
M source/blender/makesrna/intern/rna_curve.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 96fc0ef..2828d6d 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -139,6 +139,13 @@ class IMAGE_MT_select(Menu):
layout.operator("uv.select_split")
+class IMAGE_MT_trim(Menu):
+ bl_label = "Trim"
+ def draw(self, context):
+ layout = self.layout
+ layout.operator("uv.nurbsuv_add_square", text="Square Trim", icon='MESH_PLANE')
+ layout.operator("uv.nurbsuv_add_circle", text="Circular Trim", icon='SURFACE_NCIRCLE')
+ layout.operator("uv.nurbsuv_delete_trim", text="Delete Trim")
class IMAGE_MT_image(Menu):
bl_label = "Image"
@@ -460,11 +467,14 @@ class MASK_MT_editor_menus(Menu):
show_uvedit = sima.show_uvedit
show_maskedit = sima.show_maskedit
+ show_nurbsuv = sima.show_nurbsuv
layout.menu("IMAGE_MT_view")
if show_uvedit:
layout.menu("IMAGE_MT_select")
+ if show_nurbsuv:
+ layout.menu("IMAGE_MT_trim")
if show_maskedit:
layout.menu("MASK_MT_select")
@@ -617,6 +627,17 @@ class IMAGE_PT_view_properties(Panel):
col.label("Cursor Location:")
col.row().prop(sima, "cursor_location", text="")
+ if show_nurbsuv:
+ col.separator()
+ if context.edit_object.data.active_breakpt:
+ col.label(text="Active Breakpoint:")
+ col.prop(context.edit_object.data.active_breakpt, "loc", text="Location")
+ col.prop(context.edit_object.data.active_breakpt, "multiplicity", text="Multiplicity")
+ if context.edit_object.data.active_trim:
+ col.label(text="Active Trim:")
+ sub = col.column()
+ sub.row().prop(context.edit_object.data.active_trim, "type", expand=True)
+
if show_uvedit:
col.separator()
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 44fe516..78ef234 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -176,6 +176,7 @@ void BKE_nurbList_flag_set(ListBase *editnurb, short flag);
void BKE_nurbTrim_free(struct NurbTrim *nt);
struct NurbTrim *BKE_nurbTrim_duplicate(struct NurbTrim *nt);
int BKE_nurbTrim_tess(struct NurbTrim *nt, int resolution, float (**uv)[2]); // Returns: # verts in uv
+void BKE_nurbTrim_update_data(struct NurbTrim *nt);
void BKE_nurb_free(struct Nurb *nu);
struct Nurb *BKE_nurb_duplicate(struct Nurb *nu);
diff --git a/source/blender/blenkernel/intern/curve.cpp b/source/blender/blenkernel/intern/curve.cpp
index 65a0f7a..699a594 100644
--- a/source/blender/blenkernel/intern/curve.cpp
+++ b/source/blender/blenkernel/intern/curve.cpp
@@ -541,8 +541,6 @@ void BKE_nurbs_editKnot_propagate_nurb2ek(struct Nurb *nu) {
if (nu->pntsv==1) {
ek->num_breaksv = 0; /* This is a curve. There are no breakpoints in v direction. */
ek->breaksv = NULL;
- ek->flagv = NULL;
- ek->multiplicityv = NULL;
} else {
int capv = ek->capv = KNOTSV(nu);
ek->breaksv = (NurbBreakpt*)MEM_callocN(capv*sizeof(NurbBreakpt), "NURBS_editknot_v");
@@ -746,6 +744,7 @@ 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);
+ dup_nt->parent_nurb = newnu;
BLI_addtail(&newnu->trims, dup_nt);
}
BKE_nurbs_cached_UV_mesh_clear(newnu,false);
@@ -786,18 +785,22 @@ NurbTrim *BKE_nurbTrim_duplicate(NurbTrim *nt) {
NurbTrim *ret = (NurbTrim*)MEM_callocN(sizeof(NurbTrim), "duplicateNurbTrim");
BKE_nurbList_duplicate(&ret->nurb_list, &nt->nurb_list);
ret->type = nt->type;
+ ret->parent_nurb = nt->parent_nurb;
return ret;
}
int BKE_nurbTrim_tess(struct NurbTrim *nt, int resolution, float (**uv_out)[2]) {
int tot_tess_pts = 0;
for (Nurb* nu = (Nurb*)nt->nurb_list.first; nu; nu=nu->next) {
- tot_tess_pts += nu->pntsu * resolution + 1;
+ int tess_pts = nu->pntsu * resolution + 1;
+ if (nu->flagu&CU_NURB_ENDPOINT) tess_pts = (nu->pntsu+2-nu->orderu)*resolution;
+ tot_tess_pts += tess_pts;
}
float (*uv)[2] = (float(*)[2])MEM_mallocN(sizeof(*uv)*tot_tess_pts, "BKE_nurbTrim_tess");
*uv_out = uv;
for (Nurb* nu = (Nurb*)nt->nurb_list.first; nu; nu=nu->next) {
int tess_pts = nu->pntsu * resolution + 1;
+ if (nu->flagu&CU_NURB_ENDPOINT) tess_pts = (nu->pntsu+2-nu->orderu)*resolution;
float *U = nu->knotsu;
int pntsu = nu->pntsu;
BPoint *bp = nu->bp;
@@ -817,6 +820,10 @@ int BKE_nurbTrim_tess(struct NurbTrim *nt, int resolution, float (**uv_out)[2])
return tot_tess_pts;
}
+void BKE_nurbTrim_update_data(struct NurbTrim *nt) {
+ BKE_nurbs_cached_UV_mesh_clear((Nurb*)nt->parent_nurb, true);
+}
+
void BKE_nurbList_duplicate(ListBase *lb1, ListBase *lb2)
{
Nurb *nu, *nun;
@@ -4248,10 +4255,10 @@ GridMesh *BKE_nurb_compute_trimmed_GridMesh(struct Nurb* nu) {
int num_trimpts = BKE_nurbTrim_tess(nt, nu->resol_trim, &trim_uv_pts);
int trim_poly = gm->poly_new((float*)trim_uv_pts, num_trimpts*2);
switch (nt->type) {
- case CU_TRIM_EXTERIOR:
+ case CU_TRIM_AND:
gm->bool_AND(trim_poly);
break;
- case CU_TRIM_INTERIOR:
+ case CU_TRIM_SUB:
gm->bool_SUB(trim_poly);
break;
default:
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index ae535a9..a1ccb83 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3365,6 +3365,7 @@ static void direct_link_nurblist(FileData *fd, ListBase *nurblist)
if (nu->flag & CU_TRIMMED) {
link_list(fd, &nu->trims);
for (nt=nu->trims.first; nt; nt=nt->next) {
+ nt->parent_nurb = nu;
direct_link_nurblist(fd, &nt->nurb_list);
}
}
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 97c6b3c..0967f46 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -172,6 +172,7 @@ int ED_operator_editfont(struct bContext *C);
int ED_operator_editlattice(struct bContext *C);
int ED_operator_editmball(struct bContext *C);
int ED_operator_uvedit(struct bContext *C);
+int ED_operator_nurbsuv(struct bContext *C);
int ED_operator_uvedit_or_nurbsuv(struct bContext *C);
int ED_operator_uvedit_space_image(struct bContext *C);
int ED_operator_uvedit_or_nurbsuv_space_image(struct bContext *C);
diff --git a/source/blender/editors/io/io_rhino_import.cpp b/source/blender/editors/io/io_rhino_import.cpp
index 1976e7e..e7dccfc 100644
--- a/source/blender/editors/io/io_rhino_import.cpp
+++ b/source/blender/editors/io/io_rhino_import.cpp
@@ -755,7 +755,8 @@ static void rhino_import_brep_face(bContext *C,
int trim_count = loop->TrimCount();
printf(" loop: 0x%lx\n",long(loop));
NurbTrim *trim = (NurbTrim*)MEM_callocN(sizeof(NurbTrim),"NURBS_imported_trim");
- trim->type = (loop==outer_loop)? CU_TRIM_EXTERIOR : CU_TRIM_INTERIOR;
+ trim->type = (loop==outer_loop)? CU_TRIM_AND : CU_TRIM_SUB;
+ trim->parent_nurb = nu;
ListBase *nurb_list = &trim->nurb_list;
for (int trimnum=0; trimnum<trim_count; trimnum++) {
ON_BrepTrim *trim = loop->Trim(trimnum);
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index a723b32..9c17f5d 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -440,7 +440,14 @@ int ED_operator_uvedit(bContext *C)
{
SpaceImage *sima = CTX_wm_space_image(C);
Object *obedit = CTX_data_edit_object(C);
- return ED_space_image_show_uvedit(sima, obedit) || ED_space_image_show_nurbsuv(sima, obedit);
+ return ED_space_image_show_uvedit(sima, obedit);
+}
+
+int ED_operator_nurbsuv(bContext *C)
+{
+ SpaceImage *sima = CTX_wm_space_image(C);
+ Object *obedit = CTX_data_edit_object(C);
+ return ED_space_image_show_nurbsuv(sima, obedit);
}
int ED_operator_uvedit_or_nurbsuv(bContext *C)
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index 25dc9a0..b9a453e 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -1094,12 +1094,12 @@ static void draw_nurbuv(const struct bContext *C, ARegion *ar, Object *obedit)
/******* (Normalized Coordinates) draw trim control polygon *********/
UI_view2d_view_ortho(&ar->v2d);
glShadeModel(GL_SMOOTH);
- glBegin(GL_LINE_STRIP);
- UI_ThemeColor(TH_WIRE);
for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) {
if (!(nu->flag2&CU_SELECTED2)) continue;
resoltrim = nu->resol_trim;
for (nt=nu->trims.first; nt; nt=nt->next) {
+ glBegin(GL_LINE_STRIP);
+ UI_ThemeColor(TH_WIRE);
/* if (!(nt->flag & SELECT)) continue; */
for (trimnu=nt->nurb_list.first; trimnu; trimnu=trimnu->next) {
j = trimnu->pntsu;
@@ -1110,26 +1110,26 @@ static void draw_nurbuv(const struct bContext *C, ARegion *ar, Object *obedit)
UI_ThemeColor((trimnu->bp[0].f1&SELECT)? TH_VERTEX_SELECT : TH_VERTEX);
glVertex2f(trimnu->bp[0].vec[0], trimnu->bp[0].vec[1]);
}
+ glEnd();
}
}
- glEnd();
glShadeModel(GL_FLAT);
/******* (Normalized Coordinates) draw trim curves *********/
- glBegin(GL_LINE_STRIP);
- UI_ThemeColor(TH_WIRE);
for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) {
if (!(nu->flag2&CU_SELECTED2)) continue;
resoltrim = nu->resol_trim;
for (nt=nu->trims.first; nt; nt=nt->next) {
+ glBegin(GL_LINE_STRIP);
+ UI_ThemeColor(TH_WIRE);
switch (nt->type) {
- case CU_TRIM_INTERIOR:
+ case CU_TRIM_SUB:
UI_ThemeColor((nt->flag&SELECT)? TH_NURB_SEL_TRIM_SUB : TH_NURB_TRIM_SUB);
break;
- case CU_TRIM_EXTERIOR:
+ case CU_TRIM_AND:
UI_ThemeColor((nt->flag&SELECT)? TH_NURB_SEL_TRIM_AND : TH_NURB_TRIM_AND);
break;
- case CU_TRIM_ISLAND:
+ case CU_TRIM_ADD:
UI_ThemeColor((nt->flag&SELECT)? TH_NURB_SEL_TRIM_ADD : TH_NURB_TRIM_ADD);
break;
}
@@ -113
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list