forked from bartvdbraak/blender
BPY Docs: Correct spelling (Addon --> Add-on)
Differential Revision: https://developer.blender.org/D2293
This commit is contained in:
parent
dc60fdd671
commit
87a7149831
@ -4,7 +4,7 @@ Persistent Handler Example
|
|||||||
|
|
||||||
By default handlers are freed when loading new files, in some cases you may
|
By default handlers are freed when loading new files, in some cases you may
|
||||||
wan't the handler stay running across multiple files (when the handler is
|
wan't the handler stay running across multiple files (when the handler is
|
||||||
part of an addon for example).
|
part of an add-on for example).
|
||||||
|
|
||||||
For this the :data:`bpy.app.handlers.persistent` decorator needs to be used.
|
For this the :data:`bpy.app.handlers.persistent` decorator needs to be used.
|
||||||
"""
|
"""
|
||||||
|
@ -5,7 +5,7 @@ Intro
|
|||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
Most of this object should only be useful if you actually manipulate i18n stuff from Python.
|
Most of this object should only be useful if you actually manipulate i18n stuff from Python.
|
||||||
If you are a regular addon, you should only bother about :const:`contexts` member,
|
If you are a regular add-on, you should only bother about :const:`contexts` member,
|
||||||
and the :func:`register`/:func:`unregister` functions! The :func:`pgettext` family of functions
|
and the :func:`register`/:func:`unregister` functions! The :func:`pgettext` family of functions
|
||||||
should only be used in rare, specific cases (like e.g. complex "composited" UI strings...).
|
should only be used in rare, specific cases (like e.g. complex "composited" UI strings...).
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ Intro
|
|||||||
Then, call ``bpy.app.translations.register(__name__, your_dict)`` in your ``register()`` function, and
|
Then, call ``bpy.app.translations.register(__name__, your_dict)`` in your ``register()`` function, and
|
||||||
``bpy.app.translations.unregister(__name__)`` in your ``unregister()`` one.
|
``bpy.app.translations.unregister(__name__)`` in your ``unregister()`` one.
|
||||||
|
|
||||||
The ``Manage UI translations`` addon has several functions to help you collect strings to translate, and
|
The ``Manage UI translations`` add-on has several functions to help you collect strings to translate, and
|
||||||
generate the needed python code (the translation dictionary), as well as optional intermediary po files
|
generate the needed python code (the translation dictionary), as well as optional intermediary po files
|
||||||
if you want some... See
|
if you want some... See
|
||||||
`How to Translate Blender <http://wiki.blender.org/index.php/Dev:Doc/Process/Translate_Blender>`_ and
|
`How to Translate Blender <http://wiki.blender.org/index.php/Dev:Doc/Process/Translate_Blender>`_ and
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
bl_info = {
|
bl_info = {
|
||||||
"name": "Example Addon Preferences",
|
"name": "Example Add-on Preferences",
|
||||||
"author": "Your Name Here",
|
"author": "Your Name Here",
|
||||||
"version": (1, 0),
|
"version": (1, 0),
|
||||||
"blender": (2, 65, 0),
|
"blender": (2, 65, 0),
|
||||||
"location": "SpaceBar Search -> Addon Preferences Example",
|
"location": "SpaceBar Search -> Add-on Preferences Example",
|
||||||
"description": "Example Addon",
|
"description": "Example Add-on",
|
||||||
"warning": "",
|
"warning": "",
|
||||||
"wiki_url": "",
|
"wiki_url": "",
|
||||||
"tracker_url": "",
|
"tracker_url": "",
|
||||||
@ -18,7 +18,7 @@ from bpy.props import StringProperty, IntProperty, BoolProperty
|
|||||||
|
|
||||||
|
|
||||||
class ExampleAddonPreferences(AddonPreferences):
|
class ExampleAddonPreferences(AddonPreferences):
|
||||||
# this must match the addon name, use '__package__'
|
# this must match the add-on name, use '__package__'
|
||||||
# when defining this in a submodule of a python package.
|
# when defining this in a submodule of a python package.
|
||||||
bl_idname = __name__
|
bl_idname = __name__
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ class ExampleAddonPreferences(AddonPreferences):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text="This is a preferences view for our addon")
|
layout.label(text="This is a preferences view for our add-on")
|
||||||
layout.prop(self, "filepath")
|
layout.prop(self, "filepath")
|
||||||
layout.prop(self, "number")
|
layout.prop(self, "number")
|
||||||
layout.prop(self, "boolean")
|
layout.prop(self, "boolean")
|
||||||
@ -46,7 +46,7 @@ class ExampleAddonPreferences(AddonPreferences):
|
|||||||
class OBJECT_OT_addon_prefs_example(Operator):
|
class OBJECT_OT_addon_prefs_example(Operator):
|
||||||
"""Display example preferences"""
|
"""Display example preferences"""
|
||||||
bl_idname = "object.addon_prefs_example"
|
bl_idname = "object.addon_prefs_example"
|
||||||
bl_label = "Addon Preferences Example"
|
bl_label = "Add-on Preferences Example"
|
||||||
bl_options = {'REGISTER', 'UNDO'}
|
bl_options = {'REGISTER', 'UNDO'}
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
Extending Menus
|
Extending Menus
|
||||||
+++++++++++++++
|
+++++++++++++++
|
||||||
|
|
||||||
When creating menus for addons you can't reference menus in Blender's default
|
When creating menus for add-ons you can't reference menus
|
||||||
scripts.
|
in Blender's default scripts.
|
||||||
Instead, the addon can add menu items to existing menus.
|
Instead, the add-on can add menu items to existing menus.
|
||||||
|
|
||||||
The function menu_draw acts like :class:`Menu.draw`.
|
The function menu_draw acts like :class:`Menu.draw`.
|
||||||
"""
|
"""
|
||||||
|
@ -13,7 +13,7 @@ be animated, accessed from the user interface and from python.
|
|||||||
definitions are not, this means whenever you load blender the class needs
|
definitions are not, this means whenever you load blender the class needs
|
||||||
to be registered too.
|
to be registered too.
|
||||||
|
|
||||||
This is best done by creating an addon which loads on startup and registers
|
This is best done by creating an add-on which loads on startup and registers
|
||||||
your properties.
|
your properties.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
@ -77,22 +77,22 @@ To run as modules:
|
|||||||
- The obvious way, ``import some_module`` command from the text window or interactive console.
|
- The obvious way, ``import some_module`` command from the text window or interactive console.
|
||||||
- Open as a text block and tick "Register" option, this will load with the blend file.
|
- Open as a text block and tick "Register" option, this will load with the blend file.
|
||||||
- copy into one of the directories ``scripts/startup``, where they will be automatically imported on startup.
|
- copy into one of the directories ``scripts/startup``, where they will be automatically imported on startup.
|
||||||
- define as an addon, enabling the addon will load it as a Python module.
|
- define as an add-on, enabling the add-on will load it as a Python module.
|
||||||
|
|
||||||
|
|
||||||
Addons
|
Add-ons
|
||||||
------
|
------
|
||||||
|
|
||||||
Some of Blenders functionality is best kept optional,
|
Some of Blenders functionality is best kept optional,
|
||||||
alongside scripts loaded at startup we have addons which are kept in their own directory ``scripts/addons``,
|
alongside scripts loaded at startup we have add-ons which are kept in their own directory ``scripts/addons``,
|
||||||
and only load on startup if selected from the user preferences.
|
and only load on startup if selected from the user preferences.
|
||||||
|
|
||||||
The only difference between addons and built-in Python modules is that addons must contain a ``bl_info``
|
The only difference between add-ons and built-in Python modules is that add-ons must contain a ``bl_info``
|
||||||
variable which Blender uses to read metadata such as name, author, category and URL.
|
variable which Blender uses to read metadata such as name, author, category and URL.
|
||||||
|
|
||||||
The user preferences addon listing uses **bl_info** to display information about each addon.
|
The User Preferences add-on listing uses **bl_info** to display information about each add-on.
|
||||||
|
|
||||||
`See Addons <http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Guidelines/Addons>`__
|
`See Add-ons <http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Guidelines/Addons>`__
|
||||||
for details on the ``bl_info`` dictionary.
|
for details on the ``bl_info`` dictionary.
|
||||||
|
|
||||||
|
|
||||||
@ -223,7 +223,7 @@ These functions usually appear at the bottom of the script containing class regi
|
|||||||
You can also use them for internal purposes setting up data for your own tools but take care
|
You can also use them for internal purposes setting up data for your own tools but take care
|
||||||
since register won't re-run when a new blend file is loaded.
|
since register won't re-run when a new blend file is loaded.
|
||||||
|
|
||||||
The register/unregister calls are used so it's possible to toggle addons and reload scripts while Blender runs.
|
The register/unregister calls are used so it's possible to toggle add-ons and reload scripts while Blender runs.
|
||||||
If the register calls were placed in the body of the script, registration would be called on import,
|
If the register calls were placed in the body of the script, registration would be called on import,
|
||||||
meaning there would be no distinction between importing a module or loading its classes into Blender.
|
meaning there would be no distinction between importing a module or loading its classes into Blender.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
Addon Tutorial
|
Add-on Tutorial
|
||||||
##############
|
###############
|
||||||
|
|
||||||
************
|
************
|
||||||
Introduction
|
Introduction
|
||||||
@ -36,6 +36,7 @@ Suggested reading before starting this tutorial.
|
|||||||
To best troubleshoot any error message Python prints while writing scripts you run blender with from a terminal,
|
To best troubleshoot any error message Python prints while writing scripts you run blender with from a terminal,
|
||||||
see :ref:`Use The Terminal <use_the_terminal>`.
|
see :ref:`Use The Terminal <use_the_terminal>`.
|
||||||
|
|
||||||
|
|
||||||
Documentation Links
|
Documentation Links
|
||||||
===================
|
===================
|
||||||
|
|
||||||
@ -46,51 +47,48 @@ While going through the tutorial you may want to look into our reference documen
|
|||||||
- :mod:`bpy.context` api reference. -
|
- :mod:`bpy.context` api reference. -
|
||||||
*Handy to have a list of available items your script may operate on.*
|
*Handy to have a list of available items your script may operate on.*
|
||||||
- :class:`bpy.types.Operator`. -
|
- :class:`bpy.types.Operator`. -
|
||||||
*The following addons define operators, these docs give details and more examples of operators.*
|
*The following add-ons define operators, these docs give details and more examples of operators.*
|
||||||
|
|
||||||
|
|
||||||
******
|
*******
|
||||||
Addons
|
Add-ons
|
||||||
******
|
*******
|
||||||
|
|
||||||
|
What is an Add-on?
|
||||||
|
==================
|
||||||
|
|
||||||
What is an Addon?
|
An add-on is simply a Python module with some additional requirements so Blender can display it in a list with useful
|
||||||
=================
|
|
||||||
|
|
||||||
An addon is simply a Python module with some additional requirements so Blender can display it in a list with useful
|
|
||||||
information.
|
information.
|
||||||
|
|
||||||
To give an example, here is the simplest possible addon.
|
To give an example, here is the simplest possible add-on.
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
bl_info = {"name": "My Test Addon", "category": "Object"}
|
bl_info = {"name": "My Test Add-on", "category": "Object"}
|
||||||
def register():
|
def register():
|
||||||
print("Hello World")
|
print("Hello World")
|
||||||
def unregister():
|
def unregister():
|
||||||
print("Goodbye World")
|
print("Goodbye World")
|
||||||
|
|
||||||
|
|
||||||
- ``bl_info`` is a dictionary containing addon meta-data such as the title, version and author to be displayed in the
|
- ``bl_info`` is a dictionary containing add-on metadata such as the title,
|
||||||
user preferences addon list.
|
version and author to be displayed in the user preferences add-on list.
|
||||||
- ``register`` is a function which only runs when enabling the addon, this means the module can be loaded without
|
- ``register`` is a function which only runs when enabling the add-on,
|
||||||
activating the addon.
|
this means the module can be loaded without activating the add-on.
|
||||||
- ``unregister`` is a function to unload anything setup by ``register``, this is called when the addon is disabled.
|
- ``unregister`` is a function to unload anything setup by ``register``, this is called when the add-on is disabled.
|
||||||
|
|
||||||
|
|
||||||
|
Notice this add-on does not do anything related to Blender, (the :mod:`bpy` module is not imported for example).
|
||||||
|
|
||||||
Notice this addon does not do anything related to Blender, (the :mod:`bpy` module is not imported for example).
|
This is a contrived example of an add-on that serves to illustrate the point
|
||||||
|
that the base requirements of an add-on are simple.
|
||||||
|
|
||||||
This is a contrived example of an addon that serves to illustrate the point
|
An add-on will typically register operators, panels, menu items etc, but its worth noting that _any_ script can do this,
|
||||||
that the base requirements of an addon are simple.
|
|
||||||
|
|
||||||
An addon will typically register operators, panels, menu items etc, but its worth noting that _any_ script can do this,
|
|
||||||
when executed from the text editor or even the interactive console - there is nothing inherently different about an
|
when executed from the text editor or even the interactive console - there is nothing inherently different about an
|
||||||
addon that allows it to integrate with Blender, such functionality is just provided by the :mod:`bpy` module for any
|
add-on that allows it to integrate with Blender, such functionality is just provided by the :mod:`bpy` module for any
|
||||||
script to access.
|
script to access.
|
||||||
|
|
||||||
So an addon is just a way to encapsulate a Python module in a way a user can easily utilize.
|
So an add-on is just a way to encapsulate a Python module in a way a user can easily utilize.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
@ -99,14 +97,14 @@ So an addon is just a way to encapsulate a Python module in a way a user can eas
|
|||||||
Messages will be printed when enabling and disabling.
|
Messages will be printed when enabling and disabling.
|
||||||
|
|
||||||
|
|
||||||
Your First Addon
|
Your First Add-on
|
||||||
================
|
=================
|
||||||
|
|
||||||
The simplest possible addon above was useful as an example but not much else.
|
The simplest possible add-on above is useful as an example but not much else.
|
||||||
This next addon is simple but shows how to integrate a script into Blender using an ``Operator``
|
This next add-on is simple but shows how to integrate a script into Blender using an ``Operator``
|
||||||
which is the typical way to define a tool accessed from menus, buttons and keyboard shortcuts.
|
which is the typical way to define a tool accessed from menus, buttons and keyboard shortcuts.
|
||||||
|
|
||||||
For the first example we'll make a script that simply moves all objects in a scene.
|
For the first example we will make a script that simply moves all objects in a scene.
|
||||||
|
|
||||||
|
|
||||||
Write The Script
|
Write The Script
|
||||||
@ -130,13 +128,13 @@ Add the following script to the text editor in Blender.
|
|||||||
:alt: Run Script button
|
:alt: Run Script button
|
||||||
|
|
||||||
Click the Run Script button, all objects in the active scene are moved by 1.0 Blender unit.
|
Click the Run Script button, all objects in the active scene are moved by 1.0 Blender unit.
|
||||||
Next we'll make this script into an addon.
|
Next we will make this script into an add-on.
|
||||||
|
|
||||||
|
|
||||||
Write the Addon (Simple)
|
Write the Add-on (Simple)
|
||||||
------------------------
|
-------------------------
|
||||||
|
|
||||||
This addon takes the body of the script above, and adds them to an operator's ``execute()`` function.
|
This add-on takes the body of the script above, and adds them to an operator's ``execute()`` function.
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
@ -173,7 +171,7 @@ This addon takes the body of the script above, and adds them to an operator's ``
|
|||||||
|
|
||||||
|
|
||||||
# This allows you to run the script directly from blenders text editor
|
# This allows you to run the script directly from blenders text editor
|
||||||
# to test the addon without having to install it.
|
# to test the add-on without having to install it.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
register()
|
register()
|
||||||
|
|
||||||
@ -206,33 +204,33 @@ Do this by pressing :kbd:`Spacebar` to bring up the operator search dialog and t
|
|||||||
|
|
||||||
The objects should move as before.
|
The objects should move as before.
|
||||||
|
|
||||||
*Keep this addon open in Blender for the next step - Installing.*
|
*Keep this add-on open in Blender for the next step - Installing.*
|
||||||
|
|
||||||
|
|
||||||
Install The Addon
|
Install The Add-on
|
||||||
-----------------
|
------------------
|
||||||
|
|
||||||
Once you have your addon within in Blender's text editor,
|
Once you have your add-on within in Blender's text editor,
|
||||||
you will want to be able to install it so it can be enabled in the user preferences to load on startup.
|
you will want to be able to install it so it can be enabled in the user preferences to load on startup.
|
||||||
|
|
||||||
Even though the addon above is a test, lets go through the steps anyway so you know how to do it for later.
|
Even though the add-on above is a test, lets go through the steps anyway so you know how to do it for later.
|
||||||
|
|
||||||
To install the Blender text as an addon you will first have to save it to disk, take care to obey the naming
|
To install the Blender text as an add-on you will first have to save it to disk, take care to obey the naming
|
||||||
restrictions that apply to Python modules and end with a ``.py`` extension.
|
restrictions that apply to Python modules and end with a ``.py`` extension.
|
||||||
|
|
||||||
Once the file is on disk, you can install it as you would for an addon downloaded online.
|
Once the file is on disk, you can install it as you would for an add-on downloaded online.
|
||||||
|
|
||||||
Open the user :menuselection:`File -> User Preferences`,
|
Open the user :menuselection:`File --> User Preferences`,
|
||||||
Select the *Addon* section, press *Install Addon...* and select the file.
|
Select the *Add-on* section, press *Install Add-on...* and select the file.
|
||||||
|
|
||||||
Now the addon will be listed and you can enable it by pressing the check-box,
|
Now the add-on will be listed and you can enable it by pressing the check-box,
|
||||||
if you want it to be enabled on restart, press *Save as Default*.
|
if you want it to be enabled on restart, press *Save as Default*.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
The destination of the addon depends on your Blender configuration.
|
The destination of the add-on depends on your Blender configuration.
|
||||||
When installing an addon the source and destination path are printed in the console.
|
When installing an add-on the source and destination path are printed in the console.
|
||||||
You can also find addon path locations by running this in the Python console.
|
You can also find add-on path locations by running this in the Python console.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
@ -243,17 +241,17 @@ if you want it to be enabled on restart, press *Save as Default*.
|
|||||||
`Directory Layout <https://www.blender.org/manual/getting_started/installing_blender/directorylayout.html>`_
|
`Directory Layout <https://www.blender.org/manual/getting_started/installing_blender/directorylayout.html>`_
|
||||||
|
|
||||||
|
|
||||||
Your Second Addon
|
Your Second Add-on
|
||||||
=================
|
==================
|
||||||
|
|
||||||
For our second addon, we will focus on object instancing - this is - to make linked copies of an object in a
|
For our second add-on, we will focus on object instancing - this is - to make linked copies of an object in a
|
||||||
similar way to what you may have seen with the array modifier.
|
similar way to what you may have seen with the array modifier.
|
||||||
|
|
||||||
|
|
||||||
Write The Script
|
Write The Script
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
As before, first we will start with a script, develop it, then convert into an addon.
|
As before, first we will start with a script, develop it, then convert into an add-on.
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
@ -324,17 +322,17 @@ allows vectors to be multiplied by numbers and matrices.
|
|||||||
|
|
||||||
If you are interested in this area, read into :class:`mathutils.Vector` - there are many handy utility functions
|
If you are interested in this area, read into :class:`mathutils.Vector` - there are many handy utility functions
|
||||||
such as getting the angle between vectors, cross product, dot products
|
such as getting the angle between vectors, cross product, dot products
|
||||||
as well as more advanced functions in :mod:`mathutils.geometry` such as bezier spline interpolation and
|
as well as more advanced functions in :mod:`mathutils.geometry` such as Bézier Spline interpolation and
|
||||||
ray-triangle intersection.
|
ray-triangle intersection.
|
||||||
|
|
||||||
For now we'll focus on making this script an addon, but its good to know that this 3D math module is available and
|
For now we will focus on making this script an add-on, but its good to know that this 3D math module is available and
|
||||||
can help you with more advanced functionality later on.
|
can help you with more advanced functionality later on.
|
||||||
|
|
||||||
|
|
||||||
Write the Addon
|
Write the Add-on
|
||||||
---------------
|
----------------
|
||||||
|
|
||||||
The first step is to convert the script as-is into an addon.
|
The first step is to convert the script as-is into an add-on.
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
@ -381,7 +379,7 @@ The first step is to convert the script as-is into an addon.
|
|||||||
register()
|
register()
|
||||||
|
|
||||||
|
|
||||||
Everything here has been covered in the previous steps, you may want to try run the addon still
|
Everything here has been covered in the previous steps, you may want to try run the add-on still
|
||||||
and consider what could be done to make it more useful.
|
and consider what could be done to make it more useful.
|
||||||
|
|
||||||
|
|
||||||
@ -434,7 +432,7 @@ however the link above includes examples of more advanced property usage.
|
|||||||
Menu Item
|
Menu Item
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
|
|
||||||
Addons can add to the user interface of existing panels, headers and menus defined in Python.
|
Add-ons can add to the user interface of existing panels, headers and menus defined in Python.
|
||||||
|
|
||||||
For this example we'll add to an existing menu.
|
For this example we'll add to an existing menu.
|
||||||
|
|
||||||
@ -464,7 +462,7 @@ For docs on extending menus see: :doc:`bpy.types.Menu`.
|
|||||||
Keymap
|
Keymap
|
||||||
^^^^^^
|
^^^^^^
|
||||||
|
|
||||||
In Blender addons have their own key-maps so as not to interfere with Blenders built in key-maps.
|
In Blender, add-ons have their own keymaps so as not to interfere with Blenders built in key-maps.
|
||||||
|
|
||||||
In the example below, a new object-mode :class:`bpy.types.KeyMap` is added,
|
In the example below, a new object-mode :class:`bpy.types.KeyMap` is added,
|
||||||
then a :class:`bpy.types.KeyMapItem` is added to the key-map which references our newly added operator,
|
then a :class:`bpy.types.KeyMapItem` is added to the key-map which references our newly added operator,
|
||||||
@ -502,7 +500,7 @@ this allows you to have multiple keys accessing the same operator with different
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
While :kbd:`Ctrl-Shift-Space` isn't a default Blender key shortcut, its hard to make sure addons won't
|
While :kbd:`Ctrl-Shift-Space` isn't a default Blender key shortcut, its hard to make sure add-ons won't
|
||||||
overwrite each others keymaps, At least take care when assigning keys that they don't
|
overwrite each others keymaps, At least take care when assigning keys that they don't
|
||||||
conflict with important functionality within Blender.
|
conflict with important functionality within Blender.
|
||||||
|
|
||||||
@ -606,14 +604,14 @@ After selecting it from the menu, you can choose how many instance of the cube y
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
Directly executing the script multiple times will add the menu each time too.
|
Directly executing the script multiple times will add the menu each time too.
|
||||||
While not useful behavior, theres nothing to worry about since addons won't register them selves multiple
|
While not useful behavior, theres nothing to worry about since add-ons won't register them selves multiple
|
||||||
times when enabled through the user preferences.
|
times when enabled through the user preferences.
|
||||||
|
|
||||||
|
|
||||||
Conclusions
|
Conclusions
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Addons can encapsulate certain functionality neatly for writing tools to improve your work-flow or for writing utilities
|
Add-ons can encapsulate certain functionality neatly for writing tools to improve your work-flow or for writing utilities
|
||||||
for others to use.
|
for others to use.
|
||||||
|
|
||||||
While there are limits to what Python can do within Blender, there is certainly a lot that can be achieved without
|
While there are limits to what Python can do within Blender, there is certainly a lot that can be achieved without
|
||||||
@ -636,7 +634,7 @@ Here are some sites you might like to check on after completing this tutorial.
|
|||||||
*For more background details on Blender/Python integration.*
|
*For more background details on Blender/Python integration.*
|
||||||
- `How to Think Like a Computer Scientist <http://interactivepython.org/courselib/static/thinkcspy/index.html>`_ -
|
- `How to Think Like a Computer Scientist <http://interactivepython.org/courselib/static/thinkcspy/index.html>`_ -
|
||||||
*Great info for those who are still learning Python.*
|
*Great info for those who are still learning Python.*
|
||||||
- `Blender Development (Wiki) <http://wiki.blender.org/index.php/Dev:Contents>`_ -
|
- `Blender Development (Wiki) <https://wiki.blender.org/index.php/Dev:Contents>`_ -
|
||||||
*Blender Development, general information and helpful links.*
|
*Blender Development, general information and helpful links.*
|
||||||
- `Blender Artists (Coding Section) <http://blenderartists.org/forum/forumdisplay.php?47-Coding>`_ -
|
- `Blender Artists (Coding Section) <http://blenderartists.org/forum/forumdisplay.php?47-Coding>`_ -
|
||||||
*forum where people ask Python development questions*
|
*forum where people ask Python development questions*
|
||||||
|
@ -363,7 +363,7 @@ INFO_DOCS = (
|
|||||||
("info_overview.rst",
|
("info_overview.rst",
|
||||||
"Blender/Python API Overview: a more complete explanation of Python integration"),
|
"Blender/Python API Overview: a more complete explanation of Python integration"),
|
||||||
("info_tutorial_addon.rst",
|
("info_tutorial_addon.rst",
|
||||||
"Blender/Python Addon Tutorial: a step by step guide on how to write an addon from scratch"),
|
"Blender/Python Add-on Tutorial: a step by step guide on how to write an add-on from scratch"),
|
||||||
("info_api_reference.rst",
|
("info_api_reference.rst",
|
||||||
"Blender/Python API Reference Usage: examples of how to use the API reference docs"),
|
"Blender/Python API Reference Usage: examples of how to use the API reference docs"),
|
||||||
("info_best_practice.rst",
|
("info_best_practice.rst",
|
||||||
|
Loading…
Reference in New Issue
Block a user