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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs