OK...I've put together the basics of what should work for the arc. It's ugly as this isn't my language of choice and I'm simply not familiar with it.
But, I am having a weird problem. The modalnumber function in particular. I'm not sure if this is a custom function within Sheetcam but it seems to be selectively not displaying anything (no real reason that I can see).
but here's the arc portion of the post file:
Code:
function arc()
--Here is where we need to break an arc into quadrants
--arccenterx & y is it's physical location
--I'm not allowing Z arcs since my machine can't do it
--
--Quadrants 1(X+Y+),2(X+Y-),3(X-Y-),4(X-Y+)
arc_currentx = arccentrex - currentx
arc_currenty = arccentrey - currenty
arc_endx = arccentrex - endx
arc_endy = arccentrey - endy
arc_distancetocenter = math.sqrt((arc_currentx * arc_currentx) + (arc_currenty * arc_currenty))
-- text (arc_distancetocenter )
current_quadrant = ""
finish_quadrant = ""
if (arc_currentx >= 0 and arc_currenty >= 0) then
current_quadrant = "1"; end
if (arc_currentx >= 0 and arc_currenty <= 0) then
current_quadrant = "2"; end
if (arc_currentx <= 0 and arc_currenty <= 0) then
current_quadrant = "3"; end
if (arc_currentx <= 0 and arc_currenty >= 0) then
current_quadrant = "4"; end
if (arc_endx >= 0 and arc_endy >= 0) then
finish_quadrant = "1"; end
if (arc_endx >= 0 and arc_endy <= 0) then
finish_quadrant = "2"; end
if (arc_endx <= 0 and arc_endy <= 0) then
finish_quadrant = "3"; end
if (arc_endx <= 0 and arc_endy >= 0) then
finish_quadrant = "4"; end
text("quad1: ")
text(current_quadrant)
text(" quad2: ")
text(finish_quadrant)
text("\n")
if (current_quadrant == finish_quadrant) then
--if the move starts and ends in the same quadrant
text("**same quadrant ")
modalnumber (" X", endx * scale, "0.0000")
modalnumber (" y", endy * scale, "0.0000")
modalnumber (" /X", (arccentrex - currentx) * scale, "0.0000")
modalnumber (" /y", (arccentrey - currenty) * scale, "0.0000")
text("\n")
else
while (current_quadrant ~= finish_quadrant) do
--finish point is not in the current quadrant
currentx = 0
currenty = 0
if(arcangle <0) then
if (current_quadrant == "1") then
new_current_quadrant = "4"
currentx = -arc_distancetocenter
currenty = arc_distancetocenter
end
if (current_quadrant == "2") then
new_current_quadrant = "1"
currentx = arc_distancetocenter
currenty = arc_distancetocenter
end
if (current_quadrant == "3") then
new_current_quadrant = "2"
currentx = arc_distancetocenter
currenty = -arc_distancetocenter
end
if (current_quadrant == "4") then
new_current_quadrant = "3"
currentx = -arc_distancetocenter
currenty = -arc_distancetocenter
end
current_quadrant = new_current_quadrant
text (" CCW ")
else
if (current_quadrant == "4") then
new_current_quadrant = "1"
currentx = arc_distancetocenter
currenty = arc_distancetocenter
end
if (current_quadrant == "3") then
new_current_quadrant = "4"
currentx = -arc_distancetocenter
currenty = arc_distancetocenter
end
if (current_quadrant == "2") then
new_current_quadrant = "3"
currentx = -arc_distancetocenter
currenty = -arc_distancetocenter
end
if (current_quadrant == "1") then
new_current_quadrant = "2"
currentx = arc_distancetocenter
currenty = -arc_distancetocenter
end
current_quadrant = new_current_quadrant
text "cw"
end
text ("Step Arc: ")
text (current_quadrant)
modalnumber ("# X", currentx * scale, "0.0000")
modalnumber ("# y", currenty * scale, "0.0000")
modalnumber ("# /X", (arccentrex - currentx) * scale, "0.0000")
modalnumber ("# /y", (arccentrey - currenty) * scale, "0.0000")
text ("\n")
end
--we have moved into the finish quadrant
text("**exit quadrant ")
modalnumber ("$ X", endx * scale, "0.000")
modalnumber ("$ y", endy * scale, "0.000")
modalnumber ("$ /X", (arccentrex - currentx) * scale, "0.000")
modalnumber ("$ /y", (arccentrey - currenty) * scale, "0.000")
text("\n")
end
eol()
end Note - the values are still a messed up hybrid of relative and absolute...ignore that for now. Also I have some random characters infront of arcs...this is just to verify the results I'm getting are firing the right lines.
The problem I'm having with the output is this:
Code:
**same quadrant X2.3966 y-0.0675 /X-0.0675 /y0.0000
X0.0000 Y-0.0675
quad1: 4 quad2: 2
cwStep Arc: 1# X0.0675# y0.0675# /X-0.0675# /y-0.0675
cwStep Arc: 2# y-0.0675# /y0.0675
**exit quadrant $ X-0.067$ y0.000$ /X-0.068$ /y0.068
X-0.0675 Y1.8474
the bolded line is an example of the data simply not showing the results. No X value or /X although there does appear to be data there.