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);
126 getCubicBezierConf(conf, n);
127 radialBezierResolution = n;
146 double radialCoeff = 1.0;
147 double angularOffset = 0.0;
157 getCubicBezierConf(conf, 0.0, 2.0*M_PI /
static_cast<double>(n));
160 void getCubicBezierConf(CubicBezierConf & conf,
double angleStartR,
double angleEndR)
const;
166 polarToMeters(radius, azimuth, geoPoint);
173 radarProj.
projectFwd(radius*::sin(azimuth), radius*::cos(azimuth), geoPoint.x, geoPoint.y);
180 radarProj.
projectFwd(radarPoint, compositePoint);
191 convert(radiusM, azimuthR, imgPoint);
192 elem.absolute<drain::svgPATH::MOVE>(imgPoint.x, imgPoint.y);
200 void moveTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
202 moveTo(elem, imgPoint, radius, azimuth);
206 void lineTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
208 lineTo(elem, imgPoint, radius, azimuth);
212 void lineTo(drain::svgPATH & elem,
drain::Point2D<int> & imgPoint,
double radiusM,
double azimuthR)
const {
213 convert(radiusM, azimuthR, imgPoint);
214 elem.absolute<drain::svgPATH::LINE>(imgPoint.x, imgPoint.y);
222 void cubicBezierTo(drain::svgPATH & elem,
double radiusM,
double azimuthStartR,
double azimuthEndR)
const ;
230 void close(drain::svgPATH & elem){
231 elem.absolute<drain::svgPATH::CLOSE>();
236 int radialBezierResolution;
268DRAIN_ENUM_DICT(rack::RadarSVG::StyleClasses);
270DRAIN_ENUM_OSTREAM(rack::RadarSVG::StyleClasses);
277const image::TreeSVG & image::TreeSVG::operator[](
const rack::RadarSVG::StyleClasses & cls)
const {
278 return (*
this)[EnumDict<rack::RadarSVG::StyleClasses>::dict.getKey(cls,
false)];
284image::TreeSVG & image::TreeSVG::operator[](
const rack::RadarSVG::StyleClasses & cls) {
285 return (*
this)[EnumDict<rack::RadarSVG::StyleClasses>::dict.getKey(cls,
false)];
291bool image::TreeSVG::hasChild(
const rack::RadarSVG::StyleClasses & cls)
const {
292 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:125
drain::image::GeoFrame geoFrame
Geographic extent and projection (Cartesian)
Definition graphics-radar.h:104
static drain::image::TreeSVG & getOverlayGroup(drain::image::TreeSVG &svgDoc)
Get (create) group dedicated for layers drawn over radar data.
Definition graphics-radar.cpp:138
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:228
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:190
void cubicBezierTo(drain::svgPATH &elem, double radiusM, double azimuthStartR, double azimuthEndR) const
Single command to draw arc.
Definition graphics-radar.cpp:285
static drain::image::TreeSVG & getOverlayStyle(drain::image::TreeSVG &svgDoc)
Sets some CSS properties applicable in radar graphics (grids, sectors).
Definition graphics-radar.cpp:68
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:169
Definition DataSelector.cpp:1277
Definition DataSelector.cpp:44
Definition graphics-radar.h:142
double delta
Sector angle.
Definition graphics-radar.h:145