Project

General

Profile

Activity

From 2013-08-25 to 2013-09-07

2013-09-07

22:44 Revision b8ef067c (github): Cleanup|Server: Cleanup
danij
22:43 Revision 5c5531f3 (github): Cleanup|Map Renderer|Client: Cleanup
danij
21:12 Revision 5454eb13 (github): Map Renderer|Client: Removed old non-projective method for mobj shadows
danij
20:20 Revision 4747de5f (github): Refactor|Map Renderer|Client: Consolidated dynamic wall and plane texture projection
danij
19:42 Revision 53fcbc11 (github): Map Renderer|Client: Adjusted minimum mobj lumobj radius; cleanup
danij
19:16 Revision 09ac3087 (github): Refactor|Map Renderer|Client: Standardized API for texture projection
danij
18:45 Revision b3d328ac (github): UI|Client: Removed old Control Panel, settings now in the Appearance editor
Added a new panel-derived widget called FoldPanelWidget that supports
embedded, folding groups. This is used for sett...
skyjake
17:32 Revision d4c101be (github): Map Renderer|Client: Use same mechanism for mobj shadow projection as dynlights
danij

2013-09-06

12:12 Revision 93839c94 (github): Fixed|Documentation|Doxygen: Incorrect source file names
skyjake
11:59 Revision 47ff17f9 (github): UI|LegacyWidget: Use the LegacyWidget size as game view size
Rather than assuming the game view covers the entire window and
therefore is only resized when viewResized() occurs, ...
skyjake
11:52 Revision 2e0e8003 (github): Fixed|Map Renderer|Lumobj|Client: Minimum luminous object radius compatibility
Values in Light and Decoration definitions are again interpreted the
way they used be (prior consolidation of this in...
danij
10:28 Revision ae0b8e5c (github): UI|Client|Renderer Settings: Moved wireframe and rend-tex under Developer
Not very useful for normal users. skyjake
10:19 Revision fc408680 (github): Fixed|GL: Apply viewport changes immediately
Since the rest of the legacy renderer uses the immediate GL state,
we must apply changes to GLState immediately. Norm...
skyjake
10:17 Revision 7c9f64ad (github): Client: Manage GL viewport exclusively with libgui GLState
This allows LegacyWidget to use its own viewport without disrupting
the rest of the UI.
skyjake
09:08 Revision 04368552 (github): UI|Client: Minor Video Settings dialog tweak
skyjake
09:07 Revision 9b3530a2 (github): Refactor|Client: Game view size is taken from LegacyWidget
The objective is to make LegacyWidget resizable within the window.
Todo: GL viewport needs to be set separately for ...
skyjake
07:34 Revision 56838db0 (github): Typos
danij
07:30 Revision fe5d331d (github): Fixed|Map Renderer|Sector|Client: HOM at start of ksutra.wad MAP03
Dynamic mapping of sector planes should only be done if there is open
space between the floor and ceiling.
danij
07:08 Revision 5335c9c0 (github): Cleanup|Map Renderer|Client: Minor clean up of surface light decoration plotting
danij
03:35 Revision 966a8450 (github): Cleanup|Map Renderer|Lumobj|Client: Cleanup
danij
03:29 Revision 5b20e1d4 (github): Map Renderer|Lumobj|Client: Cleaned up Lumobj instantiation
danij
02:35 Revision ee034f26 (github): Refactor|Lumobj: Extracted MapObject from Lumobj
Todo for later: Mobj, Polyobj, SoundEmitter, etc... should all use
this as their base.
danij
01:13 Revision 3012ed3d (github): Map Renderer|Client: Cleanup
danij
01:13 Revision 7fa23c23 (github): Refactor|Map Renderer|Client: Cleaned up dynamic light projection
danij
01:10 Revision 2d937137 (github): Map Renderer|Client: Revised mechanism for generating Lumobjs from sprites
This logic is now split into two distinct phases:
Phase 1 involves the generation of Lumobjs from a sprite and at th...
danij
01:02 Revision c35bfd5b (github): Map Renderer|Client: Reimplemented Lumobj and management thereof
Lumobj is now implemented as a C++ class and the lumobj module itself
has been split up.
A Lumobj is first instantia...
danij
00:51 Revision d07b4d3a (github): Refactor|Map Renderer|Client: Updated model drawing wrt VectorLight API changes
danij
00:50 Revision 4203c998 (github): Refactor|Map Renderer|Client: Relocated viewer scope data and functions from lumobj.cpp
As the "viewer" is presently an implicit concept, this data and any
relevant functionality was moved to r_main.cpp
danij
00:45 Revision 5e48229c (github): World|Map: Removed the "glowing surface" set from Map
In the revised design the map no longer needs to maintain this info. danij
00:40 Revision 203f3fa2 (github): Map Renderer|Client: Replaced interpretation of plane glows to VectorLights; cleanup
Rendering of plane glows is being revised so that Lumobj aren't used. danij
00:34 Revision 72b4b78f (github): World|BspLeaf|Client: Added mechanism for linking Lumobjs to BspLeafs
Will replace the old mechanism for which in lumobj.cpp danij

2013-09-05

23:01 Revision 968134b5 (github): Merge branch 'master' of github.com:skyjake/Doomsday-Engine
danij
22:06 Revision 99cbbfd7 (github): Renderer: Adjusted the automatic widescreen FOV adjustment
The goal is that a specific FOV value will provide roughly the same
experience regardless of the aspect ratio.
skyjake
21:46 Revision 7eeffac9 (github): Windows|Fixed: Build failure (system header conflict)
skyjake
20:26 Revision 801e7d64 (github): UI|Client: Video Settings fullscreen mode, Close button
The "Mode" setting was replaced with a "Fullscreen Mode", which
only affects the fullscreen mode.
Adding a Close but...
skyjake
19:00 Revision f759fb00 (github): Refactor|Client: Applied SettingsRegister for audio and video settings
skyjake
18:38 Revision eb281932 (github): Refactor|Client: Added SettingsRegister, renderer & input settings
SettingsRegister provides several important functions:
- Stores/provides access to the default values of settings.
-...
skyjake
09:30 Revision 2b1f599c (github): Refactor|UI|Client: Added PanelWidget as base class of PopupWidget
Panels are containers that may be opened or closed. PopupWidget now
extends PanelWidget with anchor positioning and i...
skyjake

2013-09-04

23:00 Revision 12b8066f (github): Merge branch 'master' of github.com:skyjake/Doomsday-Engine
danij
20:33 Revision 5e663951 (github): UI|Task Bar|Client: Added Renderer Settings
The Renderer Settings dialog contains renderer options that are not
strictly related to the visual appearance of the ...
skyjake
19:55 Revision 85666079 (github): Refactor|UI|Client: Various widget improvements
skyjake
18:57 Revision 27c79db7 (github): Renderer: Automatically adjust FOV for view aspect ratio
The FOV angle is now interpreted to be the horizontal FOV angle for
a view with 4:3 aspect ratio (matching the origin...
skyjake
18:52 Revision 5dad337a (github): UI|Client: Added Stylist and DialogContentStylist
A Stylist is an object that configures widgets with a particular
context in mind. DialogContentStylist adjusts margin...
skyjake
10:58 Revision 4440644a (github): Refactor|UI|Client: Convenient constructor for LabelWidget with text
A static constructor method that sets the label text and optionally
adds it to a parent widget.
Also, CVarSliderWidg...
skyjake
09:36 Revision 3e3f7ab7 (github): UI|Client|PopupWidget: Clamp left edge to view's edge
When a popup opens to the left, make sure it doesn't go outside
the view.
skyjake
09:04 Revision a7044738 (github): Cleanup
skyjake
08:59 Revision c33f1834 (github): UI|Task Bar: Split off configuration settings from DE menu
There is now a separate "gear" menu for configuration settings,
freeing up the DE menu for high-level app functionality.
skyjake
01:02 Revision 8520aaf9 (github): Merge branch 'master' of github.com:skyjake/Doomsday-Engine
danij

2013-09-03

21:19 Revision cd68959a (github): UI|Control Panel|Client: Added Input Settings, removed old "Input" page
A new config variable (Config.input.mouse.syncSensitivity) controls
whether the X and Y axis sensitivities are always...
skyjake
13:18 Revision 09fc196f (github): UI|Control Panel|Client: Added Network Settings, removed old Network/Console pages
However, the Network Settings dialog is presently quite empty as the
only relevant surviving option is 'net-dev'. In ...
skyjake

2013-09-02

22:16 Revision 15a90690 (github): Refactor|UI|Client: Added CVarChoiceWidget, used it in Audio Settings
A more convenient way to modify cvars with a limited number of valid
values.
skyjake
21:59 Revision e5f146b7 (github): UI|Control Panel|Client: Removed the Control Panel's "Audio" page
These options are now present in the DE menu, under "Audio Settings". skyjake
21:49 Revision 912eef92 (github): UI|Client: Added "Preferred Music" option, apply resampling rate changes
skyjake
21:31 Revision 080302f9 (github): Typo
skyjake
21:28 Revision 96f1ab20 (github): Documentation|Client|DialogWidget: Widget structure description
skyjake
21:10 Revision 8f163c1c (github): Merge branch 'master' of github.com:skyjake/Doomsday-Engine
danij
21:08 Revision 398a1b2d (github): Fixed|libgui: Canvas recreation does not cause focus to be lost
Fixes the problem where toggling FSAA would pause the game due to
the canvas losing and then regaining focus.
skyjake
20:31 Revision e044f58e (github): i18n|Client: Tested translations on client app
However, lupdate has a problem with strings inside pimpl classes.
What to do?
skyjake
18:55 Revision 1b9f45ba (github): Fixed|Refactor|UI|Client: Widget improvements
- Use CVarToggleWidget in Video Settings
- Menu eats mouse position events (to avoid "leaking" them to widgets
unde...
skyjake
18:54 Revision 2dc80925 (github): UI|Task Bar|Client: Added the Audio Settings dialog
The Audio Settings dialog replicates the options from the Control
Panel's Audio page.
Also added a specialized toggl...
skyjake
13:17 Revision 9b68e503 (github): UI|Client|DialogWidget: Added an optional heading for dialogs
Any dialog can now have a heading. MessageDialog still uses its own
title label to display an even larger title.
Tod...
skyjake
04:11 Revision 48f8acd4 (github): Server: Cleanup
danij
04:10 Revision be604059 (github): Map Renderer|Client: Cleanup
danij

2013-09-01

19:49 Revision 6cb00463 (github): Cleanup
skyjake
19:38 Revision 91e74e1f (github): Merge branch 'ui-framework'
skyjake
19:03 Revision 8974556b (github): UI|Control Panel|Client: Removed the Control Panel's "Video" page
These options are now present in the DE menu, under "Video Settings". skyjake
18:46 Revision ccc5d065 (github): UI|Task Bar: Revised DE menu items
The "Check for Updates" menu item was removed. Now manual update
checks can be made via the Updater Settings dialog.
...
skyjake
18:43 Revision 9dc4024c (github): UI|Client: Popup menu content scrolling
When a popup menu is too tall to fit into view, the menu will
scroll accordingly.
skyjake
15:03 Revision 34ea8b08 (github): UI|Client|SliderWidget: Minor visual tweak (alt dot brightness)
skyjake
13:31 Revision 1faa5e7f (github): UI|Client: Added the color adjustment dialog in ClientWindow
ClientWindow owns a color adjustment dialog, and it can be shown at
any time.
The ranges of vid-gamma, vid-contrast ...
skyjake
13:29 Revision db6cb698 (github): UI|Default Style|Client: Color adjustment dialog; cvar slider; style tweaks
The color adjustment dialog is for the monitor color adjustments.
- CVarSliderWidget presently works only the float ...
skyjake
05:09 Revision dcc788ef (github): Map Renderer: Mobjs whose origin lies behind a visual plane do not emit light
Todo for later: This situation usually arises where the mapper has
utilized a "deep water" hack. It would be nice if ...
danij

2013-08-31

21:39 Revision 11a611d8 (github): Fixed|UI|Client|PopupWidget: Make sure geometry is up-to-date before drawing
skyjake
17:01 Revision 5e647398 (github): Fixed|UI|Client: Initial viewResized event to mewly added children
Hitherto widgets have received a viewResized event only when the
actual Canvas size has changed. This has only accide...
skyjake
16:57 Revision f5c9e2c3 (github): UI|Client|GuiWidget: Tracking button clicks of any mouse button
Not hardcoded to the Left button. skyjake
16:51 Revision 536a31c4 (github): Fixed|qmake|Client: Typo in convenience header file names
skyjake
16:51 Revision a8abcc3a (github): UI|Client|GuiRootWidget: Slightly thinner widget background frame
skyjake
11:01 Revision d8f3c6bb (github): Client: Fix build (missing include)
danij
10:56 Revision 243a3a35 (github): Refactor|Server: Removed r_things.cpp/h from the server project
danij
10:12 Revision 046bcf6c (github): Refactor|Map Renderer: Continued splitting up r_things.cpp; cleanup
danij
09:46 Revision aab58eed (github): Map Renderer|Client: Cleanup
danij
09:11 Revision d8e9b2a9 (github): Refactor|Client: Relocated various functions from r_things.cpp to better homes
danij
08:18 Revision 953fea4a (github): Refactor: Moved logical sprite management to the resource domain
danij
04:36 Revision 873d0f8f (github): Cleanup|Map Renderer|Client: Unraveled r_things.cpp dependencies
Clearly this code doesn't know which domain it belongs to.
Logical sprites (frames, rotations, ...) should be consid...
danij
03:44 Revision 4fc43925 (github): Refactor|Map Renderer|Client: Moved "vissprite" management out of r_things.h/cpp
danij
02:23 Revision 2fac8b39 (github): Refactor|Map Renderer|Client: Continued cleaning up sprite projection
danij

2013-08-30

23:20 Revision 9f3652d7 (github): Map Renderer|Client: Further cleaned up R_ProjectSprite()
danij
22:23 Revision 006738eb (github): Map Renderer|Client: Cleaned up R_ProjectSprite() somewhat
danij
20:45 Revision e0bbb18e (github): UI|Client|SliderWidget: Basic implementation
Drawing the widget. Handling dragging and clicking. skyjake
20:44 Revision 629ea833 (github): UI|Client|GuiRootWidget: Added tiny dot texture, tweaked frame texture
skyjake
06:29 Revision 9b9ad873 (github): Fix typo in previous commit
danij
06:23 Revision 939a255a (github): Map Renderer|WallEdge|Client: Use line side sectors when positioning two-sided middle wall sections
danij
05:40 Revision ef8d6d3c (github): Map Renderer|WallEdge|Client: Use sector clusters when generating wall geometry
Todo: Cleanup danij
04:10 Revision 1c4bb40c (github): Refactor|Map Renderer|WallEdge|Client: Moved R_SideSectionCoords() to walledge.cpp
This functionality will now be assimilated into WallEdge... danij
04:05 Revision 082ff7ac (github): Refactor|World: "objlink" blockmap is now client side only
danij
03:16 Revision 8b5a704b (github): Map Renderer|Client: Use WallEdge when wall geometry is needed
danij
02:37 Revision f6283b61 (github): Map Renderer|Client: Use WallEdge when plotting wall section decorations
danij
02:37 Revision 0be6b61f (github): World|Map: Cleanup
danij
01:46 Revision d1f70d6d (github): Refactor|World|Client: Removed R_SetRelativeHeights()
As a general purpose utility function this clearly isn't working as
the API undermines its usefulness.
danij
01:20 Revision eb4ca59e (github): Refactor|World: Relocated R_OpenRange(); world/maputil now client-only
danij
00:28 Revision 631a788f (github): Map Renderer|Client: Use sector clusters when drawing fakeradio for walls
danij

2013-08-29

23:53 Revision 2b7ce16d (github): Merge branch 'master' of github.com:skyjake/Doomsday-Engine
danij
23:52 Revision a4d95acb (github): Map Renderer|WallEdge|Client: Cleanup
danij
20:54 Revision 734c12be (github): Fixed|UI|Client: Ensure all widgets call GuiWidget::viewResized()
skyjake
19:08 Revision 4a27ab8f (github): Client: Added convenience headers for the client-side UI framework
Excluding widget/dialog classes for now. skyjake
18:26 Revision aa263393 (github): Updater|OS X: Native SDK build uses the x86_64 distribution package
skyjake
18:21 Revision e4e30ac5 (github): Client|UI: Relocated UI framework sources into several subfolders
- "framework" contains UI framework related classes
- "widgets" contains widget classes (based on GuiWidget)
- "dialo...
skyjake
14:05 Revision 345c909b (github): Debug: Cleanup
skyjake
13:58 Revision 3adbec5b (github): Homepage: Updated the source page for 1.11.2
skyjake
13:57 Revision 794d83cc (github): UI|Client: Continued working on SliderWidget
skyjake
13:56 Revision 48269571 (github): Fixed|LabelWidget: Image positioning when using the Filled policy
Centering was not applied correctly. skyjake
13:55 Revision d3d53c43 (github): Refactor|UI|Client: Added TextDrawable; used now in DocumentWidget
TextDrawable is a higher-level text drawing class that makes it
easy to control the whole process. It is also asynchr...
skyjake
03:55 Revision bb3a613a (github): World|Sector: Exclude planes with sky-masked materials from missing texture hacks
Planes with sky-masked materials should never be mapped. This special
case is already handled elsewhere.
danij
02:52 Revision c4cb5fbf (github): World|Sector: Improved sector cluster mapping to deal with missing texture hacks
This algorithm deals with cases where a physically lower interior
must be mapped visually to a physically higher exte...
danij
02:25 Revision 850afb69 (github): Fixed|Doom: Crash trying to give a weapon unavailable in the current game mode
danij
02:23 Revision 03d50ce5 (github): Fixed|Doom: Crash trying to give a weapon unavailable in the current game mode
danij
00:43 Revision 312f84ef (github): Refactor|World|Sector: Removed top-level recursion in Sector::Cluster::remapVisPlanes()
Note that secondary recursion via visPlane() to test for cyclic
dependency remains.
danij

2013-08-28

18:54 Revision 1b164a05 (github): Refactor|UI|Client|ScrollAreaWidget: Use ui::Margins
The scroll area widget was using a couple of custom margin methods
that are now obsolete. Also internally the widget ...
skyjake
18:31 Revision 1c3f268f (github): Refactor|UI|Client: Cleanup; converting ui::Margins to a vector
GuiWidgetPrivate now has a convenience method for accessing the
widget's style.
ui::Margins can be converted to an i...
skyjake
18:28 Revision 32bec0cb (github): Default Style: Cleanup of fonts.dei, added slider.label font
skyjake
14:07 Revision bdd65d7e (github): UI|Client: Added stub for SliderWidget
skyjake
13:14 Revision dbf8aa0d (github): Refactor|UI|Client: GridLayout can give out column left/right edge rules
This allows a popup menu with multiple to columns to set the item
hit rules and highlight rectangles appropriately.
skyjake
07:57 Revision 86cea871 (github): Refactor|Client: Renamed ui::Context to ui::Data
Data is a more descriptive name for this purpose, and "Context" is
already in use in the script subsystem.
skyjake
03:41 Revision 8257106d (github): Map Renderer|Client: Cleanup
danij
03:39 Revision 335bf525 (github): Map Renderer|Client: Use sector clusters for plane ambient light properties
When drawing the geometry of a map plane ambient light properties
should be determined by the sector cluster (as thes...
danij

2013-08-27

20:56 Revision c119e72c (github): UI|Client|VideoSettingsDialog: Two-column mode choice popup
Todo: The items' hit rules must be set according to column widths rather
than the full menu.
skyjake
20:21 Revision 9ae92399 (github): UI|Client: Improved the video settings dialog
ChoiceWidget has separate signals for user-initiated or other
selection changes.
On OS X, the color depth option is ...
skyjake
17:36 Revision b72b3270 (github): Fixed|World|Sector: Re-evaluate sector cluster linking following containment testing
In this situation there may still be another map hack which contains
the cluster (which, contains the nested map hack...
danij
12:25 Revision 4c7d4320 (github): UI|Client: Basic implementation of video settings
The Video Settings dialog allows changing the display mode and window
attributes. The "Toggle Fullscreen" and "Show F...
skyjake
12:23 Revision 7158ad72 (github): libdeng2|OperatorRule: Added a static 3-way maximum method
skyjake
11:32 Revision 5f09a1fc (github): libgui|PersistentCanvasWindow: Added audience for attribute changes
skyjake
09:25 Revision 94c9c071 (github): Updater|Config|Client: Updater's default config moved to appconfig.de
Previously this was handled by native code in UpdaterSettings, but
now Doomsday Script has all the information availa...
skyjake
08:34 Revision 06b0d167 (github): UI|Client|DialogWidget: Buttonless dialogs
Normally space is reserved for a row of buttons in the bottom of a
dialog. With the Buttonless flag, the buttons menu...
skyjake
08:33 Revision 6b1dac8c (github): Fixed|Client: Comment in appconfig.de module
skyjake

2013-08-26

18:48 Revision 41eec365 (github): Refactor|Map Renderer|BspLeaf|Client: Various map data and renderer cleanup/rename refactorings
danij
15:17 Revision af4b7783 (github): Windows|Updater|UI: Updated dialog about "Files in Use"
The dialog used to notify about Doomsday-related processes running in the
background now uses Doomsday's own UI frame...
skyjake
09:18 Revision 9f54c39d (github): Merge branch 'stable-1.11' of github.com:skyjake/Doomsday-Engine into stable-1.11
danij
09:18 Revision a55cb7b5 (github): Fixed|World|Line: Build failure (unknown DMT_SIDE_SECTOR)
Clearly a change from a rename refactoring in following commit in the
master ended up being merged to the stable branch.
danij
08:59 Revision 71cc9724 (github): World|Sector: Cleanup
danij
08:35 Revision a1ee2022 (github): Fixed|World|Sector: Sector cluster classification
This was the cause of the last remaining issue with av.wad MAP01.
All hacks in this map now work.
danij
07:16 Revision 4e1cc264 (github): World|Sector: Improved sector cluster linking wrt independent but nested hacks
This iteration of the linking algorithm resolves cases such as the
twin balcony bridge in requiem.wad MAP13 and the n...
danij
05:24 Revision c76bb559 (github): World|Sector: Properly resolve cyclic sector cluster linking
If two sector clusters determine they should both link to the other
then by virtue of the clustering this inherently ...
danij
01:01 Revision 95d32279 (github): World|Client: Removed map utility function R_VisOpenRange()
Only R_SideBackClosed() and R_FindSolidLineNeighbor() still use this
and these are on the way out also.
danij
00:43 Revision 7c517460 (github): World|Client: Use plane heights from sector clusters when spreading contacts
danij
00:28 Revision 753f6fba (github): Map Renderer|ShadowEdge|Client: Partially updated ShadowEdge to use sector clusters
Completing the job must wait until LineOwners are reworked. danij

2013-08-25

23:44 Revision 40160226 (github): Map Renderer|Client: Use sector clusters when occluding with leaf edges
danij
21:49 Revision 964eead8 (github): Map Renderer|Client: Added TODO comments where sector clusters should be used
danij
19:13 Revision 59f4b44c (github): SkyFixEdge|Client: Fix typo in previous commit
danij
17:58 Revision 46fe2450 (github): Bumped version number to 1.11.2
skyjake
17:44 Revision 95ea2aef (github): Fixed|libgui|PersistentCanvasWindow: Applying command line options to window
At least on OS X there was a problem with the state of the widget
if the attributes were applied to a hidden window (...
skyjake
17:44 Revision 0e1ce588 (github): Fixed|libgui|PersistentCanvasWindow: Command line options for window ignored
'-window' etc. were not being applied to the main window at launch. skyjake
17:43 Revision cd7831ef (github): Optimize|libdeng2|Observers: Use regular mutex
It appears that Qt's QReadWriteLock::lockForRead() has some performance
issues. Using a regular mutex for audiences p...
skyjake
17:43 Revision f8afdf51 (github): Optimize|libdeng2|Observers: Ensure Loop does not copy the observer set
Profiling showed that iterating through audiences using Observers::Loop
had unexpectedly slow performance due to Loop...
skyjake
17:41 Revision 1a0b748c (github): Optimize|Builder|qmake: Avoid numerous python invocations when parsing
versions.pri is better pre-generated once and then reused multiple
times. The old way caused a multitude of python pr...
skyjake
17:31 Revision 6e47d902 (github): MapRenderer|SkyFixEdge|Client: Use sector clusters when generating sky-fix geometry
danij
17:15 Revision d660c05e (github): Map Renderer|Client: Use sector clusters when determining if a player is in the void
danij
16:47 Revision 6b465ef6 (github): Map Renderer|Client: Use sector clusters for plane heights when drawing polyobj vertexes
danij
16:14 Revision fc7e56ed (github): Merge branch 'master' of github.com:skyjake/Doomsday-Engine
danij
16:13 Revision 1b4631c3 (github): Map Renderer|Client: Use sector clusters for plane heights when drawing tangent vectors
danij
 

Also available in: Atom