# Survex To-Do List

## 3d format

- sort out XSECT - I'm sure I meant there to be 1 and 2 byte forms, not 2 and 4 - 4 byte is only useful if a passage dimension is > 327.67m!
- store equated stations in some way
- store legs by end stations rather than repeating coordinates over and over?

## Aven

- loading a .3d file with no survey data (or which has a valid header but is broken later) with a survey already loaded doesn't work well.
- After keyboard controlled movement, the measuring line/circle doesn't reappear until the mouse is moved (e.g. plan/elevation transition with P/L).
- Fix depth clipping on grid
- Does anyone use Controls->"Reverse Sense"? It made some sense with caverot but now seeing the mouse pointer makes people expect the default motions (for right button drag particularly).
- Clean up export.cc and allow line width, etc to be specified
- Better handling of missing LRUD values
- Smooth wrinkles in presentation code (stop pres on Open or New, changing focus on listctrl as presentation plays doesn't really work properly)
- Draw the measuring line directly onto the front buffer, so we can remove it with a copy from the back buffer and redraw it in the new position without a re-render.
- Process all pending input before rerendering to improve responsiveness.
- Check timing code - we need to glFinish to ensure it's all drawn, and that may be needed to get meaningful timing info.
- Allow control of colours in "colour by survey"; allow controlling what level colours are applied at e.g. colour by cave (and more generally by sub-prefix)
- Implement "Skip blank pages" in aven printing
- different keyboard layouts mean that some key choices don't make much sense...
- File->Extended Elevation - provide a way to specify a spec file? Or better a UI to control the extending.
- Optional lazy label redraw during drags? Or turn on at some redraw time threshold...
- Some way to view older/newer version of survey
- Label lengths aren't considered when working out image size when printing so a long label can spill off the edge of the printout
- print to an image file?
- grid on printouts
  - grid crosses option (only draw cross at intersections, not a full grid).
  - [(x,y) of a point to go through (easting, northing)
  - x spacing, y spacing (default to x spacing)
  - orientation (bearing of y-axis?) (defaults to 0)]
- Profile aven further (for both speed and memory usage)
- by default put crosses on those points with no legs attached (unused fixed points)?
- label junctions/dead ends?
- section colouring/selective labelling
- clipping - want to select a clip sphere (or maybe cube) centred on centre on rotation I think.
- Some way to display all the names of an equated station (e.g. in pop-up window or the info panel).
- check on monochrome, 16, and 256 colour displays - especially that depth colouring looks OK
- Feed back redraw time to key based movement as in caverot? Or perhaps best not to? It depends on whether we expect people to hold down keys or not... Perhaps something smart where the first press is a fixed size, then after that it depends on the redraw?
- improve .plt export to include less crude survey structure.
- If multiple methods for drawing crosses and/or blobs pass the visual fidelity check, check which is fastest.
- Lots of aven things need documenting.
- Stats reporting in aven - more helpful there than at end of cavern run as user can check at any point and we can report for a subsurvey. NSEWUD-most stations; node stats; count of stations with other than two legs or which are fixed?; flag counts (#fixed stations, #exported stations, etc) with way to see list of all such stations.

## Documentation

- Platform specific versions of docs?
- Put more terms in terminology in docs ? trip, instrument, ...
- Finish off manual loose ends.
- Look at rewording extend.sgml (AndyA comments)

## Internationalisation and Localisation

- Update translations.
- length units in .err file?

## Test Suite

- test diving data with compass omitted (plumbed)
- more tests for direction
- improve 3d torture test and try to automate its use if possible.

## Miscellaneous

- resolve FIXMEs in code
- diffpos: compare connectivity (i.e legs as well as stations) - e.g.

      foo.1 moved by (0.02, 0.10, -0.06)
      leg between foo.1 and bar.2 removed
      ...
      bar.2 moved by (-0.02, -0.05, 0.03)

## Cavern

- This gives "*** Singular!!!" warning with DEBUG_INVALID on:

      1 2 50000 0 -
      1 2 5 0 -30

- Default variance for topofil counter? (currently same as that of tape)
- Don't split other traverses at articulating traverses when reporting error stats.
- sort out title which goes in .3d file for this (if no *includes in ... it gets the title of the leafname of this .svx file, otherwise it's the leafnames of the *include-d files, comma-separated):

      *begin mycave
      *title "My Cave"
      ...
      *end mycave

- look at solution by QR factorisation in matrix.c more
- consider disabling the more expensive asserts - turning them all off speeds up cavern by about 10%.
- Warn bearings not 3 digits, gradient not <sign><digit><digit>
- Sort out gross error detection code
- For warnings such as "Negative adjusted tape reading" report the value of the adjusted tape reading (currently we just highlight the reading as it appears in the Survex file).
- legs: implied flags: inloop/plumb
- legs: "dubious" for "tapeless" legs - bearing along continuation...
- station flags: "important" - e.g. top camp "fixed" point / junction,deadend (implied by order) / articulation pt (know for nodes I think a station is if at least one of its nodes is)
- Maybe station lists should know how long they are?
- Articulation point code: ideally the articulation point code should allow further network reductions to happen after splitting at articulation points?

## Survex file format

- *data chamber ...
- *data nsew ... for pitches (bearings rather than having to be NSEW)
- Allow angles as deg/min/sec (for theodolite data) (060°10'15" as 060 10 15, or 060.1005 (crap notation))
- should % after a clino reading work?
- Fixing a point by triangulation?
- multiple readings:

  average bearings specially - they don't average like normal numbers

  %age gradients should probably average the same as angle gradients

  Document - works like so:

      *set open {
      *set close }
      *calibrate compass {000.5 001.0 001.25}
      1 2 10.23 {000 001} -02
      2 3 {10.16 10.17} 127 {+06 +05}
      3 4 11.98 007 {+03 +03}

  Implement as extension to number format so any suitable numeric value to be repeated?
- Theodolite + level:
  - delta(bearing (relative to 0 at start)
  - delta(horizontal)
  - delta(vertical) / maybe "clino" instead
- Theodolite only:
  - delta(bearing (relative to 0 at start)
  - delta(horizontal)
  - infinite sd for z
- Infinite sds so we can fix in x and y only (or z only)?
- legs: hydrology - fossil/active/not recorded/static water/underwater (sump) [diving underwater by default? except style can mean altimeter too...]
- legs: floor type - mud/sand/breakdown/flowstone/etc and can then used LRUD to draw crude survey...
- Allow valid range for an instrument to be specified. Tie in with *instrument. *units date - ranges for dates - e.g. "1990-" or "jun-aug"...
- cope with any combination of readings which gives enough info ???
- leg and station "comments":

      *data passage station left right up down comment

      1 1.0 - 50+ 0.5 "large cairn"

      2 ...

      *data normal station l r u d comment newline tape compass clino

      1 1.0 - 50+ 0.5 "large cairn"

        10.78 123 -03

      2 ...

  comment can be omitted "-" or not present if at end of line...? commentall?
- Allow covariances to be specified in cartesian style?
- flag legs as "skeletal" or something? (i.e. not in the cave passage) - e.g. a radiolocation leg from one passage to another isn't surface, but it isn't in the cave itself either (it's through rock). You could just call it surface but maybe later we want to use the surface flag to produce points for a surface triangulation...
- ?outlaw prefixes on stations in data legs (as Todd has lobbied for) and then the prefix of a leg == prefix of each end...?
- Units in *fix (currently metres)

## img library

- make img more modular (convert to C++?)