[Bf-blender-cvs] [516ec45d10b] lineart-object-load: LineArt: Object loading fixes for master

YimingWu noreply at git.blender.org
Wed Apr 20 16:12:59 CEST 2022


Commit: 516ec45d10b867d54e614fc5c6952ead3a342d27
Author: YimingWu
Date:   Tue Apr 12 19:50:46 2022 +0800
Branches: lineart-object-load
https://developer.blender.org/rB516ec45d10b867d54e614fc5c6952ead3a342d27

LineArt: Object loading fixes for master

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

M	source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
M	source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M	source/blender/makesdna/DNA_lineart_types.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c

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

diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
index 1058f861be3..0e7df2a136d 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillineart.c
@@ -387,7 +387,6 @@ static void options_panel_draw(const bContext *UNUSED(C), Panel *panel)
 
   uiLayout *col = uiLayoutColumn(layout, true);
 
-  uiItemR(col, ptr, "use_remove_doubles", 0, NULL, ICON_NONE);
   uiItemR(col, ptr, "use_edge_overlap", 0, IFACE_("Overlapping Edges As Contour"), ICON_NONE);
   uiItemR(col, ptr, "use_object_instances", 0, NULL, ICON_NONE);
   uiItemR(col, ptr, "use_clip_plane_boundaries", 0, NULL, ICON_NONE);
diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
index a168873740a..830066ac0fb 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
+++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h
@@ -140,7 +140,7 @@ typedef struct LineartEdge {
   char min_occ;
 
   /** Also for line type determination on chaining. */
-  unsigned char flags;
+  short flags;
   unsigned char intersection_mask;
 
   /**
@@ -179,7 +179,7 @@ typedef struct LineartEdgeChainItem {
   /** For restoring position to 3d space. */
   float gpos[3];
   float normal[3];
-  unsigned char line_type;
+  short line_type;
   char occlusion;
   unsigned char material_mask_bits;
   unsigned char intersection_mask;
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 3419fa4e224..acc36062152 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -1429,19 +1429,6 @@ static void lineart_main_discard_out_of_frame_edges(LineartRenderBuffer *rb)
   }
 }
 
-/**
- * Transform a single vert to it's viewing position.
- */
-static void lineart_vert_transform(
-    BMVert *v, int index, LineartVert *RvBuf, double (*mv_mat)[4], double (*mvp_mat)[4])
-{
-  double co[4];
-  LineartVert *vt = &RvBuf[index];
-  copy_v3db_v3fl(co, v->co);
-  mul_v3_m4v3_db(vt->gloc, mv_mat, co);
-  mul_v4_m4v3_db(vt->fbcoord, mvp_mat, co);
-}
-
 typedef struct VertData {
   MVert *mvert;
   LineartVert *v_arr;
@@ -1670,170 +1657,6 @@ static uint16_t lineart_identify_medge_feature_edges(
   return edge_flag_result;
 }
 
-static uint16_t lineart_identify_feature_line(LineartRenderBuffer *rb,
-                                              BMEdge *e,
-                                              LineartTriangle *rt_array,
-                                              LineartVert *rv_array,
-                                              float crease_threshold,
-                                              bool use_auto_smooth,
-                                              bool use_freestyle_edge,
-                                              bool use_freestyle_face,
-                                              BMesh *bm_if_freestyle)
-{
-  BMLoop *ll, *lr = NULL;
-
-  ll = e->l;
-  if (ll) {
-    lr = e->l->radial_next;
-  }
-
-  if (!ll && !lr) {
-    return LRT_EDGE_FLAG_LOOSE;
-  }
-
-  FreestyleEdge *fel, *fer;
-  bool face_mark_filtered = false;
-  uint16_t edge_flag_result = 0;
-  bool only_contour = false;
-
-  if (use_freestyle_face && rb->filter_face_mark) {
-    fel = CustomData_bmesh_get(&bm_if_freestyle->pdata, ll->f->head.data, CD_FREESTYLE_FACE);
-    if (ll != lr && lr) {
-      fer = CustomData_bmesh_get(&bm_if_freestyle->pdata, lr->f->head.data, CD_FREESTYLE_FACE);
-    }
-    else {
-      /* Handles mesh boundary case */
-      fer = fel;
-    }
-    if (rb->filter_face_mark_boundaries ^ rb->filter_face_mark_invert) {
-      if ((fel->flag & FREESTYLE_FACE_MARK) || (fer->flag & FREESTYLE_FACE_MARK)) {
-        face_mark_filtered = true;
-      }
-    }
-    else {
-      if ((fel->flag & FREESTYLE_FACE_MARK) && (fer->flag & FREESTYLE_FACE_MARK) && (fer != fel)) {
-        face_mark_filtered = true;
-      }
-    }
-    if (rb->filter_face_mark_invert) {
-      face_mark_filtered = !face_mark_filtered;
-    }
-    if (!face_mark_filtered) {
-      if (rb->filter_face_mark_keep_contour) {
-        only_contour = true;
-      }
-      else {
-        return 0;
-      }
-    }
-  }
-
-  /* Mesh boundary */
-  if (!lr || ll == lr) {
-    return (edge_flag_result | LRT_EDGE_FLAG_CONTOUR);
-  }
-
-  LineartTriangle *tri1, *tri2;
-  LineartVert *l;
-
-  /* The mesh should already be triangulated now, so we can assume each face is a triangle. */
-  tri1 = lineart_triangle_from_index(rb, rt_array, BM_elem_index_get(ll->f));
-  tri2 = lineart_triangle_from_index(rb, rt_array, BM_elem_index_get(lr->f));
-
-  l = &rv_array[BM_elem_index_get(e->v1)];
-
-  double vv[3];
-  double *view_vector = vv;
-  double dot_1 = 0, dot_2 = 0;
-  double result;
-  bool material_back_face = ((tri1->flags | tri2->flags) & LRT_TRIANGLE_MAT_BACK_FACE_CULLING);
-
-  if (rb->use_contour || rb->use_back_face_culling || material_back_face) {
-
-    if (rb->cam_is_persp) {
-      sub_v3_v3v3_db(view_vector, rb->camera_pos, l->gloc);
-    }
-    else {
-      view_vector = rb->view_vector;
-    }
-
-    dot_1 = dot_v3v3_db(view_vector, tri1->gn);
-    dot_2 = dot_v3v3_db(view_vector, tri2->gn);
-
-    if (rb->use_contour && (result = dot_1 * dot_2) <= 0 && (dot_1 + dot_2)) {
-      edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
-    }
-
-    /* Because the ray points towards the camera, so back-face is when dot value being negative. */
-    if (rb->use_back_face_culling) {
-      if (dot_1 < 0) {
-        tri1->flags |= LRT_CULL_DISCARD;
-      }
-      if (dot_2 < 0) {
-        tri2->flags |= LRT_CULL_DISCARD;
-      }
-    }
-    if (material_back_face) {
-      if (tri1->flags & LRT_TRIANGLE_MAT_BACK_FACE_CULLING && dot_1 < 0) {
-        tri1->flags |= LRT_CULL_DISCARD;
-      }
-      if (tri2->flags & LRT_TRIANGLE_MAT_BACK_FACE_CULLING && dot_2 < 0) {
-        tri2->flags |= LRT_CULL_DISCARD;
-      }
-    }
-  }
-  else {
-    view_vector = rb->view_vector;
-  }
-
-  if ((result = dot_1 * dot_2) <= 0 && (fabs(dot_1) + fabs(dot_2))) {
-    edge_flag_result |= LRT_EDGE_FLAG_CONTOUR;
-  }
-
-  /* For when face mark filtering decided that we discard the face but keep_contour option is on.
-   * so we still have correct full contour around the object. */
-  if (only_contour) {
-    return edge_flag_result;
-  }
-
-  /* Do not show lines other than contour on back face (because contour has one adjacent face that
-   * isn't a back face).
-   * TODO(Yiming): Do we need separate option for this? */
-  if (rb->use_back_face_culling ||
-      ((tri1->flags & tri2->flags) & LRT_TRIANGLE_MAT_BACK_FACE_CULLING)) {
-    if (dot_1 < 0 && dot_2 < 0) {
-      return edge_flag_result;
-    }
-  }
-
-  if (rb->use_crease) {
-    if (rb->sharp_as_crease && !BM_elem_flag_test(e, BM_ELEM_SMOOTH)) {
-      edge_flag_result |= LRT_EDGE_FLAG_CREASE;
-    }
-    else {
-      bool do_crease = true;
-      if (!rb->force_crease && !use_auto_smooth &&
-          (BM_elem_flag_test(ll->f, BM_ELEM_SMOOTH) && BM_elem_flag_test(lr->f, BM_ELEM_SMOOTH))) {
-        do_crease = false;
-      }
-      if (do_crease && (dot_v3v3_db(tri1->gn, tri2->gn) < crease_threshold)) {
-        edge_flag_result |= LRT_EDGE_FLAG_CREASE;
-      }
-    }
-  }
-  if (rb->use_material && (ll->f->mat_nr != lr->f->mat_nr)) {
-    edge_flag_result |= LRT_EDGE_FLAG_MATERIAL;
-  }
-  if (use_freestyle_edge && rb->use_edge_marks) {
-    FreestyleEdge *fe;
-    fe = CustomData_bmesh_get(&bm_if_freestyle->edata, e->head.data, CD_FREESTYLE_EDGE);
-    if (fe->flag & FREESTYLE_EDGE_MARK) {
-      edge_flag_result |= LRT_EDGE_FLAG_EDGE_MARK;
-    }
-  }
-  return edge_flag_result;
-}
-
 static void lineart_add_edge_to_list(LineartRenderBuffer *rb, LineartEdge *e)
 {
   switch (e->flags) {
@@ -2086,43 +1909,10 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
     return;
   }
 
-  // TODO
-  // if (re_buf->remove_doubles) {
-  //   BMEditMesh *em = BKE_editmesh_create(bm);
-  //   BMOperator findop, weldop;
-
-  //  /* See bmesh_opdefines.c and bmesh_operators.c for op names and argument formatting. */
-  //  BMO_op_initf(bm, &findop, BMO_FLAG_DEFAULTS, "find_doubles verts=%av dist=%f", 0.0001);
-
-  //  BMO_op_exec(bm, &findop);
-
-  //  /* Weld the vertices. */
-  //  BMO_op_init(bm, &weldop, BMO_FLAG_DEFAULTS, "weld_verts");
-  //  BMO_slot_copy(&findop, slots_out, "targetmap.out", &weldop, slots_in, "targetmap");
-  //  BMO_op_exec(bm, &weldop);
-
-  //  BMO_op_finish(bm, &findop);
-  //  BMO_op_finish(bm, &weldop);
-
-  //  MEM_freeN(em);
-  //}
-
   /* Triangulate. */
   const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(me);
   const int tot_tri = BKE_mesh_runtime_looptri_len(me);
 
-  // float **normals = BKE_mesh_poly_normals_ensure(me);
-
-  // TODO
-  if (0) {
-    MEdge *medge = NULL;
-    FreestyleEdge *fed = CustomData_get(&me->edata, (int)(medge - me->medge), CD_FREESTYLE_EDGE);
-  }
-  if (0) {
-    MPoly *mpoly = NULL;
-    FreestyleFace *ffa = CustomData_get(&me->pdata, (int)(mpoly - me->mpoly), CD_FREESTYLE_FACE);
-  }
-
   /* Check if we should look for custom data tags like Freestyle edges or faces. */
   bool can_find_freestyle_edge = false;
   int layer_index = CustomData_get_active_layer_index(&me->edata, CD_FREESTYLE_EDGE);
@@ -2268,7 +2058,7 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
   edge_feat_data.v_array = la_v_arr;
   edge_feat_data.crease_threshold = use_crease;
   edge_feat_data.use_auto_smooth = use_auto_smooth;
-  edge_feat_data.use_freestyle_face = CustomData_has_layer(&me->pdata, CD_FREESTYLE_FACE);
+  edge_feat_data.use_freestyle_face = can_find_freestyle_face;
   if (edge_feat_data.use_freestyle_face) {
     edge_feat_data.freestyle_face_index = CustomData_get_layer_index(&me->pdata,
                                                                      CD_FREESTYLE_FACE);
@@ -2435,288 +2225,6 @@ static void lineart_geometry_object_load_no_bmesh(Line

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list