As i was trying to Rotate a widget/plugin that i installed i noticed that it is extremely hard to rotate a widget.
It's not actually hard but you have to calculate the values for every single change if you for example want to test it with different values.
I didn't find an actual generator on the Internet so i created one myself.
I thought also other people could use it to calculate their values.
So here i am at 2 o'clock in the morning making this post .
Anyway here is the tool: https://codepen.io/How_to_Code/full/mdEjrja
The reference i used: https://docs.rainmeter.net/tips/transformation-matrix-guide/
Hope you like this generator. This is my first project that i post to others so that it is public available.
Have fun
It is currently March 29th, 2024, 1:10 pm
Rainmeter Rotation Generator
-
- Posts: 2
- Joined: November 5th, 2020, 12:15 am
-
- Rainmeter Sage
- Posts: 16110
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Rainmeter Rotation Generator
Hi and welcome to Rainmeter.Maximilian Braun wrote: ↑November 5th, 2020, 12:23 am Anyway here is the tool: https://codepen.io/How_to_Code/full/mdEjrja
I definitely am a great fan of TransformationMatrix, which I believe is an extremely powerful option. So when I saw your post I immediately gave it a try. It is a good tool, congratulations for it. But I have two comments:
- You can't rotate a whole skin (you named it widget, but Rainmeter doesn't work with widgets, but with skins), much less a plugin (measure, for instance). What can you rotate, are the meters. You have to apply the calculated TransformationMatrix to such a meter (just to calrify a little bit the terminology).
- The last two parameters of such a TransformationMatrix option (named tx and ty in TransformationMatrix Guide), are used to move horizontally, respectivelly vertically the rotated meter. These are needed because if the rotated meter isn't moved, it goes outside of the skin, due to the fact that when rotating a meter, it is rotated around the origin of the skin. These two parameters are moving the rotated meter in a way to look like it has been rotated around another point (which one depends on the values of the tx and ty parameters). So I'm not sure how have you calculated these last two parameters, but they can't be used in all situation. Your tool should take into account the center of rotation. If interested, I can help you to modify the code of your tool, to make it to take into account this center.
-
- Posts: 2
- Joined: November 5th, 2020, 12:15 am
Re: Rainmeter Rotation Generator
balala wrote: ↑November 5th, 2020, 7:49 am Hi and welcome to Rainmeter.
I definitely am a great fan of TransformationMatrix, which I believe is an extremely powerful option. So when I saw your post I immediately gave it a try. It is a good tool, congratulations for it. But I have two comments:However congratulation for this tool. It's a great instrument.
- You can't rotate a whole skin (you named it widget, but Rainmeter doesn't work with widgets, but with skins), much less a plugin (measure, for instance). What can you rotate, are the meters. You have to apply the calculated TransformationMatrix to such a meter (just to calrify a little bit the terminology).
- The last two parameters of such a TransformationMatrix option (named tx and ty in TransformationMatrix Guide), are used to move horizontally, respectivelly vertically the rotated meter. These are needed because if the rotated meter isn't moved, it goes outside of the skin, due to the fact that when rotating a meter, it is rotated around the origin of the skin. These two parameters are moving the rotated meter in a way to look like it has been rotated around another point (which one depends on the values of the tx and ty parameters). So I'm not sure how have you calculated these last two parameters, but they can't be used in all situation. Your tool should take into account the center of rotation. If interested, I can help you to modify the code of your tool, to make it to take into account this center.
Thanks for youre reply.
1. I know you cant rotate an plugin/widget directly. Sorry. I meant the right thing but wrote the wrong. My Bad.
2. I would appreciate it if you could show me how to improve my code. I calculated the last two values like in the reference link that i posted under the editor link.
-
- Rainmeter Sage
- Posts: 16110
- Joined: October 11th, 2010, 6:27 pm
- Location: Gheorgheni, Romania
Re: Rainmeter Rotation Generator
Alright, no problem. Just take care widgets still don't exist in Rainmeter. They are skins, according to Rainmeter's terminology.Maximilian Braun wrote: ↑November 5th, 2020, 3:09 pm 1. I know you cant rotate an plugin/widget directly. Sorry. I meant the right thing but wrote the wrong. My Bad.
Ok, here is an example Rainmeter code:Maximilian Braun wrote: ↑November 5th, 2020, 3:09 pm 2. I would appreciate it if you could show me how to improve my code. I calculated the last two values like in the reference link that i posted under the editor link.
Code: Select all
[Rainmeter]
Update=-1
[Variables]
Rot=0
RotationCenterX=([ImageMeter:X]+[ImageMeter:W]/2)
RotationCenterY=([ImageMeter:Y]+[ImageMeter:H]/2)
RotationAngle=30
Angle=0
[MeasureRot]
Measure=Calc
Formula=#Rot#
IfCondition=(#CURRENTSECTION#=0)
IfTrueAction=[!SetVariable Angle "0"][!SetOption MeterRotate Text "Not rotated#CRLF#Click here to rotate."][!UpdateMeter "ImageMeter"][!UpdateMeter "MeterRotate"][!Redraw]
IfFalseAction=[!SetVariable Angle "#RotationAngle#"][!SetOption MeterRotate Text "Rotated with #RotationAngle# degrees#CRLF#Click here to unrotate."][!UpdateMeter "ImageMeter"][!UpdateMeter "MeterRotate"][!Redraw]
DynamicVariables=1
[ImageMeter]
Meter=Image
SolidColor=255,240,0
AntiAlias=1
X=40
Y=75
W=200
H=150
DynamicVariables=1
TransformationMatrix=(Cos(Rad(#Angle#)));(-Sin(Rad(#Angle#)));(Sin(Rad(#Angle#)));(Cos(Rad(#Angle#)));(#RotationCenterX#-#RotationCenterX#*Cos(Rad(#Angle#))-#RotationCenterY#*Sin(Rad(#Angle#)));(#RotationCenterY#+#RotationCenterX#*Sin(Rad(#Angle#))-#RotationCenterY#*Cos(Rad(#Angle#)))
[MeterRotationCenter]
Meter=Image
SolidColor=255,0,0
X=(#RotationCenterX#-1)
Y=(#RotationCenterY#-1)
W=3
H=3
DynamicVariables=1
[MeterRotate]
Meter=STRING
Y=0
Padding=15,5,15,5
FontColor=220,220,220
FontEffectColor=0,0,0
StringEffect=Shadow
SolidColor=0,0,0,150
FontSize=8
FontFace=Segoe UI
StringStyle=BOLD
StringAlign=LEFT
AntiAlias=1
DynamicVariables=1
LeftMouseUpAction=[!SetVariable Rot "(1-#Rot#)"][!UpdateMeasure "MeasureRot"][!UpdateMeter "MeterRotate"][!Redraw]
Hidden=0
Now in the code of your tool what should you modify in my opinion, is to add two other fields beside the rotation angle, where the user should have to add the coordinates of the rotation center. Then in the calculation of the returned TransformationMatrix option you should use these coordinates. Into the TransformationMatrix option of the above code, these are the #RotationCenterX# and #RotationCenterY# variables, these should be replaced by the values added to the fields of the coordinates of the rotation center (the two fields I talked about above).
I don't know in which language have you wrote the code of your tool, but probably doesn't even matter too much, because I anyway don't know any of those languages used to write such tools. But if you try to modify the code of your tool, I hope you'll be able to take into account what have I described above.
If any question arrises, please come back and post it here. If I can I'm gonna answer them.
Great work, congratulations for it again.