[Bf-blender-cvs] [4b981638a5d] soc-2019-bevel-profiles: Bevel operator pipe VMesh custom profile: More debugging information added.

Hans Goudey noreply at git.blender.org
Tue Jul 23 19:56:15 CEST 2019


Commit: 4b981638a5d35d075e83eaa4c395bbb469ca6413
Author: Hans Goudey
Date:   Tue Jul 23 13:57:21 2019 -0400
Branches: soc-2019-bevel-profiles
https://developer.blender.org/rB4b981638a5d35d075e83eaa4c395bbb469ca6413

Bevel operator pipe VMesh custom profile: More debugging information added.

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

M	source/blender/bmesh/tools/bmesh_bevel.c

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

diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index b3c1fa45673..a3f3f4171b5 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -1456,6 +1456,7 @@ static void move_profile_plane(BoundVert *bndv, BMVert *bmv)
   if (is_zero_v3(pro->proj_dir)) {
     return;
   }
+  /* HANS-TODO: Better variable names */
   sub_v3_v3v3(d1, bmv->co, pro->start);
   normalize_v3(d1);
   sub_v3_v3v3(d2, bmv->co, pro->end);
@@ -1859,16 +1860,6 @@ static void snap_to_superellipsoid(float co[3], const float super_r, bool midlin
   co[2] = z;
 }
 
-/* This is meant to be the "custom" equivalent to the snap_to_superellipsoid function.
- * It has to be more complex because it's not as a simple as just snapping to a superellipsoid
- * function because the custom profile can't be parametrized. There are (seg_2 - 1) edges defining
- * the custom profile that could be the closest edge to snap to */
-/* HANS-TODO: Finish this. And params probably need to change */
-//static void snap_to_custom_profile(float co[3], Profile *pro)
-//{
-
-//}
-
 #define BEV_EXTEND_EDGE_DATA_CHECK(eh, flag) (BM_elem_flag_test(eh->e, flag))
 
 static void check_edge_data_seam_sharp_edges(BevVert *bv, int flag, bool neg)
@@ -4521,16 +4512,18 @@ static VMesh *pipe_adj_vmesh(BevelParams *bp, BevVert *bv, BoundVert *vpipe)
 {
 #if DEBUG_CUSTOM_PROFILE_ADJ | DEBUG_CUSTOM_PROFILE_PIPE
   printf("PIPE ADJ VMESH\n");
-  float color[4] = {0.0f, 1.0f, 0.0f, 1.0f};
+  float green[4] = {0.0f, 1.0f, 0.0f, 1.0f};
+  float blue[4] = {0.0f, 0.0f, 1.0f, 1.0f};
   float new_profile_normal_end[3];
 #endif
   int ipipe, i, j, k, n_bndv, ns, half_ns, ipipe1, ipipe2;
   VMesh *vm;
   bool even, midline;
 //  Profile *pipe_profile;
-  float new_profile_plane_co[3], new_profile_plane_no[3], new_profile_plane[4];
+  float new_profile_plane_co[3], new_profile_plane_no[3], new_profile_plane[4], new_vert[3];
 
-  /* HANS-TODO: We shouldn't need to go through the subdivision process with a custom profile */
+  /* HANS-TODO: We shouldn't need to go through the subdivision process with a custom profile.
+   * Try just using "new_adj_vmesh" in that case. */
   vm = adj_vmesh(bp, bv);
 
   /* Now snap all interior coordinates to be on the epipe profile */
@@ -4542,35 +4535,58 @@ static VMesh *pipe_adj_vmesh(BevelParams *bp, BevVert *bv, BoundVert *vpipe)
   ipipe2 = vpipe->next->next->index;
 
   if (bp->use_custom_profile) {
-    for (ipipe = 0; ipipe < 2; ipipe++) {
-      /* Adjust the side of the first pipe profile first, then the other profile's side second */
-      i = (ipipe == 0) ? ipipe1 : ipipe2;
+//    for (ipipe = 0; ipipe < 2; ipipe++) {
+//      /* Adjust the side of the first pipe profile first, then the other profile's side second */
+//      i = (ipipe == 0) ? ipipe1 : ipipe2;
+//      for (j = 1; j <= half_ns; j++) {
+//        for (k = 0; k <= ns; k++) {
+    for (i = 0; i < n_bndv; i++) {
       for (j = 1; j <= half_ns; j++) {
-        for (k = 0; k <= ns; k++) {
+       for (k = 1; k <= ns; k++) {
+         if (!is_canon(vm, i, j, k)) {
+           continue;
+          }
           /* Get a new profile plane by moving the original's position to this ring */
-          copy_v3_v3(new_profile_plane_co, mesh_vert(vm, i, j, 0)->co);
+          copy_v3_v3(new_profile_plane_co, mesh_vert(vm, i, j, k)->co);
           copy_v3_v3(new_profile_plane_no, vpipe->profile.plane_no);
           plane_from_point_normal_v3(new_profile_plane, new_profile_plane_co,
                                      new_profile_plane_no);
 
 
           /* Get this point's location by snapping the first profile's location to the new plane */
-          closest_to_plane_v3(mesh_vert(vm, i, j, k)->co, new_profile_plane,
+          closest_to_plane_v3(new_vert, new_profile_plane,
                               mesh_vert(vm, ipipe1, 0, k)->co);
+
+          copy_v3_v3(mesh_vert(vm, i, j, k)->co, new_vert);
 #if DEBUG_CUSTOM_PROFILE_PIPE
+          printf("i: %d, j: %d, k: %d\n", i, j, k);
           printf("new_profile_plane_co: (%.3f, %.3f, %.3f)\n", new_profile_plane_co[0],
                                                                new_profile_plane_co[1],
                                                                new_profile_plane_co[2]);
           printf("new_profile_plane_no: (%.3f, %.3f, %.3f)\n", new_profile_plane_no[0],
                                                                new_profile_plane_no[1],
                                                                new_profile_plane_no[2]);
-          printf("new vertex: (%.3f, %.3f, %.3f)\n", mesh_vert(vm, i, j, k)->co[0],
-                                                     mesh_vert(vm, i, j, k)->co[1],
-                                                     mesh_vert(vm, i, j, k)->co[2]);
-          DRW_debug_sphere(new_profile_plane_co, 0.03f, color);
+          printf("new vertex: (%.3f, %.3f, %.3f)\n", new_vert[0],
+                                                     new_vert[1],
+                                                     new_vert[2]);
+//          if (new_vert[0] > 1.0f || new_vert[0] < 0.0f ||
+//              new_vert[1] > 1.0f || new_vert[1] < -1.0f ||
+//              new_vert[0] > 1.0f || new_vert[0] < 0.0f) {
+//            printf("!! New vertex not in range for test bevel shape\n");
+//          }
+//          float bad_location1[3] = {0.970746f, 0.8f, 0.285874f};
+//          float bad_location2[3] = {0.970746f, 0.0f, 0.285874f};
+//          float bad_location3[3] = {0.750881f, -0.8f, 0.666078f};
+//          if (compare_v3v3(new_vert, bad_location1, BEVEL_EPSILON_BIG) ||
+//              compare_v3v3(new_vert, bad_location2, BEVEL_EPSILON_BIG) ||
+//              compare_v3v3(new_vert, bad_location3, BEVEL_EPSILON_BIG )) {
+//            printf("!! Bad location!\n");
+//          }
+          DRW_debug_sphere(new_profile_plane_co, 0.02f, green);
           madd_v3_v3v3fl(new_profile_normal_end, new_profile_plane_co, new_profile_plane_no,
                          0.1f);
-          DRW_debug_line_v3v3(new_profile_plane_co, new_profile_normal_end, color);
+          DRW_debug_line_v3v3(new_profile_plane_co, new_profile_normal_end, green);
+          DRW_debug_sphere(new_vert, 0.01f, blue);
 #endif
         }
       }



More information about the Bf-blender-cvs mailing list