From c542bcf317c4fffbdcfeee62e71efa96ee5de6ba Mon Sep 17 00:00:00 2001 From: James Alliban Date: Fri, 24 Jan 2014 16:47:51 +0000 Subject: [PATCH] Added coloured rectangles to graph text Avoids overlapping text --- of/Active Tripod/bin/Active_Tripod.lib | Bin 78700 -> 78700 bytes .../data/GUI/GRAPH GLOBALguiPagesettings.xml | 35 +++++++-- of/Active Tripod/src/gui/GUI.cpp | 12 ++- of/Active Tripod/src/visual/Scene.cpp | 70 ++++++++++++++++-- of/Active Tripod/src/visual/Scene.h | 4 + 5 files changed, 106 insertions(+), 15 deletions(-) diff --git a/of/Active Tripod/bin/Active_Tripod.lib b/of/Active Tripod/bin/Active_Tripod.lib index 5fbc4bbcdabbfbe14f3db4216b0a907a739ee69e..75a61908fae537c838e068dab6dd857e403ec2e0 100644 GIT binary patch delta 7034 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 delta 7034 zcmZ`-dvKK170-=J5;h@OvdQk|1qqOZggiEh;nAiFTD2-teALnzBw#z88Z9E@v`7)- z)Io|iW;{c#R4kN;2x@{r0Z}m^Dn)_d6EQ$w1S z+^_efr}w0%Id9Oo+HlQy2)71a9A7vk@^9n3DV5G&*txvM9tJ~Ie{gmbG%~S_`4Np4hJ-?^u;Uc%9T|_l^sJwsUkuA zs;eS5!R@OuG;!XlpAj*CU1^HeT@)7=7ax}t2eYPSfTy+C%HSo_TOEFV!JbySRpuud zJrke4hGbU0g)&>8zS0mLUyc9ER^P~%o<>63YGQz}A&hv&64oL|%QJjuxHTx-(}Z8^ zPF-_3U(_0eJJuj^;hITITpN`2BMoc+8rIpr7jK;VY=q4?K3X}RrW}9#@&I_&TEC3} z)7O##*3I{s0xELan#t=pz7r23VduJ=$&%*XNVxjBYhBYu7}GkQyMd@vyOHg(=Ob)L z*!sNnUb{qc;TK5Gn$-3}gbxLa+9HHVEdJTXu?V*!TYh^?Qk&Xilj>Q|H<7ms*0ZX%9am=pHmCt2c#mYEa19LaB-zv~(ZmAL~ z(&o;Y9+F$*g`-=$q_aAE)AeMK(xeGJn>bx~w@Suf?L>vTsssi$1;IBy37Y=xUZosG z9_?r;^7LPt0N%~aqv{3EFIDGb@Vs$zZ6tDdHcp+D;aT^CL!o3F`TzLpARO&7mTvi# zkwMxPqjG{0t3a{vSU*g7nZrg&(+(}%${uQ>vQ-n$TB2)Q6^Ly);G5xa%?vZYx@^CMmCmJ`|95COM^!_4&#U zG7A*^BL665)s>2WN0uL^?&P8)lb+q_C`5KW0IpK(2ZEU}@pWdW>VM*Ou6~ja>|%LB z`{rGY-9+%bK?EDQd2hIp)6wl`3WN>b{^8A7mTsnKzqHJ>w_+5%V+l@mPu$JfC4*nt z%?4xfsQyK-b^qR^ylx(u3xDk4Hc_~Rr@H%Y#?vBM9JC?#?LkZG_WY7N&!k`vRU!?% z%ifOu-@*Ttw+5b2i3Yi8s3ZV4Eb_vg@30v(vv$41MM;FQdznCk^Vz)|6XM9-XE_Yk zH|>kT`t$p^!1SVkh7>A8>U9Ma`k`rmiQ8*5drt4?GSH!RfqWLq<-n3ot{h4R-mK@t z?Z}Y@(8qm6A(>bh1#}eFx(^~@wVOwqC6X!mAKDqIkmbx- zMAnuMd1)aGNce~glEfN6Vlg6oYYDVj+;xy#a^S!JAi+PlhcfK|?_;ih$C~+v*%~4u?CQCCKMMPgP)+IN<5`V5 zTZm_m9T^*`WL>jX_5nP9sv;4xk8+UQAT}ELqa+_Y+#bZ^@k@Nrx6W}HD8CE3IlpcM z|B6Dsa1!JkV@H($+N9T#hwwaeLs@i>^c{0^#5>CIn5gK)^~4gbyNhAqcmQmuGzdk7 z<8OHGd&CU~x9F!4_1LpVKIQf!Z*M)p-a2XPJi!LiA~^Y^yC`fi5Uh8V$5ipmdL#pS zi!)%*DGrRf%C5aLPBHY5O)=S;(`X?rMmG8 z8ivE?pOJP2;uyMWb=m@Zdvc+^ArWTxaHWt-Z}!;T)|fHnb5`Qw&N6*}Tf;Eb9((~| z_Z7X&uN*^-l}h82u;U9qboSPoI*6+4<#;yriwWk;zVxWOUGKM?VUCV& z)S2ILb<#ygzT@=q)BTq3V<~%>!rRcqANXz>QJa2nMwERr7oFwlLvO#9v%C+emo?8Q z&pFE#gALo@o(loEtu7IsILBF}F6%$Xeh^{y`4~bk6F8_17yfsS^<8krgBlrFKx0+H zI+W_+5dLWroPUi}BNA^h50;C+;R41xfJmB&aMbWT}_+u<)0UwTg$ggsRw8}r91SplC?8GdR$<8$zayy^ z3c1M7x7!$Av?Nf-f`;o40)5Kx#{3MJnwKP>%!thgvgwvPLu^OyO_ZTb_K|yaPA2y% zVF}9VO=JM&M$4CS_-bm@g#p{B1_D}w>=tc?+KjUo3U zvo5z}*?XKyTa?AI)hZPynypdt2c_VF0tI-(lVv!Y-NhY`^0GLaWupM^oO~=t1Yp^p zQe~y%viiJ)04o>g2tru>Ucjc%`^g0qla;xQlu@S_&85CSdn1+3wxG%SLHMIGc}GjO ztj*&{D;6w?c90qG z^p2T~4B0Ysq~Hg#(jNUSG=+Gi5WjR3TGB_ z9H_Q*aJmb*4CS2B^t8H6sY;hsB_a!a*LtA+zI3^~h&5`qpgdYcpGPMuUO)4OWLa@E z-`&N;cZK51U_K8_SQe1mEic)FwWn)6Q#0nl_4BnZbO+=5gqhGqT_mfj#jxlPXLzVToE7WCLbjG_3F e^`+JS|Hcw66oQ#Ic;pAwg10.779605269 0.059210528 - - 4 - Size - 29.424343109 - 4 Decimal points 0 @@ -39,6 +34,11 @@ Decimal points 1 2.332236767 + + 4 + Size + 28.536182404 + 4 Red @@ -59,3 +59,28 @@ Alpha 255.000000000 + + 4 + Graph Text Rect Margin + 9.394737244 + + + 4 + Graph Text RectRed + 44.457237244 + + + 4 + Graph Text RectGreen + 47.812500000 + + + 4 + Graph Text RectBlue + 46.973682404 + + + 4 + Graph Text RectAlpha + 140.921051025 + diff --git a/of/Active Tripod/src/gui/GUI.cpp b/of/Active Tripod/src/gui/GUI.cpp index ffb96ed..0f8b14b 100644 --- a/of/Active Tripod/src/gui/GUI.cpp +++ b/of/Active Tripod/src/gui/GUI.cpp @@ -72,15 +72,23 @@ void GUI::addGraphGlobalGUI() gui->addSpacer(length, 1); gui->addRangeSlider("Graph X begin/end (percent)", 0, 1, &AbstractGraph::minGraphPercent, &AbstractGraph::maxGraphPercent, length, dim); + gui->addSpacer(length, 1); + gui->addSlider("Decimal points 0", 1, 10, &app->scene.valDecimalPoints0, length, dim); + gui->addSlider("Decimal points 1", 1, 10, &app->scene.valDecimalPoints1, length, dim); + gui->addLabel("GRAPH TEXT"); gui->addSpacer(length, 1); gui->addSlider("Size", 5, 50, &app->scene.graphTextSize, length, dim); - gui->addSlider("Decimal points 0", 1, 10, &app->scene.valDecimalPoints0, length, dim); - gui->addSlider("Decimal points 1", 1, 10, &app->scene.valDecimalPoints1, length, dim); gui->addSlider("Red", 0, 255, &app->scene.graphTextColour[0], length, dim); gui->addSlider("Green", 0, 255, &app->scene.graphTextColour[1], length, dim); gui->addSlider("Blue", 0, 255, &app->scene.graphTextColour[2], length, dim); gui->addSlider("Alpha", 0, 255, &app->scene.graphTextColour[3], length, dim); + gui->addSpacer(length, 1); + gui->addSlider("Graph Text Rect Margin", 1, 30, &app->scene.hudTextRectMargin, length, dim); + gui->addSlider("Graph Text RectRed", 0, 255, &app->scene.graphTextRectCol[0], length, dim); + gui->addSlider("Graph Text RectGreen", 0, 255, &app->scene.graphTextRectCol[1], length, dim); + gui->addSlider("Graph Text RectBlue", 0, 255, &app->scene.graphTextRectCol[2], length, dim); + gui->addSlider("Graph Text RectAlpha", 0, 255, &app->scene.graphTextRectCol[3], length, dim); ofAddListener(gui->newGUIEvent, this, &GUI::graphGlobalGUIEvent); finaliseCanvas(gui, true); diff --git a/of/Active Tripod/src/visual/Scene.cpp b/of/Active Tripod/src/visual/Scene.cpp index 05f4581..6a0e7ed 100644 --- a/of/Active Tripod/src/visual/Scene.cpp +++ b/of/Active Tripod/src/visual/Scene.cpp @@ -93,14 +93,34 @@ void Scene::drawGraphValues() text.setAlignment(FTGL_ALIGN_LEFT); ofSetColor(graphTextColour[0], graphTextColour[1], graphTextColour[2], graphTextColour[3]); text.setSize(graphTextSize); - text.drawString( - stringVal0 + " " + activeGraph->publisher0Data.back().unitMeasure, - val0.x + 10, - val0.y); - text.drawString( - stringVal1 + " " + activeGraph->publisher1Data.back().unitMeasure, - val1.x + 10, - val1.y); + + string copy0 = stringVal0 + " " + activeGraph->publisher0Data.back().unitMeasure; + bool isDescender = doesStringContainDescender(copy0); + ofRectangle rect = text.getStringBoundingBox(copy0, val0.x + 10, val0.y); + ofSetColor(graphTextRectCol[0], graphTextRectCol[1], graphTextRectCol[2], graphTextRectCol[3]); + + ofRect(rect.x - hudTextRectMargin, + rect.y - rect.height - hudTextRectMargin - ((isDescender) ? text.getDescender() : 0), + rect.width + (hudTextRectMargin*2), + rect.height + (hudTextRectMargin*2) - ((isDescender) ? text.getDescender()*0.5 : 0)); + + ofSetColor(graphTextColour[0], graphTextColour[1], graphTextColour[2], graphTextColour[3]); + text.drawString(copy0, val0.x + 10, val0.y); + + + string copy1 = stringVal1 + " " + activeGraph->publisher1Data.back().unitMeasure; + isDescender = doesStringContainDescender(copy1); + rect = text.getStringBoundingBox(copy1, val1.x + 10, val1.y); + ofSetColor(graphTextRectCol[0], graphTextRectCol[1], graphTextRectCol[2], graphTextRectCol[3]); + + ofRect(rect.x - hudTextRectMargin, + rect.y - rect.height - hudTextRectMargin - ((isDescender) ? text.getDescender() : 0), + rect.width + (hudTextRectMargin*2), + rect.height + (hudTextRectMargin*2) - ((isDescender) ? text.getDescender()*0.5 : 0)); + + ofSetColor(graphTextColour[0], graphTextColour[1], graphTextColour[2], graphTextColour[3]); + text.drawString(copy1, val1.x + 10, val1.y); + ofPopStyle(); } @@ -396,4 +416,38 @@ string Scene::reduceDecimalCount(string num, int maxDecimal) { return num; } +} + + + +bool Scene::doesStringContainDescender(string copy) +{ + //if (letter == 'b' || + // letter == 'd' || + // letter == 'f' || + // letter == 'h' || + // letter == 'i' || + // letter == 'j' || + // letter == 'k' || + // letter == 'l' || + // letter == 't' || + // ((int)letter > 32 && (int)letter < 91)) + //{ + // doesTextContainAscender = true; + //} + + for (int i = 0; i < copy.size(); i++) + { + char letter = copy[i]; + //printf("letter:%c\n", letter); + if (letter == 'g' || + letter == 'j' || + letter == 'p' || + letter == 'q' || + letter == 'y') + { + return true; + } + } + return false; } \ No newline at end of file diff --git a/of/Active Tripod/src/visual/Scene.h b/of/Active Tripod/src/visual/Scene.h index 967bd13..34b7d94 100644 --- a/of/Active Tripod/src/visual/Scene.h +++ b/of/Active Tripod/src/visual/Scene.h @@ -29,6 +29,7 @@ public: void keyPressed(int key); string addCommasToNumberString(string num); string reduceDecimalCount(string num, int maxDecimal); + bool doesStringContainDescender(string copy); BarGraph barGraph; BodyGraph bodyGraph; @@ -87,6 +88,9 @@ public: string brStr; float averageAmount; + float hudTextRectMargin; + float graphTextRectCol[4]; + bool isClearOnNewMinMax; // text colour boxes