Skip to content

Commit

Permalink
v10.5
Browse files Browse the repository at this point in the history
  • Loading branch information
mpeura committed Jan 23, 2025
1 parent 0133b68 commit 041a0f2
Show file tree
Hide file tree
Showing 9 changed files with 355 additions and 300 deletions.
8 changes: 4 additions & 4 deletions demo/test-svg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -114,18 +114,18 @@ RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${
WRITE_DOC 'Variables identifying the radar and timestamp often distinguish files sufficiently.'
WRITE_DOC 'Hence, consider using variables like \c ${NOD} , \c ${what:date}, and \c ${what:time} .'
WRITE_DOC '\c Rack supports grouping output images to rows or columns. Use \c --cGroup to set a distinguishing key.'
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" \\ --gGroup "'Test-\${NOD}'" \\ 'data-kiira/*.h5' -o series1.svg
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" \\ --gGroupTitle "'Test-\${NOD}'" \\ 'data-kiira/*.h5' -o series1.svg


WRITE_DOC 'In a grid of images, originating from several radars and times, the images can be labelled automatically with \c --gTitles command, with option \c IMAGE_TITLES . '
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" \\ --gGroup "'Examples of \${PLC} (\${NOD}) on \${what:date|%Y/%m/%d}'" --gTitles IMAGE_TITLE \\ 'data-kiira/*.h5' -o series-labelled.svg
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" \\ --gGroupTitle "'Examples of \${PLC} (\${NOD}) on \${what:date|%Y/%m/%d}'" \\ 'data-kiira/*.h5' -o series-labelled.svg


WRITE_DOC 'A further example, with three levels of titles.'
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" --gGroup "'Examples of Kiira case'" --gTitles GROUP_TITLE,IMAGE_TITLE,MAIN_TITLE \\ data-kiira/201708121530_radar.polar.fikor.h5 data-kiira/201708121600_radar.polar.fiika.h5 -o series-labelled2.svg
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" \\ --gGroupTitle "'Examples of Kiira case'" --gStyle .IMAGE_BORDER="'stroke:black;stroke-width:1'" \\ data-kiira/201708121530_radar.polar.fikor.h5 data-kiira/201708121600_radar.polar.fiika.h5 -o series-labelled2.svg

WRITE_DOC 'A further example, with...'
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" --gGroup "'Examples of \${what:time}'" --gTitles GROUP_TITLE,IMAGE_TITLE,MAIN_TITLE \\ data-kiira/201708121?00_radar.polar.fikor.h5 data-kiira/201708121?00_radar.polar.fiika.h5 -o series-labelled3.svg
RUN_TEST \\ --script "'--cReset --cSize 300 -Q DBZH -c --palette \"\" -o out-\${what:date}T\${what:time}-\${NOD}.png'" \\ --gTitle "'AUTO'" --gGroupTitle "'Examples of \${what:time}'" \\ data-kiira/201708121?00_radar.polar.fikor.h5 data-kiira/201708121?00_radar.polar.fiika.h5 -o series-labelled3.svg



Expand Down
2 changes: 1 addition & 1 deletion src/drain/image/TreeSVG.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class BBoxSVG : public drain::Box<svg::coord_t> {
};

//typedef drain::StyleSelectorXML<NodeSVG> SelectSVG;
typedef drain::StyleSelectorXML SelectSVG;
typedef drain::SelectorXML SelectSVG;

/// A node structure for drain::UnorderedMultiTree<NodeSVG>, compatible with TreeXML
/**
Expand Down
4 changes: 4 additions & 0 deletions src/drain/util/TreeXML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ namespace drain {
const SprinterLayout Sprinter::pythonLayout("[,]", "{,}", "(,)", "\"\"", "''", ":"); // last ':' means plain map entries (not tuples as in C++)
*/

const char SelectorXML::CLASS;

const char SelectorXML::ID;


template <>
const drain::EnumDict<int,XML>::dict_t drain::EnumDict<int,XML>::dict = {
Expand Down
37 changes: 27 additions & 10 deletions src/drain/util/TreeXML.h
Original file line number Diff line number Diff line change
Expand Up @@ -769,42 +769,59 @@ std::ostream & operator<<(std::ostream &ostr, const UnorderedMultiTree<NodeXML<E
return ostr;
}

//template <class X> // , char SEP=' '
class StyleSelectorXML : public std::string {

// CSS element selector.
class SelectorXML : public std::string {

public:

static
const char CLASS = '.';

static
const char ID = '#';


inline
StyleSelectorXML(const std::string &s) : std::string(s){
SelectorXML(const std::string &s) : std::string(s){
}

inline
StyleSelectorXML(const char *s) : std::string(s){
SelectorXML(const char *s) : std::string(s){
}

template <class ...T>
inline
StyleSelectorXML(T... args) : std::string(StringBuilder<>(args...)){
SelectorXML(T... args) : std::string(StringBuilder<>(args...)){
}

};

class ClassSelectorXML : public StyleSelectorXML {
// CSS class selector.
/**
*
*/
class SelectorXMLcls : public SelectorXML {
public:

template <class T>
template <class C>
inline
SelectorXMLcls(const C &cls) : SelectorXML(CLASS, cls){
}

template <class E, class C>
inline
ClassSelectorXML(const T &arg) : StyleSelectorXML('.', arg){
SelectorXMLcls(const E &elem, const C &cls) : SelectorXML(elem, CLASS, cls){
}

};

class IdSelectorXML : public StyleSelectorXML {
class SelectorXMLid : public SelectorXML {
public:

template <class T>
inline
IdSelectorXML(const T & arg) : StyleSelectorXML('#', arg){
SelectorXMLid(const T & arg) : SelectorXML(ID, arg){
}

};
Expand Down
129 changes: 66 additions & 63 deletions src/main/fileio-svg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,9 @@ namespace rack {
// typedef drain::image::AlignSVG alignSvg;


// StyleSelectorXML :
// Wrapper. Unused, future option
/*
template <typename E>
class ClassLabelXML : public std::string {
public:
Expand All @@ -99,7 +101,7 @@ class ClassLabelXML : public std::string {
}
};

*/



Expand Down Expand Up @@ -231,25 +233,7 @@ class CmdAlign : public drain::SimpleCommand<std::string> {
CompleteAlignment<> align(AlignSVG::Topol::UNDEFINED_TOPOL, AlignBase::Pos::UNDEFINED_POS); //(AlignSVG::Topol::UNDEFINED_TOPOL, AlignBase::Axis::UNDEFINED_AXIS, AlignBase::Pos::UNDEFINED_POS);

for (const std::string & key: keys){

align.set(key);
/*
if (drain::EnumDict<AlignSVG::Topol>::setValue(key, align.topol)){
// ok
}
else if (drain::EnumDict<AlignBase::Axis>::setValue(key, align.axis)){
// ok
}
else if (drain::EnumDict<AlignBase::Pos>::setValue(key, align.pos)){
// ok
}
else if (drain::EnumDict<Alignment<> >::setValue(key, (Alignment<> &)align)){ // Dangerous
// ok
}
else {
mout.error("Unknown alignment key: '", key, "' (all args: ", value, ")");
}
*/
}

switch (align.axis) {
Expand Down Expand Up @@ -297,12 +281,8 @@ class CmdFontSizes : public drain::SimpleCommand<std::string> {
// CmdFontSizes() : drain::BasicCommand(__FUNCTION__, "Add or modify CSS entry") {
CmdFontSizes() : drain::SimpleCommand<std::string>(__FUNCTION__, "Set font sizes") {
// getParameters().link("sizes", fontSizes);
// setParameters(args);
//fontSizes.link(getContext<RackContext>().svgPanelConf.fontSizes);
}

//drain::UniTuple<double,4> fontSizes;

virtual
void exec() const override {

Expand Down Expand Up @@ -335,70 +315,99 @@ class CmdFontSizes : public drain::SimpleCommand<std::string> {

drain::image::TreeSVG & style = RackSVG::getStyle(ctx);

style[RackSVG::clsMAIN_TITLE]->set("font-size", ctx.svgPanelConf.fontSizes[0]);
style[RackSVG::clsGROUP_TITLE]->set("font-size", ctx.svgPanelConf.fontSizes[1]);
style[RackSVG::clsTITLE]->set("font-size", ctx.svgPanelConf.fontSizes[2]);
style[RackSVG::clsIMAGE_TITLE]->set("font-size", ctx.svgPanelConf.fontSizes[3]);
style[drain::SelectorXMLcls(PanelConfSVG::MAIN_TITLE)]->set("font-size", ctx.svgPanelConf.fontSizes[0]);
style[drain::SelectorXMLcls(PanelConfSVG::GROUP_TITLE)]->set("font-size", ctx.svgPanelConf.fontSizes[1]);
style[drain::SelectorXMLcls(PanelConfSVG::TITLE)]->set("font-size", ctx.svgPanelConf.fontSizes[2]);
style[drain::SelectorXMLcls(PanelConfSVG::IMAGE_TITLE)]->set("font-size", ctx.svgPanelConf.fontSizes[3]);

// ctx.svgPanelConf.fontSizes = fontSizes;
// fontSizes.clear();

}


void execFOO() const {
};


class CmdGroupTitle : public drain::BasicCommand {

public:

CmdGroupTitle() : drain::BasicCommand(__FUNCTION__, "Set titles automatically") {
RackContext & ctx = getContext<RackContext>();
getParameters().link("syntax", ctx.svgPanelConf.groupTitleSyntax, "example: '${what:date|%Y%m} ${NOD}'");
}

CmdGroupTitle(const CmdGroupTitle & cmd) : drain::BasicCommand(cmd) {
getParameters().copyStruct(cmd.getParameters(), cmd, *this, drain::ReferenceMap::LINK);
}

void exec() const {
RackContext & ctx = getContext<RackContext>();
drain::Logger mout(ctx.log, __FILE__, __FUNCTION__);
mout.accept<LOG_WARNING>("new values: ", ctx.svgPanelConf.fontSizes);

drain::StringTools::replace(ctx.svgPanelConf.groupTitleSyntax, '/', '-', ctx.svgPanelConf.groupTitleSyntax);
mout.accept<LOG_WARNING>("new value: ", ctx.svgPanelConf.groupTitleSyntax);
}

};

class CmdGroup : public drain::BasicCommand {
class CmdImageTitle : public drain::BasicCommand {

public:

CmdGroup() : drain::BasicCommand(__FUNCTION__, "Set titles automatically") {
CmdImageTitle() : drain::BasicCommand(__FUNCTION__, "Set titles automatically") {
RackContext & ctx = getContext<RackContext>();
getParameters().link("syntax", ctx.svgPanelConf.groupNameSyntax, "example: '${what:date|%Y%m} ${NOD}'");
getParameters().link("title", ctx.svgPanelConf.imageTitle, "'TIME'|'LOCATION'|'GENERAL'");
}

CmdGroup(const CmdGroup & cmd) : drain::BasicCommand(cmd) {
CmdImageTitle(const CmdImageTitle & cmd) : drain::BasicCommand(cmd) {
getParameters().copyStruct(cmd.getParameters(), cmd, *this, drain::ReferenceMap::LINK);
//RackContext & ctx = getContext<RackContext>();
//getParameters().link("value", ctx.svgTitles);
}

void exec() const {

RackContext & ctx = getContext<RackContext>();
drain::Logger mout(ctx.log, __FILE__, __FUNCTION__);
}

drain::StringTools::replace(ctx.svgPanelConf.groupNameSyntax, '/', '-', ctx.svgPanelConf.groupNameSyntax);
};

class CmdTitle : public drain::BasicCommand {

mout.accept<LOG_WARNING>("new value: ", ctx.svgPanelConf.groupNameSyntax);
public:

CmdTitle() : drain::BasicCommand(__FUNCTION__, "Set titles automatically") {
RackContext & ctx = getContext<RackContext>();
getParameters().link("title", ctx.svgPanelConf.mainTitle, "<empty>|<string>|'auto'");
}

CmdTitle(const CmdTitle & cmd) : drain::BasicCommand(cmd) {
getParameters().copyStruct(cmd.getParameters(), cmd, *this, drain::ReferenceMap::LINK);
}

};

class CmdTitleBoxHeight : public drain::BasicCommand {

public:

CmdTitleBoxHeight() : drain::BasicCommand(__FUNCTION__, "Set title box height") {
RackContext & ctx = getContext<RackContext>();
getParameters().link("height", ctx.svgPanelConf.boxHeights.tuple(), "<mainTitle>,<groupTitle>,<imageTitle>");
}

//class CmdTitles : public drain::BasicCommand {
CmdTitleBoxHeight(const CmdTitleBoxHeight & cmd) : drain::BasicCommand(cmd) {
getParameters().copyStruct(cmd.getParameters(), cmd, *this, drain::ReferenceMap::LINK);
}

};


/*
class CmdTitles : public drain::SimpleCommand<std::string> {
public:
CmdTitles() : drain::SimpleCommand<std::string>(__FUNCTION__, "Set titles automatically", "[MAINTITLE|TIME|LOCATION|GENERAL]") {
// RackContext & ctx = getContext<RackContext>();
// getParameters().link("value", ctx.svgTitles);
}

CmdTitles(const CmdTitles & cmd) : SimpleCommand<std::string>(cmd) {
// CmdTitles(const CmdTitles & cmd) : drain::BasicCommand(cmd) {
// getParameters().copyStruct(cmd.getParameters(), cmd, *this, drain::ReferenceMap::LINK);
// RackContext & ctx = getContext<RackContext>();
// getParameters().link("value", ctx.svgTitles);
}
void exec() const {
Expand All @@ -412,8 +421,9 @@ class CmdTitles : public drain::SimpleCommand<std::string> {
}
};
*/


/*
class CmdGroupTitle : public drain::SimpleCommand<std::string> {
public:
Expand All @@ -429,11 +439,6 @@ class CmdGroupTitle : public drain::SimpleCommand<std::string> {
drain::Logger mout(ctx.log, __FILE__, __FUNCTION__);
drain::image::TreeSVG & headerGroup = RackSVG::getMainGroup(ctx); // ctx.getMainGroup(); // RackSVG::getMainGroup(ctx);
// drain::image::TreeSVG & headerGroup = RackSVG::getCurrentGroup(ctx);

// TreeSVG & headerGroup = mainGroup["headerGroup"](svg::GROUP);
// TreeSVG & headerRect = headerGroup["headerRect"](svg::RECT);
//headerGroup->setAlignAnchor("headerRect2");
TreeSVG & headerRect = headerGroup["headerRect"](svg::RECT); // +EXT!
headerRect->setHeight(70);
Expand Down Expand Up @@ -478,9 +483,9 @@ class CmdGroupTitle : public drain::SimpleCommand<std::string> {
// mout.special("FOO", rectTitle->getBoundingBox());
}
};
*/



/*
class CmdMainTitle : public drain::SimpleCommand<std::string> {
public:
Expand All @@ -495,11 +500,8 @@ class CmdMainTitle : public drain::SimpleCommand<std::string> {
drain::Logger mout(ctx.log, __FILE__, __FUNCTION__);
//drain::image::TreeSVG & mainGroup = RackSVG::getMainGroup(ctx);
drain::image::TreeSVG & mainGroup = ctx.svgTrack;
drain::image::TreeSVG & style = mainGroup[drain::image::svg::STYLE];
//BBoxSVG bbox;
// TreeUtilsSVG::computeBoundingBox(mainGroup, bbox);
RackSVG::addTitleBox(mainGroup, RackSVG::ElemClass::MAIN_TITLE);
Expand All @@ -510,6 +512,7 @@ class CmdMainTitle : public drain::SimpleCommand<std::string> {
}
};
*/

class CmdPanel : public drain::SimpleCommand<std::string> {

Expand Down Expand Up @@ -830,14 +833,14 @@ GraphicsModule::GraphicsModule(){ // : CommandSection("science"){
install<CmdLayout>(); // Could be "CmdMainAlign", but syntax is so different. (HORZ,INCR etc)
install<CmdAlign>();
install<CmdFontSizes>();
install<CmdGroup>();
install<CmdGroupTitle>().section = HIDDEN; // under construction
install<CmdGroupTitle>();
install<CmdTitle>();
// install<CmdGroupTitle>().section = HIDDEN; // under construction
install<CmdPanel>(); // .section = HIDDEN; // addSection(i);
install<CmdPanelTest>().section = HIDDEN; // addSection(i);
// install<CmdImageTitle>(); consider
install<CmdTitles>();
install<CmdMainTitle>();
install<CmdStyle>();
install<CmdTitleBoxHeight>();

};

Expand Down
Loading

0 comments on commit 041a0f2

Please sign in to comment.