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"
83 drain::image::TreeSVG & getGraphicStyle(drain::image::TreeSVG & svgDoc);
91DRAIN_ENUM_DICT(rack::Graphic::GRAPHIC);
92DRAIN_ENUM_OSTREAM(rack::Graphic::GRAPHIC);
101 void deriveMaxRange(
const Hi5Tree & srcPolar){
106 double getRange(
double r=1.0){
122 double maxRange = 0.0;
139 RadarSVG(
int radialBezierResolution = 0){
140 if (radialBezierResolution > 0){
177 drain::image::TreeSVG &
getOverlayGroup(drain::image::TreeSVG & svgDoc);
233 getCubicBezierConf(conf, n);
234 radialBezierResolution = n;
238 mout.
error(
"To small radialBezierResolution: ", n);
258 double radialCoeff = 1.0;
259 double angularOffset = 0.0;
269 getCubicBezierConf(conf, 0.0, 2.0*M_PI /
static_cast<double>(n));
272 void getCubicBezierConf(CubicBezierConf & conf,
double angleStartR,
double angleEndR)
const;
278 polarToMeters(radius, azimuth, geoPoint);
285 radarProj.
projectFwd(radius*::sin(azimuth), radius*::cos(azimuth), geoPoint.x, geoPoint.y);
292 radarProj.
projectFwd(radarPoint, compositePoint);
303 convert(radiusM, azimuthR, imgPoint);
304 elem.absolute<drain::svgPATH::MOVE>(imgPoint.x, imgPoint.y);
312 void moveTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
314 moveTo(elem, imgPoint, radius, azimuth);
318 void lineTo(drain::svgPATH & elem,
double radius,
double azimuth)
const {
320 lineTo(elem, imgPoint, radius, azimuth);
324 void lineTo(drain::svgPATH & elem,
drain::Point2D<int> & imgPoint,
double radiusM,
double azimuthR)
const {
325 convert(radiusM, azimuthR, imgPoint);
326 elem.absolute<drain::svgPATH::LINE>(imgPoint.x, imgPoint.y);
334 void cubicBezierTo(drain::svgPATH & elem,
double radiusM,
double azimuthStartR,
double azimuthEndR)
const ;
342 void close(drain::svgPATH & elem)
const {
344 elem.absolute<drain::svgPATH::CLOSE>();
366 int radialBezierResolution;
415const image::TreeSVG & image::TreeSVG::operator[](
const rack::Graphic::GRAPHIC & cls)
const {
416 return (*
this)[Enum<rack::Graphic::GRAPHIC>::dict.getKey(cls,
false)];
422image::TreeSVG & image::TreeSVG::operator[](
const rack::Graphic::GRAPHIC & cls) {
423 return (*
this)[Enum<rack::Graphic::GRAPHIC>::dict.getKey(cls,
false)];
429bool image::TreeSVG::hasChild(
const rack::Graphic::GRAPHIC & cls)
const {
430 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:346
Cartesian composite (mosaic) of data from several radars.
Definition Composite.h:102
Definition graphics-radar.h:49
Definition graphics-radar.h:96
Definition RadarProj.h:100
Vector graphics for both composites and single radar data (polar coordinates).
Definition graphics-radar.h:134
void setRadialResolution(int n)
Number of "sectors" in a sphere.
Definition graphics-radar.h:231
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:210
static drain::image::TreeSVG & getOverlayGroup(drain::image::TreeSVG &svgDoc)
Sets some CSS properties applicable in radar graphics (grids, sectors).
Definition graphics-radar.cpp:184
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:226
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:302
void drawCircle(drain::svgPATH &elem, const drain::Range< double > &radius) const
Convenience: draw circle (disk or annulus)
Definition graphics-radar.h:360
void cubicBezierTo(drain::svgPATH &elem, double radiusM, double azimuthStartR, double azimuthEndR) const
Single command to draw arc.
Definition graphics-radar.cpp:294
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:361
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:206
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:254
double delta
Sector angle.
Definition graphics-radar.h:257