[Bf-blender-cvs] [897db2ba772] soc-2019-npr: LANPR: Move GPencil operators into ED

YimingWu noreply at git.blender.org
Sat Jul 13 08:14:15 CEST 2019


Commit: 897db2ba7725f7a636b56280717434ac991658d7
Author: YimingWu
Date:   Sat Jul 13 14:13:42 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB897db2ba7725f7a636b56280717434ac991658d7

LANPR: Move GPencil operators into ED

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

M	source/blender/draw/engines/lanpr/lanpr_access.c
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/editors/include/ED_lanpr.h
M	source/blender/editors/lanpr/lanpr_ops.c

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index 235fd2f153e..8a671efc6d9 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -26,158 +26,3 @@
 #include "lanpr_access.h"
 
 extern LANPR_SharedResource lanpr_share;
-
-static BMVert *split_edge_and_move(BMesh *bm, BMEdge *edge, const float new_pos[3])
-{
-  /*  Split edge one time and move the created vert to new_pos */
-  BMVert *vert;
-
-  vert = bmesh_kernel_split_edge_make_vert(bm, edge->v1, edge, NULL);
-
-  copy_v3_v3(vert->co, new_pos);
-
-  return vert;
-}
-
-void lanpr_generate_gpencil_from_chain(Depsgraph *depsgraph,
-                                       Object *ob,
-                                       bGPDlayer *gpl,
-                                       bGPDframe *gpf,
-                                       int qi_begin,
-                                       int qi_end,
-                                       int material_nr,
-                                       Collection *col,
-                                       int types)
-{
-  Scene *scene = DEG_get_evaluated_scene(depsgraph);
-  LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared;
-
-  if (rb == NULL) {
-    printf("NULL LANPR rb!\n");
-    return;
-  }
-  if (scene->lanpr.master_mode != LANPR_MASTER_MODE_SOFTWARE) {
-    return;
-  }
-
-  int color_idx = 0;
-  int tot_points = 0;
-  short thickness = 1;
-
-  float mat[4][4];
-
-  unit_m4(mat);
-
-  /*  Split countour lines at occlution points and deselect occluded segment */
-  LANPR_RenderLine *rl;
-  LANPR_RenderLineSegment *rls, *irls;
-
-  LANPR_RenderLineChain *rlc;
-  LANPR_RenderLineChainItem *rlci;
-  for (rlc = rb->chains.first; rlc; rlc = rlc->next) {
-
-    if (rlc->picked) {
-      continue;
-    }
-    if (ob && !rlc->object_ref) {
-      continue; /* intersection lines are all in the first collection running into here */
-    }
-    if (!(rlc->type & types)) {
-      continue;
-    }
-    if (rlc->level > qi_end || rlc->level < qi_begin) {
-      continue;
-    }
-    if (ob && &ob->id != rlc->object_ref->id.orig_id) {
-      continue;
-    }
-    if (col && rlc->object_ref) {
-      if (!BKE_collection_has_object_recursive(col, (Object *)rlc->object_ref->id.orig_id)) {
-        continue;
-      }
-    }
-
-    rlc->picked = 1;
-
-    int array_idx = 0;
-    int count = lanpr_count_chain(rlc);
-    bGPDstroke *gps = BKE_gpencil_add_stroke(gpf, color_idx, count, thickness);
-
-    float *stroke_data = BLI_array_alloca(stroke_data, count * GP_PRIM_DATABUF_SIZE);
-
-    for (rlci = rlc->chain.first; rlci; rlci = rlci->next) {
-      float opatity = 1.0f; /* rlci->occlusion ? 0.0f : 1.0f; */
-      stroke_data[array_idx] = rlci->gpos[0];
-      stroke_data[array_idx + 1] = rlci->gpos[1];
-      stroke_data[array_idx + 2] = rlci->gpos[2];
-      stroke_data[array_idx + 3] = 1;       /*  thickness */
-      stroke_data[array_idx + 4] = opatity; /*  hardness? */
-      array_idx += 5;
-    }
-
-    BKE_gpencil_stroke_add_points(gps, stroke_data, count, mat);
-    gps->mat_nr = material_nr;
-  }
-}
-
-void lanpr_update_data_for_external(Depsgraph *depsgraph)
-{
-  Scene *scene = DEG_get_evaluated_scene(depsgraph);
-  SceneLANPR *lanpr = &scene->lanpr;
-  if (lanpr->master_mode != LANPR_MASTER_MODE_SOFTWARE) {
-    return;
-  }
-  if (!lanpr_share.render_buffer_shared ||
-      lanpr_share.render_buffer_shared->cached_for_frame != scene->r.cfra) {
-    lanpr_compute_feature_lines_internal(depsgraph, 0);
-  }
-}
-
-bool lanpr_dpix_shader_error()
-{
-  return lanpr_share.dpix_shader_error;
-}
-
-bool lanpr_disable_edge_splits(Scene *s)
-{
-  return (s->lanpr.enabled && s->lanpr.disable_edge_splits);
-}
-
-void lanpr_copy_data(Scene *from, Scene *to)
-{
-  SceneLANPR *lanpr = &from->lanpr;
-  LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared, *new_rb;
-  LANPR_LineLayer *ll, *new_ll;
-  LANPR_LineLayerComponent *llc, *new_llc;
-
-  list_handle_empty(&to->lanpr.line_layers);
-
-  for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
-    new_ll = MEM_callocN(sizeof(LANPR_LineLayer), "Copied Line Layer");
-    memcpy(new_ll, ll, sizeof(LANPR_LineLayer));
-    list_handle_empty(&new_ll->components);
-    new_ll->next = new_ll->prev = NULL;
-    BLI_addtail(&to->lanpr.line_layers, new_ll);
-    for (llc = ll->components.first; llc; llc = llc->next) {
-      new_llc = MEM_callocN(sizeof(LANPR_LineLayerComponent), "Copied Line Layer Component");
-      memcpy(new_llc, llc, sizeof(LANPR_LineLayerComponent));
-      new_llc->next = new_llc->prev = NULL;
-      BLI_addtail(&new_ll->components, new_llc);
-    }
-  }
-
-  /*  render_buffer now only accessible from lanpr_share */
-}
-
-void lanpr_free_everything(Scene *s)
-{
-  SceneLANPR *lanpr = &s->lanpr;
-  LANPR_LineLayer *ll;
-  LANPR_LineLayerComponent *llc;
-
-  while (ll = BLI_pophead(&lanpr->line_layers)) {
-    while (llc = BLI_pophead(&ll->components))
-      MEM_freeN(llc);
-    MEM_freeN(ll);
-  }
-}
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index c96cbe5918a..5c5420dcf49 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -4725,273 +4725,7 @@ int lanpr_auto_create_line_layer_exec(struct bContext *C, struct wmOperator *op)
   return OPERATOR_FINISHED;
 }
 
-void lanpr_clear_gp_lanpr_flags(Depsgraph *dg, int frame)
-{
-  DEG_OBJECT_ITER_BEGIN (dg,
-                         o,
-                         DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | DEG_ITER_OBJECT_FLAG_VISIBLE |
-                             DEG_ITER_OBJECT_FLAG_DUPLI | DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET) {
-    if (o->type == OB_GPENCIL) {
-      bGPdata *gpd = ((Object *)o->id.orig_id)->data;
-      bGPDlayer *gpl;
-      for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
-        bGPDframe *gpf = BKE_gpencil_layer_find_frame(gpl, frame);
-        if (!gpf) {
-          continue;
-        }
-        gpf->flag &= ~GP_FRAME_LANPR_CLEARED;
-      }
-    }
-  }
-  DEG_OBJECT_ITER_END;
-}
-
-void lanpr_update_gp_strokes_recursive(
-    Depsgraph *dg, struct Collection *col, int frame, Object *source_only, Object *target_only)
-{
-  Object *ob;
-  Object *gpobj;
-  ModifierData *md;
-  bGPdata *gpd;
-  bGPDlayer *gpl;
-  bGPDframe *gpf;
-  CollectionObject *co;
-  CollectionChild *cc;
-
-  for (co = col->gobject.first; co || source_only; co = co->next) {
-    ob = source_only ? source_only : co->ob;
-    for (md = ob->modifiers.first; md; md = md->next) {
-      if (md->type == eModifierType_FeatureLine) {
-        FeatureLineModifierData *flmd = (FeatureLineModifierData *)md;
-        if (flmd->target && flmd->target->type == OB_GPENCIL) {
-          gpobj = flmd->target;
-
-          if (target_only && target_only != gpobj) {
-            continue;
-          }
-
-          gpd = gpobj->data;
-          gpl = BKE_gpencil_layer_get_index(gpd, flmd->layer, 1);
-          if (!gpl) {
-            gpl = BKE_gpencil_layer_addnew(gpd, "lanpr_layer", true);
-          }
-          gpf = BKE_gpencil_layer_getframe(gpl, frame, GP_GETFRAME_ADD_NEW);
-
-          if (gpf->strokes.first &&
-              !lanpr_share.render_buffer_shared->scene->lanpr.gpencil_overwrite) {
-            continue;
-          }
-
-          if (!(gpf->flag & GP_FRAME_LANPR_CLEARED)) {
-            BKE_gpencil_free_strokes(gpf);
-            gpf->flag |= GP_FRAME_LANPR_CLEARED;
-          }
-
-          lanpr_generate_gpencil_from_chain(dg,
-                                            ob,
-                                            gpl,
-                                            gpf,
-                                            flmd->level_begin,
-                                            flmd->use_multiple_levels ? flmd->level_end :
-                                                                        flmd->level_begin,
-                                            flmd->material,
-                                            NULL,
-                                            flmd->types);
-          DEG_id_tag_update(&gpd->id,
-                            ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
-        }
-      }
-    }
-    if (source_only) {
-      return;
-    }
-  }
-  for (cc = col->children.first; cc; cc = cc->next) {
-    lanpr_update_gp_strokes_recursive(dg, cc->collection, frame, source_only, target_only);
-  }
-}
-void lanpr_update_gp_strokes_collection(
-    Depsgraph *dg, struct Collection *col, int frame, int this_only, Object *target_only)
-{
-  Object *ob;
-  Object *gpobj;
-  ModifierData *md;
-  bGPdata *gpd;
-  bGPDlayer *gpl;
-  bGPDframe *gpf;
-  CollectionObject *co;
-  CollectionChild *cc;
-
-  /* depth first */
-  if (!this_only) {
-    for (cc = col->children.first; cc; cc = cc->next) {
-      lanpr_update_gp_strokes_collection(dg, cc->collection, frame, this_only, target_only);
-    }
-  }
-
-  if (col->lanpr.usage != COLLECTION_LANPR_INCLUDE || !col->lanpr.target) {
-    return;
-  }
-
-  gpobj = col->lanpr.target;
-
-  if (target_only && target_only != gpobj) {
-    return;
-  }
-
-  gpd = gpobj->data;
-  gpl = BKE_gpencil_layer_get_index(gpd, col->lanpr.layer, 1);
-  if (!gpl) {
-    gpl = BKE_gpencil_layer_addnew(gpd, "lanpr_layer", true);
-  }
-  gpf = BKE_gpencil_layer_getframe(gpl, frame, GP_GETFRAME_ADD_NEW);
-
-  if (gpf->strokes.first && !lanpr_share.render_buffer_shared->scene->lanpr.gpencil_overwrite) {
-    return;
-  }
-
-  if (!(gpf->flag & GP_FRAME_LANPR_CLEARED)) {
-    BKE_gpencil_free_strokes(gpf);
-    gpf->flag |= GP_FRAME_LANPR_CLEARED;
-  }
-
-  lanpr_generate_gpencil_from_chain(dg,
-                                    NULL,
-                                    gpl,
-                                    gpf,
-                                    col->lanpr.level_begin,
-                                    col->lanpr.use_multiple_levels ? col->lanpr.level_end :
-                                                                     col->lanpr.level_begin,
-                                    col->lanpr.material,
-             

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list