Files
test2/source/blender/python/BPY_extern.hh
RedMser ba04393fde Cleanup: Remove deprecated Python and Rigid Body Joint constraints
Remove long-deprecated constraints that will likely never be
implemented in this form.

- Rigid Body Joint Constraint was removed in 2.80, but some references
  remained in the code. Versioning code was written that tried to
  remove them on load, but since constraint initialization code sets
  the type to CONSTRAINT_TYPE_NULL before versioning gets a chance,
  the versioning code ended up never running. This has all been
  removed.
- Python/Script Constraint never worked since 2.50 and showed an error
  message in the UI panel.

These constraints now load as 'null' constraint, as seems to be
(looking at the code) the way that Blender currently deals with
removed constraint types. These still show up in the outliner and
python API, but have no UI panel. Removing such constraints completely
will be left for another time, as it is beyond the scope of removing
these two specific constraint types.

Pull Request: https://projects.blender.org/blender/blender/pulls/136672
2025-04-11 11:38:29 +02:00

148 lines
4.3 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup python
*/
#pragma once
#include "BLI_sys_types.h"
#ifdef WITH_INTERNATIONAL
# include <optional>
# include "BLI_string_ref.hh"
#endif
struct ARegionType;
struct AnimationEvalContext;
struct ChannelDriver; /* DNA_anim_types.h */
struct ID; /* DNA_ID.h */
struct ListBase; /* DNA_listBase.h */
struct Object; /* DNA_object_types.h */
struct PathResolvedRNA;
struct Text; /* defined in DNA_text_types.h */
struct bConstraint; /* DNA_constraint_types.h */
struct bConstraintOb; /* DNA_constraint_types.h */
struct bConstraintTarget; /* DNA_constraint_types.h */
struct bContext;
struct bContextDataResult;
struct StructRNA;
struct wmWindowManager;
/* global interpreter lock */
using BPy_ThreadStatePtr = void *;
/**
* Analogue of #PyEval_SaveThread()
*/
BPy_ThreadStatePtr BPY_thread_save();
/**
* Analogue of #PyEval_RestoreThread()
*/
void BPY_thread_restore(BPy_ThreadStatePtr tstate);
/** Our own wrappers to #Py_BEGIN_ALLOW_THREADS / #Py_END_ALLOW_THREADS */
#define BPy_BEGIN_ALLOW_THREADS \
{ \
BPy_ThreadStatePtr _bpy_saved_tstate = BPY_thread_save(); \
(void)0
#define BPy_END_ALLOW_THREADS \
BPY_thread_restore(_bpy_saved_tstate); \
} \
(void)0
/**
* Print the Python backtrace of the current thread state.
*
* Should be safe to call from anywhere at any point, may not output anything if there is no valid
* python thread state available.
*/
void BPY_thread_backtrace_print();
void BPY_text_free_code(Text *text);
/**
* Needed so the #Main pointer in `bpy.data` doesn't become out of date.
*/
void BPY_modules_update();
void BPY_modules_load_user(bContext *C);
void BPY_app_handlers_reset(bool do_all);
/**
* Run on exit to free any cached data.
*/
void BPY_driver_exit();
/**
* Update function, it gets rid of python-drivers global dictionary: `bpy.app.driver_namespace`,
* forcing #BPY_driver_exec to recreate it. Use this when loading a new `.blend` file
* so any variables setup by the previous blend file are cleared.
*/
void BPY_driver_reset();
/**
* This evaluates Python driver expressions, `driver_orig->expression`
* is a Python expression that should evaluate to a float number, which is returned.
*/
float BPY_driver_exec(PathResolvedRNA *anim_rna,
ChannelDriver *driver,
ChannelDriver *driver_orig,
const AnimationEvalContext *anim_eval_context);
/**
* Acquire the global-interpreter-lock (GIL) and wrap `Py_DECREF`.
* as there are some cases when this needs to be called outside the Python API code.
*/
void BPY_DECREF(void *pyob_ptr);
void BPY_DECREF_RNA_INVALIDATE(void *pyob_ptr);
int BPY_context_member_get(bContext *C, const char *member, bContextDataResult *result);
void BPY_context_set(bContext *C);
/**
* Use for updating while a python script runs - in case of file load.
*/
void BPY_context_update(bContext *C);
/**
* Use for `CTX_*_set(..)` functions need to set values which are later read back as expected.
* In this case we don't want the Python context to override the values as it causes problems
* see #66256.
*
* \param dict_p: A pointer to #bContext.data.py_context so we can assign a new value.
* \param dict_orig: The value of #bContext.data.py_context_orig to check if we need to copy.
*/
void BPY_context_dict_clear_members_array(void **dict_p,
void *dict_orig,
const char *context_members[],
uint context_members_len);
void BPY_id_release(ID *id);
/**
* Free (actually dereference) the Python type object representing the given #StrucRNA type,
* if it is defined.
*/
void BPY_free_srna_pytype(StructRNA *srna);
/**
* Avoids duplicating keyword list.
*/
bool BPY_string_is_keyword(const char *str);
/* `bpy_rna_callback.cc` */
void BPY_callback_screen_free(ARegionType *art);
void BPY_callback_wm_free(wmWindowManager *wm);
/* I18n for addons */
#ifdef WITH_INTERNATIONAL
std::optional<blender::StringRefNull> BPY_app_translations_py_pgettext(blender::StringRef msgctxt,
blender::StringRef msgid);
#endif