33#ifndef RACK_GRAPHICS_RADAR
34#define RACK_GRAPHICS_RADAR
40#include <drain/image/GeoFrame.h>
41#include <drain/image/TreeElemUtilsSVG.h>
43#include "radar/Composite.h"
44#include "radar/RadarProj.h"
62 RadarSVG(
int radialBezierResolution = 8){
87 drain::image::TreeSVG &
getOverlayStyle(drain::image::TreeSVG & svgDoc);
94 drain::image::TreeSVG &
getOverlayGroup(drain::image::TreeSVG & svgDoc);
101 void deriveMaxRange(
const Hi5Tree & srcPolar){
144 getCubicBezierConf(conf, n);
145 radialBezierResolution = n;
164 double radialCoeff = 1.0;
165 double angularOffset = 0.0;
175 getCubicBezierConf(conf, 0.0, 2.0*M_PI /
static_cast<double>(n));
178 void getCubicBezierConf(CubicBezierConf & conf,
double angleStartR,
double angleEndR)
const;
184 polarToMeters(radius, azimuth, geoPoint);
191 radarProj.
projectFwd(radius*::sin(azimuth), radius*::cos(azimuth), geoPoint.x, geoPoint.y);
198 radarProj.
projectFwd(radarPoint, compositePoint);
209 convert(radiusM, azimuthR, imgPoint);
210 elem.absolute<drain::svgPATH::MOVE>(imgPoint.x, imgPoint.y);
218 void moveTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
220 moveTo(elem, imgPoint, radius, azimuth);
224 void lineTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
226 lineTo(elem, imgPoint, radius, azimuth);
230 void lineTo(drain::svgPATH & elem,
drain::Point2D<int> & imgPoint,
double radiusM,
double azimuthR)
const {
231 convert(radiusM, azimuthR, imgPoint);
232 elem.absolute<drain::svgPATH::LINE>(imgPoint.x, imgPoint.y);
240 void cubicBezierTo(drain::svgPATH & elem,
double radiusM,
double azimuthStartR,
double azimuthEndR)
const ;
248 void close(drain::svgPATH & elem){
249 elem.absolute<drain::svgPATH::CLOSE>();
254 int radialBezierResolution;
257 double maxRange = 0.0;
289DRAIN_ENUM_DICT(rack::RadarSVG::StyleClasses);
291DRAIN_ENUM_OSTREAM(rack::RadarSVG::StyleClasses);
298const image::TreeSVG & image::TreeSVG::operator[](
const rack::RadarSVG::StyleClasses & cls)
const {
299 return (*
this)[EnumDict<rack::RadarSVG::StyleClasses>::dict.getKey(cls,
false)];
305image::TreeSVG & image::TreeSVG::operator[](
const rack::RadarSVG::StyleClasses & cls) {
306 return (*
this)[EnumDict<rack::RadarSVG::StyleClasses>::dict.getKey(cls,
false)];
312bool image::TreeSVG::hasChild(
const rack::RadarSVG::StyleClasses & cls)
const {
313 return hasChild(EnumDict<rack::RadarSVG::StyleClasses>::dict.getKey(cls,
true));
void projectFwd(double &x, double &y) const
Forward projection (in-place)
Definition Proj6.h:191
A map of Variables.
Definition VariableMap.h:61
Array with georeferencing support.
Definition GeoFrame.h:58
virtual void m2pix(double x, double y, int &i, int &j) const
Scales geographic map coordinates to image coordinates.
Definition GeoFrame.h:345
Cartesian composite (mosaic) of data from several radars.
Definition Composite.h:102
Definition RadarProj.h:99
Vector graphics for both composites and single radar data (polar coordinates).
Definition graphics-radar.h:57
void setRadialResolution(int n)
Number of "sectors" in a sphere.
Definition graphics-radar.h:143
drain::image::GeoFrame geoFrame
Geographic extent and projection (Cartesian)
Definition graphics-radar.h:122
static drain::image::TreeSVG & getOverlayGroup(drain::image::TreeSVG &svgDoc)
Get (create) group dedicated for layers drawn over radar data.
Definition graphics-radar.cpp:148
void updateCartesianConf(const drain::VariableMap &where)
Read meta data related to Cartesian data, that is, geographic configuration of a radar composite.
Definition graphics-radar.cpp:238
void moveTo(drain::svgPATH &elem, drain::Point2D< int > &imgPoint, double radiusM, double azimuthR) const
Move to image point at (radius, azimuth)
Definition graphics-radar.h:208
void cubicBezierTo(drain::svgPATH &elem, double radiusM, double azimuthStartR, double azimuthEndR) const
Single command to draw arc.
Definition graphics-radar.cpp:295
double getRange(double r=1.0)
If r is inside +/-100% = [-1.0,1.0], return that portion of maximum range, else the argument as such.
Definition graphics-radar.h:107
static drain::image::TreeSVG & getOverlayStyle(drain::image::TreeSVG &svgDoc)
Sets some CSS properties applicable in radar graphics (grids, sectors).
Definition graphics-radar.cpp:54
void updateRadarConf(const drain::VariableMap &where)
Read meta data related to polar coordinates, that is, geographic configuration of a single radar.
Definition graphics-radar.cpp:179
Definition DataSelector.cpp:1277
Definition DataSelector.cpp:44
Definition graphics-radar.h:160
double delta
Sector angle.
Definition graphics-radar.h:163