Commit: 043a54d5c8393f4727bac2d00be4a2510969a8ee Author: Hans Goudey Date: Thu Jun 27 13:41:06 2019 -0400 Branches: soc-2019-bevel-profiles https://developer.blender.org/rB043a54d5c8393f4727bac2d00be4a2510969a8ee
Comments: Updated questions in comments marked with HANS-QUESTION. Deleted solved questions. =================================================================== M source/blender/blenkernel/intern/profile_path.c M source/blender/blenloader/intern/writefile.c M source/blender/bmesh/tools/bmesh_bevel.c M source/blender/editors/interface/interface_draw.c M source/blender/editors/interface/interface_handlers.c M source/blender/editors/interface/interface_templates.c =================================================================== diff --git a/source/blender/blenkernel/intern/profile_path.c b/source/blender/blenkernel/intern/profile_path.c index ed01a75cf30..13fc006f2b2 100644 --- a/source/blender/blenkernel/intern/profile_path.c +++ b/source/blender/blenkernel/intern/profile_path.c @@ -704,10 +704,10 @@ static void profilepath_make_table(ProfilePath *prpath, const rctf *clipr) fp += 2; } if (fp == allpoints || (curf >= fp[0] && fp == lastpoint)) { - /* HANS-TODO: Remove this case. Why did I say this? */ + /* HANS-TODO: Remove this case... Why did I say this? */ } else { - /* HANS-QUESTION: Why this factor stuff? */ + /* HANS-QUESTION: What's the idea behind this factor stuff? */ float fac1 = fp[0] - fp[-2]; float fac2 = fp[0] - curf; if (fac1 > FLT_EPSILON) { diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 57b4ddde648..68943382938 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -958,8 +958,9 @@ static void write_curvemapping(WriteData *wd, CurveMapping *cumap) static void write_profilewidget(WriteData *wd, ProfileWidget *prwdgt) { - /* HANS-QUESTION: Why do I have to write the ProfilePath struct when the curvemapping write - * function doesn't have to do the analagous write? */ + /* HANS-QUESTION: I seem to have to write the ProfilePath struct when the curvemapping write + * function doesn't have to do the analagous write. Anyway, the loading after a save crashes, so + * this can't be right. */ writestruct(wd, DATA, ProfileWidget, 1, prwdgt); writestruct(wd, DATA, ProfilePath, 1, prwdgt->profile); writestruct(wd, DATA, ProfilePoint, prwdgt->profile->totpoint, prwdgt->profile->path); diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c index 31d4e50c676..bb1f4c31845 100644 --- a/source/blender/bmesh/tools/bmesh_bevel.c +++ b/source/blender/bmesh/tools/bmesh_bevel.c @@ -101,8 +101,7 @@ typedef struct EdgeHalf { bool is_seam; /* is e a seam for custom loopdata (e.g., UVs)? */ /** Used during the custom profile orientation pass */ bool visited_custom; - // int _pad; - char _pad[5]; // HANS-TODO: Delete these pads + char _pad[5]; } EdgeHalf; /* Profile specification. @@ -156,9 +155,11 @@ typedef struct BoundVert { EdgeHalf *efirst; EdgeHalf *elast; /** The "edge between" that this is on, in offset_on_edge_between case. */ - EdgeHalf *eon; /* HANS-QUESTION: What is the "eon edge?" */ + EdgeHalf *eon; + /* HANS-QUESTION: What is the "eon edge?" I haven't been able to visualize where this is. */ /** Beveled edge whose left side is attached here, if any. */ - EdgeHalf *ebev; /* HANS-QUESTION: Why just store the left edge? */ + EdgeHalf *ebev; + /* HANS-QUESTION: Why just store the left edge? For travelling counterclockwise? */ /** Used for vmesh indexing. */ int index; /** When eon set, ratio of sines of angles to eon edge. */ @@ -190,8 +191,9 @@ typedef struct VMesh { NewVert *mesh; /* allocated array - size and structure depends on kind */ BoundVert *boundstart; /* start of boundary double-linked list */ int count; /* number of vertices in the boundary */ - /* HANS-QUESTION: Does that mean the number of points in the profile so far? */ int seg; /* common # of segments for segmented edges */ + /* HANS-QUESTION: How is this seg different than the global bp->seg? Is it the number of segments + * built so far? */ enum { M_NONE, /* no polygon mesh needed */ M_POLY, /* a simple polygon */ @@ -1268,7 +1270,8 @@ static void project_to_edge(BMEdge *e, const float co_a[3], const float co_b[3], /* If there is a bndv->ebev edge, find the mid control point if necessary. * It is the closest point on the beveled edge to the line segment between * bndv and bndv->next. */ -/* HANS-QUESTION: Will I need to change this? */ +/* HANS-QUESTION: I'm not sure if I'll need to change this. I don't think the custom situation + * uses the mid control point yet.*/ static void set_profile_params(BevelParams *bp, BevVert *bv, BoundVert *bndv) { EdgeHalf *e; @@ -1735,7 +1738,9 @@ static void calculate_profile_custom(BevelParams *bp, BoundVert *bndv, bool reve } p[2] = 0.0f; mul_v3_m4v3(co, m, p); - /* HANS-QUESTION: What's the reason to have this and the final projection? */ + /* HANS-QUESTION: I guess this projection takes it from the profile spacing + * two dimentions to the global three dimensions and the next projection (onto profile + * plane) fixes it / rotates it? I don't fully understand why both are necessary. */ } else { interp_v3_v3v3(co, pro->coa, pro->cob, (float)k / (float)ns); @@ -1832,7 +1837,6 @@ static void calculate_profile(BevelParams *bp, BoundVert *bndv) p[1] = (float)yvals[k]; p[2] = 0.0f; mul_v3_m4v3(co, m, p); - /* HANS-QUESTION: What's the reason to have this and the final projection? */ } else { interp_v3_v3v3(co, pro->coa, pro->cob, (float)k / (float)ns); @@ -3874,7 +3878,7 @@ static void fill_vmesh_fracs(VMesh *vm, float *frac, int i) } /* Like fill_vmesh_fracs but want fractions for profile points of bndv, with ns segments */ -/* HANS-QUESTION: What exactly are these functions doing? */ +/* HANS-QUESTION: I haven't yet figured out what these fill_*_fracs functions are doing. */ static void fill_profile_fracs(BevelParams *bp, BoundVert *bndv, float *frac, int ns) { #if DEBUG_CUSTOM_PROFILE_ADJ @@ -3936,7 +3940,8 @@ static int interp_range(const float *frac, int n, const float f, float *r_rest) /* Interpolate given vmesh to make one with target nseg border vertices on the profiles */ /* HANS-TODO: Needs custom analog. */ -/* HANS-QUESTION: General idea of how this works */ +/* HANS-QUESTION: What's the general idea of how this works? Maybe I could find that in the notes + * documents? */ static VMesh *interp_vmesh(BevelParams *bp, VMesh *vm0, int nseg) { #if DEBUG_CUSTOM_PROFILE_ADJ @@ -4018,22 +4023,22 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) #if DEBUG_CUSTOM_PROFILE_ADJ printf("CUBIC SUBDIV\n"); #endif - int n, ns0, ns20, ns1; + int n_boundary, ns0, ns20, ns1; int i, j, k, inext; float co[3], co1[3], co2[3], acc[3]; float beta, gamma; VMesh *vm1; BoundVert *bndv; - n = vm0->count; /* HANS-QUESTION: The difference between all of these seg numbers */ + n_boundary = vm0->count; ns0 = vm0->seg; ns20 = ns0 / 2; BLI_assert(ns0 % 2 == 0); ns1 = 2 * ns0; - vm1 = new_adj_vmesh(bp->mem_arena, n, ns1, vm0->boundstart); + vm1 = new_adj_vmesh(bp->mem_arena, n_boundary, ns1, vm0->boundstart); /* First we adjust the boundary vertices of the input mesh, storing in output mesh */ - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { copy_v3_v3(mesh_vert(vm1, i, 0, 0)->co, mesh_vert(vm0, i, 0, 0)->co); for (k = 1; k < ns0; k++) { /* smooth boundary rule */ @@ -4050,7 +4055,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) } /* now do odd ones in output mesh, based on even ones */ bndv = vm1->boundstart; - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { for (k = 1; k < ns1; k += 2) { if (bp->use_custom_profile && !bndv->is_profile_start) { get_profile_point(bp, &bndv->profile, ns1 - k, ns1, co); @@ -4072,7 +4077,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) vmesh_copy_equiv_verts(vm1); /* Copy adjusted verts back into vm0 */ - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { for (k = 0; k < ns0; k++) { copy_v3_v3(mesh_vert(vm0, i, 0, k)->co, mesh_vert(vm1, i, 0, 2 * k)->co); } @@ -4084,7 +4089,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) * and assuming all boundary vertices have valence 4 */ /* The new face vertices */ - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { for (j = 0; j < ns20; j++) { for (k = 0; k < ns20; k++) { /* face up and right from (j, k) */ @@ -4099,7 +4104,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) } /* The new vertical edge vertices */ - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { for (j = 0; j < ns20; j++) { for (k = 1; k <= ns20; k++) { /* vertical edge between (j, k) and (j+1, k) */ @@ -4114,7 +4119,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) } /* The new horizontal edge vertices */ - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { for (j = 1; j < ns20; j++) { for (k = 0; k < ns20; k++) { /* horizontal edge between (j, k) and (j, k+1) */ @@ -4131,7 +4136,7 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) /* The new vertices, not on border */ gamma = 0.25f; beta = -gamma; - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { for (j = 1; j < ns20; j++) { for (k = 1; k <= ns20; k++) { /* co1 = centroid of adjacent new edge verts */ @@ -4158,28 +4163,28 @@ static VMesh *cubic_subdiv(BevelParams *bp, VMesh *vm0) vmesh_copy_equiv_verts(vm1); /* The center vertex is special */ - gamma = sabin_gamma(n); + gamma = sabin_gamma(n_boundary); beta = -gamma; /* accumulate edge verts in co1, face verts in co2 */ zero_v3(co1); zero_v3(co2); - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { add_v3_v3(co1, mesh_vert(vm1, i, ns0, ns0 - 1)->co); add_v3_v3(co2, mesh_vert(vm1, i, ns0 - 1, ns0 - 1)->co); add_v3_v3(co2, mesh_vert(vm1, i, ns0 - 1, ns0 + 1)->co); } copy_v3_v3(co, co1); - mul_v3_fl(co, 1.0f / (float)n); - madd_v3_v3fl(co, co2, beta / (2.0f * (float)n)); + mul_v3_fl(co, 1.0f / (float)n_boundary); + madd_v3_v3fl(co, co2, beta / (2.0f * (float)n_boundary)); madd_v3_v3fl(co, mesh_vert(vm0, 0, ns20, ns20)->co, gamma); - for (i = 0; i < n; i++) { + for (i = 0; i < n_boundary; i++) { copy_v3_v3( @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs