---------------------------------------------------------------------------- -- Software Surface Speed Script for Mach4 -- DazTheGas December 2018 ---------------------------------------------------------------------------- local inst = mc.mcGetInstance() local panel = mcLuaPanelParent local rpm = 0 local diameter = 0 local xpos = 0 local oldxpos = 0 local Units = 0 -- default local unit = 0 local minrpm = 0 local maxrpm = 0 local css_enabled = 0 CSS_Enable = wx.wxButton( panel, wx.wxID_ANY, "CSS On/Off", wx.wxPoint( 0,5 ), wx.wxSize( 220,30 ), 0 ) CSS_Enable:SetBackgroundColour( wx.wxColour( 228, 228, 228 ) ) CSS_SFM_lbl = wx.wxStaticText( panel, wx.wxID_ANY, "SFM", wx.wxPoint( 0,40 ), wx.wxSize( 55,20 ), 0 ) CSS_SFM = wx.wxTextCtrl( panel, wx.wxID_ANY, "900", wx.wxPoint( 60,40 ), wx.wxSize( 80,20 ), 0 ) CSS_minRPM_lbl = wx.wxStaticText( panel, wx.wxID_ANY, "Min RPM", wx.wxPoint( 0,70 ), wx.wxSize( 55,20 ), 0 ) CSS_minRPM = wx.wxTextCtrl( panel, wx.wxID_ANY, "500", wx.wxPoint( 60,70 ), wx.wxSize( 80,20 ), 0 ) CSS_maxRPM_lbl = wx.wxStaticText( panel, wx.wxID_ANY, "Max RPM", wx.wxPoint( 0,100 ), wx.wxSize( 55,20 ), 0 ) CSS_maxRPM = wx.wxTextCtrl( panel, wx.wxID_ANY, "3500", wx.wxPoint( 60,100 ), wx.wxSize( 80,20 ), 0 ) CSS_Metric = wx.wxRadioButton( panel, wx.wxID_ANY, "Metric", wx.wxPoint( 160,50), wx.wxDefaultSize, 0 ) --CSS_Metric:SetValue(true) CSS_Imperial = wx.wxRadioButton( panel, wx.wxID_ANY, "Imperial", wx.wxPoint( 160,80 ), wx.wxDefaultSize, 0 ) CSS_Imperial:SetValue(true) --default CSS_Enable:Connect( wx.wxEVT_LEFT_UP, function(event) if css_enabled == 0 then unit = tonumber(CSS_SFM:GetValue()) minrpm = tonumber(CSS_minRPM:GetValue()) maxrpm = tonumber(CSS_maxRPM:GetValue()) css_enabled = 1 PanelLoop:Start(100) CSS_Enable:SetBackgroundColour( wx.wxColour( 0, 255, 0 ) ) else css_enabled = 0 PanelLoop:Stop() CSS_Enable:SetBackgroundColour( wx.wxColour( 228, 228, 228 ) ) end event:Skip() end ) CSS_Imperial:Connect( wx.wxEVT_COMMAND_RADIOBUTTON_SELECTED, function(event) CSS_SFM_lbl:SetLabel('SFM') Units = 0 event:Skip() end ) CSS_Metric:Connect( wx.wxEVT_COMMAND_RADIOBUTTON_SELECTED, function(event) CSS_SFM_lbl:SetLabel('SMM') Units = 1 event:Skip() end ) PanelLoop = wx.wxTimer(panel) panel:Connect(wx.wxEVT_TIMER, function (event) xpos = mc.mcAxisGetPos(inst, mc.X_AXIS) -- Get X Axis Position if xpos == oldxpos then return end -- If x position same as last loop then exit if Units == 0 then -- default diameter = math.abs(xpos * 2) / 25.4 -- Get our diameter in inches rpm = (unit * 3.82) / diameter -- Calculate needed rpm end if Units == 1 then diameter = math.abs(xpos * 2) -- Get our diameter in mm rpm = (unit * 318) / diameter -- Calculate needed rpm end if rpm == minrpm then return end if rpm < minrpm then rpm = minrpm end if rpm == maxrpm then return end if rpm > maxrpm then rpm = maxrpm end mc.mcSpindleSetCommandRPM(inst, rpm) oldxpos = xpos event:Skip() end)