The later, the better: native Rainmeter approach to make a hexagonal lattice...
Code: Select all
[Variables]
Cleaner="(?:^[^[\x200B]].*|.*[^[\x200B]]$)":"","(?:^[\x200B]|[\x200B]$)":"","(?:^\\\d+|\\\d+$)":""
Status=
Next=0
RoundingRatio=1.1
Radius=30
Stroke=3
Gap=6
Angle=0
SlotW=(#Radius#*1.5+#Stroke#+#Gap#)
SlotH=(#Radius#*Sqrt(3)+#Stroke#+#Gap#)
SlotX="((#Gap#/2+#Stroke#/2+#Radius#-#SlotW#/2)+Trunc(([$*MouseX*]-(#Gap#/2+#Stroke#/2+#Radius#-#SlotW#/2))/#SlotW#)*#SlotW#)"
SlotY="((#SlotH#/2*((Trunc(([$*MouseX*]-(#Gap#/2+#Stroke#/2+#Radius#-#SlotW#/2))/#SlotW#))%2))+Trunc(([$*MouseY*]-(#SlotH#/2*((Trunc(([$*MouseX*]-(#Gap#/2+#Stroke#/2+#Radius#-#SlotW#/2))/#SlotW#))%2)))/#SlotH#)*#SlotH#)"
MaxNext=99
FontSize=10
FontColor=0,0,0,255
HexaStrokeColor=255,0,0,255
SlotStrokeColor=255,255,0,255
NearTransparentColor=0,0,0,1
BackgroundColor=255,0,255,100
[Rainmeter]
Update=1000
DynamicWindowSize=1
AccurateText=1
OnRefreshAction=[!AutoSelectScreen "1" "#CURRENTCONFIG#"]
---Measures---
[Next]
Measure=String
String=#Status#
UpdateDivider=-1
RegExpSubstitute=1
Substitute="^$":"S0=0","^.*?S(\d+)=0.*$":"[\x200B]\1[\x200B]","#Cleaner#","^$":"#MaxNext#"
DynamicVariables=1
---Styles---
[Hex]
Group=SGroup
Hidden=1
Shape=Path HexaPath | StrokeWidth #Stroke# | StrokeColor #HexaStrokeColor#
HexaPath=(#SlotW#/2+#Radius#*Cos(Rad(#Angle#+0))),(#SlotH#/2+#Radius#*Sin(Rad(#Angle#+0))) | LineTo (#SlotW#/2+#Radius#*Cos(Rad(#Angle#+60))),(#SlotH#/2+#Radius#*Sin(Rad(#Angle#+60))) | LineTo (#SlotW#/2+#Radius#*Cos(Rad(#Angle#+120))),(#SlotH#/2+#Radius#*Sin(Rad(#Angle#+120))) | LineTo (#SlotW#/2+#Radius#*Cos(Rad(#Angle#+180))),(#SlotH#/2+#Radius#*Sin(Rad(#Angle#+180))) | LineTo (#SlotW#/2+#Radius#*Cos(Rad(#Angle#+240))),(#SlotH#/2+#Radius#*Sin(Rad(#Angle#+240))) | LineTo (#SlotW#/2+#Radius#*Cos(Rad(#Angle#+300))),(#SlotH#/2+#Radius#*Sin(Rad(#Angle#+300))) | ClosePath 1
Shape2=Path PaddingPath | StrokeWidth 0 | StrokeColor 0,0,0,0 | Fill Color #NearTransparentColor#
PaddingPath=(#SlotW#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Cos(Rad(#Angle#+0))),(#SlotH#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Sin(Rad(#Angle#+0))) | LineTo (#SlotW#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Cos(Rad(#Angle#+60))),(#SlotH#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Sin(Rad(#Angle#+60))) | LineTo (#SlotW#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Cos(Rad(#Angle#+120))),(#SlotH#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Sin(Rad(#Angle#+120))) | LineTo (#SlotW#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Cos(Rad(#Angle#+180))),(#SlotH#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Sin(Rad(#Angle#+180))) | LineTo (#SlotW#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Cos(Rad(#Angle#+240))),(#SlotH#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Sin(Rad(#Angle#+240))) | LineTo (#SlotW#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Cos(Rad(#Angle#+300))),(#SlotH#/2+(#Radius#+#Stroke#/2+#Gap#/2)*#RoundingRatio#*Sin(Rad(#Angle#+300))) | ClosePath 1
;Shape3=Rectangle 0,0,#SlotW#,#SlotH# | StrokeWidth #Stroke# | StrokeColor #SlotStrokeColor# | Fill Color 0,0,0,0
UpdateDivider=-1
OnUpdateAction=[!SetVariable Status "#Status##CURRENTSECTION#=[#CURRENTSECTION#:W],"]
LeftMouseUpAction=[!SetOption #CURRENTSECTION# Hidden 1][!SetOption #CURRENTSECTION#T Hidden 1][!SetVariable Status ""][!UpdateMeterGroup SGroup][!Redraw][!UpdateMeasure Next][!UpdateMeter Background]
DynamicVariables=1
[Text]
Group=SGroup
Hidden=1
FontFace=Tahoma
FontWeight=700
FontSize=#FontSize#
FontColor=#FontColor#
StringAlign=CenterCenter
UpdateDivider=-1
DynamicVariables=1
---Meters---
[Background]
Meter=Shape
Shape=Rectangle #WORKAREAX#,#WORKAREAY#,#WORKAREAWIDTH#,#WORKAREAHEIGHT# | Fill Color #BackgroundColor# | StrokeWidth 0
UpdateDivider=-1
LeftMouseUpAction=[!SetVariable Status ""][!SetOption S[Next] X #SlotX#][!SetOption S[Next] Y #SlotY#][!SetOption S[Next] Hidden (((#SlotX#+#SlotW#+#Radius#*0.25>[Background:W])||(#SlotY#+#SlotH#>[Background:H]))?1:0)][!SetOption S[Next]T X (#SlotX#+#SlotW#/2)][!SetOption S[Next]T Y (#SlotY#+#SlotH#/2)][!SetOption S[Next]T Text "[Next]"][!SetOption S[Next]T Hidden (((#SlotX#+#SlotW#+#Radius#*0.25>[Background:W])||(#SlotY#+#SlotH#>[Background:H]))?1:0)][!UpdateMeterGroup SGroup][!Redraw][!UpdateMeasure Next][!UpdateMeter Background]
MiddleMouseUpAction=[!SetVariable Status ""][!SetOptionGroup SGroup Hidden 1][!UpdateMeterGroup SGroup][!Redraw][!UpdateMeasure Next][!UpdateMeter Background]
DynamicVariables=1
[S0]
Meter=Shape
MeterStyle=Hex
[S0T]
Meter=String
MeterStyle=Text
[S1]
Meter=Shape
MeterStyle=Hex
[S1T]
Meter=String
MeterStyle=Text
[S2]
Meter=Shape
MeterStyle=Hex
[S2T]
Meter=String
MeterStyle=Text
[S3]
Meter=Shape
MeterStyle=Hex
[S3T]
Meter=String
MeterStyle=Text
[S4]
Meter=Shape
MeterStyle=Hex
[S4T]
Meter=String
MeterStyle=Text
[S5]
Meter=Shape
MeterStyle=Hex
[S5T]
Meter=String
MeterStyle=Text
[S6]
Meter=Shape
MeterStyle=Hex
[S6T]
Meter=String
MeterStyle=Text
[S7]
Meter=Shape
MeterStyle=Hex
[S7T]
Meter=String
MeterStyle=Text
[S8]
Meter=Shape
MeterStyle=Hex
[S8T]
Meter=String
MeterStyle=Text
[S9]
Meter=Shape
MeterStyle=Hex
[S9T]
Meter=String
MeterStyle=Text
[S10]
Meter=Shape
MeterStyle=Hex
[S10T]
Meter=String
MeterStyle=Text
[S11]
Meter=Shape
MeterStyle=Hex
[S11T]
Meter=String
MeterStyle=Text
[S12]
Meter=Shape
MeterStyle=Hex
[S12T]
Meter=String
MeterStyle=Text
[S13]
Meter=Shape
MeterStyle=Hex
[S13T]
Meter=String
MeterStyle=Text
[S14]
Meter=Shape
MeterStyle=Hex
[S14T]
Meter=String
MeterStyle=Text
[S15]
Meter=Shape
MeterStyle=Hex
[S15T]
Meter=String
MeterStyle=Text
[S16]
Meter=Shape
MeterStyle=Hex
[S16T]
Meter=String
MeterStyle=Text
[S17]
Meter=Shape
MeterStyle=Hex
[S17T]
Meter=String
MeterStyle=Text
[S18]
Meter=Shape
MeterStyle=Hex
[S18T]
Meter=String
MeterStyle=Text
[S19]
Meter=Shape
MeterStyle=Hex
[S19T]
Meter=String
MeterStyle=Text
[S20]
Meter=Shape
MeterStyle=Hex
[S20T]
Meter=String
MeterStyle=Text
[S21]
Meter=Shape
MeterStyle=Hex
[S21T]
Meter=String
MeterStyle=Text
[S22]
Meter=Shape
MeterStyle=Hex
[S22T]
Meter=String
MeterStyle=Text
[S23]
Meter=Shape
MeterStyle=Hex
[S23T]
Meter=String
MeterStyle=Text
[S24]
Meter=Shape
MeterStyle=Hex
[S24T]
Meter=String
MeterStyle=Text
[S25]
Meter=Shape
MeterStyle=Hex
[S25T]
Meter=String
MeterStyle=Text
[S26]
Meter=Shape
MeterStyle=Hex
[S26T]
Meter=String
MeterStyle=Text
[S27]
Meter=Shape
MeterStyle=Hex
[S27T]
Meter=String
MeterStyle=Text
[S28]
Meter=Shape
MeterStyle=Hex
[S28T]
Meter=String
MeterStyle=Text
[S29]
Meter=Shape
MeterStyle=Hex
[S29T]
Meter=String
MeterStyle=Text
[S30]
Meter=Shape
MeterStyle=Hex
[S30T]
Meter=String
MeterStyle=Text
[S31]
Meter=Shape
MeterStyle=Hex
[S31T]
Meter=String
MeterStyle=Text
[S32]
Meter=Shape
MeterStyle=Hex
[S32T]
Meter=String
MeterStyle=Text
[S33]
Meter=Shape
MeterStyle=Hex
[S33T]
Meter=String
MeterStyle=Text
[S34]
Meter=Shape
MeterStyle=Hex
[S34T]
Meter=String
MeterStyle=Text
[S35]
Meter=Shape
MeterStyle=Hex
[S35T]
Meter=String
MeterStyle=Text
[S36]
Meter=Shape
MeterStyle=Hex
[S36T]
Meter=String
MeterStyle=Text
[S37]
Meter=Shape
MeterStyle=Hex
[S37T]
Meter=String
MeterStyle=Text
[S38]
Meter=Shape
MeterStyle=Hex
[S38T]
Meter=String
MeterStyle=Text
[S39]
Meter=Shape
MeterStyle=Hex
[S39T]
Meter=String
MeterStyle=Text
[S40]
Meter=Shape
MeterStyle=Hex
[S40T]
Meter=String
MeterStyle=Text
[S41]
Meter=Shape
MeterStyle=Hex
[S41T]
Meter=String
MeterStyle=Text
[S42]
Meter=Shape
MeterStyle=Hex
[S42T]
Meter=String
MeterStyle=Text
[S43]
Meter=Shape
MeterStyle=Hex
[S43T]
Meter=String
MeterStyle=Text
[S44]
Meter=Shape
MeterStyle=Hex
[S44T]
Meter=String
MeterStyle=Text
[S45]
Meter=Shape
MeterStyle=Hex
[S45T]
Meter=String
MeterStyle=Text
[S46]
Meter=Shape
MeterStyle=Hex
[S46T]
Meter=String
MeterStyle=Text
[S47]
Meter=Shape
MeterStyle=Hex
[S47T]
Meter=String
MeterStyle=Text
[S48]
Meter=Shape
MeterStyle=Hex
[S48T]
Meter=String
MeterStyle=Text
[S49]
Meter=Shape
MeterStyle=Hex
[S49T]
Meter=String
MeterStyle=Text
[S50]
Meter=Shape
MeterStyle=Hex
[S50T]
Meter=String
MeterStyle=Text
[S51]
Meter=Shape
MeterStyle=Hex
[S51T]
Meter=String
MeterStyle=Text
[S52]
Meter=Shape
MeterStyle=Hex
[S52T]
Meter=String
MeterStyle=Text
[S53]
Meter=Shape
MeterStyle=Hex
[S53T]
Meter=String
MeterStyle=Text
[S54]
Meter=Shape
MeterStyle=Hex
[S54T]
Meter=String
MeterStyle=Text
[S55]
Meter=Shape
MeterStyle=Hex
[S55T]
Meter=String
MeterStyle=Text
[S56]
Meter=Shape
MeterStyle=Hex
[S56T]
Meter=String
MeterStyle=Text
[S57]
Meter=Shape
MeterStyle=Hex
[S57T]
Meter=String
MeterStyle=Text
[S58]
Meter=Shape
MeterStyle=Hex
[S58T]
Meter=String
MeterStyle=Text
[S59]
Meter=Shape
MeterStyle=Hex
[S59T]
Meter=String
MeterStyle=Text
[S60]
Meter=Shape
MeterStyle=Hex
[S60T]
Meter=String
MeterStyle=Text
[S61]
Meter=Shape
MeterStyle=Hex
[S61T]
Meter=String
MeterStyle=Text
[S62]
Meter=Shape
MeterStyle=Hex
[S62T]
Meter=String
MeterStyle=Text
[S63]
Meter=Shape
MeterStyle=Hex
[S63T]
Meter=String
MeterStyle=Text
[S64]
Meter=Shape
MeterStyle=Hex
[S64T]
Meter=String
MeterStyle=Text
[S65]
Meter=Shape
MeterStyle=Hex
[S65T]
Meter=String
MeterStyle=Text
[S66]
Meter=Shape
MeterStyle=Hex
[S66T]
Meter=String
MeterStyle=Text
[S67]
Meter=Shape
MeterStyle=Hex
[S67T]
Meter=String
MeterStyle=Text
[S68]
Meter=Shape
MeterStyle=Hex
[S68T]
Meter=String
MeterStyle=Text
[S69]
Meter=Shape
MeterStyle=Hex
[S69T]
Meter=String
MeterStyle=Text
[S70]
Meter=Shape
MeterStyle=Hex
[S70T]
Meter=String
MeterStyle=Text
[S71]
Meter=Shape
MeterStyle=Hex
[S71T]
Meter=String
MeterStyle=Text
[S72]
Meter=Shape
MeterStyle=Hex
[S72T]
Meter=String
MeterStyle=Text
[S73]
Meter=Shape
MeterStyle=Hex
[S73T]
Meter=String
MeterStyle=Text
[S74]
Meter=Shape
MeterStyle=Hex
[S74T]
Meter=String
MeterStyle=Text
[S75]
Meter=Shape
MeterStyle=Hex
[S75T]
Meter=String
MeterStyle=Text
[S76]
Meter=Shape
MeterStyle=Hex
[S76T]
Meter=String
MeterStyle=Text
[S77]
Meter=Shape
MeterStyle=Hex
[S77T]
Meter=String
MeterStyle=Text
[S78]
Meter=Shape
MeterStyle=Hex
[S78T]
Meter=String
MeterStyle=Text
[S79]
Meter=Shape
MeterStyle=Hex
[S79T]
Meter=String
MeterStyle=Text
[S80]
Meter=Shape
MeterStyle=Hex
[S80T]
Meter=String
MeterStyle=Text
[S81]
Meter=Shape
MeterStyle=Hex
[S81T]
Meter=String
MeterStyle=Text
[S82]
Meter=Shape
MeterStyle=Hex
[S82T]
Meter=String
MeterStyle=Text
[S83]
Meter=Shape
MeterStyle=Hex
[S83T]
Meter=String
MeterStyle=Text
[S84]
Meter=Shape
MeterStyle=Hex
[S84T]
Meter=String
MeterStyle=Text
[S85]
Meter=Shape
MeterStyle=Hex
[S85T]
Meter=String
MeterStyle=Text
[S86]
Meter=Shape
MeterStyle=Hex
[S86T]
Meter=String
MeterStyle=Text
[S87]
Meter=Shape
MeterStyle=Hex
[S87T]
Meter=String
MeterStyle=Text
[S88]
Meter=Shape
MeterStyle=Hex
[S88T]
Meter=String
MeterStyle=Text
[S89]
Meter=Shape
MeterStyle=Hex
[S89T]
Meter=String
MeterStyle=Text
[S90]
Meter=Shape
MeterStyle=Hex
[S90T]
Meter=String
MeterStyle=Text
[S91]
Meter=Shape
MeterStyle=Hex
[S91T]
Meter=String
MeterStyle=Text
[S92]
Meter=Shape
MeterStyle=Hex
[S92T]
Meter=String
MeterStyle=Text
[S93]
Meter=Shape
MeterStyle=Hex
[S93T]
Meter=String
MeterStyle=Text
[S94]
Meter=Shape
MeterStyle=Hex
[S94T]
Meter=String
MeterStyle=Text
[S95]
Meter=Shape
MeterStyle=Hex
[S95T]
Meter=String
MeterStyle=Text
[S96]
Meter=Shape
MeterStyle=Hex
[S96T]
Meter=String
MeterStyle=Text
[S97]
Meter=Shape
MeterStyle=Hex
[S97T]
Meter=String
MeterStyle=Text
[S98]
Meter=Shape
MeterStyle=Hex
[S98T]
Meter=String
MeterStyle=Text
[S99]
Meter=Shape
MeterStyle=Hex
[S99T]
Meter=String
MeterStyle=Text
HexaLattice.jpg
Apart from one measure, two styles and one meter (plus the variables), the rest is just copy paste, for convenience (100 hexes included, thanks to some replacing in selection in Notepad++). The formulas are much shorter than the classical version, via breaking them into pieces stored in
[Variables]. The "slots" for the hexes (i.e. the areas that show them on click, as opposed to their opaque pixels used in the hiding process) are described by the related variables in
[Variables] and are visible if uncommenting the
Shape3=... line from the
Hex style. A string (i.e.
Status) and some regex substitutions in
[Next] store the hidden status of all the hexes, and the hex to be shown next, respectively, based on the 1st hidden hex. A "padding" (i.e.
Shape2=... from the
Hex style) and some rounding error procedure described by the
RoundingRatio variable are used to correct unwanted effects like placing a hex on top of another hex when clicking in the space between them, as well as diagonal padding requiring further adjustment compared to the axis one. Left click on open space places/shows the hex, left click on a hex hides it, and middle click anywhere on the background hides/clears all the hexes, for convenience.
In the end, this turned out to be easier and more compact than expected, although it took some time to make it work and refine. Now the OP has all kinds of variants to choose from, or he can continue trying to place the hexes in a "sequence".
P.S. I guess this could be adjusted to place hexes at -100,-100 if really really needed (although it would be a bit problematic when setting the position, as I use the hidden state as a "validator" of some sort as well, to make preventing placing a hex outside the background meter easier), but I very much doubt something will be gained out of it, since hiding stuff means more or less the same as the meter dimensions become 0 at that point. Also, this would probably work for a hex starting angle of 90 or 270 degrees if the proper X/Y/W/H related stuff are swapped between them - I didn't bother with that though as it didn't seem particularly important.
You do not have the required permissions to view the files attached to this post.