Further information is available here:
http://wiki.blender.org/bin/view.pl/Blenderdev/UnicodeFont3D
Shortlist of features:
- Unicode character support for Font3D
- UI to select characters from Unicode character list
- UI to select Unicode table areas
- Optimized character loading (Load only those characters which are used
in font object)
Please test extensively if it breaks anything, try also loading/saving
files, packing fonts, etc.
The official text regression file in the regression suite should be a
good start.
Thanks to mikasaari for this very useful addition!
in 3d window, nkey panel, click in middle of number button & press ESC
moved the 3d cursor to that location. The button was passing on its
event to the window event queue, which shouldn't be.
Copy/Paste bone name buttons crashed, didn't use the callback for buttons
proper yet.
Also added MAXFRAME defines for buttons, instead of hardcoded values 9000
or 18000
Main target was cleanup of editconstraint.c and removal of the ugly
ob->activecon (active constraint channel), which was set by the "Show"
button in the Constraint Panel.
Better is to introduce an 'Active Constraint' itself, which stores in
the Constraint itself. By using this setting, and by checking the active
Bone, the UI can update reliably now. This only shows now in IpoWindow
btw (for constraint ipos). The active Constraint is drawn in the Buttons
with a slightly brighter backdrop. Any action in that Panel selects a
constraint now (even click in backdrop).
So now we have pose channels & constraint channels nicely behaving. Now the
darn Action channels... :)
Further in this commit:
- interface.c: Button ROUNDBOX now does button callback too.
Button NUMSLI didn't do the callback on a click only
- Cleaned up include files in yafray, got annoyed it compiled over all the
time.
- removed unused variables from Constraint struct
- Modifier Panel, name label for "Virtual" modifiers was too short
- On extrude Bones, "soft distance" now is always set based on length
of the bone (also on CTRL+click, also when Envelope drawmode is not set)
- Added undo-push for "Apply Bone Envelopees to VertexGroup" in WeightPaint.
- Menu-buttons in floating panels sometimes gave drawing error
- InfoWindow buttons were always allocated & drawn, even when window was
zero sized... waste of cpu, tsk!
This replaces drawing with uiRoundBox() or glRect() in button Panels,
which just fails for dynamic constructed button views where Panels are
sometimes invisible. Also eliminates hack with PanelPop().
Error was visible with new Modifier panel, entering/exiting EditMode.
Done Modifier and Constraints.
Syntax:
The last 4 free variables in the uiDefBut() call are:
- float, corner-rounding (0.0-pixels),
- not used,
- short: roundbox type (bits, 1 2 4 8 for clockwise corners starting left/top)
- short: color shade offset (color range 0-255)
- add warning about applying decimation
- some more UI tweaks (rounding of modifier pane, make toggles only in header,
add object name to try to convey that modifier stack is tied to OB)
- bug fix, modifier recalc wasn't done on make link
- bug fix, uiBlockEndAlign didn't clear align flags with certain themes,
pretty sure this wasn't intended. (TON: PLEASE CHECK)
- added support for vector icons, from user API side is just like using
a regular icon... on icon side is defined by a function in resources.c
instead of using the blenderbuttons png file. vector icons are much
easier to add and scale properly. intent is that vector icons would
be drawn in window coordinates which lets icon developers make the
most beautiful icons, but this requires some tweaking of the interface
drawing that I am not going to do atm.
- changed BIF_draw_icon* to take coordinates of where to draw icon instead
of using passed in raster position
- switch modifier UI to using vector icons, and tweaked some position and
style stuff.
- replaced most uses of UI_EMBOSSX with UI_EMBOSS (do same thing, just there
to confuse people I guess)
After the window coordinate stuff is sorted out with vector icons
it probably makes sense to move all non-photorealistic icons in blenderbuttons
to vector form just so scaling goes better.
- switched almost all uiDefBut(..., TOG|BIT|..) to use UiDefButBit and the
name of the actual bit define instead of just a magic constant, this makes
searching the code much nicer. most of the credit here goes to LetterRip
who did almost all of the conversions, I mostly just checked them over.
Aim was to get a total refresh of the animation system. This
is needed because;
- we need to upgrade it with 21st century features
- current code is spaghetti/hack combo, and hides good design
- it should become lag-free with using dependency graphs
A full log, with complete code API/structure/design explanation
will follow, that's a load of work... so here below the list with
hot changes;
- The entire object update system (matrices, geometry) is now
centralized. Calls to where_is_object and makeDispList are
forbidden, instead we tag objects 'changed' and let the
depgraph code sort it out
- Removed all old "Ika" code
- Depgraph is aware of all relationships, including meta balls,
constraints, bevelcurve, and so on.
- Made depgraph aware of relation types and layers, to do smart
flushing of 'changed' events. Nothing gets calculated too often!
- Transform uses depgraph to detect changes
- On frame-advance, depgraph flushes animated changes
Armatures;
Almost all armature related code has been fully built from scratch.
It now reveils the original design much better, with a very clean
implementation, lag free without even calculating each Bone more than
once. Result is quite a speedup yes!
Important to note is;
1) Armature is data containing the 'rest position'
2) Pose is the changes of rest position, and always on object level.
That way more Objects can use same Pose. Also constraints are in Pose
3) Actions only contain the Ipos to change values in Poses.
- Bones draw unrotated now
- Drawing bones speedup enormously (10-20 times)
- Bone selecting in EditMode, selection state is saved for PoseMode,
and vice-versa
- Undo in editmode
- Bone renaming does vertexgroups, constraints, posechannels, actions,
for all users of Armature in entire file
- Added Bone renaming in NKey panel
- Nkey PoseMode shows eulers now
- EditMode and PoseMode now have 'active' bone too (last clicked)
- Parenting in EditMode' CTRL+P, ALT+P, with nice options!
- Pose is added in Outliner now, with showing that constraints are in
the Pose, not Armature
- Disconnected IK solving from constraints. It's a separate phase now,
on top of the full Pose calculations
- Pose itself has a dependency graph too, so evaluation order is lag free.
TODO NOW;
- Rotating in Posemode has incorrect inverse transform (Martin will fix)
- Python Bone/Armature/Pose API disabled... needs full recode too
(wait for my doc!)
- Game engine will need upgrade too
- Depgraph code needs revision, cleanup, can be much faster!
(But, compliments for Jean-Luc, it works like a charm!)
- IK changed, it now doesnt use previous position to advance to next
position anymore. That system looks nice (no flips) but is not well
suited for NLA and background render.
TODO LATER;
We now can do loadsa new nifty features as well; like:
- Kill PoseMode (can be option for armatures itself)
- Make B-Bones (Bezier, Bspline, like for spines)
- Move all silly button level edit to 3d window (like CTRL+I = add
IK)
- Much better & informative drawing
- Fix action/nla editors
- Put all ipos in Actions (object, mesh key, lamp color)
- Add hooks
- Null bones
- Much more advanced constraints...
Bugfixes;
- OGL render (view3d header) had wrong first frame on anim render
- Ipo 'recording' mode had wrong playback speed
- Vertex-key mode now sticks to show 'active key', until frame change
-Ton-
An alternative fix - last one broke stuff that I only discovered
*after* committing! Go figure!
Basically, gave B_REDR events for the sliders -- I still think
there is a bigger underlying issue here, but it is best left for
Ton the interface guru! ;)
Sliders (and potentially other buttons) with no retval were not breaking the ui_do_block() loop, which caused events to propagate to other panels!
(The effect could also be seen by dragging from AO sliders into the
World name textbox.)
Armatures with > 100 bones can deliver a 'parent IK menu' that doesn't
fit on screen anymore. Fixed it with changes;
- when menu doesnt fit to right/left, it places it aligned to left hand
of window
- when more than 8 collums in a menu exist, it makes collums 25 items
instead of 20.
Also fixed for the popup menu on Bone parenting. On a 1280 screen we now
can have a menu with over 300 bones (even more when you zoom down the
buttons window a bit). Still not optimal, but at least it's less annoying.
CTRL+V on buttons
NKEY Panels
join mesh
join curve
editing buttons
boolean
vpaint
faceselect
Manipulator
Also; Transform() got in useless loop when you entered without anything
selected. Not sure why Martin recoded it this way... maybe as a first
step to handlerify it? For evil Python Aussie Bosses? :P
Using the Play button in timeline, now uses an event-driven system to
update the animation system and signal windows to redraw. Meaning the
full UI remains responsive!
Check the new Pulldown "Playback" to set which windows you like to see
updated. Same settings is used for LMB 'dragging' frames in Timeline.
Implementation notes;
- the Icon for 'Pause' (or stop) has to be made yet, I commit this from
my laptop... all was coded during a 2 x 5 hour train ride to germany
- the anim playback system (ALT+A too) now uses correct "frames per
second" as maximum speed. Buttons can be found in 3 places in the UI,
also added it as pulldown item
- The system works with 'screen handlers', which has been coded with
using Python (networked) events or verse in mind too. A doc on that
will follow.
- the buttons code has been made 'resistant' to animated UIs too,
preventing flashing of hilites.
- All subloops (like transform) stop playback, with exception of MMB
view manipulations.
As extra; found tweak to make Textured AA fonts draw without distortion.
Looks perfect here on laptop now (like Pixmap fonts) and is 20x faster.
Proportional edit:
- Proportional mode added to header as button/menu. Including new option
to have only connected geometry influenced.
- Added icons for proportional & proportional modes
- Make proportional edit data part of Scene, so all gets saved.
The Global flag G_PROPORTIONAL was removed
- Made sure #defines get used properly, also tweaked order for proportional
so it starts with regular 'smooth' by default.
- Use ALT+O in editmode to switch to new proportional 'connected' mode
Other UI stuff:
- in EditMode, the layer buttons get hidden... the amount of icons in
3d header grows to fast. :)
- made less ugly icons for the Manipulators. Still can be better.
- Added alpha-filter for pre-processing Icon-image, giving nicer display
of icon-antialising on dark or bright backdrops
- disabled Manipulators when in editmode, and current layers don't show
the edited data.
- Added the value used to define Normal size (editmode draw) in Scene too,
so it gets saved.
Works as follows;
- press the 'show bake settings' button (no space left... :)
- define start/end frame for bake, and an interval step.
The baked result interpolates nicely (Bspline, 4 keys) so in general a
step size of 2 or 3 still gives OK results.
- Press "BAKE". This will do a full animation + playback. Press ESC if it
you don't want it.
Once Baked, the BAKE button becomes a FREE BAKE. As reminder the softbody
buttons get blocked with error() menu.
This saves OK in a file. Renders any frame, including fields and moblur.
You can also set a "Timeoffs" for the softbody. And yes, this should be
in the NLA once... :)
NOTE! With this commit, files saved with the old (first commit) version by
Jens Ole won't read the settings back... he stored all sofbody variables in
Object, which was moved to a new struct when I did my first commit on SB
(over a month ago)
Also note that I moved particle deflecting & softbody to a new include.
File name (40) and dirname (80) were too short in sequence data. Made it
compliant using defines FILE_MAXFILE and FILE_MAXDIR.
Also replaced all strcpy() and strcat() with strncpy/strncat, with the
defines in it.
Oh, also fixed plugin path length for sequence, was just 80!
Bug fix#2366
Restored old convention that made using SHIFT+CTRL while using button-
sliders go with 0.1 stepsize of CTRL.
(noticed too late that Chris Burt assigned to self... sorry!)
NOTE: BLI_winstuff.h was meant to be a wrapper around windows.h to handle
undefining various crap that windows.h defines. Platform specific headers
should only have to be included in a few places. This reduces the number
of inclusions of BLI_winstuff.h to 16 which is a much more reasonable
number (than the 144 or whatever it used to be)
Set preferred method in userprefs->language & font.
Kinda requested by Kaito, i'm sure he regrets after seeing
my code changes.
This commit includes a patch provided by Jacques Baurain,
which seemed nescessary to handle font sizing properly.
Thank you !
- Add UV Sphere now aligns with view, as do all primitives
- Small drawing error in edges between blender areas (black lines were 2
pixels too short)
- Replaced the heuristics in opening sublevel menus, to be less frustrating.
It now keeps sublevel open while mouse moves within the triangle defined
by original mouse location (before moving) and the closest vertical edge
of the new sub menu. Works nice for toolbox and pulldowns.
On large changes of the Lattice resolution button, the undopush crashed.
Reason was that the push happened for buttons before the actual event for
buttons was executed.
Solved by creating new event UNDOPUSH that's being added to the queue by
by buttons now.
- Made button undo texts for number buttons more clear
- Added undo push for missing Add lamp/empty/lattice/camera
Move to layer buttons, using SHIFT+hotkeys to set button values and use
mouse to press OK undid the last change, this due to active flag hanging
on that button. It now clears hotkey active flags on mouseclick first.
- Added "Add Hook" menu in mesh editmode pulldown (Vertices) and toolbox
- Small tweak in editmode undo, tighten rules for what to do inbetween
editmode sessions. (use same stack when object names identical)
- Added correct redraw events for CTRL+C CTRL+V (r g b sliders for example)
- pulldown button for textwindow header OK
- color picker had no correct border around it
- border around 'game framing' and 'edge settings' smaller now
But this was promised on conference, and have to keep that promise. :)
Buttons in Blender now allow copy/paste values and strings. Also works
for object names!
Mouse over button and press CTRL+C or CTRL+V for copy/paste
(Macs can do Apple key)
Plus bugfix: name button for object in Nkey panel didn't check name
- ALT+U undo menu shows history for global undo as well
- Added undo pushes for buttons window more consistantly
- Added it & tested for ipowindow too
- Added it in outliner
- And quite some missing occasions for 3d window editing
- themecolor for the 'bars' in NLA used signed char
- global undo, restore pointers for UI accidentally added user values for
oops and outliner, causing unused blocks to show used
- moved popup menus one pix up or down, it was overlapping the button
causing accidental selection of menus
from menu code, it left the main window active (for global draw), this
sometimes could screw up drawing calls after... as happens when a command
is executed that draws immediate.
Now the previous window is restored before a menu command is executed
not affected when using standard (alpha=255) settings.
Only the backdrop for menus and unselected items can be transparent, the
highighted (active) item remains solid colored.
Just fun eyecandy tho :) but the recode of menu enables this easily.
Since color is stored RGB only in Blender, the conversion from and to HSV
causes values to be clipped all the time.
Solution found is adding a persistant hsv storage to the uiBut struct, and
have it working on that only while hsv button is open. Still, after usage
(leaving picker) the conversion will change values to rgb.
Also added; redraw event for editing buttons, to show correct changed
color while using nkey picker
When you PAD-enter on a popup-number button (like for add circle) it
accidentally de/increased the value before assigning an "OK". Fixed.
Also: restored functionality that allows to use Enter keys as a mouse
button click. This de/increases values now, opens menus, etc. Not in
pupup or pulldown menus though!
- Rename!
CTRL+leftmouse click on name, makes it a text button. Works for all items as
currently being displayed.
Most work was doing the Bones, which is a nightmare :) But it uses same
code as buttons in Armature-Editmode now, without even needing EditMode :)
When renaming a bone, the Outliner makes the Object active though.
- PageUp / PageDown keys
Do what you expect.