Commit Graph

911 Commits

Author SHA1 Message Date
Lukas Toenne
32f35056af Fix #35633, Cannot Add Group Node In Blender 2.67a. The menu entry for the "make group" operator was missing in the new categories system. Added an alternative NodeItemCustom to the standard NodeItem to
allow custom draw functions such as this operator. Used in the group items callback to generate the basic group_make operator call.
2013-06-05 09:21:17 +00:00
Campbell Barton
2d4a682a8e add popup menu to allow python scripts to show popups without having to define a menu class first. 2013-06-01 04:06:38 +00:00
Campbell Barton
de3686ac25 fix [#34851] "UnitSettings.scale_length" not beeing calculated the same way for all objects 2013-05-28 23:07:16 +00:00
Lukas Toenne
81ba62e1e9 Fix for node menu: Show the group input/output nodes in the Input/Output categories respectively, so they can be added with the usual UI in case the user deletes them. These nodes are polled out for
non-group trees (node trees not in the bpy.data.node_groups collection) to avoid confusion. For that purpose a new optional poll function argument has been added to NodeItem, which allows selectively
polling individual items in an otherwise static list.
2013-05-28 09:45:34 +00:00
Campbell Barton
5460e31d56 now an addons preference are available when it start,
this change is made so addons may initialize their own settings.
2013-05-27 16:12:06 +00:00
Campbell Barton
8e6ce736c4 disable auto indent when pasting text into the python console. 2013-05-24 01:04:37 +00:00
Campbell Barton
675f845116 use standard name for operator properties - 'props'. 2013-05-09 13:05:36 +00:00
Lukas Toenne
56485b6562 Upgrade for the add_search node operator. This now uses the same basic system as the regular add_node operator, with enum items generated from the common node categories system (nodeitems_utils module). This means that any node listed in the regular node Add menu can now also be added via searching, including node groups and the like. The search operator also uses the subsequent transform to make insertion a bit more streamlined. 2013-05-09 11:43:48 +00:00
Campbell Barton
279a2a1916 fix rna_info, python method to C function wasn't being tested for. (broke changelog generator) 2013-05-09 02:50:59 +00:00
Lukas Toenne
8863222a90 A bit more pythonic way of using the items callback in node categories. The category.items attribute is now a function taking a context parameter instead of a property. This can be used for checking validity, e.g. for doing node group recursion checks, and filter out unusable items. 2013-05-08 15:41:05 +00:00
Lukas Toenne
451a32070c Removed the unused socket template system from the bpy_types Node base class (it interferes with the input_templates/output_templates functions from C nodes). This can be reimplemented in a nicer way for pynode subclasses later on, but should not be part of the basic Node class. 2013-05-08 15:40:51 +00:00
Lukas Toenne
bfa97b4710 Workaround for C nodes: In order to make registerable RNA methods of the standard C nodes (e.g. poll or draw_buttons) available in python scripts, they need a specialized Node subtype (called NodeInternal). This is necessary because bpy omits any registerable functions of RNA types in the generated python classes, relying instead on using the supposed native implementation in a registered python class. Since the standard shader/compositor/texture nodes in Blender are not registered but directly created in makesrna they lack all registerable function in the associated python types. The NodeInternal RNA subtype replaces the registerable functions of the base Node type to solve this issue. 2013-05-08 15:40:40 +00:00
Campbell Barton
a6a6184b3e auto indent for multi-line python statements. 2013-05-08 12:57:00 +00:00
Bastien Montagne
95271e248a One-liner fix for part of regression of nodes UI translation (since new pynodes): add menu entries are translated again.
The sockets' names remain untranslated currently, investigating whether this can safely be fixed at this stage too...
2013-05-03 12:37:45 +00:00
Campbell Barton
56e6c14e1e fix for exception in console auto-completing an object with __getitem__ but no __len__ (BMEdge). 2013-04-30 23:01:12 +00:00
Bastien Montagne
b0b634adeb Do not report formatting mismatch between org and translation when message is fuzzy (but "fix" it anyway if asked so). 2013-04-29 18:22:22 +00:00
Campbell Barton
4ca0df348e move modal view3d keymaps out of main list of keymaps into the view3d section. 2013-04-29 17:59:44 +00:00
Bastien Montagne
5c5ecc3465 Usual UI messages fixes... 2013-04-29 14:09:19 +00:00
Campbell Barton
263ea88392 fix/workaround [#34983] bpy.ops.mesh.primitive_torus_add() ignores rotation-parameter 2013-04-22 20:53:30 +00:00
Lukas Toenne
d56ceaab4c Nicer registration mechanism for node categories. The lists of node categories and items are now stored in a dictionary with an identifier key, so they can be registered and unregistered individually. The Add menu is now persistent and gets extended with a draw function for each of the registered node category lists.
This allows pynodes to define their own list of node categories and items and register it at runtime without interfering with the standard nodes.
2013-04-22 16:25:35 +00:00
Bastien Montagne
fba67abf7a Restore usage of difflib's quick_ratio()... Don't actually know what happens here, my tests with timeit showed it much slower than ratio(), but real-life says the contrary... 2013-04-19 16:23:02 +00:00
Bastien Montagne
01ffbab8f5 Some i18n tools fixes (I'm ashamed...), and merge func for I18nMessages objects. 2013-04-18 15:26:22 +00:00
Bastien Montagne
4587ecd45b More i18n tools tweaks:
* Remove difflib's quick_ratio() call, from quick tests looks it is four times slower than ratio(), and yet it gives the same results...
* Moved code to find all po's in a dir into its own func (will be used by i18n addon tools too).
2013-04-18 11:09:25 +00:00
Lukas Toenne
bb1b2529a0 Added back the basic Search operator to the node Add menu. This operator should be implemented a bit nicer using the new categories system as well, but for now works just as before. 2013-04-17 07:47:00 +00:00
Thomas Dinges
e04b7dc209 Node Toolbar:
* Use column() layout, this way it uses a bit less space.
2013-04-14 09:17:03 +00:00
Thomas Dinges
ceacf24e3d Node Toolbar:
* Have panels closed by default.
2013-04-13 16:26:55 +00:00
Lukas Toenne
94931f9f45 Replacing the node Add menu and making the toolbar useful
As some people have already noticed, the "Add" menu for nodes is a bit messy since pynodes merge. The reason for this is that the order of nodes in submenus (categories) was previously defined by the order in which all nodes are registered (at the bottom of blenkernel/intern/node.c). For the dynamic registration of node types now possible this system of defining node order along with registration is no longer viable: while it would still sort of work for C nodes, it is completely meaningless for dynamic (python) nodes, which are basically registered automatically in whatever order modules and addons are loaded, with the added complexity of unloading and reloading.

To fix this problem and add a bunch of desirable features this commit replaces the C menu with a python implementation. The new menu does not rely on any particular order of types in the node registry, but instead uses a simple explicit list of all the available nodes, grouped by categories (in scripts/nodeitems_builtins.py).

There are a number of additional features that become possible with this implementation:

1) Node Toolbar can be populated!
The list of nodes is used to create 2 UI items for each node: 1 entry in a submenu of "Add" menu and 1 item in a node toolbar panel with basically the same functionality. Clicking a button in the toolbar will add a new node of this type, just like selecting an item in the menu. The toolbar has the advantage of having collapsible panels for each category, so users can decide if they don't need certain nodes categories and have the rest more easily accessible.

2) Each node item is a true operator call.
The old Add menu is a pretty old piece of C code which doesn't even use proper operator buttons. Now there is a generic node_add operator which can be used very flexibly for adding any of the available nodes.

3) Node Items support additional settings.
Each "NodeItem" consists of the basic node type plus an optional list of initial settings that shall be applied to a new instance. This gives additional flexibility for creating variants of the same node or for defining preferred initial settings. E.g. it has been requested to disable previews for all nodes except inputs, this would be simple change in the py code and much less intrusive than in C.

4) Node items can be generated with a function.
A callback can be used in any category instead of the fixed list, which generates a set of items based on the context (much like dynamic enum items in bpy.props). Originally this was implemented for group nodes, because these nodes only make sense when linked to a node tree from the library data. This principle could come in handy for a number of other nodes, e.g. Image nodes could provide a similar list of node variants based on images in the library - no need to first add node, then select an image.

WARNING: pynodes scripters will have to rework their "draw_add_menu" callback in node tree types, this has been removed now! It was already pretty redundant, since one can add draw functions to the Add menu just like for any other menu. In the future i'd like to improve the categories system further so scripters can use it for custom node systems too, for now just make a draw callback and attach it to the Add menu.
2013-04-13 15:38:02 +00:00
Bastien Montagne
0e4b092c2d More fixes for addon i18n messages management. 2013-04-12 12:19:50 +00:00
Campbell Barton
2c6a82dd0a py api: minor change to operator attribute access, do identity comparison with None (no functional change). 2013-04-11 10:16:18 +00:00
Campbell Barton
577a1b9239 fix [#34805] Bake action ignores parent motion
in fact this is more feature request.
add an option to bake a parented objects animation, then clear the parent and apply the action.
2013-04-11 08:42:25 +00:00
Campbell Barton
791815c9d4 py api: path_reference_copy() use try/except when copying images, can fail for odd reasons (currently fails if the dest dir is a symlink and not using expected permissions). 2013-04-10 12:16:27 +00:00
Campbell Barton
44a661e6a8 py api: simple function to get an image from an objects for simple formats that only support one image per object. 2013-04-10 11:43:25 +00:00
Bastien Montagne
6382f6bedd Various edits preparing addons' translations tools (not everything yet functionnal/tested, though).
Also workaround a nasty bug, where unregistered py classes remain listed in relevant __subclasses__() calls, which would lead to crash with python addons i18n tools (main translation was not affected, as messages extracting tools are executed in a brand new "factory startup" Blender ;) ).
2013-04-09 08:56:35 +00:00
Thomas Dinges
858ff6b696 Fix for [#34898] Typo in error message of mathutils.Vector
* Also fixed some more cases of "more then" -> "more than".
2013-04-07 15:09:06 +00:00
Bastien Montagne
4a66bf8f4a Usual typo fixes... ;) 2013-04-07 10:21:22 +00:00
Campbell Barton
63d523336f freestyle lineset tag attribute was defined but not used, also some code cleanup. 2013-04-07 01:38:03 +00:00
Campbell Barton
98752a1f30 py api additions needed for fixing [#34864].
- add rna property 'as_bytes' method so you can get a string property as python bytes (bypass encoding).
- make bpy.path.abspath/relpath compatible with bytes.
- add 'relpath' option to bpy_extras.image_utils.load_image(), so you can load an image relative to a path.
2013-04-05 00:30:32 +00:00
Bastien Montagne
932820499a Usual typo fixing... 2013-04-02 07:27:39 +00:00
Campbell Barton
8e3d590b76 code cleanup: python/pep8 and double-promotion warnings. 2013-03-28 19:33:14 +00:00
Bastien Montagne
c54fba6a11 I18n: fix/enhance how predefined contexts are handled in py code. Now they should be specified by an attribute with the same name as the one in bpy.app.translations.contexts named tuple (i18n_contexts.default, .id_windowmanager, etc.).
This way, i18n message extracting code is now able to get the right context!
2013-03-28 15:03:47 +00:00
Bastien Montagne
b4bd43e022 I18n: various "new data translation" fixes... 2013-03-26 14:33:53 +00:00
Bastien Montagne
4cb9414b39 I18n: use id_windowmanager context for keymap idnames. Solves some issues with those names (notably "Clip" one, and "Screen" too) in some translations. Also move "Key" as "Keyboard" (opposed to "Keyframe") to same context. 2013-03-25 11:35:42 +00:00
Bastien Montagne
72a3714695 Update to i18n tools (new [CTX_]DATA_ macros, and some more exceptions to spell check...). 2013-03-25 08:30:38 +00:00
Bastien Montagne
e45da6f40a Small changes/additions to i18n tools. 2013-03-19 15:49:53 +00:00
Bastien Montagne
4857d62ac6 More i18n tools cleanup. Also do not import nl in trunk currently (void translation)! 2013-03-19 10:11:41 +00:00
Bastien Montagne
fbbbb90af3 Some renaming/cleanup in i18n tools. 2013-03-19 08:33:24 +00:00
Bastien Montagne
66c7b54a88 Usual minor UI messages fixes. 2013-03-18 18:43:22 +00:00
Lukas Toenne
4638e5f99a Merge of the PyNodes branch (aka "custom nodes") into trunk.
PyNodes opens up the node system in Blender to scripters and adds a number of UI-level improvements.

=== Dynamic node type registration ===
Node types can now be added at runtime, using the RNA registration mechanism from python. This enables addons such as render engines to create a complete user interface with nodes.

Examples of how such nodes can be defined can be found in my personal wiki docs atm [1] and as a script template in release/scripts/templates_py/custom_nodes.py [2].

=== Node group improvements ===
Each node editor now has a tree history of edited node groups, which allows opening and editing nested node groups. The node editor also supports pinning now, so that different spaces can be used to edit different node groups simultaneously. For more ramblings and rationale see (really old) blog post on code.blender.org [3].

The interface of node groups has been overhauled. Sockets of a node group are no longer displayed in columns on either side, but instead special input/output nodes are used to mirror group sockets inside a node tree. This solves the problem of long node lines in groups and allows more adaptable node layout. Internal sockets can be exposed from a group by either connecting to the extension sockets in input/output nodes (shown as empty circle) or by adding sockets from the node property bar in the "Interface" panel. Further details such as the socket name can also be changed there.

[1] http://wiki.blender.org/index.php/User:Phonybone/Python_Nodes
[2] http://projects.blender.org/scm/viewvc.php/trunk/blender/release/scripts/templates_py/custom_nodes.py?view=markup&root=bf-blender
[3] http://code.blender.org/index.php/2012/01/improving-node-group-interface-editing/
2013-03-18 16:34:57 +00:00
Bastien Montagne
f09f2d1c31 Fix more UI i18n issues (reported by Leon Cheung). 2013-03-11 15:01:03 +00:00
Bastien Montagne
4daef64986 Fix more UI i18n issues (reported by Leon Cheung and Lockal).
We have a glicth with colormanagement's spaces descriptions, though, looks like they are clamped at 64 chars (see raw space), will see that later, if it’s solvable.
2013-03-11 09:06:49 +00:00