Replaced old transform call when extruding and duplicating. Added a CTX_NOPET context flag for extrude. This is done rather a bit hackishly in Transform right now, better to do it with a on/off pet flag in TransInfo and check that everywhere instead.
Made sure transinfo Ext was initialised at NULL (I'm pretty sure it was in another spot, but LetterRip reported some crash leading me to believe that it might not be all the time. Better be safe than sorry).
Connected PET for curves uses the real distance for the fall off calculations now.
- Added icons for the Widgets to blenderbuttons pic
- Added in header - if widget in use - three buttons to choose widget type
(hold shift for combo widgets)
- Hotkey CTRL+space now switches widgets on/off
I also noticed negative scaling doesn't work satisfying yet;
- for scale widget, using center didn't work correct anymore (fixed)
- negative scaling didn't even get applied! (fixed)
- but; scaling somethig negative now flips back to positive... ????
Last one i need Martin P for! Note that I had to change Mat3ToSize....
into drawobject.c (just used for calculating weight
map)
- removed two_sided (replace with glLightModeli calls)
- huge rewrite of drawobject.c for meshes, extracting simple
drawing functions and then reworking to bring some order
and clarity back to the code.
A lot was changed here so it is likely I missed a few
things in testing although I tried to be very careful.
Please let me know if you find any changes in drawing.
removed leftovers from Freeimage/Imagemagick experiments
and removed stuff from a Quicktime for linux implementation.
Also removed the (win32) Fullscreen button from the UI and
disabled the corresponding commandline option. The code is
still present to reenable the option whenever the ATI issues
get solved.
- added 'ghosting' for while using translate/scaling widget
- added 'pie chart' ghost to denote angle while using rotate widget
- added settings to tweak widget in User menu (InfoWindow) "View & Control"
- Size: total widget size as percentage of window size
- Handle: as percentage of widget radius
- Hotspot: for clicking handles, in pixels
- Fized Size: option to make Widget size independent of window size
Not sure if all of these are useful to keep, but makes for good testing
in this stage.
Also: made #define to use new transform to be set TRUE by default now. :)
be used without including windows.h - this is the main reason windows.h
is included in so many places and this change allows most of those
inclusions to die.
To use; press the (temporal) icon in header. Switching widget types is by
pressing G, R or S once, if current widget type is different it switches,
otherwise it goes to normal Transform().
Widgets need a bit test for picking accuracy, correct drawing etc.
The rotate widget has a center button for 'trackball' rotate. That latter
can also be used for hotkey-based rotate.
In current code, all widgets remain in "Global" space, also in editmode.
Also widget updates while using normal transform has to be done.
2 Bugfixes:
- rotate in PoseMode had error for 2d 'around' center
- transform in postemode could crash, due to typo (& or |)
- Made framework for 3d Transform Manipulators (widgets)
- The Manipulators act like '2d buttons', by default with LeftMouse and with
while-hold-move-release
- Implemented now: Translation Widget, which allows:
- four hotspots for axis grab or view-aligned grab
- center defined by 'around' setting
- SHIFT+LMB gives planar constraint on other 2 axes
- works in Object mode and Edit mode (not posemode yet)
Enable it with (temporal) icon in 3D header. All other 'normal' transforms
then keeps working btw.
On the todo for this widget:
- choice for Global, Local or Normal orientation
The way the widgets are going to work is in review still. Commit is also for
Matt for his proposal/paper on topic.
Some notes regarding this project;
- no life updates (on mouse over) like 3DS, I think that's neurotic
- on click, dominant axis changes to theme defined "Transform" color, other axes disappear, like maya
- manipulater size is fixed preset, independent zoom.
- manipulator follows selection, and is located based on 'around' mode
Unresolved;
- in maya, when you select 2 or more objects, the manipulator draws on the 'active' object, also interesting
- what to do with G,R,S hotkeys? It could switch the manipulator "mode"...
- header button/menu for manipulator mode?
Fixed Extrude constraint. Needed to premul the normal by the object's matrix to but it in global space.
Also, moved the Locking Axis modifier (for constraints) from Alt to Shift. Alt was conflicting with middle mouse button emulation (reported in the test builds forum).
Tilt Transformation.
choosing 'individual faces' it uses the ShrinkFatten option.
Note for Martin: center of axis is still wrong, but you know!
Note for non-testers: unfortunately axis constrainting for old
transform now doesn't work anymore. New code is much nicer, I dont restore
hacks!
Brought back Shrink/Fatten. Changed the behavior a bit, move the cursor to the right to move toward the normal, to the left to move backward. Please comment.
Only works with meshes, defaults to resize otherwise.
It now only uses 1 extra row of 21 buttons. More can simply be added
- Added new icons for the new proportional edit options Root, Linear and
Constant
- Made sure pulldown and pop-up menu work for new prop options
- Transform fix; proportional edit circle was drawing in Object mode
- restored 'Warp' (Shift+W). Should work like before, including type mode
and holding ctrl/shift modifiers
- added CTRL event in queue, to only redraw when you press it. looks nicer.
- added texture space grab/scale (TKEY objectmode)
- made new transform work with menus (meaning, dropping dreaded while-hold)
To Martin & other while-hold lovers: this needs to be carefully thought over
and designed. I prefer to look on this within context of making transform
fully tablet/pen friendly, as option. Aim now for me is still: get transform
back to work! :)
Brought back functionality to work with "Ipo Keys" (Kkey in 3d window). New
transform code is looking more messy now... its design was not purposed to
clean on this level. Acceptable for this stage however.
Also renamed old variables *tob into *td.
It is useful for large scenes, when you work with lot of MetaElems. Example:
http://e-learning.vslib.cz/~hnidek/pics/deer.jpg
(PildaNovak's model)
- shortcuts for hiding of MetaElems:
H ......... hide all selected MetaElems
Shift-H ... hide all unselected MetaElems
Alt-H ..... unhide all hidden MetaElems
- items in header menu of 3dview
work. :)
- added static and (void) and some style stuff in transform.c
- first additions in code for posemode (do not even try now!)
- fixed warnings in previous commit martin (gcc only)
Note; posemode old transform had complex dependencies on redraw (Hos' home
grown dep graph), which is first being restored. Including old style
set_base_flags_for_editing. Tomorrow!
On a side note, Shear was fixed in last commit, just forgot to mention it. It wasn't acting correctly in Edit Mode (and Desoto was poking me about it every sunday).
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 !
This commit replaces the glDrawPixels and rectwrite_part with the very
nice (thanks zr!) glaDrawPixelsSafe() call. Result is:
- 3d window background image displays correctly onto the edges when
zoomed in extreme
- same for UV image window and sequence preview
- preview render now doesnt disappear when left part is outside window
(zr also deserves kick in butt for not doing this himself in NaN days!)
Especially from preview drawing quite some old hacks were deleted. It is
even quite some faster.
Please notify me when it doesnt work on your card... this now is just 100%
according opengl guidelines though :)
Also fixes bug #2100
Render:
- New; support for dual CPU render (SDL thread)
Currently only works with alternating scanlines, but gives excellent
performance. For both normal render as unified implemented.
Note the "mutex" locks on z-transp buffer render and imbuf loads.
- This has been made possible by major cleanups in render code, especially
getting rid of globals (example Tin Tr Tg Tb Ta for textures) or struct
OSA or using Materials or Texture data to write to.
- Made normal render fully 4x32 floats too, and removed all old optimizes
with chars or shorts.
- Made normal render and unified render use same code for sky and halo
render, giving equal (and better) results for halo render. Old render
now also uses PostProcess options (brightness, mul, gamma)
- Added option ("FBuf") in F10 Output Panel, this keeps a 4x32 bits buffer
after render. Using PostProcess menu you will note an immediate re-
display of image too (32 bits RGBA)
- Added "Hue" and "Saturation" sliders to PostProcess options
- Render module is still not having a "nice" API, but amount of dependencies
went down a lot. Next todo: remove abusive "previewrender" code.
The last main global in Render (struct Render) now can be re-used for fully
controlling a render, to allow multiple "instances" of render to open.
- Renderwindow now displays a smal bar on top with the stats, and keeps the
stats after render too. Including "spare" page support.
Not only easier visible that way, but also to remove the awkward code that
was drawing stats in the Info header (extreme slow on some ATIs too)
- Cleaned up blendef.h and BKE_utildefines.h, these two had overlapping
defines.
- I might have forgotten stuff... and will write a nice doc on the architecture!
#define B_UNLINKIMA 1358
Since it was undefined and causing things not to compile. Whoever added it
might want to move it but hey its working again for now. ;)
Kent
When choosing "render engine" in Scene Buttons, the newly added or removed
Panels didn't invoke a re-alignment event yet.
Also added code that inserts new panels as good as possible on their
previous locations. This works reliable for 1 new panel, not for more, this
because a Panel only stores its old location, not the locations of all
Panels in a given configuration. Consider that minor issue...
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
- Deformed mesh didnt give correct 'orco' anymore on render
- Mesh editmode, "Separate loose parts", crash on empty mesh (no verts)
- Global undo; buttons sending redraw events gave extra undo push called
"Make single user or local". That latter was wrong event handling for
REDRAW event, harmless, until now :)
First one is a real showstopper... bah!
compiled in (datatoc) and doesn't need installation anymore.
Also reviewed weird path conventions for searching AA fonts;
- U.fontdir is only used as standard search path for fileselecting
- U.fontname stores only full path to AA font if used one
- If a font cannot be found, it always falls back to the compiled in one
- If .B.blend is saved with default font, U.fontname is not set
Also added a button in usermenu "restore default".
When this works as expected, I'll commit changes for installation too.
- The function "convex()" in editmesh_lib() actually did not deliver
a proper test for convex at all. It was checking only if a quad could
be subdivided into 2 trias. Code for adding face (FKEY) used this
call in total confusing manner. That code was there in 1.40 already,
cannot find any clue what it was supposed todo... :)
Recoded convex() to deliver a proper test. FKEY will give warning on
attempt to make convex faces now.
- Added undo-free for editmode undo on file load
- Curve Join now moves all curves to 2D (if its 2D)
- FGon extrude keeps FGon flags correctly
- After Append undo-push added
- In almost all Ipo editing commands; undo-push added
- Icons in outliner now all consistant grey
- Zoffs button had to 20 high (hmetal :)
- Individual faces
Keeps Mesh manifold, so removes old faces always. Also uses a
transform based on different vectors per vertex.
- Only edges
Just extrudes the edges (not really 'individual', the edges still
share the vertices. Uses same transform as normal extrude for that
reason
- Only Vertices
Uses normal transform after extrude
Also changed code a bit, to detect whether to call a normal-based
transform after extrude, or whether to call normal grabber. For example
when you just extrude 1 edge, it uses normal grabber.
Note; extruding an entire sphere goes OK with 'individual faces'. for
other extrudes you should press 's key' when in transform. Just cannot
predict (yet) when one method has preference over another.