Hello all, after a long hiatus I have released these companion works to PolarPrecise I've been sitting on.
PolarCPU
• Soothing ripples.
• All dimensions changeable through a simple interface.
• Can be shifted partly off-screen in any direction by adjusting the radius of its bounding box.
• Well-optimized for animating at 10-20 frames per second.
• Low activity is dampened to not be annoying.
• Requires Rainmeter 2.1 or above.
Left-click to cycle meter style.
Middle-click to toggle shadow.
Right-click to toggle color / alternate color.
Interaction will bring up the config dialog - mouse away to hide.
I'm curious as to how well it behaves with multi-monitor setups, I would appreciate any feedback.
PolarDisk
• Simple interface for changing disk and colors.
• Well-optimized for animating at 20 frames per second.
• Included font is Sinner by Helge Barske; it will not be installed to the system.
• Requires Rainmeter 2.1 or above.
Left-click to open disk.
Middle-click to toggle shadow and bring up config.
Right-click to toggle color / alternate color and bring up config.
Mouse away to hide config.
It is currently April 19th, 2024, 10:30 pm
PolarCPU / PolarDisk
Skins with graphics and animations
7 posts
• Page 1 of 1
-
- Posts: 305
- Joined: August 14th, 2009, 8:04 am
PolarCPU / PolarDisk
Post by killall-q »
Last edited by killall-q on January 22nd, 2012, 5:59 pm, edited 2 times in total.
-
- Posts: 20
- Joined: May 31st, 2011, 7:15 am
Re: PolarCPU
Post by NisseDILLIGAF »
Hi...
Really like this one...!!
I use 2 PolarPyro overlapping showing all 4 CPU cores, one a little smaller showing cores 2-4 in a different color.
would be great to have 4 cores in one skin and be able to show them in 4 different colors...
...but I like it as it is also!! Great work!
Thanx!
BTW. I have multi-monitors, and there's no problems here
Really like this one...!!
I use 2 PolarPyro overlapping showing all 4 CPU cores, one a little smaller showing cores 2-4 in a different color.
would be great to have 4 cores in one skin and be able to show them in 4 different colors...
...but I like it as it is also!! Great work!
Thanx!
BTW. I have multi-monitors, and there's no problems here
-
- Posts: 305
- Joined: August 14th, 2009, 8:04 am
Re: PolarCPU
Post by killall-q »
Thanks for the action shot! I wanted to support quad and octocores but couldn't fit them in the design... but seeing what you did, I think I have an idea!
-
- Posts: 20
- Joined: May 31st, 2011, 7:15 am
Re: PolarCPU
Post by NisseDILLIGAF »
No problems.. I'm looking forward to see your ideas
killall-q wrote:Thanks for the action shot! I wanted to support quad and octocores but couldn't fit them in the design... but seeing what you did, I think I have an idea!
-
- Posts: 20
- Joined: May 31st, 2011, 7:15 am
Re: PolarCPU / PolarDisk
Post by NisseDILLIGAF »
I've made a 'PolarCPU' of my own
With the help from your code.... (thanx!)
The first time u run it it will see how many cores your CPU has and make a new .ini file with the right number of core rings...
A video of my screen with it running...
http://youtu.be/rqCoDvLUPoY
Next week I will upload the .rmskin ... have a few tweaks todo...
With the help from your code.... (thanx!)
The first time u run it it will see how many cores your CPU has and make a new .ini file with the right number of core rings...
A video of my screen with it running...
http://youtu.be/rqCoDvLUPoY
Next week I will upload the .rmskin ... have a few tweaks todo...
-
- Posts: 305
- Joined: August 14th, 2009, 8:04 am
Re: PolarCPU / PolarDisk
Post by killall-q »
I'm honored you based this on my work. That was my plan too, to dynamically detect the number of cores, but I've been busy since first release of PolarCPU. I look forward to seeing your work.
-
- Posts: 20
- Joined: May 31st, 2011, 7:15 am
Re: PolarCPU / PolarDisk
Post by NisseDILLIGAF »
I forgot about posting my PolarCPU...
Here's the ini file..
coreRunOnce.ini
And the lua file...
core.lua
Hope u like it
Here's the ini file..
coreRunOnce.ini
Code: Select all
[Rainmeter]
;; Only here for generic purposes at the moment.
Update=1000
Author=Zinsho
AppVersion=2000000
BackgroundMode=2
SolidColor=255,255,255,0
; ============================================================================================== ;
; ==== This skin generates a new skin when it is executed, adjusting itself dynamically ==== ;
; ==== to the number of cores reported by your Operating system. If the reported number ==== ;
; ==== is incorrect you may want to verify your Windows installation. ==== ;
; ==== I created this initially to determine whether Lua could be used to generate skins ==== ;
; ==== on the fly based on the parameters provided it. The skin is quite bland, pulling ==== ;
; ==== slightly from Illustro for the 'theme', yet without any background images, instead ==== ;
; ==== simply using a transparent background. ==== ;
; ============================================================================================== ;
[Metadata]
Name=CPU Generator
Description=Working example of a rainmeter skin generated via Lua. The measure captures your number of CPUs then creates a .ini with the appropriate number of measures. Finally it loads the newly generated .ini for use.
Version=1.0
Variant=1
Tags=Lua | CPU | Code Generator
Instructions=Run core.ini to initialize. #cores.ini is the generated model appropriate for your machine
[Variables]
; partName is used to create the final name. ini is to pass path to
partName=cores.ini
ini=#CURRENTPATH#
[MeasureCPUCount]
; Get the number of CPUs so that the Lua script can properly generate code.
Measure=Registry
RegHKey=HKEY_LOCAL_MACHINE
RegKey=SYSTEM\CurrentControlSet\Control\Session Manager\Environment
RegValue=NUMBER_OF_PROCESSORS
; Update rate is completely pointless for this skin, it will only ever run once.
UpdateDivider=10000
[MeasureLuaScript]
Disabled=0
Measure=Script
ScriptFile=#CURRENTPATH#core.lua
setPath=#ini#
setName=#partName#
TableName=LuaCore
; See above regarding update.
UpdateDivider=10000
[MeterCPUBackground]
; The background is the same size as the Total Usage portion of the final skin... if it shows for
; too long then the script is freezing. It will also underlay the Header of the final Skin
; momentarily on first execution (since it has to refresh and find the new file.
Meter=IMAGE
X=1
Y=1
H=45
W=210
SolidColor=50,50,50,175
[MeterShowCPU]
; Identical 'title' to what will be generated by Lua for the new skin
Meter=STRING
Text="CPU"
X=100
Y=12
W=190
H=18
StringAlign=CENTER
StringStyle=Bold
FontColor=255,255,255,205
FontSize=8
FontFace=Trebuchet MS
AntiAlias=1
[MeterShowInitializing]
; Loader image while the script is generating the proper skin. It should not appear for more
; than a few moments when skin is first loaded.
Meter=STRING
X=10
Y=25
W=1000
H=14
StringAlign=LEFT
StringStyle=Bold
FontColor=255,255,255,205
FontSize=8
FontFace=Trebuchet MS
AntiAlias=1
Text="Initializing..."
; For some reason it wouldn't accept Author in the original "rainmeter" section, RainBrowser
; appended it.
[Rainmeter]
Author=Zinsho | zinsho@gmail.com // edited by NisseDILLIGAF //
core.lua
Code: Select all
--[[
Author: Zinsho
Contact: zinsho@gmail.com
Version: 1.00 (it's a working example, it performs as needed for that.
Lua script to generate a CPU meter that scales to the system it is initially run on.
This was partially to test my theory, and to teach myself the rudiments of Lua scripting and
of Rainmeter skinning.
I'm quite certain there are several ways for this to be optimized, including using the
[Variable] Section of the generated skin to reduce the length of the final skin. Additional
tables, functions, variables and loops could also be used to remove lines from the various
functions.
I also suspect there is a more optimized way to write to the file rather than queueing up
all the io.write() calls.
--]]
PROPERTIES =
{
setPath="";
setPathSettings="";
setName="";
}
function Initialize()
-- Set local names for the variables and gain access to the # of cores.
sSetName=PROPERTIES.setName
sSetPath=PROPERTIES.setPath
MeasureRead = SKIN:GetMeasure("MeasureCPUCount")
end -- function Initialize
function Update()
-- Get # of cores from Rainmeter
Cores=MeasureRead:GetStringValue()
-- Create customized name based on number of cores.
sSetName=Cores..sSetName
-- Full name of the new skin, including path, to allow read and writes
nSetPath=sSetPath..sSetName
nSetPathSettings=sSetPath.."Settings.inc"
-- Trims the path down to be what is required for activate config.
sSetPath=sSetPath:match("Skins\\(.*)"):match("(.*)\\")
--sSetPathSettings=sSetPathSettings:match("Skins\\(.*)"):match("(.*)\\")
-- io.open loads the designated file, "w+" is write+update mode, previous data is erased.
fsetPath = io.open(nSetPath,"w+")
-- Generates Rainmeter Header for the new ini, including styles (for testing purposes)
generateHeader()
-- Generates the dynamic cpu cores
for i=1,tonumber(Cores) do
codeGenerator(i)
end
-- Write to the file then close it.
fsetPath:flush()
fsetPath:close()
-- io.open loads the designated file, "w+" is write+update mode, previous data is erased.
fsetPathSettings = io.open(nSetPathSettings,"w+")
-- Generates Rainmeter Header for the new ini, including styles (for testing purposes)
generateHeaderSettings()
-- Generates the dynamic cpu cores
for i=1,tonumber(Cores) do
codeGeneratorSettings(i)
end
-- Write to the file then close it.
fsetPathSettings:flush()
fsetPathSettings:close()
-- Force Rainmeter to update, revealing the new skin if the file had not existed.
SKIN:Bang("!RainmeterRefreshApp")
-- Activate the new skin, replacing the loader.
SKIN:Bang("!RainmeterActivateConfig \""..sSetPath.."\" \""..sSetName.."\"")
end -- function Update
-- Required by Rainmeter, no purpose for this script.
function GetStringValue()
return "Complete"
end -- function GetStringValue
-- Generates the Header of a Rainmeter skin, all data manually provided in this case.
function generateHeaderSettings()
fsetPathSettings:write("[Variables]\n")
fsetPathSettings:write("spacing=8\n")
fsetPathSettings:write("size=150\n")
fsetPathSettings:write("; Customizable values\n")
fsetPathSettings:write("; Keep these colors opaque\n")
end -- function generateHeader
-- Generates the bulk of the skin, looping to provide the required CPU bars.
function codeGeneratorSettings(cpus)
fsetPathSettings:write(";Core"..cpus.."\n")
if cpus == 1 then
fsetPathSettings:write("Color1=255, 0, 0\n")
elseif cpus == 2 then
fsetPathSettings:write("Color2=0, 0, 255\n")
elseif cpus == 3 then
fsetPathSettings:write("Color3=0, 255, 0\n")
else
fsetPathSettings:write("Color"..cpus.."=255, 255, 0\n")
end
fsetPathSettings:write("ColorAlt"..cpus.."=255, 255, 255\n")
fsetPathSettings:write("ColorShadow"..cpus.."=0, 0, 0\n")
fsetPathSettings:write("ShadowOffset"..cpus.."=2\n")
fsetPathSettings:write("ShadowHide"..cpus.."=0\n")
fsetPathSettings:write("ShadowHideAlt"..cpus.."=1\n")
fsetPathSettings:write("ConfigHide"..cpus.."=1\n")
fsetPathSettings:write("StartAngle"..cpus.."=1.555\n")
fsetPathSettings:write("ArcLength"..cpus.."=7\n")
fsetPathSettings:write("ArcOffset"..cpus.."=3\n")
fsetPathSettings:write("PadRadius"..cpus.."=150\n")
fsetPathSettings:write("OneArc"..cpus.."=0\n")
end -- function codeGeneratorSettings
-- Generates the Header of a Rainmeter skin, all data manually provided in this case.
function generateHeader()
-- Generate Rainmeter
fsetPath:write("[Rainmeter]\n")
fsetPath:write("Update=50\n")
fsetPath:write("Author=NisseDILLIGAF\n")
fsetPath:write("AppVersion=2000000\n")
fsetPath:write("OnRefreshAction=!Execute [!SnapEdges 1]")
for i=1,tonumber(Cores) do
fsetPath:write("[!SetVariable ArcLineLength"..i.." (#ArcStart"..i.."#+#ArcLength"..i.."#)]")
end
fsetPath:write("\n")
fsetPath:write("\n")
-- Generate Metadata
fsetPath:write("[Metadata]\n")
-- The metadata name matches the number of cores
fsetPath:write("Name="..Cores.." core CPU display\n")
fsetPath:write("Description=Dynamically generated Rainmeter skin via Lua\n")
fsetPath:write("Version=1.00\n")
fsetPath:write("\n")
-- Included for completeness sake, did not store any variables for this test, probably can
-- optimize if they are added.
fsetPath:write("[Variables]\n")
fsetPath:write("@include=#CURRENTPATH#Settings.inc\n")
fsetPath:write("ArcStart1=#size#\n")
fsetPath:write("ArcStart2=(#size#-#spacing#)\n")
fsetPath:write("ArcStart3=(#size#-(#spacing#*2))\n")
fsetPath:write("ArcStart4=(#size#-(#spacing#*3))\n")
fsetPath:write("X1=0\n")
fsetPath:write("Y1=0\n")
fsetPath:write("W1=0\n")
fsetPath:write("H1=0\n")
fsetPath:write("X2=#spacing#\n")
fsetPath:write("Y2=#spacing#\n")
fsetPath:write("W2=0\n")
fsetPath:write("H2=0\n")
fsetPath:write("X3=(#spacing#*2)\n")
fsetPath:write("Y3=(#spacing#*2)\n")
fsetPath:write("W3=0\n")
fsetPath:write("H3=0\n")
fsetPath:write("X4=(#spacing#*3)\n")
fsetPath:write("Y4=(#spacing#*3)\n")
fsetPath:write("W4=0\n")
fsetPath:write("H4=0\n")
fsetPath:write("\n")
fsetPath:write("\n")
end -- function generateHeader
-- Generates the bulk of the skin, looping to provide the required CPU bars.
function codeGenerator(cpus)
-- Each CPU will be generated this way due to the FOR loop.
-- Measure CPU#
fsetPath:write("[MeasureCPU"..cpus.."]\n")
fsetPath:write("Measure=CPU\n")
fsetPath:write("Processor="..cpus.."\n")
fsetPath:write("AverageSize=4\n")
fsetPath:write("\n")
fsetPath:write("[MeasureAngleCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("; A parabolic function is used to dampen low\n")
fsetPath:write("; activity, making for a less annoying meter.\n")
fsetPath:write("; It takes the form of f(x)=x^2.\n")
fsetPath:write("Formula=(MeasureAngleCPU"..cpus.." + 0.01 + (MeasureCPU"..cpus.." * 0.01) ** 2) % 6.283\n")
fsetPath:write("\n")
fsetPath:write("[MeasureAngle1CPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=MeasureAngleCPU"..cpus.."\n")
fsetPath:write("\n")
fsetPath:write("[MeasureAngle2CPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=MeasureAngleCPU"..cpus.." + 3.14\n")
fsetPath:write("\n")
fsetPath:write("[MeasureArcCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=(MeasureCPU"..cpus.." * 0.003) ** 1.4 + 0.01\n")
fsetPath:write("\n")
fsetPath:write("; Functions to shift skin past edge of screen depending on #PadRadius# value.\n")
fsetPath:write("\n")
fsetPath:write("[MeasureXCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=ABS(SGN(#CURRENTCONFIGX#) - 1)\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("IfEqualValue=(#spacing#*"..(cpus -1)..")\n")
fsetPath:write("IfEqualAction=!SetVariable X"..cpus.." (#spacing#*"..(cpus -1)..")\n")
fsetPath:write("IfAboveValue=(#spacing#*"..(cpus -1)..")\n")
fsetPath:write("IfAboveAction=!SetVariable X"..cpus.." \"(#PadRadius"..cpus.."# - #ArcStart"..cpus.."# - #ArcOffset"..cpus.."# * 9 - #ArcLength"..cpus.."#) + (#spacing#*"..(cpus -1)..")\"\n")
fsetPath:write("\n")
fsetPath:write("[MeasureYCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=ABS(SGN(#CURRENTCONFIGY#) - 1)\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("IfEqualValue=(#spacing#*"..(cpus -1)..")\n")
fsetPath:write("IfEqualAction=!SetVariable Y"..cpus.." (#spacing#*"..(cpus -1)..")\n")
fsetPath:write("IfAboveValue=(#spacing#*"..(cpus -1)..")\n")
fsetPath:write("IfAboveAction=!SetVariable Y"..cpus.." \"(#PadRadius"..cpus.."# - #ArcStart"..cpus.."# - #ArcOffset"..cpus.."# * 9 - #ArcLength"..cpus.."#) + (#spacing#*"..(cpus -1)..")\"\n")
fsetPath:write("\n")
fsetPath:write("[MeasureWCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=ABS(SGN(#SCREENAREAWIDTH# - #CURRENTCONFIGWIDTH# - #CURRENTCONFIGX#) - 1)\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("IfEqualValue=0\n")
fsetPath:write("IfEqualAction=!SetVariable W"..cpus.." \"((#ArcStart"..cpus.."# + #ArcOffset"..cpus.."# * 9 + #ArcLength"..cpus.."#) * 2)\"\n")
fsetPath:write("IfAboveValue=0\n")
fsetPath:write("IfAboveAction=!SetVariable W"..cpus.." \"(((#ArcStart"..cpus.."# + #ArcOffset"..cpus.."# * 9 + #ArcLength"..cpus.."#) * 2 - #PadRadius"..cpus.."#) * 2)\"\n")
fsetPath:write("\n")
fsetPath:write("[MeasureHCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=ABS(SGN(#SCREENAREAHEIGHT# - #CURRENTCONFIGHEIGHT# - #CURRENTCONFIGY#) - 1)\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("IfEqualValue=0\n")
fsetPath:write("IfEqualAction=!SetVariable H"..cpus.." \"((#ArcStart"..cpus.."# + #ArcOffset"..cpus.."# * 9 + #ArcLength"..cpus.."#) * 2)\"\n")
fsetPath:write("IfAboveValue=0\n")
fsetPath:write("IfAboveAction=!SetVariable H"..cpus.." \"(((#ArcStart"..cpus.."# + #ArcOffset"..cpus.."# * 9 + #ArcLength"..cpus.."#) * 2 - #PadRadius"..cpus.."#) * 2)\"\n")
fsetPath:write("\n")
fsetPath:write("[MeasureQuadrantCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("; (Top half of screen ? 0.5 : 0) + (odd quadrant = -1; even quadrant = 1) * 0.2 + 0.25\n")
fsetPath:write("Formula=SGN(SGN(#SCREENAREAHEIGHT# / 2 - (#CURRENTCONFIGY# + #CURRENTCONFIGHEIGHT# / 2)) + 1) * 0.5 + (ABS(SGN((#CURRENTCONFIGX# + #CURRENTCONFIGWIDTH# / 2) - #SCREENAREAWIDTH# / 2) + SGN((#CURRENTCONFIGY# + #CURRENTCONFIGHEIGHT# / 2) - #SCREENAREAHEIGHT# / 2)) - 1) * 0.2 + 0.25\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("Disabled=#ConfigHide"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("[MeasureXPosCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("; Returns 0 for left half of screen, 1 for right half\n")
fsetPath:write("Formula=((#CURRENTCONFIGX# * 2 + #CURRENTCONFIGWIDTH#) - #SCREENAREAWIDTH#) < 0 ? 0 : 1\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("Disabled=#ConfigHide"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("[MeasureYPosCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("; Returns 0 for top half of screen, 1 for bottom half\n")
fsetPath:write("Formula=((#CURRENTCONFIGY# * 2 + #CURRENTCONFIGHEIGHT#) - #SCREENAREAHEIGHT#) < 0 ? 0 : 1\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("Disabled=#ConfigHide"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("[MeasureCircleCPU"..cpus.."]\n")
fsetPath:write("Measure=CALC\n")
fsetPath:write("Formula=1\n")
fsetPath:write("UpdateDivider=-1\n")
fsetPath:write("\n")
fsetPath:write("; ----------------STYLES----------------\n")
fsetPath:write("\n")
fsetPath:write("[StyleArcCPU"..cpus.."]\n")
fsetPath:write("MeasureName=MeasureArcCPU"..cpus.."\n")
fsetPath:write("X=#X"..cpus.."#\n")
fsetPath:write("Y=#Y"..cpus.."#\n")
fsetPath:write("W=#W"..cpus.."#\n")
fsetPath:write("H=#H"..cpus.."#\n")
fsetPath:write("LineStart=#ArcStart"..cpus.."#\n")
fsetPath:write("LineLength=#ArcLineLength"..cpus.."#\n")
fsetPath:write("LineColor=#Color"..cpus.."#\n")
fsetPath:write("AntiAlias=1\n")
fsetPath:write("Solid=1\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("\n")
fsetPath:write("[StyleShadowCPU"..cpus.."]\n")
fsetPath:write("X=(#X"..cpus.."# + #ShadowOffset"..cpus.."#)\n")
fsetPath:write("Y=(#Y"..cpus.."# + #ShadowOffset"..cpus.."#)\n")
fsetPath:write("LineColor=#ColorShadow"..cpus.."#, 64\n")
fsetPath:write("Hidden=#ShadowHide"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("[StyleConfigCPU"..cpus.."]\n")
fsetPath:write("X=#X"..cpus.."#\n")
fsetPath:write("Y=#Y"..cpus.."#\n")
fsetPath:write("W=#W"..cpus.."#\n")
fsetPath:write("H=#H"..cpus.."#\n")
fsetPath:write("AntiAlias=1\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("Hidden=#ConfigHide"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("[StyleConfigLabelCPU"..cpus.."]\n")
fsetPath:write("SolidColor=0, 0, 0\n")
fsetPath:write("FontColor=255, 255, 255\n")
fsetPath:write("FontSize=10\n")
fsetPath:write("FontFace=Arial\n")
fsetPath:write("StringStyle=BOLD\n")
fsetPath:write("AntiAlias=1\n")
fsetPath:write("DynamicVariables=1\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("Hidden=#ConfigHide"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("; ----------------METERS----------------\n")
fsetPath:write("\n")
fsetPath:write("[MeterClickCPU"..cpus.."]\n")
fsetPath:write("Meter=ROUNDLINE\n")
fsetPath:write("MeterStyle=StyleArcCPU"..cpus.."\n")
fsetPath:write("MeasureName=MeasureCircleCPU"..cpus.."\n")
fsetPath:write("LineColor=#Color"..cpus.."#, 20\n")
fsetPath:write("AntiAlias=0\n")
fsetPath:write("UpdateDivider=20\n")
fsetPath:write("\n")
fsetPath:write("[MeterArc1ShadowCPU"..cpus.."]\n")
fsetPath:write("Meter=ROUNDLINE\n")
fsetPath:write("MeterStyle=StyleArcCPU"..cpus.." | StyleShadowCPU"..cpus.."\n")
fsetPath:write("StartAngle=[MeasureAngle1CPU"..cpus.."]\n")
fsetPath:write("\n")
fsetPath:write("[MeterArc2ShadowCPU"..cpus.."]\n")
fsetPath:write("Meter=ROUNDLINE\n")
fsetPath:write("MeterStyle=StyleArcCPU"..cpus.." | StyleShadowCPU"..cpus.."\n")
fsetPath:write("StartAngle=[MeasureAngle2CPU"..cpus.."]\n")
fsetPath:write("Hidden=#OneArc"..cpus.."#\n")
fsetPath:write("\n")
fsetPath:write("[MeterArc1CPU"..cpus.."]\n")
fsetPath:write("Meter=ROUNDLINE\n")
fsetPath:write("MeterStyle=StyleArcCPU"..cpus.."\n")
fsetPath:write("StartAngle=[MeasureAngle1CPU"..cpus.."]\n")
fsetPath:write("\n")
fsetPath:write("[MeterArc2CPU"..cpus.."]\n")
fsetPath:write("Meter=ROUNDLINE\n")
fsetPath:write("MeterStyle=StyleArcCPU"..cpus.."\n")
fsetPath:write("StartAngle=[MeasureAngle2CPU"..cpus.."]\n")
fsetPath:write("Hidden=#OneArc"..cpus.."#\n")
fsetPath:write("\n")
end -- function GetStringValue
7 posts
• Page 1 of 1