Beispiel #1
0
static void clean_viewport_memory(Main *bmain, Scene *scene, int renderlay)
{
	Object *object;
	Scene *sce_iter;
	Base *base;

	for (object = bmain->object.first; object; object = object->id.next) {
		object->id.flag |= LIB_DOIT;
	}

	for (SETLOOPER(scene, sce_iter, base)) {
		if ((base->lay & renderlay) == 0) {
			continue;
		}
		if (RE_allow_render_generic_object(base->object)) {
			base->object->id.flag &= ~LIB_DOIT;
		}
	}

	for (SETLOOPER(scene, sce_iter, base)) {
		object = base->object;
		if ((object->id.flag & LIB_DOIT) == 0) {
			continue;
		}
		object->id.flag &= ~LIB_DOIT;

		BKE_object_free_derived_caches(object);
	}
}
static bool gpencil_object_modifier_remove(Main *bmain,
                                           Object *ob,
                                           GpencilModifierData *md,
                                           bool *UNUSED(r_sort_depsgraph))
{
  /* It seems on rapid delete it is possible to
   * get called twice on same modifier, so make
   * sure it is in list. */
  if (BLI_findindex(&ob->greasepencil_modifiers, md) == -1) {
    return 0;
  }

  DEG_relations_tag_update(bmain);

  BLI_remlink(&ob->greasepencil_modifiers, md);
  BKE_gpencil_modifier_free(md);
  BKE_object_free_derived_caches(ob);

  return 1;
}
Beispiel #3
0
void BKE_mesh_to_curve(Main *bmain, Depsgraph *depsgraph, Scene *UNUSED(scene), Object *ob)
{
  /* make new mesh data from the original copy */
  Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
  Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob);
  Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &CD_MASK_MESH);
  ListBase nurblist = {NULL, NULL};

  BKE_mesh_to_curve_nurblist(me_eval, &nurblist, 0);
  BKE_mesh_to_curve_nurblist(me_eval, &nurblist, 1);

  if (nurblist.first) {
    Curve *cu = BKE_curve_add(bmain, ob->id.name + 2, OB_CURVE);
    cu->flag |= CU_3D;

    cu->nurb = nurblist;

    id_us_min(&((Mesh *)ob->data)->id);
    ob->data = cu;
    ob->type = OB_CURVE;

    BKE_object_free_derived_caches(ob);
  }
}