Python API: remove object.dupli_list_create and dupli_list_clear.
Cycles is no longer using this. There are still addons using it but for correct results with the new depsgraph this API should not be used. Differential Revision: https://developer.blender.org/D3143
This commit is contained in:
parent
f0a4c631bb
commit
5d7952d9c7
|
@ -4963,7 +4963,6 @@ static void lib_link_object(FileData *fd, Main *main)
|
|||
}
|
||||
|
||||
ob->gpd = newlibadr_us(fd, ob->id.lib, ob->gpd);
|
||||
ob->duplilist = NULL;
|
||||
|
||||
ob->id.tag &= ~LIB_TAG_NEED_LINK;
|
||||
/* if id.us==0 a new base will be created later on */
|
||||
|
|
|
@ -321,14 +321,12 @@ typedef struct Object {
|
|||
|
||||
ListBase gpulamp; /* runtime, for glsl lamp display only */
|
||||
ListBase pc_ids;
|
||||
ListBase *duplilist; /* for temporary dupli list storage, only for use by RNA API */
|
||||
|
||||
struct RigidBodyOb *rigidbody_object; /* settings for Bullet rigid body */
|
||||
struct RigidBodyCon *rigidbody_constraint; /* settings for Bullet constraint */
|
||||
|
||||
float ima_ofs[2]; /* offset for image empties */
|
||||
ImageUser *iuser; /* must be non-null when oject is an empty image */
|
||||
void *pad4;
|
||||
|
||||
ListBase lodlevels; /* contains data for levels of detail */
|
||||
LodLevel *currentlod;
|
||||
|
|
|
@ -2927,11 +2927,6 @@ static void rna_def_object(BlenderRNA *brna)
|
|||
RNA_def_property_ui_text(prop, "Dupli Frames Off", "Recurring frames to exclude from the Dupliframes");
|
||||
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update");
|
||||
|
||||
prop = RNA_def_property(srna, "dupli_list", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_collection_sdna(prop, NULL, "duplilist", NULL);
|
||||
RNA_def_property_struct_type(prop, "DupliObject");
|
||||
RNA_def_property_ui_text(prop, "Dupli list", "Object duplis");
|
||||
|
||||
prop = RNA_def_property(srna, "is_duplicator", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLI);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
|
|
|
@ -205,88 +205,6 @@ static Mesh *rna_Object_to_mesh(
|
|||
return rna_Main_meshes_new_from_object(bmain, reports, sce, view_layer, ob, apply_modifiers, settings, calc_tessface, calc_undeformed);
|
||||
}
|
||||
|
||||
/* mostly a copy from convertblender.c */
|
||||
static void dupli_render_particle_set(EvaluationContext *eval_ctx, Scene *scene, Object *ob, int level, int enable)
|
||||
{
|
||||
/* ugly function, but we need to set particle systems to their render
|
||||
* settings before calling object_duplilist, to get render level duplis */
|
||||
Group *group;
|
||||
GroupObject *go;
|
||||
ParticleSystem *psys;
|
||||
DerivedMesh *dm;
|
||||
float mat[4][4];
|
||||
|
||||
unit_m4(mat);
|
||||
|
||||
if (level >= MAX_DUPLI_RECUR)
|
||||
return;
|
||||
|
||||
if (ob->transflag & OB_DUPLIPARTS) {
|
||||
for (psys = ob->particlesystem.first; psys; psys = psys->next) {
|
||||
if (ELEM(psys->part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
|
||||
if (enable)
|
||||
psys_render_set(ob, psys, mat, mat, 1, 1, 0.f);
|
||||
else
|
||||
psys_render_restore(ob, psys);
|
||||
}
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
/* this is to make sure we get render level duplis in groups:
|
||||
* the derivedmesh must be created before init_render_mesh,
|
||||
* since object_duplilist does dupliparticles before that */
|
||||
dm = mesh_create_derived_render(eval_ctx, scene, ob, CD_MASK_BAREMESH | CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL);
|
||||
dm->release(dm);
|
||||
|
||||
for (psys = ob->particlesystem.first; psys; psys = psys->next)
|
||||
psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated;
|
||||
}
|
||||
}
|
||||
|
||||
if (ob->dup_group == NULL) return;
|
||||
group = ob->dup_group;
|
||||
|
||||
for (go = group->gobject.first; go; go = go->next)
|
||||
dupli_render_particle_set(eval_ctx, scene, go->ob, level + 1, enable);
|
||||
}
|
||||
/* When no longer needed, duplilist should be freed with Object.free_duplilist */
|
||||
static void rna_Object_create_duplilist(Object *ob, bContext *C, ReportList *reports, Scene *sce, int settings)
|
||||
{
|
||||
bool for_render = (settings == DAG_EVAL_RENDER);
|
||||
EvaluationContext eval_ctx;
|
||||
|
||||
CTX_data_eval_ctx(C, &eval_ctx);
|
||||
|
||||
eval_ctx.mode = settings;
|
||||
|
||||
if (!(ob->transflag & OB_DUPLI)) {
|
||||
BKE_report(reports, RPT_ERROR, "Object does not have duplis");
|
||||
return;
|
||||
}
|
||||
|
||||
/* free duplilist if a user forgets to */
|
||||
if (ob->duplilist) {
|
||||
BKE_report(reports, RPT_WARNING, "Object.dupli_list has not been freed");
|
||||
|
||||
free_object_duplilist(ob->duplilist);
|
||||
ob->duplilist = NULL;
|
||||
}
|
||||
if (for_render)
|
||||
dupli_render_particle_set(&eval_ctx, sce, ob, 0, 1);
|
||||
ob->duplilist = object_duplilist(&eval_ctx, sce, ob);
|
||||
if (for_render)
|
||||
dupli_render_particle_set(&eval_ctx, sce, ob, 0, 0);
|
||||
/* ob->duplilist should now be freed with Object.free_duplilist */
|
||||
}
|
||||
|
||||
static void rna_Object_free_duplilist(Object *ob)
|
||||
{
|
||||
if (ob->duplilist) {
|
||||
free_object_duplilist(ob->duplilist);
|
||||
ob->duplilist = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static PointerRNA rna_Object_shape_key_add(Object *ob, bContext *C, ReportList *reports,
|
||||
const char *name, int from_mix)
|
||||
{
|
||||
|
@ -542,13 +460,6 @@ void RNA_api_object(StructRNA *srna)
|
|||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
static const EnumPropertyItem dupli_eval_mode_items[] = {
|
||||
{DAG_EVAL_VIEWPORT, "VIEWPORT", 0, "Viewport", "Generate duplis using viewport settings"},
|
||||
{DAG_EVAL_PREVIEW, "PREVIEW", 0, "Preview", "Generate duplis using preview settings"},
|
||||
{DAG_EVAL_RENDER, "RENDER", 0, "Render", "Generate duplis using render settings"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
#ifndef NDEBUG
|
||||
static const EnumPropertyItem mesh_dm_info_items[] = {
|
||||
{0, "SOURCE", 0, "Source", "Source mesh"},
|
||||
|
@ -650,19 +561,6 @@ void RNA_api_object(StructRNA *srna)
|
|||
"Mesh created from object, remove it if it is only used for export");
|
||||
RNA_def_function_return(func, parm);
|
||||
|
||||
/* duplis */
|
||||
func = RNA_def_function(srna, "dupli_list_create", "rna_Object_create_duplilist");
|
||||
RNA_def_function_ui_description(func, "Create a list of dupli objects for this object, needs to "
|
||||
"be freed manually with free_dupli_list to restore the "
|
||||
"objects real matrix and layers");
|
||||
parm = RNA_def_pointer(func, "scene", "Scene", "", "Scene within which to evaluate duplis");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
RNA_def_enum(func, "settings", dupli_eval_mode_items, 0, "", "Generate texture coordinates for rendering");
|
||||
RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_CONTEXT);
|
||||
|
||||
func = RNA_def_function(srna, "dupli_list_clear", "rna_Object_free_duplilist");
|
||||
RNA_def_function_ui_description(func, "Free the list of dupli objects");
|
||||
|
||||
/* Armature */
|
||||
func = RNA_def_function(srna, "find_armature", "modifiers_isDeformedByArmature");
|
||||
RNA_def_function_ui_description(func, "Find armature influencing this object as a parent or via a modifier");
|
||||
|
|
Loading…
Reference in New Issue