It is currently June 28th, 2024, 6:33 pm

Convert <svg path> from html and display in shape meter

Get help with creating, editing & fixing problems with skins
User avatar
Yincognito
Rainmeter Sage
Posts: 7555
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Convert <svg path> from html and display in shape meter

Post by Yincognito »

emp00 wrote: June 18th, 2024, 10:13 pm Got it Yincognito and balala - appreciate your feedback!

I have just spent another 3 hours and completely reworked my approach, in short: no more Shape meters. Found a good solution with excellent performance as well, and it's actually none of your proposed ones. Will report here in the coming days when I have more time.

For now IT WORKS - damnit :-)

... and it involved quite a bit of "hardcore" regex which I figured out all by myself, @Yincognito. I'm getting more and more used to regex'ing, and I'm liking it as well. Would never have gotten this far without the support on this forum. Stay tuned for my "solution", will share it here.
You made me curious, cause I have the habit to cover all possibilities, haha! Looking forward to see what you've come up with in the following days (converting the svg to an image?), but in any case, I'm really glad you made it! :great:

Yeah, it's not like I want to mention regex on every occasion, but it is indeed necessary when you work more complex stuff with strings. Once you understand how something works, it's obvious you start to like it - especially if you're the one that wrote it. :thumbup:
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
User avatar
balala
Rainmeter Sage
Posts: 16358
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Convert <svg path> from html and display in shape meter

Post by balala »

emp00 wrote: June 18th, 2024, 10:13 pm I have just spent another 3 hours and completely reworked my approach, in short: no more Shape meters. Found a good solution with excellent performance as well, and it's actually none of your proposed ones.
emp00 wrote: June 18th, 2024, 10:13 pm Stay tuned for my "solution", will share it here.
Glad you got it working and I wait for your solution, because I'm extremely curious what you've replaced a Shape meter with.
User avatar
Yincognito
Rainmeter Sage
Posts: 7555
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Convert <svg path> from html and display in shape meter

Post by Yincognito »

emp00 wrote: June 18th, 2024, 10:13 pmFound a good solution with excellent performance as well, and it's actually none of your proposed ones.
Yincognito wrote: June 18th, 2024, 8:54 amjust use the entire <rect ...></rect> part as the pattern of a sole Substitute part (i.e. without trying to substitute only pieces of it), then do your thing through correspondingly using the suited order for the values that you capture, e.g. \1 \3 \2 \4 \5 \6, where the captures, from \1 to \6, are the X, W, Y, H, Fill Color and StrokeWidth values. Obviously, you can easily insert the needed parts between those values in the replacement, as per the Rectangle Shape syntax.

The 1st tricky thing here is another one: numbering the Shape options. Regex can't count by itself and there's no numbering of <rect>-s that you can use from the input string, so this is the actual challenge. There are some creative (or hacking, whatever you want to call them) ways to deal with that
In the meantime, since I kinda like this project, here's one way I was thinking to achieve the graph in 2 short measures, just for fun...

[SkinPath]\Html - All Rects.txt:

Code: Select all

<rect x=0.6265624999999966 width=2.92395833333334 y=0 height=6.197478991596644 style=fill:rgb(243,115,32);opacity:1></rect><rect x=4.80364583333333 width=2.92395833333334 y=0 height=7.457983193277312 style=fill:rgb(243,115,32);opacity:1></rect><rect x=8.980729166666665 width=2.92395833333334 y=0 height=7.142857142857145 style=fill:rgb(243,115,32);opacity:1></rect><rect x=13.157812499999999 width=2.92395833333334 y=0 height=6.092436974789922 style=fill:rgb(243,115,32);opacity:1></rect><rect x=17.33489583333333 width=2.92395833333334 y=0 height=3.781512605042017 style=fill:rgb(243,115,32);opacity:1></rect><rect x=21.511979166666663 width=2.92395833333334 y=0 height=3.781512605042017 style=fill:rgb(243,115,32);opacity:1></rect><rect x=25.689062499999995 width=2.92395833333334 y=0 height=3.361344537815128 style=fill:rgb(243,115,32);opacity:1></rect><rect x=29.86614583333333 width=2.92395833333334 y=0 height=3.2563025210084056 style=fill:rgb(243,115,32);opacity:1></rect><rect x=34.04322916666666 width=2.92395833333334 y=0 height=3.1512605042016832 style=fill:rgb(243,115,32);opacity:1></rect><rect x=38.22031249999999 width=2.92395833333334 y=0 height=3.361344537815128 style=fill:rgb(243,115,32);opacity:1></rect><rect x=42.39739583333333 width=2.92395833333334 y=0 height=3.361344537815128 style=fill:rgb(243,115,32);opacity:1></rect><rect x=46.57447916666666 width=2.92395833333334 y=0 height=5.147058823529408 style=fill:rgb(243,115,32);opacity:1></rect><rect x=50.7515625 width=2.92395833333334 y=0 height=4.936974789915963 style=fill:rgb(243,115,32);opacity:1></rect><rect x=54.92864583333333 width=2.92395833333334 y=0 height=4.936974789915963 style=fill:rgb(243,115,32);opacity:1></rect><rect x=59.105729166666656 width=2.92395833333334 y=0 height=4.621848739495796 style=fill:rgb(243,115,32);opacity:1></rect><rect x=63.2828125 width=2.92395833333334 y=0 height=3.5714285714285725 style=fill:rgb(243,115,32);opacity:1></rect><rect x=67.45989583333333 width=2.92395833333334 y=0 height=3.046218487394961 style=fill:rgb(243,115,32);opacity:1></rect><rect x=71.63697916666666 width=2.92395833333334 y=0 height=3.046218487394961 style=fill:rgb(243,115,32);opacity:1></rect><rect x=75.8140625 width=2.92395833333334 y=0 height=3.2563025210084056 style=fill:rgb(243,115,32);opacity:1></rect><rect x=79.99114583333333 width=2.92395833333334 y=0 height=3.2563025210084056 style=fill:rgb(243,115,32);opacity:1></rect><rect x=84.16822916666666 width=2.92395833333334 y=0 height=3.046218487394961 style=fill:rgb(243,115,32);opacity:1></rect><rect x=88.3453125 width=2.92395833333334 y=0 height=3.1512605042016832 style=fill:rgb(243,115,32);opacity:1></rect><rect x=92.52239583333333 width=2.92395833333334 y=0 height=3.1512605042016832 style=fill:rgb(243,115,32);opacity:1></rect><rect x=96.69947916666666 width=2.92395833333334 y=0 height=4.621848739495796 style=fill:rgb(243,115,32);opacity:1></rect><rect x=100.87656249999999 width=2.92395833333334 y=0 height=4.831932773109241 style=fill:rgb(243,115,32);opacity:1></rect><rect x=105.05364583333333 width=2.92395833333334 y=0 height=4.516806722689074 style=fill:rgb(243,115,32);opacity:1></rect><rect x=109.23072916666668 width=2.92395833333334 y=0 height=4.621848739495796 style=fill:rgb(243,115,32);opacity:1></rect><rect x=113.40781249999999 width=2.92395833333334 y=0 height=3.2563025210084056 style=fill:rgb(243,115,32);opacity:1></rect><rect x=117.58489583333333 width=2.92395833333334 y=0 height=3.1512605042016832 style=fill:rgb(243,115,32);opacity:1></rect><rect x=121.76197916666668 width=2.92395833333334 y=0 height=1.0504201680672232 style=fill:rgb(243,115,32);opacity:1></rect><rect x=125.93906249999999 width=2.92395833333334 y=0 height=1.36554621848739 style=fill:rgb(243,115,32);opacity:1></rect><rect x=130.11614583333332 width=2.92395833333334 y=0 height=0.8403361344537785 style=fill:rgb(243,115,32);opacity:1></rect><rect x=134.29322916666666 width=2.92395833333334 y=0 height=1.1554621848739455 style=fill:rgb(243,115,32);opacity:1></rect><rect x=138.47031249999998 width=2.92395833333334 y=0 height=2.5210084033613493 style=fill:rgb(243,115,32);opacity:1></rect><rect x=142.64739583333332 width=2.92395833333334 y=0 height=1.5756302521008347 style=fill:rgb(243,115,32);opacity:1></rect><rect x=146.82447916666666 width=2.92395833333334 y=0 height=3.046218487394961 style=fill:rgb(243,115,32);opacity:1></rect><rect x=151.00156249999998 width=2.92395833333334 y=0 height=3.46638655462185 style=fill:rgb(243,115,32);opacity:1></rect><rect x=155.17864583333332 width=2.92395833333334 y=0 height=3.9915966386554618 style=fill:rgb(243,115,32);opacity:1></rect><rect x=159.35572916666666 width=2.92395833333334 y=0 height=3.046218487394961 style=fill:rgb(243,115,32);opacity:1></rect><rect x=163.53281249999998 width=2.92395833333334 y=0 height=3.46638655462185 style=fill:rgb(243,115,32);opacity:1></rect><rect x=167.70989583333332 width=2.92395833333334 y=0 height=9.033613445378148 style=fill:rgb(243,115,32);opacity:1></rect><rect x=171.88697916666666 width=2.92395833333334 y=0 height=3.046218487394961 style=fill:rgb(243,115,32);opacity:1></rect><rect x=176.06406249999998 width=2.92395833333334 y=0 height=7.9831932773109235 style=fill:rgb(243,115,32);opacity:1></rect><rect x=180.24114583333332 width=2.92395833333334 y=0 height=1.680672268907557 style=fill:rgb(243,115,32);opacity:1></rect><rect x=184.41822916666666 width=2.92395833333334 y=0 height=6.827731092436978 style=fill:rgb(243,115,32);opacity:1></rect><rect x=188.59531249999998 width=2.92395833333334 y=0 height=3.46638655462185 style=fill:rgb(243,115,32);opacity:1></rect><rect x=192.77239583333332 width=2.92395833333334 y=0 height=3.5714285714285725 style=fill:rgb(243,115,32);opacity:1></rect><rect x=196.94947916666666 width=2.92395833333334 y=0 height=5.357142857142852 style=fill:rgb(243,115,32);opacity:1></rect><rect x=201.1265625 width=2.92395833333334 y=0 height=8.193277310924369 style=fill:rgb(243,115,32);opacity:1></rect><rect x=205.30364583333332 width=2.92395833333334 y=0 height=8.298319327731091 style=fill:rgb(243,115,32);opacity:1></rect><rect x=209.48072916666663 width=2.92395833333334 y=0 height=11.134453781512606 style=fill:rgb(243,115,32);opacity:1></rect><rect x=213.6578125 width=2.92395833333334 y=0 height=6.827731092436978 style=fill:rgb(243,115,32);opacity:1></rect><rect x=217.83489583333332 width=2.92395833333334 y=0 height=6.197478991596644 style=fill:rgb(243,115,32);opacity:1></rect><rect x=222.01197916666663 width=2.92395833333334 y=0 height=3.9915966386554618 style=fill:rgb(243,115,32);opacity:1></rect><rect x=226.1890625 width=2.92395833333334 y=0 height=3.9915966386554618 style=fill:rgb(243,115,32);opacity:1></rect><rect x=230.36614583333332 width=2.92395833333334 y=0 height=3.676470588235295 style=fill:rgb(243,115,32);opacity:1></rect><rect x=234.54322916666663 width=2.92395833333334 y=0 height=3.361344537815128 style=fill:rgb(243,115,32);opacity:1></rect><rect x=238.7203125 width=2.92395833333334 y=0 height=17.75210084033614 style=fill:rgb(243,115,32);opacity:1></rect><rect x=242.89739583333332 width=2.92395833333334 y=0 height=2.10084033613446 style=fill:rgb(243,115,32);opacity:1></rect><rect x=247.07447916666663 width=2.92395833333334 y=0 height=4.516806722689074 style=fill:rgb(243,115,32);opacity:1></rect><rect x=251.2515625 width=2.92395833333334 y=0 height=9.033613445378148 style=fill:rgb(243,115,32);opacity:1></rect><rect x=255.42864583333332 width=2.92395833333334 y=0 height=7.563025210084034 style=fill:rgb(243,115,32);opacity:1></rect><rect x=259.60572916666666 width=2.92395833333334 y=0 height=12.605042016806719 style=fill:rgb(243,115,32);opacity:1></rect><rect x=263.78281250000003 width=2.92395833333334 y=0 height=8.088235294117647 style=fill:rgb(243,115,32);opacity:1></rect><rect x=267.95989583333335 width=2.92395833333334 y=0 height=6.197478991596644 style=fill:rgb(243,115,32);opacity:1></rect><rect x=272.13697916666666 width=2.92395833333334 y=0 height=6.3025210084033665 style=fill:rgb(243,115,32);opacity:1></rect><rect x=276.31406250000003 width=2.92395833333334 y=0 height=6.197478991596644 style=fill:rgb(243,115,32);opacity:1></rect><rect x=280.49114583333335 width=2.92395833333334 y=0 height=5.882352941176477 style=fill:rgb(243,115,32);opacity:1></rect><rect x=284.66822916666666 width=2.92395833333334 y=0 height=3.676470588235295 style=fill:rgb(243,115,32);opacity:1></rect><rect x=288.84531250000003 width=2.92395833333334 y=0 height=3.46638655462185 style=fill:rgb(243,115,32);opacity:1></rect><rect x=293.02239583333335 width=2.92395833333334 y=0 height=3.5714285714285725 style=fill:rgb(243,115,32);opacity:1></rect><rect x=297.19947916666666 width=2.92395833333334 y=0 height=3.9915966386554618 style=fill:rgb(243,115,32);opacity:1></rect><rect x=301.37656250000003 width=2.92395833333334 y=0 height=5.672268907563019 style=fill:rgb(243,115,32);opacity:1></rect><rect x=305.55364583333335 width=2.92395833333334 y=0 height=5.777310924369742 style=fill:rgb(243,115,32);opacity:1></rect><rect x=309.73072916666666 width=2.92395833333334 y=0 height=7.878151260504201 style=fill:rgb(243,115,32);opacity:1></rect><rect x=313.90781250000003 width=2.92395833333334 y=0 height=7.457983193277312 style=fill:rgb(243,115,32);opacity:1></rect><rect x=318.08489583333335 width=2.92395833333334 y=0 height=5.9873949579831995 style=fill:rgb(243,115,32);opacity:1></rect><rect x=322.26197916666666 width=2.92395833333334 y=0 height=5.25210084033613 style=fill:rgb(243,115,32);opacity:1></rect><rect x=326.43906250000003 width=2.92395833333334 y=0 height=5.147058823529408 style=fill:rgb(243,115,32);opacity:1></rect><rect x=330.61614583333335 width=2.92395833333334 y=0 height=4.936974789915963 style=fill:rgb(243,115,32);opacity:1></rect><rect x=334.79322916666666 width=2.92395833333334 y=0 height=5.042016806722685 style=fill:rgb(243,115,32);opacity:1></rect><rect x=338.97031250000003 width=2.92395833333334 y=0 height=5.147058823529408 style=fill:rgb(243,115,32);opacity:1></rect><rect x=343.14739583333335 width=2.92395833333334 y=0 height=4.0966386554621845 style=fill:rgb(243,115,32);opacity:1></rect><rect x=347.32447916666666 width=2.92395833333334 y=0 height=9.873949579831939 style=fill:rgb(243,115,32);opacity:1></rect><rect x=351.50156250000003 width=2.92395833333334 y=0 height=5.147058823529408 style=fill:rgb(243,115,32);opacity:1></rect><rect x=355.67864583333335 width=2.92395833333334 y=0 height=4.726890756302518 style=fill:rgb(243,115,32);opacity:1></rect><rect x=359.85572916666666 width=2.92395833333334 y=0 height=4.936974789915963 style=fill:rgb(243,115,32);opacity:1></rect><rect x=364.03281250000003 width=2.92395833333334 y=0 height=3.1512605042016832 style=fill:rgb(243,115,32);opacity:1></rect><rect x=368.20989583333335 width=2.92395833333334 y=0 height=5.882352941176477 style=fill:rgb(243,115,32);opacity:1></rect><rect x=372.38697916666666 width=2.92395833333334 y=0 height=10.609243697478995 style=fill:rgb(243,115,32);opacity:1></rect><rect x=376.56406250000003 width=2.92395833333334 y=0 height=7.563025210084034 style=fill:rgb(243,115,32);opacity:1></rect><rect x=380.74114583333335 width=2.92395833333334 y=0 height=0 style=fill:rgb(243,115,32);opacity:1></rect><rect x=384.91822916666666 width=2.92395833333334 y=0 height=0 style=fill:rgb(243,115,32);opacity:1></rect><rect x=389.09531250000003 width=2.92395833333334 y=0 height=0 style=fill:rgb(243,115,32);opacity:1></rect><rect x=393.27239583333335 width=2.92395833333334 y=0 height=0 style=fill:rgb(243,115,32);opacity:1></rect><rect x=397.44947916666666 width=2.92395833333334 y=0 height=0 style=fill:rgb(243,115,32);opacity:1></rect><rect x=0.6265624999999966 width=2.92395833333334 y=6.197478991596644 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=4.80364583333333 width=2.92395833333334 y=7.457983193277312 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=8.980729166666665 width=2.92395833333334 y=7.142857142857145 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=13.157812499999999 width=2.92395833333334 y=6.092436974789922 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=17.33489583333333 width=2.92395833333334 y=3.781512605042017 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=21.511979166666663 width=2.92395833333334 y=3.781512605042017 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=25.689062499999995 width=2.92395833333334 y=3.361344537815128 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=29.86614583333333 width=2.92395833333334 y=3.2563025210084056 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=34.04322916666666 width=2.92395833333334 y=3.1512605042016832 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=38.22031249999999 width=2.92395833333334 y=3.361344537815128 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=42.39739583333333 width=2.92395833333334 y=3.361344537815128 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=46.57447916666666 width=2.92395833333334 y=5.147058823529408 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=50.7515625 width=2.92395833333334 y=4.936974789915963 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=54.92864583333333 width=2.92395833333334 y=4.936974789915963 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=59.105729166666656 width=2.92395833333334 y=4.621848739495796 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=63.2828125 width=2.92395833333334 y=3.5714285714285725 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=67.45989583333333 width=2.92395833333334 y=3.046218487394961 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=71.63697916666666 width=2.92395833333334 y=3.046218487394961 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=75.8140625 width=2.92395833333334 y=3.2563025210084056 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=79.99114583333333 width=2.92395833333334 y=3.2563025210084056 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=84.16822916666666 width=2.92395833333334 y=3.046218487394961 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=88.3453125 width=2.92395833333334 y=3.1512605042016832 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=92.52239583333333 width=2.92395833333334 y=3.1512605042016832 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=96.69947916666666 width=2.92395833333334 y=4.621848739495796 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=100.87656249999999 width=2.92395833333334 y=4.831932773109241 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=105.05364583333333 width=2.92395833333334 y=4.516806722689074 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=109.23072916666668 width=2.92395833333334 y=4.621848739495796 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=113.40781249999999 width=2.92395833333334 y=3.2563025210084056 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=117.58489583333333 width=2.92395833333334 y=3.1512605042016832 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=121.76197916666668 width=2.92395833333334 y=1.0504201680672232 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=125.93906249999999 width=2.92395833333334 y=1.36554621848739 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=130.11614583333332 width=2.92395833333334 y=0.8403361344537785 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=134.29322916666666 width=2.92395833333334 y=1.1554621848739455 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=138.47031249999998 width=2.92395833333334 y=2.5210084033613493 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=142.64739583333332 width=2.92395833333334 y=1.5756302521008347 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=146.82447916666666 width=2.92395833333334 y=3.046218487394961 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=151.00156249999998 width=2.92395833333334 y=3.46638655462185 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=155.17864583333332 width=2.92395833333334 y=3.9915966386554618 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=159.35572916666666 width=2.92395833333334 y=3.046218487394961 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=163.53281249999998 width=2.92395833333334 y=3.46638655462185 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=167.70989583333332 width=2.92395833333334 y=9.033613445378148 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=171.88697916666666 width=2.92395833333334 y=3.046218487394961 height=3.361344537815128 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=176.06406249999998 width=2.92395833333334 y=7.9831932773109235 height=26.995798319327733 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=180.24114583333332 width=2.92395833333334 y=1.680672268907557 height=29.201680672268914 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=184.41822916666666 width=2.92395833333334 y=6.827731092436978 height=40.12605042016806 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=188.59531249999998 width=2.92395833333334 y=3.46638655462185 height=42.226890756302524 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=192.77239583333332 width=2.92395833333334 y=3.5714285714285725 height=40.12605042016806 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=196.94947916666666 width=2.92395833333334 y=5.357142857142852 height=30.567226890756302 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=201.1265625 width=2.92395833333334 y=8.193277310924369 height=31.407563025210084 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=205.30364583333332 width=2.92395833333334 y=8.298319327731091 height=38.02521008403362 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=209.48072916666663 width=2.92395833333334 y=11.134453781512606 height=57.24789915966387 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=213.6578125 width=2.92395833333334 y=6.827731092436978 height=55.357142857142854 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=217.83489583333332 width=2.92395833333334 y=6.197478991596644 height=61.1344537815126 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=222.01197916666663 width=2.92395833333334 y=3.9915966386554618 height=70.58823529411764 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=226.1890625 width=2.92395833333334 y=3.9915966386554618 height=69.74789915966386 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=230.36614583333332 width=2.92395833333334 y=3.676470588235295 height=75.52521008403362 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=234.54322916666663 width=2.92395833333334 y=3.361344537815128 height=47.58403361344538 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=238.7203125 width=2.92395833333334 y=17.75210084033614 height=58.71848739495799 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=242.89739583333332 width=2.92395833333334 y=2.10084033613446 height=46.95378151260504 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=247.07447916666663 width=2.92395833333334 y=4.516806722689074 height=30.88235294117647 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=251.2515625 width=2.92395833333334 y=9.033613445378148 height=25.00000000000001 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=255.42864583333332 width=2.92395833333334 y=7.563025210084034 height=42.436974789915965 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=259.60572916666666 width=2.92395833333334 y=12.605042016806719 height=54.20168067226891 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=263.78281250000003 width=2.92395833333334 y=8.088235294117647 height=24.894957983193272 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=267.95989583333335 width=2.92395833333334 y=6.197478991596644 height=32.8781512605042 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=272.13697916666666 width=2.92395833333334 y=6.3025210084033665 height=23.634453781512605 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=276.31406250000003 width=2.92395833333334 y=6.197478991596644 height=35.50420168067227 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=280.49114583333335 width=2.92395833333334 y=5.882352941176477 height=36.659663865546214 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=284.66822916666666 width=2.92395833333334 y=3.676470588235295 height=23.73949579831933 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=288.84531250000003 width=2.92395833333334 y=3.46638655462185 height=34.66386554621849 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=293.02239583333335 width=2.92395833333334 y=3.5714285714285725 height=19.01260504201681 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=297.19947916666666 width=2.92395833333334 y=3.9915966386554618 height=5.987394957983199 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=301.37656250000003 width=2.92395833333334 y=5.672268907563019 height=5.462184873949587 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=305.55364583333335 width=2.92395833333334 y=5.777310924369742 height=7.668067226890756 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=309.73072916666666 width=2.92395833333334 y=7.878151260504201 height=4.621848739495795 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=313.90781250000003 width=2.92395833333334 y=7.457983193277312 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=318.08489583333335 width=2.92395833333334 y=5.9873949579831995 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=322.26197916666666 width=2.92395833333334 y=5.25210084033613 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=326.43906250000003 width=2.92395833333334 y=5.147058823529408 height=0.10504201680672232 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=330.61614583333335 width=2.92395833333334 y=4.936974789915963 height=2.941176470588238 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=334.79322916666666 width=2.92395833333334 y=5.042016806722685 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=338.97031250000003 width=2.92395833333334 y=5.147058823529408 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=343.14739583333335 width=2.92395833333334 y=4.0966386554621845 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=347.32447916666666 width=2.92395833333334 y=9.873949579831939 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=351.50156250000003 width=2.92395833333334 y=5.147058823529408 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=355.67864583333335 width=2.92395833333334 y=4.726890756302518 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=359.85572916666666 width=2.92395833333334 y=4.936974789915963 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=364.03281250000003 width=2.92395833333334 y=3.1512605042016832 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=368.20989583333335 width=2.92395833333334 y=5.882352941176477 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=372.38697916666666 width=2.92395833333334 y=10.609243697478995 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=376.56406250000003 width=2.92395833333334 y=7.563025210084034 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=380.74114583333335 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=384.91822916666666 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=389.09531250000003 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=393.27239583333335 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=397.44947916666666 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(101,101,105)></rect><rect x=0.6265624999999966 width=2.92395833333334 y=6.197478991596644 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=4.80364583333333 width=2.92395833333334 y=7.457983193277312 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=8.980729166666665 width=2.92395833333334 y=7.142857142857145 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=13.157812499999999 width=2.92395833333334 y=6.092436974789922 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=17.33489583333333 width=2.92395833333334 y=3.781512605042017 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=21.511979166666663 width=2.92395833333334 y=3.781512605042017 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=25.689062499999995 width=2.92395833333334 y=3.361344537815128 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=29.86614583333333 width=2.92395833333334 y=3.2563025210084056 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=34.04322916666666 width=2.92395833333334 y=3.1512605042016832 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=38.22031249999999 width=2.92395833333334 y=3.361344537815128 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=42.39739583333333 width=2.92395833333334 y=3.361344537815128 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=46.57447916666666 width=2.92395833333334 y=5.147058823529408 height=0.31512605042016695 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=50.7515625 width=2.92395833333334 y=4.936974789915963 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=54.92864583333333 width=2.92395833333334 y=4.936974789915963 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=59.105729166666656 width=2.92395833333334 y=4.621848739495796 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=63.2828125 width=2.92395833333334 y=3.5714285714285725 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=67.45989583333333 width=2.92395833333334 y=3.046218487394961 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=71.63697916666666 width=2.92395833333334 y=3.046218487394961 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=75.8140625 width=2.92395833333334 y=3.2563025210084056 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=79.99114583333333 width=2.92395833333334 y=3.2563025210084056 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=84.16822916666666 width=2.92395833333334 y=3.046218487394961 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=88.3453125 width=2.92395833333334 y=3.1512605042016832 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=92.52239583333333 width=2.92395833333334 y=3.1512605042016832 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=96.69947916666666 width=2.92395833333334 y=4.621848739495796 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=100.87656249999999 width=2.92395833333334 y=4.831932773109241 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=105.05364583333333 width=2.92395833333334 y=4.516806722689074 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=109.23072916666668 width=2.92395833333334 y=4.621848739495796 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=113.40781249999999 width=2.92395833333334 y=3.2563025210084056 height=0.6302521008403339 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=117.58489583333333 width=2.92395833333334 y=3.1512605042016832 height=1.9957983193277244 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=121.76197916666668 width=2.92395833333334 y=1.0504201680672232 height=6.197478991596644 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=125.93906249999999 width=2.92395833333334 y=1.36554621848739 height=6.197478991596644 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=130.11614583333332 width=2.92395833333334 y=0.8403361344537785 height=7.142857142857145 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=134.29322916666666 width=2.92395833333334 y=1.1554621848739455 height=8.508403361344536 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=138.47031249999998 width=2.92395833333334 y=2.5210084033613493 height=15.441176470588236 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=142.64739583333332 width=2.92395833333334 y=1.5756302521008347 height=18.69747899159664 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=146.82447916666666 width=2.92395833333334 y=3.046218487394961 height=19.537815126050422 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=151.00156249999998 width=2.92395833333334 y=3.46638655462185 height=16.701680672268907 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=155.17864583333332 width=2.92395833333334 y=3.9915966386554618 height=19.432773109243698 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=159.35572916666666 width=2.92395833333334 y=3.046218487394961 height=26.26050420168068 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=163.53281249999998 width=2.92395833333334 y=3.46638655462185 height=31.72268907563025 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=167.70989583333332 width=2.92395833333334 y=9.033613445378148 height=30.252100840336137 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=171.88697916666666 width=2.92395833333334 y=6.407563025210089 height=30.462184873949568 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=176.06406249999998 width=2.92395833333334 y=34.97899159663866 height=7.878151260504197 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=180.24114583333332 width=2.92395833333334 y=30.88235294117647 height=1.680672268907557 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=184.41822916666666 width=2.92395833333334 y=46.95378151260504 height=1.99579831932774 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=188.59531249999998 width=2.92395833333334 y=45.69327731092437 height=0.6302521008403374 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=192.77239583333332 width=2.92395833333334 y=43.69747899159663 height=0.3151260504201687 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=196.94947916666666 width=2.92395833333334 y=35.924369747899156 height=0.8403361344537785 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=201.1265625 width=2.92395833333334 y=39.60084033613445 height=0.42016806722688926 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=205.30364583333332 width=2.92395833333334 y=46.32352941176471 height=0.5252100840336098 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=209.48072916666663 width=2.92395833333334 y=68.38235294117648 height=0.735294117647058 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=213.6578125 width=2.92395833333334 y=62.18487394957983 height=0.42016806722688926 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=217.83489583333332 width=2.92395833333334 y=67.33193277310924 height=0.8403361344537927 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=222.01197916666663 width=2.92395833333334 y=74.5798319327731 height=0.42016806722689637 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=226.1890625 width=2.92395833333334 y=73.73949579831933 height=0.6302521008403374 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=230.36614583333332 width=2.92395833333334 y=79.2016806722689 height=0.42016806722688216 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=234.54322916666663 width=2.92395833333334 y=50.945378151260506 height=0.7352941176470509 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=238.7203125 width=2.92395833333334 y=76.47058823529413 height=0.42016806722688216 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=242.89739583333332 width=2.92395833333334 y=49.0546218487395 height=0.8403361344537785 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=247.07447916666663 width=2.92395833333334 y=35.39915966386555 height=0.21008403361344108 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=251.2515625 width=2.92395833333334 y=34.03361344537816 height=1.5756302521008294 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=255.42864583333332 width=2.92395833333334 y=50 height=0.3151260504201687 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=259.60572916666666 width=2.92395833333334 y=66.80672268907563 height=0.5252100840336169 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=263.78281250000003 width=2.92395833333334 y=32.98319327731092 height=0.4201680672269035 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=267.95989583333335 width=2.92395833333334 y=39.075630252100844 height=0.6302521008403303 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=272.13697916666666 width=2.92395833333334 y=29.936974789915972 height=0.6302521008403339 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=276.31406250000003 width=2.92395833333334 y=41.701680672268914 height=0.3151260504201616 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=280.49114583333335 width=2.92395833333334 y=42.54201680672269 height=0.7352941176470509 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=284.66822916666666 width=2.92395833333334 y=27.415966386554622 height=0.7352941176470544 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=288.84531250000003 width=2.92395833333334 y=38.13025210084034 height=0.3151260504201687 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=293.02239583333335 width=2.92395833333334 y=22.58403361344538 height=0.6302521008403339 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=297.19947916666666 width=2.92395833333334 y=9.97899159663866 height=0.5252100840336116 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=301.37656250000003 width=2.92395833333334 y=11.134453781512606 height=0.6302521008403339 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=305.55364583333335 width=2.92395833333334 y=13.445378151260497 height=0.6302521008403481 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=309.73072916666666 width=2.92395833333334 y=12.499999999999996 height=0.31512605042016695 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=313.90781250000003 width=2.92395833333334 y=7.457983193277312 height=0.8403361344537794 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=318.08489583333335 width=2.92395833333334 y=5.9873949579831995 height=0.7352941176470562 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=322.26197916666666 width=2.92395833333334 y=5.25210084033613 height=0.6302521008403472 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=326.43906250000003 width=2.92395833333334 y=5.25210084033613 height=1.4705882352941257 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=330.61614583333335 width=2.92395833333334 y=7.878151260504201 height=0.5252100840336125 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=334.79322916666666 width=2.92395833333334 y=5.042016806722685 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=338.97031250000003 width=2.92395833333334 y=5.147058823529408 height=0 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=343.14739583333335 width=2.92395833333334 y=4.0966386554621845 height=0.31512605042016695 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=347.32447916666666 width=2.92395833333334 y=9.873949579831939 height=0 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=351.50156250000003 width=2.92395833333334 y=5.147058823529408 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=355.67864583333335 width=2.92395833333334 y=4.726890756302518 height=0.31512605042016695 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=359.85572916666666 width=2.92395833333334 y=4.936974789915963 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=364.03281250000003 width=2.92395833333334 y=3.1512605042016832 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=368.20989583333335 width=2.92395833333334 y=5.882352941176477 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=372.38697916666666 width=2.92395833333334 y=10.609243697478995 height=0.10504201680672232 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=376.56406250000003 width=2.92395833333334 y=7.563025210084034 height=0.21008403361344463 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=380.74114583333335 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=384.91822916666666 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=389.09531250000003 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=393.27239583333335 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(122,207,64)></rect><rect x=397.44947916666666 width=2.92395833333334 y=0 height=0 style=opacity:1;fill:rgb(122,207,64)></rect>
[SkinPath]\HtmlRects2NumberedShapes.ini:

Code: Select all

[Variables]
Numbers=[1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17][18][19][20][21][22][23][24][25][26][27][28][29][30][31][32][33][34][35][36][37][38][39][40][41][42][43][44][45][46][47][48][49][50][51][52][53][54][55][56][57][58][59][60][61][62][63][64][65][66][67][68][69][70][71][72][73][74][75][76][77][78][79][80][81][82][83][84][85][86][87][88][89][90][91][92][93][94][95][96][97][98][99][100][101][102][103][104][105][106][107][108][109][110][111][112][113][114][115][116][117][118][119][120][121][122][123][124][125][126][127][128][129][130][131][132][133][134][135][136][137][138][139][140][141][142][143][144][145][146][147][148][149][150][151][152][153][154][155][156][157][158][159][160][161][162][163][164][165][166][167][168][169][170][171][172][173][174][175][176][177][178][179][180][181][182][183][184][185][186][187][188][189][190][191][192][193][194][195][196][197][198][199][200][201][202][203][204][205][206][207][208][209][210][211][212][213][214][215][216][217][218][219][220][221][222][223][224][225][226][227][228][229][230][231][232][233][234][235][236][237][238][239][240][241][242][243][244][245][246][247][248][249][250][251][252][253][254][255][256][257][258][259][260][261][262][263][264][265][266][267][268][269][270][271][272][273][274][275][276][277][278][279][280][281][282][283][284][285][286][287][288][289][290][291][292][293][294][295][296][297][298][299][300]
SkipCount=0

[Rainmeter]
Update=-1
AccurateText=1
DynamicWindowSize=1

---Measures---

[GetRects]
Measure=WebParser
URL=file://#CURRENTPATH#Html - All Rects.txt
RegExp=(?siU)^(.*)$
StringIndex=1
UpdateRate=-1
RegExpSubstitute=1
Substitute="^(.*)$":"0\1","\\\d+":"","(?siU)<rect .*><\/rect>":"+1","^(.*)$":"(\1-1)"
FinishAction=[!SetVariable SkipCount [GetRects]][!UpdateMeasure SetShapes][SetShapes][!UpdateMeter Shapes][!Redraw]
DynamicVariables=1

[SetShapes]
Measure=WebParser
URL=[GetRects]
StringIndex=1
UpdateDivider=-1
RegExpSubstitute=1
Substitute="(?siU) style=(opacity:.*);(fill:.*)>":" style=\2;\1>","(?siU)<rect x=(.*) width=(.*) y=(.*) height=(.*) style=fill:rgb\((.*)\);opacity:(.*)><\/rect>":'[!SetOption Shapes "Shape" "Rectangle \1,\3,\2,\4 | Fill Color \5,255 | Stroke Color 0,255,255,255 | StrokeWidth \6"]','^(.*)$':'\1#Numbers#','(?siU)"Shape"(?=.*(?:\[.*\]){[#SkipCount]}\[(.*)\])':'"Shape\1"','"Shape1"':'"Shape"',"\[1\].*$":""
DynamicVariables=1

---Meters---

[Shapes]
Meter=Shape
Shape=Rectangle 0,0,100,100 | Fill Color 255,0,255,255 | Stroke Color 0,255,255,255 | StrokeWidth 1
UpdateDivider=-1
DynamicVariables=1
Preview:
HtmlRects2NumberedShapes.jpg
I used Update=-1 in [Rainmeter] to lower the CPU usage of the skin to perfectly normal levels, feel free to set it to 1000 and see the Rainmeter / overall CPU usage and temperature difference (yep, large strings, images or meters can produce that effect). The Numbers variable only goes until 300 which is enough for the 288 rectangles in this graph, but can go as high as needed, if correspondingly added to it (Notepad++ can do this automatically via ALT+Shift selection and Edit > Column Editor from the menu). If interested, I can explain how it all works, so if you don't understand something, just ask. ;-)

Note: Using an input string this long (like the one in the Html - All Rects.txt file, which is basically the original html section mentioned in the last code part from your reply earlier) is not possible in a String measure, because of the 32767 character limit for option values in Rainmeter (or .ini format?). WebParsers however (whether referencing local files or online sites in their URL option), don't need their output to be specified literally in an option like a String measure needs, so they can be used instead (which is already suited for this project).
You do not have the required permissions to view the files attached to this post.
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
emp00
Posts: 112
Joined: October 7th, 2022, 8:08 pm

Re: Convert <svg path> from html and display in shape meter

Post by emp00 »

Dear Team and exlicitly @Yincognito and @balala,

Sorry for the late reply and thanks for all your constructive+creative recommendations! Here's what I did, I'll try to sketch my approach with the most important steps - target (achieved) is a skin showing my PV system metrics in a small and precise overview, preventing myself having to access the supplier's bulky WebApp in the browser. I wanted to have this in an automated Rainmeter skin, and this is how I did it:
  1. Rainmeter skin based on a Measure=Plugin // Plugin=RunCommand: Running a DIY Autohotkey script every 15 minutes which executes the following steps
  2. Download the PV-WebApp html via single-file.exe with a bunch a dedicated command line parameters, I have used Chrome Portable as browser executed completely in the background thanks to single-file-cli.
  3. Still via AHK, I'm now parsing the html with a series of RegExMatch, thereby collecting the relevant metrics including the SVG html code
  4. Saving the numerical metrics in a txt file which is parsed via RegExp in the rainmeter skin WebParser. Now I got the numbers and I turn to the trend graphics as follows.
  5. After regex-cutting out the original SVG xml code (html) for the battery SVG <path> and two SVG <rect> sections I am modifying this SVG code quite a bit using StrReplace: e.g. changing some RGB-colors and transform="translate(x,x)" as well as transform="scale(x,y)" among a few other mods
  6. Then I just added an SVG header ('<svg version="1.1" xmlns="http://www.w3.org/2000/svg">`n<rect width="500" height="200" fill="black" />`n`n') and the final SVG footer ('`n`n</svg>')
  7. Now I save the valid SVG-xml code as three separate .svg files (svg-files are text files, I learned this in this project!) - they can be displayed in more-or-less any image viewer. However, unfortunately, rainmeter cannot display svg files in an Image meter. So here comes my diabolic "last step", still in the AHK script:
  8. Executing RunWait with i_view64.exe trendgraph*.svg /convert=*.png (simplified: using variables in the AHK commend, of course) --> thus using Irfan View command line to convert the three svg to png files in just one call: no window's opened, all in the background.
  9. Now I have 3 valid png raster files "simply" shown in Image meters with no performance issues compared to huge inline Shape meters
:D :Whistle :D

Yeah "in detail" it was a huge project, many hours of work but also quite a bit of fun. Learned much RegEx in practice thanks to Yincognito, your tipps have been so valuable. Just an example, you mentioned using \R instead of \n for matching line breaks, this helped me with the Autohotkey generated .txt file for the WebParser because of one of those nasty codepage issues. I know there are probably always more than 1 solutions to a problem, but this just shows you need to know some tweaks (!!and/or great friends in the rainmeter forums!!) to achieve your goals with much less frustration.

"A picture is worth a thousand words" - see the resulting skin with the official PV supplier's app output below... Tell me which you like better. ;-)

Note: The weather skin on the right hand side, by the way, is my mod of @eclectic-tech 's Open-Meteo Weather API skin collection which is modded with trend lines realized as rainmeter Shape=Path meters thanks to @Yincognito 's help!). You can also see the calculated/predicted PV power for the upcoming 5 days and for today (you see a live picture) the predicted output of 21 kWh will probably be almost reached. Open-Meteo's PV-related data is free and excellent in my eyes, as you can see, it predicts my real PV output very well. Having the PV metrics data just next to the weather skin, that's my big achievement of the last 2 weeks. Some small tweaks are still needed since I'm a perfectionist[tm], but 95% of the work is done. I'm happy and I would like to sincerly thank you for the HELP. This is your achievement just as well!!!

Image
Image

Questions? Anything I can help you with? Cannot promise anything, I'm still a rainmeter rookie but let me know...
User avatar
Yincognito
Rainmeter Sage
Posts: 7555
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Convert <svg path> from html and display in shape meter

Post by Yincognito »

Looks great, very nice work! Obviously the skin looks better, being customizable and interactive in any way you like. :great:

It seems I was right in my guessing earlier, in the end you did convert the svg to an image:
Yincognito wrote: June 18th, 2024, 11:54 pm Looking forward to see what you've come up with in the following days (converting the svg to an image?)
which indeed was one of the few other ways to approach it, but as you noticed, the svg had to be adjusted a bit and a program to perform the conversion was needed. I'm glad the advice here on the forum paid off and resulted in something nice and useful to you! You played a big part on that, being willing to learn and experiment with something not many have the "courage" to do so (e.g. regex, other scripting tools, etc). :thumbup:

By the way, since we're at it, you do know that you can send bangs or strings from AHK / AutoIt to a Rainmeter skin (either a single time or periodically), right? A bit technical, as you'd expect, but quite compact once you have a function in a few lines of AHK / AutoIt code - see the bottom of the pages here for the AutoIt 3, AHK 1 and AHK 2 equivalents:
https://docs.rainmeter.net/developers/
https://forum.rainmeter.net/viewtopic.php?t=40813

In this particular case, it wouldn't have helped too much since anything else than an image was prone to various performance issues (300 or 600 rectangle shapes are a lot) in Rainmeter, but just so you know, if you didn't already - maybe it can help in other potential future projects. ;-)
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
emp00
Posts: 112
Joined: October 7th, 2022, 8:08 pm

Re: Convert <svg path> from html and display in shape meter

Post by emp00 »

Yincognito wrote: June 23rd, 2024, 10:43 pm By the way, since we're at it, you do know that you can send bangs or strings from AHK / AutoIt to a Rainmeter skin (either a single time or periodically), right? A bit technical, as you'd expect, but quite compact once you have a function in a few lines of AHK / AutoIt code - see the bottom of the pages here for the AutoIt 3, AHK 1 and AHK 2 equivalents:
https://docs.rainmeter.net/developers/
https://forum.rainmeter.net/viewtopic.php?t=40813
Another great idea! I had stumbled upon this functionality some time ago but it did not come to my mind that I could actually use it here: I could pass my approx. 10 single PV metrics variables (just plain numbers) directly from AHK to the rainmeter skin? This would remove the need for the WebParser measure and the "local WebParser.txt" file access issues completely, right? The png file generation for the image meter is anyway completely handled by the AHK script, I only need to pass the remaining numbers, that's it!

OK, I need to study the docs first, e.g. do I have to call rainmeter.exe in my AHK script for each of the 10 variables - or can this be done with one call, sending a list of bangs at once? I'm currently busy with work but will dig into this feature. It's unbelievable that so many gadgets are hidden in rainmeter... You just need to find it or you need friends to tell 'yo!

:yahoo:
User avatar
Yincognito
Rainmeter Sage
Posts: 7555
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Convert <svg path> from html and display in shape meter

Post by Yincognito »

emp00 wrote: June 24th, 2024, 9:04 pm Another great idea! I had stumbled upon this functionality some time ago but it did not come to my mind that I could actually use it here: I could pass my approx. 10 single PV metrics variables (just plain numbers) directly from AHK to the rainmeter skin? This would remove the need for the WebParser measure and the "local WebParser.txt" file access issues completely, right? The png file generation for the image meter is anyway completely handled by the AHK script, I only need to pass the remaining numbers, that's it!

OK, I need to study the docs first, e.g. do I have to call rainmeter.exe in my AHK script for each of the 10 variables - or can this be done with one call, sending a list of bangs at once? I'm currently busy with work but will dig into this feature. It's unbelievable that so many gadgets are hidden in rainmeter... You just need to find it or you need friends to tell 'yo!

:yahoo:
Yep, you can send all those numbers in a single bang (well, actually a bang chain, just like in a skin) from AHK, without slowing down things with the drive access to write to files. 8-)
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
emp00
Posts: 112
Joined: October 7th, 2022, 8:08 pm

Re: Convert <svg path> from html and display in shape meter

Post by emp00 »

Sending bangs from AHK to Rainmeter skins - found your discussion with Smurth. I just tested the function in AHK v2, see below. I don't get an error message, it runs - but no joy, the (existing) meter in the running test-skin does not react, the existing text is not changing. Do I need to use another string syntax with additional [] or ""? Coming from here I believe my syntax should be correct, maybe I'm missing something else?

I also changed the WinExist line to WinExist("ahk_class RainmeterMeterWindow")) -> still no joy.

... and for sending multiple bangs to the same meter, is this the correct syntax? Sorry for jangling your nerves :-/

Code: Select all

SendBang('!SetOption MyTestMeter1 Text "XXX" MyTestMeter2 Text "YYY" MyTestMeter3 Text "ZZZ" "test\testskin.ini"')

Code: Select all

SendBang('!SetOption MyTestMeter1 Text "XXXXXX" "test\testskin.ini"')

SendBang(str) 
{
		d := Buffer(24, 0)
		l := (StrLen(str) + 1) * 2
		NumPut("UPtr", 1, d)
		NumPut("UPtr", l, d, 8)
		NumPut("UPtr", StrPtr(str), d, 16)
		dhw := A_DetectHiddenWindows
		DetectHiddenWindows 1
		SendMessage(0x4a, 0, d.Ptr,, WinExist("ahk_class DummyRainWClass"))
		DetectHiddenWindows dhw
}
User avatar
Yincognito
Rainmeter Sage
Posts: 7555
Joined: February 27th, 2015, 2:38 pm
Location: Terra Yincognita

Re: Convert <svg path> from html and display in shape meter

Post by Yincognito »

emp00 wrote: June 25th, 2024, 9:18 pm Sending bangs from AHK to Rainmeter skins - found your discussion with Smurth. I just tested the function in AHK v2, see below. I don't get an error message, it runs - but no joy
Why no joy? Let there be joy then... 8-)

C:\Users\[User]\Documents\Rainmeter\Skins\test\@Resources\testscript.ahk:

Code: Select all

SendBang(Bang)
{
  cWnd := "RainmeterMeterWindow"
  iLen := (StrLen(Bang) + 1) * 2
  pCds := Buffer(3 * A_PtrSize, 0)
  NumPut("UPtr", 1, pCds)
  NumPut("UPtr", iLen, pCds, A_PtrSize)
  NumPut("UPtr", StrPtr(Bang), pCds, 2 * A_PtrSize)
  SendMessage(0x004A, 0, pCds.Ptr,, "ahk_class" . cWnd)
}

SendBang('[!SetOption MyTestMeter1 Text "XXX" "test"][!SetOption MyTestMeter2 Text "YYY" "test"][!SetOption MyTestMeter3 Text "ZZZ" "test"]')
C:\Users\[User]\Documents\Rainmeter\Skins\test\testskin.ini:

Code: Select all

[Rainmeter]
Update=1000
AccurateText=1
DynamicWindowSize=1
BackgroundMode=2
SolidColor=0,255,0,255

---Styles---

[Text]
Y=0R
Padding=5,5,5,5
FontSize=16
AntiAlias=1
Text=AAA

---Meters---

[MyTestMeter1]
Meter=String
MeterStyle=Text

[MyTestMeter2]
Meter=String
MeterStyle=Text

[MyTestMeter3]
Meter=String
MeterStyle=Text
Preview:
AHK2 Bangs.jpg
So, the .ahk code (compiled as U32) is about the same as Smurth's code, bar A_PtrSize to be clearer, and a correct config name in a correct bang chain.
Optionally, at the start of the .ahk, if needed:

Code: Select all

#NoTrayIcon
#Requires AutoHotkey v2.0.00
DetectHiddenWindows True
You do not have the required permissions to view the files attached to this post.
Profiles: Rainmeter ProfileDeviantArt ProfileSuites: MYiniMeterSkins: Earth
emp00
Posts: 112
Joined: October 7th, 2022, 8:08 pm

Re: Convert <svg path> from html and display in shape meter

Post by emp00 »

Yincognito wrote: June 26th, 2024, 12:37 am Why no joy? Let there be joy then... 8-)
Then Yincognito said, “Let there be joy,and there was joy! And emp00 saw that the joy was good!!! Then Yincognito separated the joy from the darkness. Yincognito called the light “SendBang(Bang)” and the darkness “SendBang(str).” And evening passed and morning came, marking the first day.

:YESSS: :17drums :17good