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"
82 drain::image::TreeSVG & getGraphicStyle(drain::image::TreeSVG & svgDoc);
90DRAIN_ENUM_DICT(rack::Graphic::GRAPHIC);
91DRAIN_ENUM_OSTREAM(rack::Graphic::GRAPHIC);
100 void deriveMaxRange(
const Hi5Tree & srcPolar){
105 double getRange(
double r=1.0){
121 double maxRange = 0.0;
138 RadarSVG(
int radialBezierResolution = 0){
139 if (radialBezierResolution > 0){
176 drain::image::TreeSVG &
getOverlayGroup(drain::image::TreeSVG & svgDoc);
232 getCubicBezierConf(conf, n);
233 radialBezierResolution = n;
237 mout.
error(
"To small radialBezierResolution: ", n);
257 double radialCoeff = 1.0;
258 double angularOffset = 0.0;
268 getCubicBezierConf(conf, 0.0, 2.0*M_PI /
static_cast<double>(n));
271 void getCubicBezierConf(CubicBezierConf & conf,
double angleStartR,
double angleEndR)
const;
277 polarToMeters(radius, azimuth, geoPoint);
284 radarProj.
projectFwd(radius*::sin(azimuth), radius*::cos(azimuth), geoPoint.x, geoPoint.y);
291 radarProj.
projectFwd(radarPoint, compositePoint);
302 convert(radiusM, azimuthR, imgPoint);
303 elem.absolute<drain::svgPATH::MOVE>(imgPoint.x, imgPoint.y);
311 void moveTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
313 moveTo(elem, imgPoint, radius, azimuth);
317 void lineTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
319 lineTo(elem, imgPoint, radius, azimuth);
323 void lineTo(drain::svgPATH & elem,
drain::Point2D<int> & imgPoint,
double radiusM,
double azimuthR)
const {
324 convert(radiusM, azimuthR, imgPoint);
325 elem.absolute<drain::svgPATH::LINE>(imgPoint.x, imgPoint.y);
333 void cubicBezierTo(drain::svgPATH & elem,
double radiusM,
double azimuthStartR,
double azimuthEndR)
const ;
341 void close(drain::svgPATH & elem)
const {
343 elem.absolute<drain::svgPATH::CLOSE>();
365 int radialBezierResolution;
414const image::TreeSVG & image::TreeSVG::operator[](
const rack::Graphic::GRAPHIC & cls)
const {
415 return (*
this)[Enum<rack::Graphic::GRAPHIC>::dict.getKey(cls,
false)];
421image::TreeSVG & image::TreeSVG::operator[](
const rack::Graphic::GRAPHIC & cls) {
422 return (*
this)[Enum<rack::Graphic::GRAPHIC>::dict.getKey(cls,
false)];
428bool image::TreeSVG::hasChild(
const rack::Graphic::GRAPHIC & cls)
const {
429 return hasChild(Enum<rack::Graphic::GRAPHIC>::dict.getKey(cls,
true));
A wrapper marking string an CSS effect.
Definition ClassXML.h:57
LogSourc e is the means for a function or any program segment to "connect" to a Log.
Definition Log.h:313
Logger & error(const TT &... args)
Echoes.
Definition Log.h:417
void projectFwd(double &x, double &y) const
Forward projection (in-place)
Definition Proj6.h:186
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 graphics-radar.h:49
Definition graphics-radar.h:95
Definition RadarProj.h:99
Vector graphics for both composites and single radar data (polar coordinates).
Definition graphics-radar.h:133
void setRadialResolution(int n)
Number of "sectors" in a sphere.
Definition graphics-radar.h:230
drain::image::GeoFrame geoFrame
If r is inside +/-100% = [-1.0,1.0], return that portion of maximum range, else the argument as such.
Definition graphics-radar.h:209
static drain::image::TreeSVG & getOverlayGroup(drain::image::TreeSVG &svgDoc)
Sets some CSS properties applicable in radar graphics (grids, sectors).
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:180
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:301
void drawCircle(drain::svgPATH &elem, const drain::Range< double > &radius) const
Convenience: draw circle (disk or annulus)
Definition graphics-radar.h:359
void cubicBezierTo(drain::svgPATH &elem, double radiusM, double azimuthStartR, double azimuthEndR) const
Single command to draw arc.
Definition graphics-radar.cpp:245
void drawSector(drain::svgPATH &elem, const drain::Range< double > &radius, const drain::Range< double > &azimuthR={0.0, 0.0}) const
Convenience: draw sector, starting from radius.min, ending at radius.max, in azimuth range azimuthR....
Definition graphics-radar.cpp:312
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:160
Definition DataSelector.cpp:1277
Definition DataSelector.cpp:44
A container for a static dictionary of enumeration values.
Definition Enum.h:51
Definition graphics-radar.h:253
double delta
Sector angle.
Definition graphics-radar.h:256