* Outliner 'select' (i.e. blue/grey highlights for tree items) works again in both normal Outliner + RNA views.
* Fixed bugs/MSVC warnings in animation code
*****
fixed up the view navigation menu using the enumitems call, also made view numpad's enum "type" instead of "view" to be more inline with other operators and rest of blender
As creator of the Ipo I also reserve to right to kick it out
definitely :) To honour the wonderful contributions from Joshua
here it is; renamed space_ipo to space_graph!
Note; make, cmake and scons should work, msvc will require some
work now!
- removed undefined operators from view3d menu, the error prints
("undefined operator") is currently a real error; later on when
operators are more dynamically defined it can be feature.
- made uiMenuContext() work locally, only on the items as defined
after this call.
*******
- rebuilt most of the view menu with a couple empty sub menus
- seperators go all screwy when there is an unknown operator in the menu
- using this method, the operators invoke function is skipped, this is evident with clipping border and border zoom
- original menus are still in the code just if'd out for furture reference and such
- to cater for this menu, view numpad op has been made into much smaller atomic operators, pan and orbit and the ortho/persp toggle has been put into individual operators
- fixed the mem leak in the make parent menu
* RNA_blender.h is now generated along with the other files. It is not
used anywhere yet, and still located quite hidden next to the other
rna_*_gen.c files. Read only access for now.
* Inherited properties are not copied from the base anymore but
iterated over. Patch by Vekoon, thanks!
* Array get/set callbacks now do the whole array instead of getting an
index. This is needed for some layers for example so python can set
the array as a whole, otherwise the check that one layer has to be
enabled at all times gets in the way. Also nicer for the C API.
* Also some changes to returning pointers to make the API cleaner, got
rid of the type() callback and instead let get() return PointerRNA
with the type included.
The C API looks like this currently:
http://users.pandora.be/blendix/RNA_blender.h
Editmesh ops:
- MESH_OT_select_multi_loop
(based on selection it makes loops)
- MESH_OT_select_linked
added boolean 'limit' for linked limited by seams
- MESH_OT_select_linked_pick
same as above
The 'limit' option used to work only for facemode,
with a toolsettings option.
So it had no own hotkey... i made it work for
edges & vertices too, need to find hotkey later.
Sanitized the 'tweak' event.
Original idea was to have WM event system generating it
automatically. However, I first tested it via a handler
and operator, to check what kind of configurations would
be useful. It appeared to not work nice, also because
that inserting a tweak operator in a keymap is confusing.
Now 'tweaks' are generated automatically, and can be
catched by keymaps as any event. The current definition
of tweak is:
- if Left/Middle/Rightmouse pressed
if event wasn't handled by window queue (modal handlers)
start checking mousepositions
- while mousepositions are checked
- escape on any event other than mouse
- on mouse events:
- add tweak event if mousemove > 10 pixels
- stop checking for tweak if mousebutton released
- Tweak events have a define indicating mousebutton used
EVT_TWEAK_L, EVT_TWEAK_M, EVT_TWEAK_R
- In keymap definitions you can use _S or _A to map to
action or select mouse userdef.
- Event value in keymap should be KM_ANY for all tweaks,
or use one of the eight directions:
EVT_GESTURE_E, _SE, _S, _SW, _W, _NW, _N, _NE
- And of course you can add modifier checks in keymaps for it.
- Because tweaks are a result of mouse events, the handlers get
both to evaluate. That means that RMB-select + tweak will work
correctly.
In case you don't want both to be handled, for example the
CTRL+LMB 'extrude' and CTRL+LMB-tweak 'lasso select', you will
need to set the first acting on a EVT_RELEASE, this event only
gets passed on when tweak fails.
The current system allows all options, configurable, we had in 2.48,
and many more! A diagram of what's possible is on the todo. :)
Also in this commit: lasso select editmesh failed with 'zbuffer
occluded select'. Also circle-select failed.
It's about time that the RNA wrapping for various parts of the animation system were cleaned up for my recent changes. I've moved some code around (and/or deleted a file or two) in the process.
Committed two posemode operators. Hide/Unhide.
For people who want to check on adding operators, only
check the changes in armature directory, rest is to
get things to work, and a small bugfix :)
Hrmf, I try to make a local operator-only commit possible, but I
keep finding other small todos :)
- added two more standard poll callbacks for pose and armature
- fixed operator naming in editmesh_mods.c
Since these values defaulted to zero, a NULL default array will do, but for new operators that need to be initialized from an array, only static arrays should be used.
Paint mode (VPaint WPaint) was too easy to enter, I made the
operators having a more designated poll() to check stuff.
Now CTRL+TAB hotkeys will work in editmode for select type,
and outside editmode for wpaint or posemode.
Also fixed select type operator to so it works for facemode.
Moved 'redo last operator' stuff to WM level, with a
WM_operator_repeat()
Code in screen_ops was not checking all operator stuff
correctly, so repeat menu (F3 now) crashed in cases.
Rather then having a hard coded popup menu with events that call other operators exec functions, operator names are given to the toolbox where it displays the operator name and shortcut.
This means the real operator is registered rather then the one that called it.
Im not sure about the location for the operator though, at the moment its called VIEW3D_OT_editmesh_face_toolbox() in view3d_header.c since the image editor toolbox is in the header file too.
In a way it makes sense because this menu should eventually be in the header.
- Change shortcut to Ctrl+F as it is in 2.4x
- Added a number of operators that were not being registered - MESH_OT_fill_mesh, beauty_fill, convert_quads_to_tris, convert_tris_to_quads, edge_flip, mesh_set_smooth_faces, mesh_set_solid_faces
- Renamed redundant MESH_OT_mesh_set_smooth_faces() to MESH_OT_faces_shade_smooth(), same for solid.
- Renamed MESH_OT_mesh_selection_mode_menu to MESH_OT_mesh_selection_type since the operator doesnt have to be accessed from a menu.
Shaul, you might want to look over this, using enums means WM_menu_invoke can be used instead of writing an invoke function for each operator.
Added error messages to WM_menu_invoke if no enum "type" property is found.
Big commit, but mainly adminstration.
- Enabled ot->flag OPTYPE_UNDO to work.
- Removed all redundant ED_undo_pushes, but I'd
recommend everyone to check it while testing. :)
- Added view manipulations as OPTYPE_REGISTER,
although this will flood the redo stack a bit...
Nevertheless; for a "redo last action" panel we
can simply check if both flags are set for redo.
- Bugfix in editmode undo: selectmode was cleared,
so you couldn't select after undo
- Bugfix in mixing tweaks and keymaps... solution
works but is weak, need to think over a while.
Edit Mesh
Added the two other 'select similar' ops, for edge and face.
For testing fun I've put these ones as first keys using the
modifier order feature. So it's now:
SHIFT+G : similar vertex
CTRL+SHIFT+G: similar edge
SHIFT+CTRL+G: similar face
Not very useful here; but I think this can work well to map
a double amount of options under mouseclicks. Power user
config stuff!
Edit Mesh
- "Select Similar" for vertices back.
(Put under Jkey for now)
- renamed operator righthand_faces to consistant_normals
gave it boolean property for 'inside'.
Fake commit, but for history I have to write the log!
Fixed CTRL+Q quit-blender. It was using ancient code
still, and since I always use APPLE+Q I never noticed :)
Edit Mesh:
- Added back "Edge Shortest Path select"
It now also does regular selection, more fun!
It's mapped to CTRL+click now, and makes or clears selections
between current and previously activated edge.
Seam/Sharp/etc marking is a toolsetting mode still. These
options cannot become properties easily, because the tool
uses the properties of selected edge to clear...
- Removed a whole bunch of G.f flags, related to mesh drawing.
It's all now local in me->drawflags. Here's the list of
removed old globals:
G_DRAWEDGES
G_DRAWFACES
G_DRAWNORMALS
G_DRAW_VNORMALS
G_ALLEDGES
G_HIDDENEDGES
G_DRAWCREASES
G_DRAWSEAMS
G_DRAWSHARP
G_DRAWBWEIGHTS
G_DRAW_EDGELEN
G_DRAW_FACEAREA
G_DRAW_EDGEANG
Edit mesh:
- fixed compile, shul only committed the function declaration, not
the code for 'make fgon'.
- Put the Fgon option under:
ALT+F: make fgon
SHIFT+ALT+F: clear fgon
(note, SHIFT+F = fill :)
- Fixed loop select to use two booleans, as Martin pointed me
correctly at! Using 1 variable was lazy coding.
- Edit mesh: Add ctrl+click add vertex or extrude.
I've made it not move the 3d cursor in that case.
Also found out tweak events conflicted with existing
keymap definitions; on tweak failure (= no mousemove)
it now passes on the mouse event as 'mouse down' for
the remaining keymaps to check.
These then actually respond to mouse-up instead of down...
The location in the keymaps where tweaks get generated
remains important. Examples:
1 - 'select' mouse-handler, operator return pass-through
2 - tweak handler checks, and makes tweak event
3 - grabber responds to tweak event
1 - ctrl+mouse tweak handler checks, makes tweak event,
or passes event on
2 - if tweak event, it runs lasso
3 - else when passed on, ctrl+click extrude happens
In the first case, select works on mouse-down, immediate.
In the second case, extrude happens on mouse-release, even
though the keymap defined mouse-press.
This will make designing nice balanced keymaps still not
simple; especially because you can't tell operators to
pass on the key... although we can add the convention that
select-mouse operators always pass on to enable tweaks.
Still a good reason to wait with custom keymaps
when this is fully settled!
use of function pointers in the context callbacks. Apparently
MSVC decides that some of these functions are the same and
makes them into a single function with the same address. I
couldn't figure out if this was a compiler bug or according
to the C spec. Regardless, that means this method can't be
used, so now it uses separate CTX_DATA_DEFINES.
Animsys: added integrated copy of animdata in copy_libblock().
-> by default animdata-copy should relink ID data like Action,
and put a facility to really duplicate it in other code.
(single_user_animdata or so)