I’m not sure if I’m even posting in the proper forum. Please excuse my ignorance.
I’m a little overwhelmed trying to figure out how to edit the standard Mach 3 post for Fusion360 for plasma cutting op.
I need to add the ability to post an M10P3 command prior to any Holes or radius smaller than 0.6” and corners tighter than 60° Then follow it with M11P3. I also need to do the M11 on lead in and the M10 0” after. Same concept for lead out. Id prefer to make them variables that can be set via the post UI if possible. I did try using AI before attempting to embarrass myself here. It wrote me basic “if” statements though I’m not sure how to implement them into the post.
Any guidance would be appreciated.
Good morning,
Sorry for the delayed response.
For adding something prior to a lead-in / lead-out, you could add this function to your post:
function onMovement(movement){
if (movement == MOVEMENT_LEAD_IN) {
writeBlock(mFormat.format(11));
} else if (movement == MOVEMENT_LEAD_OUT) {
writeBlock(mFormat.format(10), '0"');
}
}
Here you will see it checks for lead-in/out and adds the appropriate commands
For the option of you are looking for based on the radius, you would need to do some logic in onCircular(). Here is a quick example (it would likely need changing):
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
if (pendingRadiusCompensation >= 0) {
error(localize("Radius compensation cannot be activated/deactivated for a circular move."));
return;
}
var start = getCurrentPosition();
if (getCircularRadius() < toPreciseUnit(0.6, IN)) {
writeBlock (mFormat.format(10) + "P3");
}
writeBlock(getCircularRadius())
if (isFullCircle()) {
if (isHelical()) {
linearize(tolerance);
return;
}
switch (getCircularPlane()) {
case PLANE_XY:
writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed));
break;
default:
linearize(tolerance);
}
} else {
switch (getCircularPlane()) {
case PLANE_XY:
writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed));
break;
default:
linearize(tolerance);
}
}
if (getCircularRadius() < toPreciseUnit(0.6, IN)) {
writeBlock (mFormat.format(11) + "P3");
}
}
Hope this helps you get started!
George Roberts
Manufacturing Product managerThank you for the response. Where in the post is it safe to make these edits. With The onCircular logic the final if statement says:
if (getCircularRadius() < toPreciseUnit(0.6, IN)) {
writeBlock (mFormat.format(11) + "P3");
Isn't that the same as the leading If? or am I confused on this?
if (getCircularRadius() < toPreciseUnit(0.6, IN)) {
writeBlock (mFormat.format(10) + "P3");
Thanks for the response. Can you explain where in the post its safe to make theses edits. Do I need to name and declare the function first?
Also, does the oncircular edits you demonstrated for me look correct? The leading "If " statement looks similar to the finale "If " statement. Or, am I confused on this.
Can't find what you're looking for? Ask the community or share your knowledge.