hsmworks & fusion ref files

This commit is contained in:
lovebird 2026-02-02 09:24:49 +01:00
parent 0dfcb9ddd5
commit b553b2d7bb
1941 changed files with 640034 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,48 @@
{
"$comment": "Schema to validate the model response when generating feeds and speeds.",
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"surface_speed": {
"$ref": "#/definitions/machining_parameter"
},
"chip_load": {
"$ref": "#/definitions/machining_parameter"
}
},
"required": [
"surface_speed",
"chip_load"
],
"additionalProperties": false,
"definitions": {
"machining_parameter": {
"type": "object",
"properties": {
"cautious_value": {
"type": "number"
},
"balanced_value": {
"type": "number"
},
"fast_value": {
"type": "number"
},
"unit": {
"type": "string"
},
"justification": {
"type": "string"
}
},
"required": [
"cautious_value",
"balanced_value",
"fast_value",
"unit",
"justification"
],
"additionalProperties": false
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,447 @@
/**
Copyright (C) 2012-2021 by Autodesk, Inc.
All rights reserved.
Common APT ISO 4343 post processor configuration.
$Revision: 43882 a148639d401c1626f2873b948fb6d996d3bc60aa $
$Date: 2022-04-12 21:31:49 $
FORKID {1E3EF622-47FE-487d-937B-07920048EF52}
*/
description = "Common ISO 4343 APT";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2021 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Post for Common APT ISO 4343.";
unit = ORIGINAL_UNIT; // do not map unit
extension = "apt";
setCodePage("ansi");
capabilities = CAPABILITY_INTERMEDIATE;
allowHelicalMoves = true;
allowedCircularPlanes = undefined; // allow any circular motion
// user-defined properties
properties = {
highAccuracy: {
title : "High accuracy",
description: "Specifies short (no) or long (yes) numeric format.",
group : "preferences",
type : "boolean",
value : true,
scope : "post"
},
showNotes: {
title : "Show notes",
description: "Writes operation notes as comments in the outputted code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
}
};
var mainFormat = createFormat({decimals:6, forceDecimal:true});
var ijkFormat = createFormat({decimals:9, forceDecimal:true});
// collected state
var currentFeed;
var feedUnit;
var coolantActive = false;
var radiusCompensationActive = false;
var multax = false;
function writeComment(text) {
writeln("PPRINT/'" + filterText(text, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(.,)_/-+*= \t") + "'");
}
function onOpen() {
var machineId = machineConfiguration.getModel();
if (machineId) {
writeln("MACHIN/" + machineId);
}
writeln("MODE/" + (isMilling() ? "MILL" : "TURN")); // first statement for an operation
writeln("PARTNO/'" + programName + "'");
writeComment(programName);
writeComment(programComment);
writeln("UNITS/" + ((unit == IN) ? "INCHES" : "MM"));
if (!getProperty("highAccuracy")) {
mainFormat = createFormat({decimals:4, forceDecimal:true});
ijkFormat = createFormat({decimals:7, forceDecimal:true});
}
}
function onComment(comment) {
writeComment(comment);
}
var mapCommand = {
COMMAND_STOP : "STOP",
COMMAND_OPTIONAL_STOP: "OPSTOP",
COMMAND_STOP_SPINDLE : "SPINDL/ON",
COMMAND_START_SPINDLE: "SPINDL/OFF",
// COMMAND_ORIENTATE_SPINDLE
COMMAND_SPINDLE_CLOCKWISE : "SPINDL/CLW",
COMMAND_SPINDLE_COUNTERCLOCKWISE: "SPINDL/CCLW"
// COMMAND_ACTIVATE_SPEED_FEED_SYNCHRONIZATION
// COMMAND_DEACTIVATE_SPEED_FEED_SYNCHRONIZATION
};
function onCommand(command) {
switch (command) {
case COMMAND_LOCK_MULTI_AXIS:
return;
case COMMAND_UNLOCK_MULTI_AXIS:
return;
case COMMAND_BREAK_CONTROL:
return;
case COMMAND_TOOL_MEASURE:
return;
}
var c = mapCommand[getCommandStringId(command)];
if (c !== undefined) {
writeln(c);
} else {
warning("Unsupported command: " + getCommandStringId(command));
writeComment("Unsupported command: " + getCommandStringId(command));
}
}
function onCoolant() {
if (coolant == COOLANT_OFF) {
if (coolantActive) {
writeln("COOLNT/OFF");
coolantActive = false;
}
} else {
if (!coolantActive) {
writeln("COOLNT/ON");
coolantActive = true;
}
var mapCoolant = {COOLANT_FLOOD:"flood", COOLANT_MIST:"MIST", COOLANT_TOOL:"THRU"};
if (mapCoolant[coolant]) {
writeln("COOLNT/" + mapCoolant[coolant]);
} else {
warning("Unsupported coolant mode: " + coolant);
writeComment("Unsupported coolant mode: " + coolant);
}
}
}
/*
Define 7-Parameter APT Cutter.
*/
function writeCutter() {
var d = tool.diameter;
var r = tool.cornerRadius;
var e = tool.tipDiameter;
var f = r;
var a = 0;
var b = tool.taperAngle;
var h = tool.fluteLength;
// Adjust taper angle for drill
// It is defined as the full inclusive angle
if ((tool.type == TOOL_DRILL) ||
(tool.type == TOOL_DRILL_CENTER) ||
(tool.type == TOOL_DRILL_SPOT)) {
b /= 2;
}
// Adjust diameter for cone cutter
if ((b > 0) && (b < Math.PI / 2)) {
d = e + r;
d = d - (2 * r) + (2 * (r * Math.tan((Math.PI / 2 - b) / 2)));
// Adjust diameter for bell cutter
} else if ((b < 0) && (b > Math.PI / 2)) {
d = e + r;
d += 2 * (r * (tan(-b / 2) + 1) / (Math.tan(Math.PI / 2 + b)));
}
writeln("CUTTER/" + mainFormat.format(d) + ", " + mainFormat.format(r) +
", " + mainFormat.format(e) + ", " + mainFormat.format(f) + ", " +
mainFormat.format(a) + ", " + mainFormat.format(toDeg(b)) + ", " +
mainFormat.format(h)
);
}
function onSection() {
feedUnit = (unit == IN) ? "IPM" : "MMPM";
if (currentSection.isMultiAxis() || !currentSection.isZOriented()) {
if (!multax || isFirstSection()) {
writeln("MULTAX/ON");
}
multax = true;
} else {
if (multax || isFirstSection()) {
writeln("MULTAX/OFF");
}
multax = false;
}
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
if (comment) {
writeComment(comment);
}
}
if (getProperty("showNotes") && hasParameter("notes")) {
var notes = getParameter("notes");
if (notes) {
var lines = String(notes).split("\n");
var r1 = new RegExp("^[\\s]+", "g");
var r2 = new RegExp("[\\s]+$", "g");
for (line in lines) {
var comment = lines[line].replace(r1, "").replace(r2, "");
if (comment) {
writeComment(comment);
}
}
}
}
writeCutter();
var t = tool.number;
var p = 0;
var l = tool.bodyLength;
var o = tool.lengthOffset;
writeln("LOADTL/" + t + ", " + p + ", " + mainFormat.format(l) + ", " + o);
// writeln("OFSTNO/" + 0); // not used
if (isMilling()) {
writeln("SPINDL/" + mainFormat.format(spindleSpeed) + ", RPM, " + (tool.clockwise ? "CLW" : "CCLW"));
}
if (isTurning()) {
writeln(
"SPINDL/" + mainFormat.format(spindleSpeed) + ", " + ((unit == IN) ? "SFM" : "SMM") + ", " + (tool.clockwise ? "CLW" : "CCLW")
);
}
setRotation(currentSection.workPlane);
// writeln("ORIGIN/" + currentSection.workOrigin.x + ", " + currentSection.workOrigin.y + ", " + currentSection.workOrigin.z);
}
function onDwell(time) {
writeln("DELAY/" + mainFormat.format(time)); // in seconds
}
function onRadiusCompensation() {
if (radiusCompensation == RADIUS_COMPENSATION_OFF) {
if (radiusCompensationActive) {
radiusCompensationActive = false;
writeln("CUTCOM/OFF");
}
} else {
if (!radiusCompensationActive) {
radiusCompensationActive = true;
writeln("CUTCOM/ON");
}
var direction = (radiusCompensation == RADIUS_COMPENSATION_LEFT) ? "LEFT" : "RIGHT";
if (tool.diameterOffset != 0) {
writeln("CUTCOM/" + direction + ", " + tool.diameterOffset);
} else {
writeln("CUTCOM/" + direction);
}
}
}
function writeGOTO(x, y, z, i, j, k) {
if (multax) {
writeln("GOTO/" +
mainFormat.format(x) + ", " +
mainFormat.format(y) + ", " +
mainFormat.format(z) + ", " +
ijkFormat.format(i) + ", " +
ijkFormat.format(j) + ", " +
ijkFormat.format(k)
);
} else {
writeln("GOTO/" +
mainFormat.format(x) + ", " +
mainFormat.format(y) + ", " +
mainFormat.format(z)
);
}
}
function onRapid(x, y, z) {
writeln("RAPID");
writeGOTO(x, y, z, currentSection.workPlane.forward.x, currentSection.workPlane.forward.y, currentSection.workPlane.forward.z);
}
function onLinear(x, y, z, feed) {
if (feed != currentFeed) {
currentFeed = feed;
writeln("FEDRAT/" + mainFormat.format(feed) + ", " + feedUnit);
}
writeGOTO(x, y, z, currentSection.workPlane.forward.x, currentSection.workPlane.forward.y, currentSection.workPlane.forward.z);
}
function onRapid5D(x, y, z, dx, dy, dz) {
writeln("RAPID");
writeGOTO(x, y, z, dx, dy, dz);
}
function onLinear5D(x, y, z, dx, dy, dz, feed) {
if (feed != currentFeed) {
currentFeed = feed;
writeln("FEDRAT/" + mainFormat.format(feed) + ", " + feedUnit);
}
writeGOTO(x, y, z, dx, dy, dz);
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
if (feed != currentFeed) {
currentFeed = feed;
writeln("FEDRAT/" + mainFormat.format(feed) + ", " + feedUnit);
}
var n = getCircularNormal();
if (clockwise) {
n = Vector.product(n, -1);
}
writeln(
"MOVARC/" + mainFormat.format(cx) + ", " + mainFormat.format(cy) + ", " + mainFormat.format(cz) + ", " +
mainFormat.format(n.x) + ", " + mainFormat.format(n.y) + ", " + mainFormat.format(n.z) + ", " +
mainFormat.format(getCircularRadius()) + ", ANGLE, " + mainFormat.format(toDeg(getCircularSweep()))
);
writeGOTO(x, y, z, currentSection.workPlane.forward.x, currentSection.workPlane.forward.y, currentSection.workPlane.forward.z);
}
function onCycle() {
var d = mainFormat.format((cycle.depth !== undefined) ? cycle.depth : 0);
var f = mainFormat.format((cycle.feedrate !== undefined) ? cycle.feedrate : 0);
var c = mainFormat.format((cycle.clearance !== undefined) ? cycle.clearance : 0);
var r = mainFormat.format((cycle.retract !== undefined) ? (c - cycle.retract) : 0);
var q = mainFormat.format((cycle.dwell !== undefined) ? cycle.dwell : 0);
var i = mainFormat.format((cycle.incrementalDepth !== undefined) ? cycle.incrementalDepth : 0); // for pecking
var statement;
switch (cycleType) {
case "drilling":
statement = "CYCLE/DRILL, " + d + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
break;
case "counter-boring":
statement = "CYCLE/DRILL, " + d + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
if (q > 0) {
statement += ", DWELL, " + q;
}
break;
case "reaming":
statement = "CYCLE/REAM, " + d + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
if (q > 0) {
statement += ", DWELL, " + q;
}
break;
case "boring":
statement = "CYCLE/BORE, " + d + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
statement += ", ORIENT, " + 0; // unknown orientation
if (q > 0) {
statement += ", DWELL, " + q;
}
break;
case "fine-boring":
statement = "CYCLE/BORE, " + d + ", " + feedUnit + ", " + f + ", " + c + ", " + cycle.shift;
if (r > 0) {
statement += ", RAPTO, " + r;
}
statement += ", ORIENT, " + 0; // unknown orientation
if (q > 0) {
statement += ", DWELL, " + q;
}
break;
case "deep-drilling":
statement = "CYCLE/DEEP, " + d + ", INCR, " + i + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
if (q > 0) {
statement += ", DWELL, " + q;
}
break;
case "chip-breaking":
statement = "CYCLE/BRKCHP, " + d + ", INCR, " + i + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
if (q > 0) {
statement += ", DWELL, " + q;
}
break;
case "tapping":
if (tool.type == TOOL_TAP_LEFT_HAND) {
cycleNotSupported();
} else {
statement = "CYCLE/TAP, " + d + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
}
break;
case "right-tapping":
statement = "CYCLE/TAP, " + d + ", " + feedUnit + ", " + f + ", " + c;
if (r > 0) {
statement += ", RAPTO, " + r;
}
break;
default:
cycleNotSupported();
}
writeln(statement);
}
function onCyclePoint(x, y, z) {
writeln("FEDRAT/" + mainFormat.format(cycle.feedrate) + ", " + feedUnit);
writeGOTO(x, y, z, currentSection.workPlane.forward.x, currentSection.workPlane.forward.y, currentSection.workPlane.forward.z);
}
function onCycleEnd() {
writeln("CYCLE/OFF");
}
function onSectionEnd() {
}
function onClose() {
if (coolantActive) {
coolantActive = false;
writeln("COOLNT/OFF");
}
writeln("END");
writeln("FINI");
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,517 @@
/**
Copyright (C) 2012-2025 by Autodesk, Inc.
All rights reserved.
Burny Plasma post processor configuration.
$Revision: 45583 10f6400eaf1c75a27c852ee82b57479e7a9134c0 $
$Date: 2025-08-21 13:23:15 $
FORKID {E49EFDF4-0C61-4E7B-A77A-686311BCCC19}
*/
description = "Burny Plasma (WADR)";
vendor = "Lincoln Electric";
vendorUrl = "http://www.burny.com";
legal = "Copyright (C) 2012-2025 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Generic post for the Burny plasma cutters.";
extension = "cnc";
programNameIsInteger = true;
setCodePage("ascii");
capabilities = CAPABILITY_JET;
tolerance = spatial(0.002, MM);
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(4000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(360);
allowHelicalMoves = false;
allowedCircularPlanes = 1 << PLANE_XY; // only XY
// user-defined properties
properties = {
writeMachine: {
title : "Write machine",
description: "Output the machine settings in the header of the code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
showSequenceNumbers: {
title : "Use sequence numbers",
description: "Use sequence numbers for each block of outputted code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
sequenceNumberStart: {
title : "Start sequence number",
description: "The number at which to start the sequence numbers.",
group : "formats",
type : "integer",
value : 10,
scope : "post"
},
sequenceNumberIncrement: {
title : "Sequence number increment",
description: "The amount by which the sequence number is incremented by in each block.",
group : "formats",
type : "integer",
value : 1,
scope : "post"
},
separateWordsWithSpace: {
title : "Separate words with space",
description: "Adds spaces between words if 'yes' is selected.",
group : "formats",
type : "boolean",
value : false,
scope : "post"
},
useAbsoluteIJ: {
title : "Absolute IJ",
description: "IJ for G2/G3 is assumed to be absolute, ensure SD51-PRGM FORMAT is set accordingly.",
group : "preferences",
type : "boolean",
value : true,
scope : "post"
},
useHeightSensor: {
title : "Use height sensor",
description: "Use height sensor M14/M15.",
group : "preferences",
type : "boolean",
value : false,
scope : "post"
},
overlayTable: {
title : "Overlay table",
description: "Use 0-4 for G46.",
group : "preferences",
type : "integer",
value : -1,
scope : "post"
},
useRepeat: {
title : "Use repeat",
description: "Use G97/G98 to repeat the program.",
group : "preferences",
type : "boolean",
value : false,
scope : "post"
}
};
var gFormat = createFormat({prefix:"G", decimals:0, width:2, zeropad:true});
var mFormat = createFormat({prefix:"M", decimals:0, width:2, zeropad:true});
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
var feedFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-1000
var xOutput = createVariable({prefix:"X"}, xyzFormat);
var yOutput = createVariable({prefix:"Y"}, xyzFormat);
var feedOutput = createVariable({prefix:"F"}, feedFormat);
// circular output
var iOutput;
var jOutput;
var gMotionModal = createModal({force:true}, gFormat); // modal group 1 // G2-G3 - linear moves do not use G-word
var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91
var gUnitModal = createModal({}, gFormat); // modal group 6 // G70-71
// collected state
var sequenceNumber;
var currentWorkOffset;
/**
Writes the specified block.
*/
function writeBlock() {
if (getProperty("showSequenceNumbers")) {
writeWords2("N" + sequenceNumber, arguments);
sequenceNumber += getProperty("sequenceNumberIncrement");
} else {
writeWords(arguments);
}
}
function formatComment(text) {
return "(" + String(text).replace(/[()]/g, "") + ")";
}
/**
Output a comment.
*/
function writeComment(text) {
// not supported writeln(formatComment(text));
}
function onOpen() {
// only one of I or J are required
if (getProperty("useAbsoluteIJ")) {
iOutput = createVariable({prefix:"I", force:true}, xyzFormat);
jOutput = createVariable({prefix:"J", force:true}, xyzFormat);
} else {
iOutput = createReferenceVariable({prefix:"I", force:true}, xyzFormat);
jOutput = createReferenceVariable({prefix:"J", force:true}, xyzFormat);
}
if (!getProperty("separateWordsWithSpace")) {
setWordSeparator("");
}
sequenceNumber = getProperty("sequenceNumberStart");
writeln("%"); // required
if (programName) {
var programNumber;
try {
programNumber = getAsInt(programName);
} catch (e) {
error(localize("Program name must be a number."));
return;
}
if (!((programNumber >= 1) && (programNumber <= 99999999))) {
error(localize("Program number is out of range."));
}
var oFormat = createFormat({width:8, zeropad:true, decimals:0});
writeBlock("P" + oFormat.format(programNumber)); // max 8 digits
}
if (programComment) {
writeComment(programComment);
}
// dump machine configuration
var vendor = machineConfiguration.getVendor();
var model = machineConfiguration.getModel();
var description = machineConfiguration.getDescription();
if (getProperty("writeMachine") && (vendor || model || description)) {
writeComment(localize("Machine"));
if (vendor) {
writeComment(" " + localize("vendor") + ": " + vendor);
}
if (model) {
writeComment(" " + localize("model") + ": " + model);
}
if (description) {
writeComment(" " + localize("description") + ": " + description);
}
}
switch (unit) {
case IN:
writeBlock(gUnitModal.format(70));
break;
case MM:
writeBlock(gUnitModal.format(71));
break;
}
// absolute coordinates
writeBlock(gAbsIncModal.format(90));
if (getProperty("overlayTable") >= 0) {
writeBlock(gFormat.format(46), "T" + getProperty("overlayTable")); // select overlay
}
if (getProperty("useRepeat")) {
writeBlock(gFormat.format(97)); // restart here / add Txxxx for counter
}
if (getProperty("useHeightSensor")) {
writeBlock(mFormat.format(15)); // turn on height sensor
}
}
function onComment(message) {
writeComment(message);
}
/** Force output of X, Y, and Z. */
function forceXYZ() {
xOutput.reset();
yOutput.reset();
}
/** Force output of X, Y, Z, and F on next output. */
function forceAny() {
forceXYZ();
feedOutput.reset();
}
function onSection() {
switch (tool.type) {
case TOOL_PLASMA_CUTTER:
break;
default:
error(localize("The CNC does not support the required tool/process. Only plasma cutting is supported."));
return;
}
switch (currentSection.jetMode) {
case JET_MODE_THROUGH:
break;
case JET_MODE_ETCHING:
error(localize("Etch cutting mode is not supported."));
break;
case JET_MODE_VAPORIZE:
error(localize("Vaporize cutting mode is not supported."));
break;
default:
error(localize("Unsupported cutting mode."));
return;
}
{ // pure 3D
var remaining = currentSection.workPlane;
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
error(localize("Tool orientation is not supported."));
return;
}
setRotation(remaining);
}
forceAny();
var initialPosition = getFramePosition(currentSection.getInitialPosition());
gMotionModal.reset();
writeBlock(
gAbsIncModal.format(90),
xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
);
}
function onDwell(seconds) {
if (seconds > 99999.999) {
warning(localize("Dwelling time is out of range."));
}
seconds = clamp(0.001, seconds, 99999.999);
writeBlock(gFormat.format(4), "F" + secFormat.format(seconds));
}
function onCycle() {
error(localize("Canned cycles are not supported by CNC."));
}
function onCyclePoint(x, y, z) {
}
function onCycleEnd() {
}
var pendingRadiusCompensation = -1;
function onRadiusCompensation() {
pendingRadiusCompensation = radiusCompensation;
}
var shapeArea = 0;
var shapePerimeter = 0;
var shapeSide = "inner";
var cuttingSequence = "";
function onParameter(name, value) {
if ((name == "action") && (value == "pierce")) {
// add delay if desired
} else if (name == "shapeArea") {
shapeArea = value;
} else if (name == "shapePerimeter") {
shapePerimeter = value;
} else if (name == "shapeSide") {
shapeSide = value;
} else if (name == "beginSequence") {
if (value == "piercing") {
if (cuttingSequence != "piercing") {
if (getProperty("allowHeadSwitches")) {
// Allow head to be switched here
// onCommand(COMMAND_STOP);
}
}
} else if (value == "cutting") {
if (cuttingSequence == "piercing") {
if (getProperty("allowHeadSwitches")) {
// Allow head to be switched here
// onCommand(COMMAND_STOP);
}
}
}
cuttingSequence = value;
}
}
function onPower(power) {
writeBlock(mFormat.format(power ? 4 : 3)); // or M21/M20
}
function onRapid(_x, _y, _z) {
// at least one axis is required
if (pendingRadiusCompensation >= 0) {
// ensure that we end at desired position when compensation is turned off
xOutput.reset();
yOutput.reset();
}
var x = xOutput.format(_x);
var y = yOutput.format(_y);
if (x || y) {
if (pendingRadiusCompensation >= 0) {
pendingRadiusCompensation = -1;
switch (radiusCompensation) {
case RADIUS_COMPENSATION_LEFT:
writeBlock(gFormat.format(41));
break;
case RADIUS_COMPENSATION_RIGHT:
writeBlock(gFormat.format(42));
break;
default:
writeBlock(gFormat.format(40));
}
}
writeBlock(x, y); // fast linear move
feedOutput.reset();
}
}
function onLinear(_x, _y, _z, feed) {
// at least one axis is required
if (pendingRadiusCompensation >= 0) {
// ensure that we end at desired position when compensation is turned off
xOutput.reset();
yOutput.reset();
}
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var f = feedOutput.format(feed);
if (x || y) {
if (pendingRadiusCompensation >= 0) {
pendingRadiusCompensation = -1;
switch (radiusCompensation) {
case RADIUS_COMPENSATION_LEFT:
writeBlock(gFormat.format(41));
break;
case RADIUS_COMPENSATION_RIGHT:
writeBlock(gFormat.format(42));
break;
default:
writeBlock(gFormat.format(40));
}
}
writeBlock(x, y, f); // linear without G-word
} else if (f) {
if (getNextRecord().isMotion()) { // try not to output feed without motion
feedOutput.reset(); // force feed on next line
} else {
writeBlock(f);
}
}
}
function onRapid5D(_x, _y, _z, _a, _b, _c) {
error(localize("The CNC does not support 5-axis simultaneous toolpath."));
}
function onLinear5D(_x, _y, _z, _a, _b, _c, feed) {
error(localize("The CNC does not support 5-axis simultaneous toolpath."));
}
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 (isFullCircle()) {
switch (getCircularPlane()) {
case PLANE_XY:
if (getProperty("useAbsoluteIJ")) {
writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), iOutput.format(cx), jOutput.format(cy));
} else {
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:
if (getProperty("useAbsoluteIJ")) {
writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), iOutput.format(cx), jOutput.format(cy));
} else {
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);
}
}
}
var mapCommand = {
COMMAND_STOP : 0,
COMMAND_OPTIONAL_STOP: 1
};
function onCommand(command) {
switch (command) {
case COMMAND_POWER_ON:
return;
case COMMAND_POWER_OFF:
return;
case COMMAND_LOCK_MULTI_AXIS:
return;
case COMMAND_UNLOCK_MULTI_AXIS:
return;
case COMMAND_BREAK_CONTROL:
return;
case COMMAND_TOOL_MEASURE:
return;
}
var stringId = getCommandStringId(command);
var mcode = mapCommand[stringId];
if (mcode != undefined) {
writeBlock(mFormat.format(mcode));
} else {
onUnsupportedCommand(command);
}
}
function onSectionEnd() {
forceAny();
}
function onClose() {
if (getProperty("useRepeat")) {
writeBlock(gFormat.format(98)); // restart from G97
}
var homeOffset = 1; // 1-4
writeBlock(mFormat.format(79), "T" + homeOffset); // go home
if (getProperty("useHeightSensor")) {
writeBlock(mFormat.format(14)); // turn off height sensor
}
writeBlock(mFormat.format(30)); // stop program - rewind
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,218 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!-- Generated at 2011-10-21 -->
<locale xmlns='http://www.hsmworks.com/xml/2008/locale'>
<message name="%1h:%2m:%3s"/>
<message name="%1m:%2s"/>
<message name="%1s"/>
<message name="2ND SET-UP CLEARANCE">2. BEZPECNA VZDALENOST</message>
<message name="3D Path">3D draha</message>
<message name="Adaptive">Adaptivni</message>
<message name="Adaptive 2D">2D Adaptivni</message>
<message name="Air">Vzduch</message>
<message name="Air through tool">Vzduch skrz nástroj</message>
<message name="ANGLE OF SPINDLE">UHEL VRETENE</message>
<message name="BACK BORING">ZPETNE ZAHLOUBENI</message>
<message name="BORE MILLING">FREZOVANI ZAHLOUBENI</message>
<message name="BORING">ZAHLOUBENI</message>
<message name="BREAKS">PRERUSENI</message>
<message name="center">stred</message>
<message name="CIRCLE DIAMETER">PRUMER KRUZNICE</message>
<message name="CIRCULAR POCKET">KRUHOVA KAPSA</message>
<message name="Circular pocket milling is not supported for taper tools.">Frezovani kruhove kapsy neni podporovano pro kuzelovy nastroj</message>
<message name="CLIMB OR UP-CUT">SOUSLEDNE NEBO STOUPAJICI OBRABENI</message>
<message name="Comment">Komentar</message>
<message name="Compensation">Kompenzace</message>
<message name="Compensation offset is out of range.">Kompenzacni odsazeni je mimo rozsah.</message>
<message name="computer">pocitac</message>
<message name="Contour">Konturovani</message>
<message name="Contour 2D">2D Kontura</message>
<message name="control">rizeni</message>
<message name="Coolant">Chlazeni</message>
<message name="Coolant not supported.">Chlazeni neni podporovano.</message>
<message name="Corner Radius">Polomer rohu</message>
<message name="CR"/>
<message name="Cutting">Obrabeni</message>
<message name="Cutting Distance">Delka obrabeni</message>
<message name="D"/>
<message name="DATUM NUMBER">CISLO POCATKU</message>
<message name="DATUM SETTING">NASTAVENI POCATKU</message>
<message name="DATUM SHIFT">POSUNUTI POCATKU</message>
<message name="DECREMENT">SNIZENI</message>
<message name="deg">stupne</message>
<message name="DEPTH">HLOUBKA</message>
<message name="DEPTH FOR CHIP BRKNG">HLOUBKA PRO ODLOMENI TRISKY</message>
<message name="DEPTH REDUCTION">REDUKCE HLOUBKY</message>
<message name="Description">Popis</message>
<message name="description">popis</message>
<message name="Diameter">Prumer</message>
<message name="Direct">Primo</message>
<message name="DISENGAGING DIRECTION">UVOLNENI SMERU</message>
<message name="DIST. FOR CHIP BRKNG">VZDAL. PRO PRERUSENI TRISKY</message>
<message name="Document Path">Cesta dokumentu</message>
<message name="DRILLING">VRTANI</message>
<message name="Drilling">Vrtani</message>
<message name="DWELL AT BOTTOM">PRODLEVA NA SPODKU</message>
<message name="DWELL AT TOP">PRODLEVA NA VRSKU</message>
<message name="DWELL TIME">CASOVA PRODLEVA</message>
<message name="DWELL TIME AT DEPTH">CASOVA PRODLEVA</message>
<message name="Dwelling time is out of range.">Cas prodlevy je mimo rozsah.</message>
<message name="DX"/>
<message name="DY"/>
<message name="DZ"/>
<message name="Entry">Vstup</message>
<message name="Estimated Cycle Time">Odhadovany cas cyklu</message>
<message name="Exit">Vystup</message>
<message name="F COUNTERBORING">F ZAHLOUBENI</message>
<message name="F PRE-POSITIONING">F PRED-POZICOVANI</message>
<message name="Facing">Celni</message>
<message name="FEED RATE FOR FINISHING">POSUV PRO DOKONCENI</message>
<message name="FEED RATE FOR MILLING">POSUV PRO FREZOVANI</message>
<message name="FEED RATE FOR PLUNGING">POSUV PRO ZANORENI</message>
<message name="Finish">Dokonceni</message>
<message name="FINISHING ALLOWANCE FOR FLOOR">PRIDAVEK PRO DOKONCENI DNA</message>
<message name="FINISHING ALLOWANCE FOR SIDE">PRODAVEK PRO DOKONCENI STENY</message>
<message name="Flood">Kapalina</message>
<message name="Flood and mist">Kapalina a mlha</message>
<message name="Flutes">Brity</message>
<message name="Generated by ">Vytvoreno </message>
<message name="High Feed">Vysoky Posuv</message>
<message name="Holder">Drzak</message>
<message name="Horizontal">Vodorovne</message>
<message name="INFEED DEPTH">HLOUBKA NAJETI</message>
<message name="INFEED FOR FINISHING">NAJETI PRO DOKONCENI</message>
<message name="Invalid disengagement direction.">Chybne uvolneni smeru.</message>
<message name="Invalid tilt preference.">Chybna priorita naklonu.</message>
<message name="inverse wear">inversni opotrebeni</message>
<message name="Job">Projekt</message>
<message name="Job Description">Popis projektu</message>
<message name="Job ISO-9000 Control">Rizeni projektu ISO-9000</message>
<message name="L"/>
<message name="left">Levy</message>
<message name="Length">Delka</message>
<message name="Length offset out of range.">Delkove odsazeni mimo rozsah.</message>
<message name="LOWER ADV. STOP DIST.">NIZSI STOP VZDAL.</message>
<message name="Machine">Stroj</message>
<message name="Machine angles not supported">Uhle stroje nejsou podporovany</message>
<message name="MACHINE OPERATION">STROJNI OPERACE</message>
<message name="Material">Material</message>
<message name="MATERIAL THICKNESS">TLOUSKA MATERIALU</message>
<message name="Maximum Feed">Max. posuv</message>
<message name="Maximum Feedrate">Max. posuv</message>
<message name="Maximum Spindle Speed">Max. otacky vretene</message>
<message name="Maximum stepdown">Max. krok dolu</message>
<message name="Maximum stepover">Max. stranovy krok</message>
<message name="Maximum Z">Max. Z</message>
<message name="Milling toolpath is not supported.">Draha nastrje neni podporovana.</message>
<message name="MIN. PLUNGING DEPTH">MIN. HLOUBKA ZAVRTANI</message>
<message name="Minimum Z">MIN. Z</message>
<message name="Mist">Mlha</message>
<message name="model"/>
<message name="Morph">Morfovane</message>
<message name="Multi-Axis Contour">Vice-osa Kontura</message>
<message name="Multi-Axis Swarf">Vice-ose Bokem</message>
<message name="NEW!">NOVE!</message>
<message name="NOMINAL DIAMETER">NOMINALNI PRUMER</message>
<message name="Non-turning toolpath is not supported.">Draha nastoje jina nez soustruzeni neni podporovana.</message>
<message name="Notes">Poznamky</message>
<message name="Number Of Operations">Pocet operaci</message>
<message name="Number Of Tools">Pocet nastroju</message>
<message name="Off">Vypnuto</message>
<message name="OFF-CENTER DISTANCE">VZDALENOST OD STREDU</message>
<message name="Operation">Operace</message>
<message name="Orientation not supported.">Orientace neni podporovana</message>
<message name="Parallel">Rovnobezne</message>
<message name="Part">Dil</message>
<message name="Pattern Group">Skupina pole</message>
<message name="Pencil">Tuzkove</message>
<message name="PITCH">ROZTEC</message>
<message name="Pitch">Roztec</message>
<message name="Plunge">Zavrtani</message>
<message name="PLUNGING">Zanoreni</message>
<message name="PLUNGING DEPTH">HLOUBKA ZANORENI</message>
<message name="Pocket">Kapsovaci</message>
<message name="Pocket 2D">2D Kapsa</message>
<message name="Predrilling">Predvrtani</message>
<message name="Program Comment">Komentar programu</message>
<message name="Program name contains invalid character(s).">Nazev programu obsahuje nepovolene znaky.</message>
<message name="Program name exceeds maximum length.">Nazev programu překracuje max. delku.</message>
<message name="Program name has not been specified.">Nazev programu nebyl urcen.</message>
<message name="Program name must be a number.">Nazev programu musi byt cislo.</message>
<message name="Program number is out of range.">Cislo probramu je mimo rozsah.</message>
<message name="Program number is reserved by tool builder.">Cislo programu je rezervovano vyrobcem nastroju.</message>
<message name="Program uses multiple WCS!">Program pouziva více pocatku.</message>
<message name="Project">Promitnute</message>
<message name="Radial">Radialni</message>
<message name="Radius compensation mode cannot be changed at rapid traversal.">Rezim polomerove kompenzace nemuze byt zmenen behem rychloposuvu.</message>
<message name="Ramping">Rampovani</message>
<message name="Rapid Distance">Delka rychloposuvu</message>
<message name="REAMING">STRUZENI</message>
<message name="Reduced">Snizeno</message>
<message name="RETRACTION FEED RATE">POSUV NAVRATU</message>
<message name="RETRACTION FEED TIME">CAS NAVRATU</message>
<message name="right">pravy</message>
<message name="RIGID TAPPING NEW">NOVE PEVNE ZAVITOVANI</message>
<message name="ROUGHING DIAMETER">PRUMER HRUBOVANI</message>
<message name="rpm">ot/min</message>
<message name="Safe Tool Diameter">Bezpecny prumer nastroje</message>
<message name="Scallop">Rovnomerne</message>
<message name="SET-UP CLEARANCE">NASTAVENI BEZPECNE VZDALENOSTI</message>
<message name="Setup Sheet">Serizovaci list</message>
<message name="Setup Sheet for Program">Serizovaci list pro program</message>
<message name="Spindle speed exceeds maximum value.">Otacky vretene presahuji max. hodnotu.</message>
<message name="Spindle speed out of range.">Otacky vretene mimo rozsah.</message>
<message name="Spiral">Spiralni</message>
<message name="STARTING POINT">STARTOVACI BOD</message>
<message name="Stock">POLOTOVAR</message>
<message name="Stock Lower in WCS">Spodek polotovaru od pocatku</message>
<message name="Stock to Leave">Pridavek</message>
<message name="Stock Upper in WCS">Vrsek polotovaru od pocatku</message>
<message name="Strategy">Strategie</message>
<message name="Suction">Sani</message>
<message name="SURFACE COORDINATE">SOURADNICE PLOCHY</message>
<message name="T"/>
<message name="TAPER">UKOS</message>
<message name="Taper Angle">UHEL UKOSU</message>
<message name="TAPPING W/ CHIP BRKG">ZAVITOVANI S ODLOMENIM TRISKY</message>
<message name="The diameter offset exceeds the maximum value.">Odsazeni prumeru presahuje max. hodnotu.</message>
<message name="THREAD DEPTH">HLOUBKA ZAVITU</message>
<message name="THREAD MILLING">FREZOVANI ZAVITU</message>
<message name="THREAD PITCH">ROZTEC ZAVITU</message>
<message name="THREADS PER STEP">ZAVITY NA KROK</message>
<message name="Through tool">Skrz nastroj</message>
<message name="Tip Angle">Uhel spicky</message>
<message name="TIP:"/>
<message name="TOLERANCE">TOLERANCE</message>
<message name="Tolerance">Tolerance</message>
<message name="TOOL EDGE HEIGHT">VYSKA HRANY NASTROJE</message>
<message name="Tool number exceeds maximum value.">Cislo nastroje presahuje max. hodnotu.</message>
<message name="Tool orientation is not supported.">Orientace nastroje neni podporovana.</message>
<message name="TOOL PATH OVERLAP">PREKRYTI DRAHY NASTROJE</message>
<message name="Tool Sheet">Seznam nastroju</message>
<message name="Tool Sheet for Program">Seznam nastroju pro program</message>
<message name="Tools">Nastroje</message>
<message name="Total">Celkem</message>
<message name="Total number of tools">Celkovy pocet nastroju</message>
<message name="turn">soustruzeni</message>
<message name="Type">Typ</message>
<message name="Unit is not supported.">Jednotky nejsou podporovany.</message>
<message name="UNIVERSAL DRILLING">UNIVERSALNI VRTANI</message>
<message name="UNIVERSAL PECKING">UNIVERSALNI PRERUSOVANE VRTANI</message>
<message name="Unknown">Neznamy</message>
<message name="Unspecified">Neurceny</message>
<message name="unspecified">neurceny</message>
<message name="UPPER ADV. STOP DIST.">VYSSI STOP VZDAL</message>
<message name="Using reserved program name.">Pouziti rozervovaneho nazvu programu.</message>
<message name="Using the same tool number for different cutter geometry for operation '%1' and '%2'.">Poziti strejneho cisla nastroje pro odlisnou geometrii nastroje v operacich '%1' a '%2'.</message>
<message name="Vendor">Dodavatel</message>
<message name="vendor">dodavatel</message>
<message name="WCS">Pocatek</message>
<message name="wear">opotrebeni</message>
<message name="Work offset has not been specified.">Pracovni pocatek nebyl urcen.</message>
<message name="Work offset has not been specified. Using E1 as WCS.">Pracovni pocatek nebyl urcen. Pouzito E1 jako pocatku.</message>
<message name="Work offset has not been specified. Using G54 as WCS.">Pracovni pocatek nebyl urcen. Pouzito G54 jako pocatku.</message>
<message name="Work offset out of range.">Pracovni pocatek mimo rozsah.</message>
<message name="Work plane is not supported">Pracovni rovina neni podporovana.</message>
<message name="WORKING PLANE">PRACOVNI ROVINA</message>
<message name="ZMAX"/>
<message name="ZMIN"/>
</locale>

View File

@ -0,0 +1,325 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<locale xmlns="http://www.hsmworks.com/xml/2008/locale">
<country>de</country>
<message name="%1h:%2m:%3s">%1h:%2m:%3s</message>
<message name="%1m:%2s">%1m:%2s</message>
<message name="%1s">%1s</message>
<message name="2ND SET-UP CLEARANCE">2. SICHERHEITS-ABST.</message>
<message name="3D Path">3D-Kontur</message>
<message name="ANGLE OF SPINDLE">WINKEL SPINDEL</message>
<message name="Auxiliary function is out of range.">Hilfsfunktion ist in einem nicht im zulaessigen Bereich.</message>
<message name="BNC mode is not supported.">BNC Modus wird nicht unterstuetzt.</message>
<message name="BREAKS">SPANBRUECHE</message>
<message name="CR">CR</message>
<message name="Compensation">Versatz</message>
<message name="Configuration">Konfiguration</message>
<message name="Configuration checksum">Konfiguration der Blockpruefung</message>
<message name="Contour 2D Finishing">2D-Konturschlichten</message>
<message name="Contour Finishing">Konturschlichten</message>
<message name="Coolant not supported.">Kuehlmittel wird nicht unterstuetzt.</message>
<message name="Corner Radius">Eckradius</message>
<message name="Current record cannot be linearized.">Aktueller Datensatz kann nicht linearisiert werden.</message>
<message name="Cutting Distance">Schnittabstand</message>
<message name="Cycle is active at end of section.">Zyklus ist Aktiv am Ende der Sektion.</message>
<message name="Cycle is active for onCircular().">Zyklus ist Aktiv fuer onCircular().</message>
<message name="Cycle is active for onLinear().">Zyklus ist Aktiv fuer onLinear().</message>
<message name="Cycle is active for onLinear5D().">Zyklus ist Aktiv fuer onLinear5D().</message>
<message name="Cycle is active for onRadous5D().">Zyklus ist Aktiv fuer onRadous5D().</message>
<message name="Cycle is active for onRapid().">Zyklus ist Aktiv fuer onRapid().</message>
<message name="Cycle is active.">Zyklus ist Aktiv.</message>
<message name="Cycle is already active.">Zyklus ist bereits Aktiv.</message>
<message name="Cycle is not active for onCycleEnd().">Zyklus ist nicht Aktiv fuer onCycleEnd().</message>
<message name="Cycle is not active.">Zyklus ist nicht Aktiv.</message>
<message name="D">D</message>
<message name="DECREMENT">ABNAHMEBETRAG</message>
<message name="DEPTH">TIEFE</message>
<message name="DISENGAGING DIRECTION">FREIFAHR-RICHTUNG</message>
<message name="DIST. FOR CHIP BRKNG">RZ BEI SPANBRUCH</message>
<message name="DWELL AT BOTTOM">VERWEILZEIT UNTEN</message>
<message name="DWELL AT TOP">VERWEILZEIT OBEN</message>
<message name="DWELL TIME AT DEPTH">VERWEILZEIT UNTEN</message>
<message name="DX">DX</message>
<message name="DY">DY</message>
<message name="DZ">DZ</message>
<message name="Description">Beschreibung</message>
<message name="Diameter">Durchmesser</message>
<message name="Diameter offset is not supported.">D-Versatz wird nicht unterstuetzt.</message>
<message name="Document Path">Dokument Pfad</message>
<message name="Drilling">Bohren</message>
<message name="Dwelling time is out of range.">Verweilzeit ist in einem nicht zulaessigen Bereich.</message>
<message name="Dwelling time out of range.">Verweilzeit ist in einem nicht zulaessigen Bereich.</message>
<message name="Estimated Cycle Time">geschaetzte Zykluszeit</message>
<message name="F COUNTERBORING">F SENKBOHRUNGEN</message>
<message name="FEED RATE FOR PLUNGING">VORSCHUB TIEFENZ.</message>
<message name="Facing">Planen</message>
<message name="Generated at">Erzeugt am</message>
<message name="Generated by">Erzeugt von</message>
<message name="Generated by ">Erzeugt von </message>
<message name="Horizontal Finishing">Horizontales Schlichten</message>
<message name="INFEED DEPTH">ZUSTELL-TIEFE</message>
<message name="Ignoring work offset.">Ignoriere Arbeitsversatz</message>
<message name="Inch mode is not supported.">Zolleinheit wird nicht unterstuetzt.</message>
<message name="Intermediate checksum">Zwischenpruefsumme</message>
<message name="Invalid condition occured.">Unzulaessiger Zustand trat auf.</message>
<message name="Invalid cycle parameters.">Ungueltiger Zyklus Parameter</message>
<message name="Invalid cycle type.">Ungueltiger Zyklustyp</message>
<message name="Invalid disengagement direction.">Ungueltige Trennungsrichtung.</message>
<message name="Invalid dwelling time.">Ungueltige Verweilzeit</message>
<message name="Invalid initial value for table.">Ungueltiger Tabellen-Anfangswert.</message>
<message name="Invalid work offset.">Ungueltiger Arbeitsversatz</message>
<message name="Job">Job</message>
<message name="Job Description">Job Description</message>
<message name="Job ISO-9000 Control">Job ISO-9000 Control</message>
<message name="L">L</message>
<message name="Left tapping is not supported.">Links Gewinde wird nicht unterstuetzt.</message>
<message name="Length">Laenge</message>
<message name="Length offset is not supported.">L-Versatz wird nicht unterstuetzt.</message>
<message name="Length offset out of range.">L-Versatz ist in einem nicht im zulaessigen Bereich.</message>
<message name="MATERIAL THICKNESS">MATERIALSTAERKE</message>
<message name="MIN. PLUNGING DEPTH">MIN. ZUSTELL-TIEFE</message>
<message name="Machine">Maschine</message>
<message name="Material">Material</message>
<message name="Maximum Feed">Maximaler Vorschub</message>
<message name="Maximum Feedrate">Maximaler Vorschub</message>
<message name="Maximum Spindle Speed">Maximale Spindeldrehzahl</message>
<message name="Maximum Z">Maximum Z</message>
<message name="Minimum Z">Min. Abmaß in Z</message>
<message name="Mismatching arguments.">nicht kombinierbare Funktionen.</message>
<message name="NEW WCS!">NEUES WKS!</message>
<message name="Number Of Operations">Anzahl der Operationen</message>
<message name="Number Of Tools">Anzahl der Werkzeuge</message>
<message name="OFF-CENTER DISTANCE">EXENTERMASS</message>
<message name="Operation">Operation</message>
<message name="Parallel Finishing">Paralleles Schlichten</message>
<message name="Part">Teil</message>
<message name="Plane cannot be changed when radius compensation is active.">Ebene kann nicht geaendert werden solange die Radiuskompensation aktiv ist.</message>
<message name="Pocket 2D Roughing">2D-Taschenschruppen</message>
<message name="Pocket Roughing">Taschenschruppen</message>
<message name="Post configuration is not compatible with this version of the post processor.">Post Konfiguration ist nicht mit der Version des Postprozessors kompatibel</message>
<message name="Post processing has been manually disabled using the 'preventPost' property.">Postprozessorlauf wurde manuell deaktiviert, benutze 'preventPost' Eigenschaften.</message>
<message name="Post processing using a deprecated version of the post processor.">Postprozessorlauf verwendet eine ungueltige Version des Postprozessors.</message>
<message name="Program name contains invalid character(s).">Programmname beinhaltet ungueltige Zeichen</message>
<message name="Program name exceeds maximum length.">Programmname ueberschreitet die maximale Laenge</message>
<message name="Program name has not been specified.">Programmname wurde nicht definiert.</message>
<message name="Program name must be a number.">Programmname muss eine Zahl sein.</message>
<message name="Program name must begin with 2 letters.">Programmname muss mit zwei Buchstaben beginnen.</message>
<message name="Program number is out of range.">Programmnummer ist in einem nicht im zulaessigen Bereich.</message>
<message name="Program number is reserved by tool builder.">Programmnummer ist vom Hersteller reserviert.</message>
<message name="Program number is reserved.">Programmnummer ist reserviert.</message>
<message name="Program uses multiple WCS!">Programm verwendet mehrere WKS!</message>
<message name="RETRACTION FEED RATE">VORSCHUB RUECKZUG</message>
<message name="RETRACTION FEED TIME">VORSCHUB RUECKZUG</message>
<message name="Radial Finishing">Radialschlichten</message>
<message name="Radius compensation has not changed.">Radiuskompensation ist nicht geaendert.</message>
<message name="Radius compensation in the controller is not supported.">Radiuskompensation in der Steuerung wird nicht unterstuetzt.</message>
<message name="Radius compensation is not active.">Radiuskompensation ist nicht aktiv.</message>
<message name="Radius compensation is not off.">Radiuskompensation ist nicht aus.</message>
<message name="Radius compensation mode cannot be changed at rapid traversal.">Radiuskompensation kann nicht bei G0-Bewegungen geaendert werden.</message>
<message name="Rapid Distance">Eilgang-Distanz in mm</message>
<message name="SET-UP CLEARANCE">SICHERHEITS-ABST.</message>
<message name="SURFACE COORDINATE">KOOR. OBERFLAECHE</message>
<message name="Safe Tool Diameter">Speichere Werkzeugdurchmesser</message>
<message name="Scallop Finishing">HSC-Konturschlichten</message>
<message name="Section is active.">Bereich ist aktiviert.</message>
<message name="Section is not active.">Bereich ist nicht aktiviert.</message>
<message name="Setup Sheet">Einstellblatt</message>
<message name="Setup Sheet for Program">Einstellblatt fuer Programm</message>
<message name="Spindle speed exceeds maximum value.">Spindeldrehzahl uebersteigt maximalen Wert.</message>
<message name="Spindle speed out of range.">Spindeldrehzahl ist in einem nicht im zulaessigen Bereich.</message>
<message name="Spiral Finishing">Spiralschlichten</message>
<message name="Stock">Rohteil</message>
<message name="Stock Lower in WCS">Rohteil unterhalb im WKS</message>
<message name="Stock Upper in WCS">Rohteil oberhalb im WKS</message>
<message name="Stock to Leave">Aufmaß</message>
<message name="Strategy">Strategie</message>
<message name="Stream has not been opened.">Datenfluss wurde nicht geoeffnet.</message>
<message name="Stream is not open.">Datenfluss ist nicht geoeffnet.</message>
<message name="T">T</message>
<message name="TAPER">KONIK</message>
<message name="THREAD PITCH">GEWINDESTEIGUNG</message>
<message name="TIP:">SPITZE:</message>
<message name="TOOL EDGE HEIGHT">SCHNEIDENHOEHE</message>
<message name="Table constructor expecting array as first argument.">Der Durchmesserausgleich uebersteigt den maximalen Wert.</message>
<message name="Taper Angle">Konuswinkel</message>
<message name="The diameter offset exceeds the maximum value.">D-Versatz uebersteigt den maximalen Wert.</message>
<message name="This parameter specifies the output unit.">Dieser Parameter bestimmt die Ausgabeeinheiten.</message>
<message name="This parameter specifies the tolerance used for linearization.">Dieser Parameter bestimmte die Linearisationstoleranz.</message>
<message name="Tip Angle">Spitzenwinkel</message>
<message name="Tolerance">Toleranz</message>
<message name="Tool Sheet">Werkzeugdatenblatt</message>
<message name="Tool Sheet for Program">Werkzeugdatenblatt fuer Programm</message>
<message name="Tool number exceeds maximum value.">Werkzeugnummer uebersteigt dem maximalen Wert.</message>
<message name="Tools">Werkzeuge</message>
<message name="Total">Gesamt</message>
<message name="Total number of tools">Gesamte Anzahl der Werkzeuge</message>
<message name="Type">Typ</message>
<message name="Unit is not supported.">Einheit wird nicht unterstuetzt.</message>
<message name="Unspecified">unspezifisch</message>
<message name="Unsupported format specifier '%1'.">Nicht unterstuetztes Format '%1'.</message>
<message name="Unsupported spindle axis.">nicht unterstuetzt Spindelachse</message>
<message name="Using E1 as WCS.">Verwende E1 als WKS.</message>
<message name="Using G15H01 as WCS.">Verwende G15H01 als WKS.</message>
<message name="Using G54 I0 as WCS.">Verwende G54 I0 als WKS.</message>
<message name="Using G54 as WCS.">Verwende G54 als WKS.</message>
<message name="Using reserved program name.">Benutze reservierten Programmnamen.</message>
<message name="Vendor">Hersteller</message>
<message name="WCS">WKS</message>
<message name="Work offset has not been specified.">WKS wurde nicht definiert.</message>
<message name="Work offset is out of range.">WKS ist in einem nicht im zulaessigen Bereich</message>
<message name="Work offset out of range.">WKS ist in einem nicht im zulaessigen Bereich</message>
<message name="Work plane is not supported.">Arbeitsebene wird nicht unterstuetzt.</message>
<message name="Z-level of cycle point does not match bottom of hole.">Z-Tiefe des Zykluspunktes erreicht nicht die Unterseite der Bohrung.</message>
<message name="ZMIN">ZMIN</message>
<message name="ball end mill">Kugelschlichtfraeser</message>
<message name="block drill">Blockbohrer</message>
<message name="boring bar">Bohrstange</message>
<message name="bullnose end mill">Radienschlichtfraeser</message>
<message name="carbide">Karbid</message>
<message name="center">Zentrum</message>
<message name="center drill">Zentrierbohrer</message>
<message name="ceramics">Keramik</message>
<message name="chamfer mill">Fasenfraeser</message>
<message name="computer">Computer</message>
<message name="control">Steuerung</message>
<message name="coolant flood">Aussenkuehlung Wasser</message>
<message name="coolant mist">Kuehlmittel Nebel (MMS)</message>
<message name="coolant off">Kuehlmittel Aus</message>
<message name="coolant tool">Werkzeug mit Innenkuehlung</message>
<message name="counter bore">Flachsenker</message>
<message name="counter sink">Fasensenker</message>
<message name="cr:">cr:</message>
<message name="deg">(Grad):</message>
<message name="description">Beschreibung</message>
<message name="dia:">DM:</message>
<message name="dovetail mill">Schwalbenschwanzfraeser</message>
<message name="drill">Bohrer</message>
<message name="face mill">Planfraeser</message>
<message name="flat end mill">Schaftfraeser</message>
<message name="high-speed steel">Hochleistungsschnellschnittstahl</message>
<message name="in">in</message>
<message name="invalid">Ungueltig</message>
<message name="invalid coolant">Ungueltiges Kuehlmittel</message>
<message name="inverse wear">Umgedrehter Verschleiß</message>
<message name="left">links</message>
<message name="left hand tap">Gewindebohrer (Linksgewinde)</message>
<message name="lollipop mill">Ballfraeser</message>
<message name="mm">mm</message>
<message name="model">Modell</message>
<message name="not supported">nicht unterstuetzt.</message>
<message name="radius mill">Radienfraeser</message>
<message name="reamer">Reibahle</message>
<message name="right">right</message>
<message name="right hand tap">Gewindebohrer (Rechtsgewinde)</message>
<message name="rpm">upm</message>
<message name="slot mill">Nutenfraeser</message>
<message name="spot drill">Zentrierbohrer</message>
<message name="taper:">Konik:</message>
<message name="tapered mill">Konikfraeser</message>
<message name="ti coated">Ti beschichtet</message>
<message name="tip:">tip:</message>
<message name="tolerance">Toleranz</message>
<message name="unit">Einheit</message>
<message name="unknown tool type">unbekannter Werkzeugtyp</message>
<message name="unspecified">unspezifisch</message>
<message name="vendor">Hersteller</message>
<message name="wear">Verschleiß</message>
<message name="Cutting">SCHNEIDENVORSCHUB</message>
<message name="Predrilling">PREDRILLING</message>
<message name="Entry">EINFAHRVORSCHUB</message>
<message name="Exit">AUSFAHRVORSCHUB</message>
<message name="Ramping">RAMPENVORSCHUB</message>
<message name="Plunge">EINTAUCHVORSCHUB</message>
<message name="Direkt">DIREKTER VERBINDUNGSVORSCHUB</message>
<message name="High Feed">SCHNELLVORSCHUB</message>
<message name="TAPPING">GEWINDEBOHREN</message>
<message name="NOMINAL DIAMETER">SOLL-DURCHMESSER</message>
<message name="ROUGHING DIAMETER">VORGEB. DURCHMESSER</message>
<message name="DEPTH FOR CHIP BRKNG">BOHRTIEFE SPANBRUCH</message>
<message name="MACHINE OPERATION">BEARBEITUNGS-UMFANG</message>
<message name="CIRCLE DIAMETER">KREISDURCHMESSER</message>
<message name="FINISHING ALLOWANCE FOR SIDE">AUFMASS SEITE</message>
<message name="FEED RATE FOR MILLING">VORSCHUB FRAESEN</message>
<message name="CLIMB OR UP-CUT">FRAESART</message>
<message name="FINISHING ALLOWANCE FOR FLOOR">AUFMASS TIEFE</message>
<message name="INFEED FOR FINISHING">ZUST. SCHLICHTEN</message>
<message name="TOOL PATH OVERLAP">BAHN-UEBERLAPPUNG</message>
<message name="PLUNGING">EINTAUCHEN</message>
<message name="FEED RATE FOR FINISHING">VORSCHUB SCHLICHTEN</message>
<message name="PITCH">STEIGUNG</message>
<message name="THREAD DEPTH">GEWINDETIEFE</message>
<message name="THREADS PER STEP">NACHSETZEN</message>
<message name="DEPTH REDUCTION">TIEFE SENKUNG</message>
<message name="F PRE-POSITIONING">VORSCHUB VORPOS.</message>
<message name="F COUNTERBORING">VORSCHUB SENKEN</message>
<message name="# Tools">Anzahl Werkzeuge</message>
<message name="Program">Programm</message>
<message name="Overview">Uebersicht</message>
<message name="# Operations">Anzahl Operationen</message>
<message name="Machining Time">Bearbeitungszeit</message>
<message name="Feed Distance">Vorschub-Distanz in mm</message>
<message name="Programmer">Programmierer</message>
<message name="WCS #">Anzahl WKS</message>
<message name="Reference">Referenz</message>
<message name="Tool #">Werkzeug-Nr.</message>
<message name="Length #">Laengen #</message>
<message name="Diameter #">Durchmesser #</message>
<message name="DATUM SHIFT">NULLPUNKT</message>
<message name="WORKING PLANE">BEARBEITUNGSEBENE</message>
<message name="TOLERANCE">TOLERANZ</message>
<message name="DATUM SETTING">BEZUGSPUNKT SETZEN</message>
<message name="DATUM NUMBER">BEZUGSPUNKT-NUMMER</message>
<message name="DWELL TIME">VERWEILZEIT</message>
<message name="DRILLING">BOHREN</message>
<message name="UNIVERSAL DRILLING">UNIVERSAL-BOHREN</message>
<message name="RIGID TAPPING NEW">GEW.-BOHREN GS NEU</message>
<message name="TAPPING W/ CHIP BRKG">GEW.-BOHREN SPANBR.</message>
<message name="REAMING">REIBEN</message>
<message name="BORING">AUSDREHEN</message>
<message name="BACK BORING">RUECKWAERTS-SENKEN</message>
<message name="BORE MILLING">BOHRFRAESEN</message>
<message name="THREAD MILLING">GEWINDEFRAESEN</message>
<message name="CIRCULAR POCKET">KREISTASCHE</message>
<message name="Finish">SCHLICHTVORSCHUB</message>
<message name="Reduced">OPTIMIERUNGSVORSCHUB</message>
<message name="Invalid tilt preference.">Ungueltige bevorzugte Schwenkrichtung</message>
<message name="Machine angles not supported.">Maschinenwinkel werden nicht unterstuetzt.</message>
<message name="Orientation not supported.">Orientierung nicht unterstuetzt.</message>
<message name="Tool orientation is not supported.">Werkzeug-Orientierung wird nicht unterstuetzt.</message>
<message name="CYCL DEF 19 is not allowed without a machine configuration (enable the 'usePlane' setting).">CYCL DEF 19 ist ohne Maschinenkonfiguration nicht erlaubt ('usePlane' aktivieren, falls PLANE ZYKLUS vorhanden)..</message>
<message name="Circular pocket milling is not supported for taper tools.">Kreistaschenfraesen mit konischen Werkzeugen ist nicht unterstuetzt.</message>
<message name="Radius compensation cannot be activated/deactivated for a circular move.">Radiuskompensation kann nicht aktiviert/deaktiviert werden.</message>
<message name="Radius compensation cannot be activated/deactivated for 5-axis move.">Radiuskompensation kann nicht fuer 5-achsige Bewegungen nicht aktiviert/deaktiviert werden.</message>
<message name="Secondary spindle is not available.">Zweite Spindel ist nicht verfuegbar.</message>
<message name="Milling toolpath is not supported.">Fraes-Werkzeugwege werden nicht unterstuetzt.</message>
<message name="Non-turning toolpath is not supported.">Nur Drehwerkzeugwege werden unterstuetzt.</message>
<message name="Compensation offset is out of range.">Offset fuer Kompensation ausserhalb des zulaessigen Bereiches.</message>
<message name="Speed-feed synchronization is not supported for circular moves.">Drehzahl/Vorschubsynchronisation wird fuer Kreisboegen nicht unterstuetzt.</message>
<message name="Unsupported drilling orientation.">Nicht unterstuetzte Bohroperation.</message>
<message name="You must set 'highFeedrate' because axes are not synchronized for rapid traversal.">'highFeedrate' muss gesetzt werden um Achsen fuer Eilgaenge zu synchronisieren.</message>
<message name="Tail stock is not supported for secondary spindle.">Reitstock wird fuer die zweite Spindel nicht unterstuetzt.</message>
<message name="Radius compensation cannot be activated/deactivated for a cycle.">Radiuskompensation kann fuer (Bohr)Zyklen nicht aktiviert/deaktiviert werden.</message>
<message name="Left-tapping with chip breaking is not supported.">Linksgewinde mit Spanbrechen wird nicht unterstuetzt.</message>
<message name="Back boring is not supported.">Rueckwaertssenken wird nicht unterstuetzt.</message>
<message name="You must set 'highFeedrate' because axes are not synchronized in HURCO ISO NC mode.">'highFeedrate' muss gesetzt werden um Achsen fuer Eilgaenge im HURCO ISNC-Modus zu synchronisieren.</message>
<message name="CCW spindle direction not supported.">Spindel-Drehrichtung im Gegenuhrzeigersinn wird nicht unterstuetzt.</message>
<message name="Aborted by user.">Abbruch durch Benutzer.</message>
<message name="The tolerance must be positive.">Die Toleranz muss positiv sein.</message>
<message name="Output path not specified.">Ausgabepfad wurde nicht angegeben.</message>
<message name="Invalid feed.">Ungueltiger Vorschub.</message>
<message name="Multi-axis motion is not supported.">Simultane Bewegungen werden nicht unterstuetzt.</message>
<message name="Unsupported command.">Nicht unterstuetzter Befehl.</message>
<message name="Tapping is only allowed along machine Z.">Gewindebohren wird nur entlang der Maschinen-Z-Achse unterstuetzt.</message>
<message name="Radius compensation mode not supported.">Radiuskompensationsmodus wird nicht unterstuetzt.</message>
<message name="Invalid ATC mode. Must be 0 or 1.">Ungueltiger ATC Modus, Modus muss 0 oder 1 sein.</message>
<message name="SINGLE-FLUTED DEEP-HOLE DRILLING">EINLIPPEN-BOHREN</message>
<message name="STARTING POINT">STARTPUNKT</message>
<message name="RETRACT FEED RATE">VORSCHUB RUECKZUG</message>
<message name="DIR. OF SPINDLE ROT.">SP.-DREHRICHTUNG</message>
<message name="ENTRY EXIT SPEED">DREHZAHL EIN-/AUSF.</message>
<message name="DRILLING SPEED">DREHZAHL BOHREN</message>
<message name="COOLANT ON">KUEHLUNG EIN</message>
<message name="COOLANT OFF">KUEHLUNG AUS</message>
<message name="DWELL DEPTH">VERWEILTIEFE</message>
<message name="Tool description is empty in operation">Keine Werkzeugbeschreibung angegeben in Operation</message>
<message name="Tool description is empty">Keine Werkzeugbeschreibung angegeben.</message>
</locale>

View File

@ -0,0 +1,597 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<locale xmlns="http://www.hsmworks.com/xml/2008/locale">
<country>en</country>
<message name="%1h:%2m:%3s">%1h:%2m:%3s</message>
<message name="%1m:%2s">%1m:%2s</message>
<message name="%1s">%1s</message>
<message name="2ND SET-UP CLEARANCE">2ND SET-UP CLEARANCE</message>
<message name="3D Path">3D Path</message>
<message name="AGGREGATE">AGGREGATE</message>
<message name="ANGLE OF SPINDLE">ANGLE OF SPINDLE</message>
<message name="Aborted by user.">Aborted by user.</message>
<message name="Accumulated depth is negative.">Accumulated depth is negative.</message>
<message name="Actuator">Actuator</message>
<message name="Adaptive">Adaptive</message>
<message name="Adaptive 2D">Adaptive 2D</message>
<message name="Aggregate">Aggregate</message>
<message name="Air">Air</message>
<message name="Air through tool">Air through tool</message>
<message name="Auxiliary function is out of range.">Auxiliary function is out of range.</message>
<message name="Axis">Axis</message>
<message name="BACK BORING">BACK BORING</message>
<message name="BORE MILLING">BORE MILLING</message>
<message name="BORING">BORING</message>
<message name="BREAKS">BREAKS</message>
<message name="Back bore distance is negative.">Back bore distance is negative.</message>
<message name="Back bore distance is undefined.">Back bore distance is undefined.</message>
<message name="Back boring is not supported.">Back boring is not supported.</message>
<message name="Bar feed">Bar feed</message>
<message name="Bore">Bore</message>
<message name="CCW spindle direction not supported.">CCW spindle direction not supported.</message>
<message name="CIRCLE DIAMETER">CIRCLE DIAMETER</message>
<message name="CIRCULAR POCKET">CIRCULAR POCKET</message>
<message name="CLIMB OR UP-CUT">CLIMB OR UP-CUT</message>
<message name="COOLANT OFF">COOLANT OFF</message>
<message name="COOLANT ON">COOLANT ON</message>
<message name="CR">CR</message>
<message name="CREATED">CREATED</message>
<message name="CYCL DEF 19 is not allowed without a machine configuration (enable the 'usePlane' setting).">CYCL DEF 19 is not allowed without a machine configuration (enable the 'usePlane' setting).</message>
<message name="Cannot machine 180deg sweep.">Cannot machine 180deg sweep.</message>
<message name="Cannot machine radius 0.">Cannot machine radius 0.</message>
<message name="Capabilities">Capabilities</message>
<message name="Capacities">Capacities</message>
<message name="Circular">Circular</message>
<message name="Circular pocket milling is not supported for taper tools.">Circular pocket milling is not supported for taper tools.</message>
<message name="Circular sweep exceeds limit.">Circular sweep exceeds limit.</message>
<message name="Clearance below retract plane.">Clearance below retract plane.</message>
<message name="Comment">Comment</message>
<message name="Compensation">Compensation</message>
<message name="Compensation offset is out of range.">Compensation offset is out of range.</message>
<message name="Constant surrface speed is not supported by the CNC.">Constant surrface speed is not supported by the CNC.</message>
<message name="Contour">Contour</message>
<message name="Contour 2D">Contour 2D</message>
<message name="Coolant">Coolant</message>
<message name="Coolant air cannot be disabled.">Coolant air cannot be disabled.</message>
<message name="Coolant air is not supported.">Coolant air is not supported.</message>
<message name="Coolant air through tool cannot be disabled.">Coolant air through tool cannot be disabled.</message>
<message name="Coolant air through tool is not supported.">Coolant air through tool is not supported.</message>
<message name="Coolant cannot be disabled.">Coolant cannot be disabled.</message>
<message name="Coolant flood and mist cannot be disabled.">Coolant flood and mist cannot be disabled.</message>
<message name="Coolant flood and mist is not supported.">Coolant flood and mist is not supported.</message>
<message name="Coolant flood and through tool cannot be disabled.">Coolant flood and through tool cannot be disabled.</message>
<message name="Coolant flood and through tool is not supported.">Coolant flood and through tool is not supported.</message>
<message name="Coolant flood cannot be disabled.">Coolant flood cannot be disabled.</message>
<message name="Coolant flood is not supported.">Coolant flood is not supported.</message>
<message name="Coolant is not supported.">Coolant is not supported.</message>
<message name="Coolant mist cannot be disabled.">Coolant mist cannot be disabled.</message>
<message name="Coolant mist is not supported.">Coolant mist is not supported.</message>
<message name="Coolant not supported.">Coolant not supported.</message>
<message name="Coolant suction cannot be disabled.">Coolant suction cannot be disabled.</message>
<message name="Coolant suction is not supported.">Coolant suction is not supported.</message>
<message name="Coolant through tool cannot be disabled.">Coolant through tool cannot be disabled.</message>
<message name="Coolant through tool is not supported.">Coolant through tool is not supported.</message>
<message name="Coordinate">Coordinate</message>
<message name="Corner Radius">Corner Radius</message>
<message name="Current record cannot be linearized.">Current record cannot be linearized.</message>
<message name="Cutter compensation with G41 is not supported by TinyG CNC control.">Cutter compensation with G41 is not supported by TinyG CNC control.</message>
<message name="Cutter compensation with G42 is not supported by TinyG CNC control.">Cutter compensation with G42 is not supported by TinyG CNC control.</message>
<message name="Cutting">Cutting</message>
<message name="Cutting Distance">Cutting Distance</message>
<message name="Cycle '%1' is not supported.">Cycle '%1' is not supported.</message>
<message name="Cycle is active at end of section.">Cycle is active at end of section.</message>
<message name="Cycle is active for onCircular().">Cycle is active for onCircular().</message>
<message name="Cycle is active for onLinear().">Cycle is active for onLinear().</message>
<message name="Cycle is active for onLinear5D().">Cycle is active for onLinear5D().</message>
<message name="Cycle is active for onRadous5D().">Cycle is active for onRadous5D().</message>
<message name="Cycle is active for onRapid().">Cycle is active for onRapid().</message>
<message name="Cycle is active.">Cycle is active.</message>
<message name="Cycle is already active.">Cycle is already active.</message>
<message name="Cycle is not active for onCycleEnd().">Cycle is not active for onCycleEnd().</message>
<message name="Cycle is not active.">Cycle is not active.</message>
<message name="Cycles are not allowed.">Cycles are not allowed.</message>
<message name="Cyclic">Cyclic</message>
<message name="D">D</message>
<message name="DATUM NUMBER">DATUM NUMBER</message>
<message name="DATUM SETTING">DATUM SETTING</message>
<message name="DATUM SHIFT">DATUM SHIFT</message>
<message name="DECREMENT">DECREMENT</message>
<message name="DEPTH">DEPTH</message>
<message name="DEPTH FOR CHIP BRKNG">DEPTH FOR CHIP BRKNG</message>
<message name="DEPTH REDUCTION">DEPTH REDUCTION</message>
<message name="DIR. OF SPINDLE ROT.">DIR. OF SPINDLE ROT.</message>
<message name="DISENGAGING DIRECTION">DISENGAGING DIRECTION</message>
<message name="DIST. FOR CHIP BRKNG">DIST. FOR CHIP BRKNG</message>
<message name="DRILLING">DRILLING</message>
<message name="DRILLING SPEED">DRILLING SPEED</message>
<message name="DWELL AT BOTTOM">DWELL AT BOTTOM</message>
<message name="DWELL AT TOP">DWELL AT TOP</message>
<message name="DWELL DEPTH">DWELL DEPTH</message>
<message name="DWELL TIME">DWELL TIME</message>
<message name="DWELL TIME AT DEPTH">DWELL TIME AT DEPTH</message>
<message name="DX">DX</message>
<message name="DY">DY</message>
<message name="DZ">DZ</message>
<message name="Depth">Depth</message>
<message name="Depth is negative.">Depth is negative.</message>
<message name="Description">Description</message>
<message name="Diameter">Diameter</message>
<message name="Diameter offset is not supported.">Diameter offset is not supported.</message>
<message name="Dimensions">Dimensions</message>
<message name="Direct">Direct</message>
<message name="Document Path">Document Path</message>
<message name="Drilling">Drilling</message>
<message name="Dwell is negative.">Dwell is negative.</message>
<message name="Dwell is undefined.">Dwell is undefined.</message>
<message name="Dwelling is not allowed.">Dwelling is not allowed.</message>
<message name="Dwelling is not supported.">Dwelling is not supported.</message>
<message name="Dwelling time is out of range.">Dwelling time is out of range.</message>
<message name="Dwelling time out of range.">Dwelling time out of range.</message>
<message name="ENTRY EXIT SPEED">ENTRY EXIT SPEED</message>
<message name="Entry">Entry</message>
<message name="Estimated Cycle Time">Estimated Cycle Time</message>
<message name="Exit">Exit</message>
<message name="F COUNTERBORING">F COUNTERBORING</message>
<message name="F PRE-POSITIONING">F PRE-POSITIONING</message>
<message name="FEED RATE FOR FINISHING">FEED RATE FOR FINISHING</message>
<message name="FEED RATE FOR MILLING">FEED RATE FOR MILLING</message>
<message name="FEED RATE FOR PLUNGING">FEED RATE FOR PLUNGING</message>
<message name="FINISHING ALLOWANCE FOR FLOOR">FINISHING ALLOWANCE FOR FLOOR</message>
<message name="FINISHING ALLOWANCE FOR SIDE">FINISHING ALLOWANCE FOR SIDE</message>
<message name="Facing">Facing</message>
<message name="Failed to copy image from '%1' to '%2'.">Failed to copy image from '%1' to '%2'.</message>
<message name="Failed to write shared string.">Failed to write shared string.</message>
<message name="Failed to write workbook.">Failed to write workbook.</message>
<message name="Failed to write worksheet.">Failed to write worksheet.</message>
<message name="Feed per revolution is not supported by the CNC.">Feed per revolution is not supported by the CNC.</message>
<message name="Feedrate is negative.">Feedrate is negative.</message>
<message name="Feedrate per Rev">Feedrate per Rev</message>
<message name="Finish">Finish</message>
<message name="Flood">Flood</message>
<message name="Flood and mist">Flood and mist</message>
<message name="Flood and through tool">Flood and through tool</message>
<message name="Flow">Flow</message>
<message name="Flutes">Flutes</message>
<message name="Generated by">Generated by</message>
<message name="Head">Head</message>
<message name="Height">Height</message>
<message name="Helical arcs are not supported by the CNC.">Helical arcs are not supported by the CNC.</message>
<message name="Helical arcs are not supported.">Helical arcs are not supported.</message>
<message name="High Feed">High Feed</message>
<message name="Holder">Holder</message>
<message name="Home">Home</message>
<message name="Horizontal">Horizontal</message>
<message name="INFEED DEPTH">INFEED DEPTH</message>
<message name="INFEED FOR FINISHING">INFEED FOR FINISHING</message>
<message name="Ignoring work offset.">Ignoring work offset.</message>
<message name="Inch mode is not supported.">Inch mode is not supported.</message>
<message name="Incremental depth is invalid.">Incremental depth is invalid.</message>
<message name="Incremental depth is negative.">Incremental depth is negative.</message>
<message name="Invalid ATC mode. Must be 0 or 1.">Invalid ATC mode. Must be 0 or 1.</message>
<message name="Invalid aggregate configuration (ABC not allowed).">Invalid aggregate configuration (ABC not allowed).</message>
<message name="Invalid aggregate configuration (invalid resolution).">Invalid aggregate configuration (invalid resolution).</message>
<message name="Invalid aggregate configuration at %1 (not a value).">Invalid aggregate configuration at %1 (not a value).</message>
<message name="Invalid aggregate configuration at %1.">Invalid aggregate configuration at %1.</message>
<message name="Invalid break-through depth.">Invalid break-through depth.</message>
<message name="Invalid clamp specifier '%1'.">Invalid clamp specifier '%1'.</message>
<message name="Invalid condition occured.">Invalid condition occured.</message>
<message name="Invalid cycle parameters.">Invalid cycle parameters.</message>
<message name="Invalid cycle type.">Invalid cycle type.</message>
<message name="Invalid disengagement direction.">Invalid disengagement direction.</message>
<message name="Invalid dwelling time.">Invalid dwelling time.</message>
<message name="Invalid feed.">Invalid feed.</message>
<message name="Invalid initial value for table.">Invalid initial value for table.</message>
<message name="Invalid machine configuration.">Invalid machine configuration.</message>
<message name="Invalid operation information.">Invalid operation information.</message>
<message name="Invalid program information.">Invalid program information.</message>
<message name="Invalid starting depth.">Invalid starting depth.</message>
<message name="Invalid tilt preference.">Invalid tilt preference.</message>
<message name="Invalid tool information.">Invalid tool information.</message>
<message name="Invalid value.">Invalid value.</message>
<message name="Invalid work offset.">Invalid work offset.</message>
<message name="Job">Job</message>
<message name="Job Description">Job Description</message>
<message name="Job ISO-9000 Control">Job ISO-9000 Control</message>
<message name="L">L</message>
<message name="LOWER ADV. STOP DIST.">LOWER ADV. STOP DIST.</message>
<message name="Left handed tapping not supported.">Left handed tapping not supported.</message>
<message name="Left tapping is not supported by CNC machine.">Left tapping is not supported by CNC machine.</message>
<message name="Left tapping is not supported.">Left tapping is not supported.</message>
<message name="Left-tapping with chip breaking is not supported.">Left-tapping with chip breaking is not supported.</message>
<message name="Length">Length</message>
<message name="Length offset is not supported.">Length offset is not supported.</message>
<message name="Length offset out of range.">Length offset out of range.</message>
<message name="Linear">Linear</message>
<message name="Link">Link</message>
<message name="Live tooling is not supported by the CNC machine.">Live tooling is not supported by the CNC machine.</message>
<message name="Load deviation">Load deviation</message>
<message name="MACHINE OPERATION">MACHINE OPERATION</message>
<message name="MATERIAL THICKNESS">MATERIAL THICKNESS</message>
<message name="MIN. PLUNGING DEPTH">MIN. PLUNGING DEPTH</message>
<message name="Machine">Machine</message>
<message name="Machine angles not supported">Machine angles not supported</message>
<message name="Machine does not allow Z movement when changing radius compensation mode.">Machine does not allow Z movement when changing radius compensation mode.</message>
<message name="Machine does not allow simultaneous movement in Z and XY plane.">Machine does not allow simultaneous movement in Z and XY plane.</message>
<message name="Machine does not support circular movement in other planes than the XY-plane.">Machine does not support circular movement in other planes than the XY-plane.</message>
<message name="Machine does not support full circular movement.">Machine does not support full circular movement.</message>
<message name="Machine does not support helical movement.">Machine does not support helical movement.</message>
<message name="Manual boring is not supported.">Manual boring is not supported.</message>
<message name="Manual tool change">Manual tool change</message>
<message name="Material">Material</message>
<message name="Maximum Feed">Maximum Feed</message>
<message name="Maximum Feedrate">Maximum Feedrate</message>
<message name="Maximum Spindle Speed">Maximum Spindle Speed</message>
<message name="Maximum Z">Maximum Z</message>
<message name="Maximum feed">Maximum feed</message>
<message name="Maximum speed">Maximum speed</message>
<message name="Maximum stepdown">Maximum stepdown</message>
<message name="Maximum stepover">Maximum stepover</message>
<message name="Milling">Milling</message>
<message name="Milling from Z- is not supported by the CNC machine.">Milling from Z- is not supported by the CNC machine.</message>
<message name="Milling toolpath is not supported.">Milling toolpath is not supported.</message>
<message name="Minimum Z">Minimum Z</message>
<message name="Mismatching arguments.">Mismatching arguments.</message>
<message name="Mist">Mist</message>
<message name="Model">Model</message>
<message name="Model image doesn't exist '%1'.">Model image doesn't exist '%1'.</message>
<message name="Morph">Morph</message>
<message name="Morphed Spiral">Morphed Spiral</message>
<message name="Multi-Axis Contour">Multi-Axis Contour</message>
<message name="Multi-Axis Swarf">Multi-Axis Swarf</message>
<message name="Multi-axis motion is not supported for XZC mode.">Multi-axis motion is not supported for XZC mode.</message>
<message name="Multi-axis motion is not supported.">Multi-axis motion is not supported.</message>
<message name="Multi-axis toolpath is not allowed.">Multi-axis toolpath is not allowed.</message>
<message name="Multi-axis toolpath is not supported by CNC machine.">Multi-axis toolpath is not supported by CNC machine.</message>
<message name="Multi-axis toolpath is not supported by the CNC machine.">Multi-axis toolpath is not supported by the CNC machine.</message>
<message name="Multi-axis toolpath is not supported.">Multi-axis toolpath is not supported.</message>
<message name="Multiple turns are not supported.">Multiple turns are not supported.</message>
<message name="NEW WCS!">NEW WCS!</message>
<message name="NEW!">NEW!</message>
<message name="NOMINAL DIAMETER">NOMINAL DIAMETER</message>
<message name="Negative">Negative</message>
<message name="No">No</message>
<message name="No machine type is selected. You have to define a machine type using the properties.">No machine type is selected. You have to define a machine type using the properties.</message>
<message name="Non-turning toolpath is not supported.">Non-turning toolpath is not supported.</message>
<message name="Not XY-plane arcs are not supported by the CNC.">Not XY-plane arcs are not supported by the CNC.</message>
<message name="Notes">Notes</message>
<message name="Number Of Operations">Number Of Operations</message>
<message name="Number Of Tools">Number Of Tools</message>
<message name="Number of tools">Number of tools</message>
<message name="OFF-CENTER DISTANCE">OFF-CENTER DISTANCE</message>
<message name="Off">Off</message>
<message name="Offset">Offset</message>
<message name="Only right handed tapping is supporrted.">Only right handed tapping is supporrted.</message>
<message name="Operation">Operation</message>
<message name="Operation Sheet">Operation Sheet</message>
<message name="Operation Sheet for Program">Operation Sheet for Program</message>
<message name="Optimal load">Optimal load</message>
<message name="Orientation is not supported by CNC machine.">Orientation is not supported by CNC machine.</message>
<message name="Orientation not supported.">Orientation not supported.</message>
<message name="PART CATCHER">PART CATCHER</message>
<message name="PARTS CATCHER OFF">PARTS CATCHER OFF</message>
<message name="PARTS CATCHER ON">PARTS CATCHER ON</message>
<message name="PITCH">PITCH</message>
<message name="PLUNGING">PLUNGING</message>
<message name="PLUNGING DEPTH">PLUNGING DEPTH</message>
<message name="Parallel">Parallel</message>
<message name="Parameter constructor called as a function.">Parameter constructor called as a function.</message>
<message name="Part">Part</message>
<message name="Part dimensions">Part dimensions</message>
<message name="Pattern Group">Pattern Group</message>
<message name="Pencil">Pencil</message>
<message name="Pitch">Pitch</message>
<message name="Plane cannot be changed when radius compensation is active.">Plane cannot be changed when radius compensation is active.</message>
<message name="Plunge">Plunge</message>
<message name="Plunge feedrate is negative.">Plunge feedrate is negative.</message>
<message name="Plunges per retract is below 1.">Plunges per retract is below 1.</message>
<message name="Pocket">Pocket</message>
<message name="Pocket 2D">Pocket 2D</message>
<message name="Positive">Positive</message>
<message name="Post configuration is not compatible with this version of the post processor.">Post configuration is not compatible with this version of the post processor.</message>
<message name="Post processing has been manually disabled using the 'preventPost' property.">Post processing has been manually disabled using the 'preventPost' property.</message>
<message name="Post processing using a deprecated version of the post processor.">Post processing using a deprecated version of the post processor.</message>
<message name="Predrilling">Predrilling</message>
<message name="Preference">Preference</message>
<message name="Processing">Processing</message>
<message name="Program Comment">Program Comment</message>
<message name="Program name contains invalid character(s).">Program name contains invalid character(s).</message>
<message name="Program name exceeds maximum length.">Program name exceeds maximum length.</message>
<message name="Program name has not been specified.">Program name has not been specified.</message>
<message name="Program name must be a number.">Program name must be a number.</message>
<message name="Program name must begin with 2 letters.">Program name must begin with 2 letters.</message>
<message name="Program number is out of range.">Program number is out of range.</message>
<message name="Program number is reserved by tool builder.">Program number is reserved by tool builder.</message>
<message name="Program number is reserved.">Program number is reserved.</message>
<message name="Program uses multiple WCS!">Program uses multiple WCS!</message>
<message name="Project">Project</message>
<message name="REAMING">REAMING</message>
<message name="RETRACT FEED RATE">RETRACT FEED RATE</message>
<message name="RETRACTION FEED RATE">RETRACTION FEED RATE</message>
<message name="RETRACTION FEED TIME">RETRACTION FEED TIME</message>
<message name="RIGID TAPPING NEW">RIGID TAPPING NEW</message>
<message name="ROUGHING DIAMETER">ROUGHING DIAMETER</message>
<message name="Radial">Radial</message>
<message name="Radius compensation cannot be activated/deactivated for 5-axis move.">Radius compensation cannot be activated/deactivated for 5-axis move.</message>
<message name="Radius compensation cannot be activated/deactivated for a circular move.">Radius compensation cannot be activated/deactivated for a circular move.</message>
<message name="Radius compensation cannot be activated/deactivated for a cycle.">Radius compensation cannot be activated/deactivated for a cycle.</message>
<message name="Radius compensation cannot be activated/deactivated for circular move in other plane than the XY-plane.">Radius compensation cannot be activated/deactivated for circular move in other plane than the XY-plane.</message>
<message name="Radius compensation cannot be activated/deactivated for cycle.">Radius compensation cannot be activated/deactivated for cycle.</message>
<message name="Radius compensation has not changed.">Radius compensation has not changed.</message>
<message name="Radius compensation in the controller is not supported.">Radius compensation in the controller is not supported.</message>
<message name="Radius compensation is not active.">Radius compensation is not active.</message>
<message name="Radius compensation is not allowed in orientation.">Radius compensation is not allowed in orientation.</message>
<message name="Radius compensation is not off.">Radius compensation is not off.</message>
<message name="Radius compensation is not supported by the CNC.">Radius compensation is not supported by the CNC.</message>
<message name="Radius compensation is not supported.">Radius compensation is not supported.</message>
<message name="Radius compensation mode cannot be changed at rapid traversal.">Radius compensation mode cannot be changed at rapid traversal.</message>
<message name="Radius compensation mode is not supported by CNC.">Radius compensation mode is not supported by CNC.</message>
<message name="Radius compensation mode is not supported by robot.">Radius compensation mode is not supported by robot.</message>
<message name="Radius compensation mode is not supported.">Radius compensation mode is not supported.</message>
<message name="Radius compensation mode not supported.">Radius compensation mode not supported.</message>
<message name="Ramp">Ramp</message>
<message name="Ramping">Ramping</message>
<message name="Range">Range</message>
<message name="Rapid Distance">Rapid Distance</message>
<message name="Reduced">Reduced</message>
<message name="Remove tool manually">Remove tool manually</message>
<message name="Replace tool manually">Replace tool manually</message>
<message name="Replacing helical arc with planar arc.">Replacing helical arc with planar arc.</message>
<message name="Replacing non-XY plane arc with linear move.">Replacing non-XY plane arc with linear move.</message>
<message name="Resolution">Resolution</message>
<message name="Retract below stock plane.">Retract below stock plane.</message>
<message name="Retract feedrate is negative.">Retract feedrate is negative.</message>
<message name="Retract feedrate is undefined.">Retract feedrate is undefined.</message>
<message name="Rewind of machine axes">Rewind of machine axes</message>
<message name="Rewind of machine is required for simultaneous multi-axis toolpath.">Rewind of machine is required for simultaneous multi-axis toolpath.</message>
<message name="Rotational">Rotational</message>
<message name="SET-UP CLEARANCE">SET-UP CLEARANCE</message>
<message name="SINGLE-FLUTED DEEP-HOLE DRILLING">SINGLE-FLUTED DEEP-HOLE DRILLING</message>
<message name="STARTING POINT">STARTING POINT</message>
<message name="SURFACE COORDINATE">SURFACE COORDINATE</message>
<message name="Safe Tool Diameter">Safe Tool Diameter</message>
<message name="Scallop">Scallop</message>
<message name="Secondary spindle is not available.">Secondary spindle is not available.</message>
<message name="Section is active.">Section is active.</message>
<message name="Section is not active.">Section is not active.</message>
<message name="Setup Sheet">Setup Sheet</message>
<message name="Setup Sheet for Program">Setup Sheet for Program</message>
<message name="Shift is undefined.">Shift is undefined.</message>
<message name="Shift is negative.">Shift is negative.</message>
<message name="Slot">Slot</message>
<message name="Speed-feed synchronization is not supported for circular moves.">Speed-feed synchronization is not supported for circular moves.</message>
<message name="Spindle">Spindle</message>
<message name="Spindle direction is not clockwise.">Spindle direction is not clockwise.</message>
<message name="Spindle direction not supported.">Spindle direction not supported.</message>
<message name="Spindle orientation is not supported for live tooling.">Spindle orientation is not supported for live tooling.</message>
<message name="Spindle speed exceeds maximum value.">Spindle speed exceeds maximum value.</message>
<message name="Spindle speed exceeds minimum value.">Spindle speed exceeds minimum value.</message>
<message name="Spindle speed out of range.">Spindle speed out of range.</message>
<message name="Spiral">Spiral</message>
<message name="Stock">Stock</message>
<message name="Stock Lower in WCS">Stock Lower in WCS</message>
<message name="Stock Upper in WCS">Stock Upper in WCS</message>
<message name="Stock to Leave">Stock to Leave</message>
<message name="Strategy">Strategy</message>
<message name="Stream has not been opened.">Stream has not been opened.</message>
<message name="Stream is not open.">Stream is not open.</message>
<message name="Suction">Suction</message>
<message name="Surface Speed">Surface Speed</message>
<message name="T">T</message>
<message name="TAPER">TAPER</message>
<message name="TAPPING W/ CHIP BRKG">TAPPING W/ CHIP BRKG</message>
<message name="THREAD DEPTH">THREAD DEPTH</message>
<message name="THREAD MILLING">THREAD MILLING</message>
<message name="THREAD PITCH">THREAD PITCH</message>
<message name="THREADS PER STEP">THREADS PER STEP</message>
<message name="TIP:">TIP:</message>
<message name="TOLERANCE">TOLERANCE</message>
<message name="TOOL EDGE HEIGHT">TOOL EDGE HEIGHT</message>
<message name="TOOL PATH OVERLAP">TOOL PATH OVERLAP</message>
<message name="Table">Table</message>
<message name="Table constructor called as a function.">Table constructor called as a function.</message>
<message name="Table constructor expecting array as first argument.">Table constructor expecting array as first argument.</message>
<message name="Tail stock is not supported for secondary spindle.">Tail stock is not supported for secondary spindle.</message>
<message name="Taper Angle">Taper Angle</message>
<message name="Tapping is only allowed along machine Z.">Tapping is only allowed along machine Z.</message>
<message name="The diameter offset exceeds the maximum value.">The diameter offset exceeds the maximum value.</message>
<message name="The diameter offset is invalid.">The diameter offset is invalid.</message>
<message name="The feedrate is invalid.">The feedrate is invalid.</message>
<message name="The installation has been corrupted. Please reinstall and reactivate your license to correct the problem.">The installation has been corrupted. Please reinstall and reactivate your license to correct the problem.</message>
<message name="The length offset is invalid.">The length offset is invalid.</message>
<message name="The post configuration has been certified for level %1 but requires level %2.">The post configuration has been certified for level %1 but requires level %2.</message>
<message name="The post configuration has been not been certified for use with this version of the post processor. The post configuration has to be re-certified.">The post configuration has been not been certified for use with this version of the post processor. The post configuration has to be re-certified.</message>
<message name="The post configuration requires revision %1 or later of the post processor which has revision %2.">The post configuration requires revision %1 or later of the post processor which has revision %2.</message>
<message name="The probe cycle is machine specific and must always be handled in the post configuration.">The probe cycle is machine specific and must always be handled in the post configuration.</message>
<message name="The requested orientation is not supported by the CNC machine.">The requested orientation is not supported by the CNC machine.</message>
<message name="The retract feedrate is invalid.">The retract feedrate is invalid.</message>
<message name="The retract height in operation &quot; + getParameter(&quot;operation-comment">The retract height in operation &quot; + getParameter(&quot;operation-comment</message>
<message name="The stock transfer cycle is machine specific and must always be handled in the post configuration.">The stock transfer cycle is machine specific and must always be handled in the post configuration.</message>
<message name="The turning thread cycle is machine specific and must always be handled in the post configuration.">The turning thread cycle is machine specific and must always be handled in the post configuration.</message>
<message name="The variable '%1' is unknown.">The variable '%1' is unknown.</message>
<message name="This parameter specifies the output unit.">This parameter specifies the output unit.</message>
<message name="This parameter specifies the tolerance used for linearization.">This parameter specifies the tolerance used for linearization.</message>
<message name="Thread">Thread</message>
<message name="Through tool">Through tool</message>
<message name="Tip Angle">Tip Angle</message>
<message name="Tolerance">Tolerance</message>
<message name="Tool Sheet">Tool Sheet</message>
<message name="Tool Sheet for Program">Tool Sheet for Program</message>
<message name="Tool change is not supported without ATC. Please only post operations using the same tool.">Tool change is not supported without ATC. Please only post operations using the same tool.</message>
<message name="Tool changer">Tool changer</message>
<message name="Tool description is empty in operation &quot; + &quot;\&quot;&quot; + (getParameter(&quot;operation-comment">Tool description is empty in operation &quot; + &quot;\&quot;&quot; + (getParameter(&quot;operation-comment</message>
<message name="Tool description is empty.">Tool description is empty.</message>
<message name="Tool number exceeds maximum value.">Tool number exceeds maximum value.</message>
<message name="Tool number is out of range.">Tool number is out of range.</message>
<message name="Tool orientation is not supported by the CNC machine.">Tool orientation is not supported by the CNC machine.</message>
<message name="Tool orientation is not supported for radius compensation.">Tool orientation is not supported for radius compensation.</message>
<message name="Tool orientation is not supported.">Tool orientation is not supported.</message>
<message name="Tool preload">Tool preload</message>
<message name="Tooling">Tooling</message>
<message name="Tools">Tools</message>
<message name="Total">Total</message>
<message name="Total number of tools">Total number of tools</message>
<message name="Turning">Turning</message>
<message name="Type">Type</message>
<message name="UNIVERSAL DRILLING">UNIVERSAL DRILLING</message>
<message name="UNIVERSAL PECKING">UNIVERSAL PECKING</message>
<message name="UPPER ADV. STOP DIST.">UPPER ADV. STOP DIST.</message>
<message name="Unit is not supported.">Unit is not supported.</message>
<message name="Unit not specified.">Unit not specified.</message>
<message name="Unknown">Unknown</message>
<message name="Unknown start value for incremental variable.">Unknown start value for incremental variable.</message>
<message name="Unspecified">Unspecified</message>
<message name="Unsupported 'air through tool' coolant.">Unsupported 'air through tool' coolant.</message>
<message name="Unsupported 'air' coolant.">Unsupported 'air' coolant.</message>
<message name="Unsupported 'flood and mist' coolant.">Unsupported 'flood and mist' coolant.</message>
<message name="Unsupported 'flood and through tool' coolant.">Unsupported 'flood and through tool' coolant.</message>
<message name="Unsupported 'flood' coolant.">Unsupported 'flood' coolant.</message>
<message name="Unsupported 'mist' coolant.">Unsupported 'mist' coolant.</message>
<message name="Unsupported 'off' coolant.">Unsupported 'off' coolant.</message>
<message name="Unsupported 'suction' coolant.">Unsupported 'suction' coolant.</message>
<message name="Unsupported 'through tool' coolant.">Unsupported 'through tool' coolant.</message>
<message name="Unsupported CoolantState specifier '%1'.">Unsupported CoolantState specifier '%1'.</message>
<message name="Unsupported IdGenerator specifier '%1'.">Unsupported IdGenerator specifier '%1'.</message>
<message name="Unsupported Modal specifier '%1'.">Unsupported Modal specifier '%1'.</message>
<message name="Unsupported ModalGroup specifier '%1'.">Unsupported ModalGroup specifier '%1'.</message>
<message name="Unsupported Parameter specifier '%1'.">Unsupported Parameter specifier '%1'.</message>
<message name="Unsupported Table specifier '%1'.">Unsupported Table specifier '%1'.</message>
<message name="Unsupported arc-plane.">Unsupported arc-plane.</message>
<message name="Unsupported break control command.">Unsupported break control command.</message>
<message name="Unsupported calibrate command.">Unsupported calibrate command.</message>
<message name="Unsupported clean command.">Unsupported clean command.</message>
<message name="Unsupported close door command.">Unsupported close door command.</message>
<message name="Unsupported command">Unsupported command</message>
<message name="Unsupported compensation type.">Unsupported compensation type.</message>
<message name="Unsupported drilling orientation.">Unsupported drilling orientation.</message>
<message name="Unsupported exact stop command.">Unsupported exact stop command.</message>
<message name="Unsupported format specifier '%1'.">Unsupported format specifier '%1'.</message>
<message name="Unsupported lock multi-axis command.">Unsupported lock multi-axis command.</message>
<message name="Unsupported machine axis specifier '%1'.">Unsupported machine axis specifier '%1'.</message>
<message name="Unsupported machine configuration specifier '%1'.">Unsupported machine configuration specifier '%1'.</message>
<message name="Unsupported milling direction.">Unsupported milling direction.</message>
<message name="Unsupported open door command.">Unsupported open door command.</message>
<message name="Unsupported speed-feed synchronization activation command.">Unsupported speed-feed synchronization activation command.</message>
<message name="Unsupported speed-feed synchronization deactivation command.">Unsupported speed-feed synchronization deactivation command.</message>
<message name="Unsupported spindle axis.">Unsupported spindle axis.</message>
<message name="Unsupported spindle clockwise direction command.">Unsupported spindle clockwise direction command.</message>
<message name="Unsupported spindle counterclockwise direction command.">Unsupported spindle counterclockwise direction command.</message>
<message name="Unsupported spindle orientation command.">Unsupported spindle orientation command.</message>
<message name="Unsupported spindle start command.">Unsupported spindle start command.</message>
<message name="Unsupported spindle stop command.">Unsupported spindle stop command.</message>
<message name="Unsupported spindle.">Unsupported spindle.</message>
<message name="Unsupported start chip transport command.">Unsupported start chip transport command.</message>
<message name="Unsupported stop chip transport command.">Unsupported stop chip transport command.</message>
<message name="Unsupported stop program command.">Unsupported stop program command.</message>
<message name="Unsupported threading type.">Unsupported threading type.</message>
<message name="Unsupported tool measure command.">Unsupported tool measure command.</message>
<message name="Unsupported toolpath type.">Unsupported toolpath type.</message>
<message name="Unsupported type. Only A, B, and C are allowed.">Unsupported type. Only A, B, and C are allowed.</message>
<message name="Unsupported unlock multi-axis command.">Unsupported unlock multi-axis command.</message>
<message name="Unsupported variable specifier '%1'.">Unsupported variable specifier '%1'.</message>
<message name="Unsupported verify command.">Unsupported verify command.</message>
<message name="User defined retract">User defined retract</message>
<message name="Using NUM reserved program number.">Using NUM reserved program number.</message>
<message name="Using reserved program name.">Using reserved program name.</message>
<message name="Using the same tool number for different cutter geometry for operation '%1' and '%2'.">Using the same tool number for different cutter geometry for operation '%1' and '%2'.</message>
<message name="Vector">Vector</message>
<message name="Vendor">Vendor</message>
<message name="WCS">WCS</message>
<message name="WORKING PLANE">WORKING PLANE</message>
<message name="Weight">Weight</message>
<message name="Width">Width</message>
<message name="Wire">Wire</message>
<message name="Work offset has not been specified.">Work offset has not been specified.</message>
<message name="Work offset has not been specified. Using &quot; + formatWords(gFormat.format(15), hFormat.format(1)) + &quot; as WCS.">Work offset has not been specified. Using &quot; + formatWords(gFormat.format(15), hFormat.format(1)) + &quot; as WCS.</message>
<message name="Work offset has not been specified. Using E1 as WCS.">Work offset has not been specified. Using E1 as WCS.</message>
<message name="Work offset has not been specified. Using G53 as WCS.">Work offset has not been specified. Using G53 as WCS.</message>
<message name="Work offset has not been specified. Using G54 I0 as WCS.">Work offset has not been specified. Using G54 I0 as WCS.</message>
<message name="Work offset has not been specified. Using G54 as WCS.">Work offset has not been specified. Using G54 as WCS.</message>
<message name="Work offset has not been specified. Using G99 O1 as WCS.">Work offset has not been specified. Using G99 O1 as WCS.</message>
<message name="Work offset is ignored.">Work offset is ignored.</message>
<message name="Work offset is not specified.">Work offset is not specified.</message>
<message name="Work offset is not supported.">Work offset is not supported.</message>
<message name="Work offset is not used.">Work offset is not used.</message>
<message name="Work offset is out of range.">Work offset is out of range.</message>
<message name="Work offset out of range.">Work offset out of range.</message>
<message name="Work offsets">Work offsets</message>
<message name="Work plane is not supported">Work plane is not supported</message>
<message name="Wrong spindle direction.">Wrong spindle direction.</message>
<message name="X">X</message>
<message name="XYZ motion is not supported.">XYZ motion is not supported.</message>
<message name="Y">Y</message>
<message name="Yes">Yes</message>
<message name="You must set 'highFeedrate' because axes are not synchronized for rapid traversal.">You must set 'highFeedrate' because axes are not synchronized for rapid traversal.</message>
<message name="You must set 'highFeedrate' because axes are not synchronized in HURCO ISO NC mode.">You must set 'highFeedrate' because axes are not synchronized in HURCO ISO NC mode.</message>
<message name="Z">Z</message>
<message name="ZMAX">ZMAX</message>
<message name="ZMIN">ZMIN</message>
<message name="ball end mill">ball end mill</message>
<message name="block drill">block drill</message>
<message name="boring bar">boring bar</message>
<message name="boring turning">boring turning</message>
<message name="bullnose end mill">bullnose end mill</message>
<message name="carbide">carbide</message>
<message name="center">center</message>
<message name="center drill">center drill</message>
<message name="ceramics">ceramics</message>
<message name="chamfer mill">chamfer mill</message>
<message name="computer">computer</message>
<message name="control">control</message>
<message name="coolant air">coolant air</message>
<message name="coolant air through tool">coolant air through tool</message>
<message name="coolant flood">coolant flood</message>
<message name="coolant flood and mist">coolant flood and mist</message>
<message name="coolant flood and through tool">coolant flood and through tool</message>
<message name="coolant mist">coolant mist</message>
<message name="coolant off">coolant off</message>
<message name="coolant suction">coolant suction</message>
<message name="coolant through tool">coolant through tool</message>
<message name="counterbore">counterbore</message>
<message name="countersink">countersink</message>
<message name="custom turning">custom turning</message>
<message name="deg">deg</message>
<message name="description">description</message>
<message name="dovetail mill">dovetail mill</message>
<message name="drill">drill</message>
<message name="face mill">face mill</message>
<message name="flat end mill">flat end mill</message>
<message name="form mill">form mill</message>
<message name="ft/min">ft/min</message>
<message name="general turning">general turning</message>
<message name="grinder">grinder</message>
<message name="groove turning">groove turning</message>
<message name="high-speed steel">high-speed steel</message>
<message name="holder">holder</message>
<message name="home">home</message>
<message name="in">in</message>
<message name="invalid">invalid</message>
<message name="invalid coolant">invalid coolant</message>
<message name="inverse wear">inverse wear</message>
<message name="laser cutter">laser cutter</message>
<message name="left">left</message>
<message name="left hand tap">left hand tap</message>
<message name="lollipop mill">lollipop mill</message>
<message name="m/min">m/min</message>
<message name="mm">mm</message>
<message name="model">model</message>
<message name="not supported">not supported</message>
<message name="radius mill">radius mill</message>
<message name="reamer">reamer</message>
<message name="right">right</message>
<message name="right hand tap">right hand tap</message>
<message name="rpm">rpm</message>
<message name="slot mill">slot mill</message>
<message name="spot drill">spot drill</message>
<message name="tapered mill">tapered mill</message>
<message name="thread turning">thread turning</message>
<message name="ti coated">ti coated</message>
<message name="tolerance">tolerance</message>
<message name="turn">turn</message>
<message name="unit">unit</message>
<message name="unknown tool type">unknown tool type</message>
<message name="unspecified">unspecified</message>
<message name="vendor">vendor</message>
<message name="water jet">water jet</message>
<message name="wear">wear</message>
<message name="welder">welder</message>
<message name="wire">wire</message>
</locale>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,430 @@
/**
Copyright (C) 2012-2021 by Autodesk, Inc.
All rights reserved.
Generative Machining APT post processor configuration.
$Revision: 43882 a148639d401c1626f2873b948fb6d996d3bc60aa $
$Date: 2022-04-12 21:31:49 $
FORKID {CCD0BC6D-B3F5-48cc-9C89-FA954D4BACE0}
*/
description = "Generative Machining APT";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2021 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Post for Generative Machining APT.";
unit = ORIGINAL_UNIT; // do not map unit
extension = "apt";
setCodePage("ansi");
capabilities = CAPABILITY_INTERMEDIATE;
// user-defined properties
properties = {
optionalStop: {
title : "Optional stop",
description: "Outputs optional stop code during when necessary in the code.",
group : "preferences",
type : "boolean",
value : true,
scope : "post"
},
useParkPosition: {
title : "Go home",
description: "Go home at the end of the program.",
group : "homePositions",
type : "boolean",
value : true,
scope : "post"
}
};
allowHelicalMoves = true;
allowedCircularPlanes = undefined; // allow any circular motion
var xyzFormat = createFormat({decimals:6}); // spatial
var aFormat = createFormat({decimals:6, scale:DEG}); // angle
var feedFormat = createFormat({decimals:1}); // feed
var rpmFormat = createFormat({decimals:0}); // spindle speed
var secFormat = createFormat({decimals:3}); // time
// collected state
var feedUnit;
var radiusCompensationActive = false;
var previousFeed;
/* Returns the specified string without any invalid characters. */
function toNiceString(text) {
return filterText(translateText(text, ":", "."), "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(.,)/-+*= \t]").substr(0, 73);
}
function writeComment(text) {
writeln("PPRINT/'" + toNiceString(text) + "'");
}
function onOpen() {
writeln("PARTNO/'" + toNiceString(programName) + "'");
writeln("UNITS/" + ((unit == IN) ? "INCHES" : "MM"));
feedUnit = (unit == IN) ? "IPM" : "MMPM";
writeComment(programComment);
var machineId = machineConfiguration.getModel();
if (machineId) {
writeln("MACHIN/" + machineId);
}
}
function onComment(comment) {
writeComment(comment);
}
var mapCommand = {
COMMAND_STOP : "STOP",
COMMAND_OPTIONAL_STOP : "OPSTOP",
COMMAND_STOP_SPINDLE : "SPINDL/ON",
COMMAND_START_SPINDLE : "SPINDL/OFF",
COMMAND_SPINDLE_CLOCKWISE : "SPINDL/CLW",
COMMAND_SPINDLE_COUNTERCLOCKWISE: "SPINDL/CCLW"
};
function onCommand(command) {
switch (command) {
case COMMAND_LOCK_MULTI_AXIS:
return;
case COMMAND_UNLOCK_MULTI_AXIS:
return;
case COMMAND_BREAK_CONTROL:
return;
case COMMAND_TOOL_MEASURE:
return;
}
if (!mapCommand[command]) {
warning("Unsupported command: " + getCommandStringId(command));
writeComment("Unsupported command: " + getCommandStringId(command));
} else {
writeln(mapCommand[command]);
}
}
function onMachineCommand(command) {
writeln("AUXFUN/" + command);
}
function onSection() {
writeln("MODE/" + isMilling() ? "MILL" : "TURN"); // first statement for an operation
// writeComment(...); // operation comment
if (isTurning()) {
writeln("HEAD/1");
}
if (machineConfiguration.hasHomePositionX() && machineConfiguration.hasHomePositionY()) {
writeln(
"FROM/" + xyzFormat.format(machineConfiguration.getHomePositionX()) + ", " +
xyzFormat.format(machineConfiguration.getHomePositionY()) + ", " +
xyzFormat.format(machineConfiguration.getRetractPlane())
);
}
if (getProperty("optionalStop")) {
writeln("OPSTOP");
}
var t = tool.number;
var p = 0;
var l = tool.bodyLength;
var o = tool.lengthOffset;
writeln("LOADTL/" + t + ", IN, " + p + ", LENGTH, " + l + ", OSETNO, " + o);
var d = tool.diameter;
var r = tool.cornerRadius;
var e = tool.diameter / 2 - tool.cornerRadius;
var f = tool.cornerRadius;
var a = 0; // tool.tipAngle;
var b = tool.taperAngle;
var h = tool.shoulderLength;
writeln("CUTTER/" + xyzFormat.format(d) + ", " + xyzFormat.format(r) + ", " + xyzFormat.format(e) + ", " + xyzFormat.format(f) + ", " + aFormat.format(a) + ", " + aFormat.format(b) + ", " + xyzFormat.format(h));
if (tool.description) {
writeComment(tool.description);
}
if (currentSection.isMultiAxis()) {
writeln("MULTAX/ON");
}
/*
writeln("RAPID");
var eulerXYZ = currentSection.workPlane.eulerXYZ;
writeln("ROTABL/" + aFormat.format(eulerXYZ.x) + ", AAXIS");
writeln("ROTABL/" + aFormat.format(eulerXYZ.y) + ", BAXIS");
writeln("ROTABL/" + aFormat.format(eulerXYZ.z) + ", CAXIS");
*/
writeln("ORIGIN/" + xyzFormat.format(currentSection.workOrigin.x) + ", " + xyzFormat.format(currentSection.workOrigin.y) + ", " + xyzFormat.format(currentSection.workOrigin.z));
// writeln("OFSTNO/" + tool.lengthOffset); // not used
if (isMilling()) {
writeln("SPINDL/" + rpmFormat.format(spindleSpeed) + ", RPM, " + (tool.clockwise ? "CLW" : "CCLW"));
}
if (isTurning()) {
writeln(
"SPINDL/" + rpmFormat.format(spindleSpeed) + ", " + ((unit == IN) ? "SFM" : "SMM") + ", " + (tool.clockwise ? "CLW" : "CCLW")
);
}
if (tool.coolant != COOLANT_OFF) {
var mapCoolantTable = new Table(
["OFF", "FLOOD", "MIST", "THRU", "TAP"],
{initial:COOLANT_OFF, force:true},
"Invalid coolant mode"
);
if (mapCoolantTable.lookup(tool.coolant)) {
writeln("COOLNT/" + mapCoolantTable.lookup(tool.coolant));
} else {
warning(localize("Coolant not supported."));
}
}
}
function onDwell(seconds) {
writeln("DELAY/" + secFormat.format(seconds)); // in seconds
}
function onParameter(name, value) {
}
function onRadiusCompensation() {
switch (radiusCompensation) {
case RADIUS_COMPENSATION_OFF:
if (radiusCompensationActive) {
radiusCompensationActive = false;
writeln("CUTCOM/OFF");
}
break;
case RADIUS_COMPENSATION_LEFT:
radiusCompensationActive = true;
writeln("CUTCOM/ON, LEFT" + conditional(tool.diameterOffset != 0, ", " + tool.diameterOffset));
break;
case RADIUS_COMPENSATION_RIGHT:
radiusCompensationActive = true;
writeln("CUTCOM/ON, RIGHT" + conditional(tool.diameterOffset != 0, ", " + tool.diameterOffset));
break;
}
}
function onRapid(x, y, z) {
writeln("RAPID");
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z));
}
function onLinear(x, y, z, feed) {
if (feed != previousFeed) {
previousFeed = feed;
writeln("FEDRAT/" + feedFormat.format(feed) + ", " + feedUnit);
}
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z));
}
function onRapid5D(x, y, z, dx, dy, dz) {
writeln("RAPID");
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z) + ", " + xyzFormat.format(dx) + ", " + xyzFormat.format(dy) + ", " + xyzFormat.format(dz));
}
function onLinear5D(x, y, z, dx, dy, dz, feed) {
if (feed != previousFeed) {
previousFeed = feed;
writeln("FEDRAT/" + feedFormat.format(feed) + ", " + feedUnit);
}
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z) + ", " + xyzFormat.format(dx) + ", " + xyzFormat.format(dy) + ", " + xyzFormat.format(dz));
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
if (feed != previousFeed) {
previousFeed = feed;
writeln("FEDRAT/" + feedFormat.format(feed) + ", " + feedUnit);
}
var n = getCircularNormal();
if (clockwise) {
n = Vector.product(n, -1);
}
writeln(
"MOVARC/" + xyzFormat.format(cx) + ", " + xyzFormat.format(cy) + ", " + xyzFormat.format(cz) + ", " + xyzFormat.format(n.x) + ", " + xyzFormat.format(n.y) + ", " + xyzFormat.format(n.z) + ", " + xyzFormat.format(getCircularRadius()) + ", ANGLE, " + aFormat.format(getCircularSweep())
);
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z));
}
function onCycle() {
}
function onCyclePoint(x, y, z) {
if (isFirstCyclePoint()) {
var d = cycle.depth;
var f = cycle.feedrate;
var c = cycle.clearance - cycle.bottom;
var r = cycle.clearance - cycle.retract;
var q = cycle.dwell;
var i1 = cycle.incrementalDepth; // for pecking
var statement;
if (cycle.clearance != undefined) {
var p = getCurrentPosition();
if (p.z < cycle.clearance) {
writeln("RAPID");
writeln("GOTO/" + xyzFormat.format(p.x) + ", " + xyzFormat.format(p.y) + ", " + xyzFormat.format(cycle.clearance));
setCurrentPositionZ(cycle.clearance);
writeln("RAPID");
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(cycle.clearance));
setCurrentPositionX(x);
setCurrentPositionY(y);
} else {
writeln("RAPID");
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(p.z));
setCurrentPositionX(x);
setCurrentPositionY(y);
writeln("RAPID");
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(cycle.clearance));
setCurrentPositionZ(cycle.clearance);
}
}
switch (cycleType) {
case "drilling":
statement = "CYCLE/DRILL, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "counter-boring":
statement = "CYCLE/DRILL, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + xyzFormat.format(q);
}
break;
case "reaming":
statement = "CYCLE/REAM, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "boring":
statement = "CYCLE/BORE, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
statement += ", ORIENT, " + aFormat.format(cycle.compensatedShiftOrientation);
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "fine-boring":
statement = "CYCLE/BORE, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c) + ", " + xyzFormat.format(cycle.shift);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
statement += ", ORIENT, " + aFormat.format(cycle.compensatedShiftOrientation);
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "chip-breaking":
statement = "CYCLE/BRKCHP, " + xyzFormat.format(d) + ", INCR, " + xyzFormat.format(i1) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "deep-drilling":
statement = "CYCLE/DEEP, " + xyzFormat.format(d) + ", INCR, " + xyzFormat.format(i1) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "tapping":
if (tool.type == TOOL_TAP_LEFT_HAND) {
expandCyclePoint(x, y, z);
} else {
statement = "CYCLE/TAP, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
}
break;
case "right-tapping":
statement = "CYCLE/TAP, " + xyzFormat.format(d) + ", " + feedUnit + ", " + feedFormat.format(f) + ", " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
break;
default:
expandCyclePoint(x, y, z);
}
writeln(statement);
}
if (!cycleExpanded) {
// TAG: what is z relative to - stock?
writeln("GOTO/" + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(cycle.bottom + cycle.depth));
} else {
expandCyclePoint(x, y, z);
}
}
function onCycleEnd() {
if (!cycleExpanded) {
writeln("CYCLE/OFF");
}
writeln("RAPID");
var p = getCurrentPosition();
writeln("GOTO/" + xyzFormat.format(p.x) + ", " + xyzFormat.format(p.y) + ", " + xyzFormat.format(cycle.clearance));
}
function onSectionEnd() {
if (tool.coolant != COOLANT_OFF) {
writeln("COOLNT/OFF");
}
if (currentSection.isMultiAxis()) {
writeln("MULTAX/OFF");
}
}
function onClose() {
if (getProperty("useParkPosition")) {
writeln("GOHOME");
}
writeln("END");
writeln("FINI");
}
function setProperty(property, value) {
properties[property].current = value;
}

View File

@ -0,0 +1,552 @@
/**
Copyright (C) 2012-2025 by Autodesk, Inc.
All rights reserved.
3D additive printer post configuration.
$Revision: 45583 10f6400eaf1c75a27c852ee82b57479e7a9134c0 $
$Date: 2025-08-21 13:23:15 $
FORKID {A316FBC4-FA6E-41C5-A347-3D94F72F5D06}
*/
description = "Generic FFF Machine";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2025 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45917;
longDescription = "Template post for exporting toolpath to a generic FFF printer in gcode format";
extension = "gcode";
setCodePage("ascii");
capabilities = CAPABILITY_ADDITIVE;
tolerance = spatial(0.002, MM);
highFeedrate = toPreciseUnit(6000, MM);
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.4, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(180);
allowHelicalMoves = false; // disable helical support
allowSpiralMoves = false; // disable spiral support
allowedCircularPlanes = 1 << PLANE_XY; // allow XY circular motion
// user-defined properties
// included properties
if (typeof properties != "object") {
properties = {};
}
if (typeof groupDefinitions != "object") {
groupDefinitions = {};
}
// >>>>> INCLUDED FROM ../common/propertyTemperatureTower.cpi
properties._trigger = {
title : "Trigger",
description: "Specifies whether to use the Z-height or layer number as the trigger to change temperature of the active Extruder.",
type : "enum",
values : [
{title:"Disabled", id:"disabled"},
{title:"by Height", id:"height"},
{title:"by Layer", id:"layer"}
],
value: "disabled",
scope: "post",
group: "temperatureTower"
};
properties._triggerValue = {
title : "Trigger Value",
description: "This number specifies either the Z-height or the layer number increment on when a change should be triggered.",
type : "number",
value : 10,
scope : "post",
group : "temperatureTower"
};
properties.tempStart = {
title : "Start Temperature",
description: "Specifies the starting temperature for the active Extruder (degrees C). Note that the temperature specified in the print settings will be overridden by this value.",
type : "integer",
value : 190,
range : [50, 450],
scope : "post",
group : "temperatureTower"
};
properties.tempInterval = {
title : "Temperature Interval",
description: "Every step, increase the temperature of the active Extruder by this amount (degrees C).",
type : "integer",
value : 5,
range : [-30, 30],
scope : "post",
group : "temperatureTower"
};
groupDefinitions.temperatureTower = {
title : "Temperature Tower",
description: "Temperature Towers are used to test new filaments in order to identify the best printing temperature. " +
"When utilized, this functionality generates a Gcode file where the temperature increases by a set amount, every step in height or layer number.",
collapsed: true,
order : 0
};
// <<<<< INCLUDED FROM ../common/propertyTemperatureTower.cpi
// >>>>> INCLUDED FROM ../common/propertyRelativeExtrusion.cpi
properties.relativeExtrusion = {
title : "Relative extrusion mode",
description: "Select the filament extrusion mode, either absolute or relative.",
type : "boolean",
value : true,
scope : "post"
};
// <<<<< INCLUDED FROM ../common/propertyRelativeExtrusion.cpi
var gFormat = createFormat({prefix:"G", width:1, decimals:0});
var mFormat = createFormat({prefix:"M", width:2, zeropad:true, decimals:0});
var tFormat = createFormat({prefix:"T", width:1, decimals:0});
var integerFormat = createFormat({decimals:0});
var gMotionModal = createOutputVariable({control:CONTROL_FORCE}, gFormat); // modal group 1 - G0-G3
var gAbsIncModal = createOutputVariable({}, gFormat); // modal group 3 - G90-91
// Specify the required commands for your printer below.
var commands = {
extruderChangeCommand : undefined, // command to change the extruder
setExtruderTemperature: mFormat.format(104), // command to set the extruder temperature
waitExtruder : mFormat.format(109), // wait command for the extruder temperature
setBedTemperature : mFormat.format(140), // command to set the bed temperature
waitBed : mFormat.format(190), // wait command for the bed temperature
reportTemperatures : undefined, // command to report the temperatures to the printer
fan : {on:mFormat.format(106), off:mFormat.format(107)}, // command turn the fan on/off
extrusionMode : {relative:mFormat.format(83), absolute:mFormat.format(82)} // commands for relative / absolute filament extrusion mode
};
var settings = {
useG0 : true, // specifies to either use G0 or G1 commands for rapid movements
skipParkPosition: false, // set to true to avoid output of the park position at the end of the program
comments : {
permittedCommentChars: " abcdefghijklmnopqrstuvwxyz0123456789.,=_-*+:/", // letters are not case sensitive, use option 'outputFormat' below. Set to 'undefined' to allow any character
prefix : ";", // specifies the prefix for the comment
suffix : "", // specifies the suffix for the comment
outputFormat : "ignoreCase", // can be set to "upperCase", "lowerCase" and "ignoreCase". Set to "ignoreCase" to write comments without upper/lower case formatting
maximumLineLength : 80 // the maximum number of characters allowed in a line
}
};
// collected state
var activeExtruder = 0; // track the active extruder.
function onOpen() {
setFormats(unit);
initializeMachineParameters();
if (typeof writeProgramHeader == "function") {
writeProgramHeader();
}
writeBlock(gFormat.format(unit == MM ? 21 : 20)); // set unit
}
function onSection() {
writeBlock(gAbsIncModal.format(90)); // absolute spatial coordinates
writeBlock(getCode(getProperty("relativeExtrusion") ? commands.extrusionMode.relative : commands.extrusionMode.absolute));
writeBlock(gFormat.format(28), zOutput.format(0)); // homing Z
// lower build plate before homing in XY
feedOutput.reset();
var initialPosition = getFramePosition(currentSection.getInitialPosition());
writeBlock(gMotionModal.format(1), zOutput.format(initialPosition.z), feedOutput.format(highFeedrate));
writeBlock(gFormat.format(28), xOutput.format(0), yOutput.format(0)); // homing XY
writeBlock(gFormat.format(92), eOutput.format(0));
forceXYZE();
}
function onClose() {
writeComment(localize("END OF GCODE"));
}
// >>>>> INCLUDED FROM ../common/onBedTemp.cpi
function onBedTemp(temp, wait) {
if (wait) {
writeBlock(getCode(commands.reportTemperatures));
writeBlock(getCode(commands.waitBed), sOutput.format(temp));
} else {
writeBlock(getCode(commands.setBedTemperature), sOutput.format(temp));
}
}
// <<<<< INCLUDED FROM ../common/onBedTemp.cpi
// >>>>> INCLUDED FROM ../common/onExtruderTemp.cpi
function onExtruderTemp(temp, wait, id) {
if (typeof executeTempTowerFeatures == "function" && getProperty("_trigger") != undefined) {
if (getProperty("_trigger") != "disabled" && (getCurrentPosition().z == 0)) {
temp = getProperty("tempStart"); // override temperature with the starting temperature for the temp tower feature
}
}
if (wait) {
writeBlock(getCode(commands.reportTemperatures));
writeBlock(getCode(commands.waitExtruder), sOutput.format(temp), tFormat.format(id));
} else {
writeBlock(getCode(commands.setExtruderTemperature), sOutput.format(temp), tFormat.format(id));
}
}
// <<<<< INCLUDED FROM ../common/onExtruderTemp.cpi
// >>>>> INCLUDED FROM ../common/onExtruderChange.cpi
function onExtruderChange(id) {
if (id > machineConfiguration.getNumberExtruders()) {
error(subst(localize("This printer does not support the extruder '%1'."), integerFormat.format(id)));
return;
}
writeBlock(getCode(commands.extruderChangeCommand), tFormat.format(id));
activeExtruder = id;
forceXYZE();
}
// <<<<< INCLUDED FROM ../common/onExtruderChange.cpi
// >>>>> INCLUDED FROM ../common/onExtrusionReset.cpi
function onExtrusionReset(length) {
if (getProperty("relativeExtrusion")) {
eOutput.setCurrent(0);
}
eOutput.reset();
writeBlock(gFormat.format(92), eOutput.format(length));
}
// <<<<< INCLUDED FROM ../common/onExtrusionReset.cpi
// >>>>> INCLUDED FROM ../common/onFanSpeed.cpi
function onFanSpeed(speed, id) {
if (!commands.fan) {
return;
}
if (speed == 0) {
writeBlock(getCode(commands.fan.off));
} else {
writeBlock(getCode(commands.fan.on), sOutput.format(speed));
}
}
// <<<<< INCLUDED FROM ../common/onFanSpeed.cpi
// >>>>> INCLUDED FROM ../common/onLayer.cpi
function onLayer(num) {
if (typeof executeTempTowerFeatures == "function") {
executeTempTowerFeatures(num);
}
if (num == 1) {
writeComment("LAYER_COUNT:" + integerFormat.format(layerCount));
}
writeComment("LAYER:" + integerFormat.format(num));
if (typeof changeFilament == "function" && getProperty("changeLayers") != undefined) {
changeFilament(num);
}
if (typeof pausePrint == "function" && getProperty("pauseLayers") != undefined) {
pausePrint(num);
}
}
// <<<<< INCLUDED FROM ../common/onLayer.cpi
// >>>>> INCLUDED FROM ../common/setFormats.cpi
function setFormats(_desiredUnit) {
if (_desiredUnit != unit) {
writeComment(subst(localize("This printer does not support programs in %1."), unit == IN ? "inches" : "millimeters"));
writeComment(localize("The program has been converted to the supported unit."));
unit = _desiredUnit;
}
xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
feedFormat = createFormat({decimals:(unit == MM ? 0 : 1)});
dimensionFormat = createFormat({decimals:(unit == MM ? 3 : 4), zeropad:false, suffix:(unit == MM ? "mm" : "in")});
xOutput = createOutputVariable({prefix:"X"}, xyzFormat);
yOutput = createOutputVariable({prefix:"Y"}, xyzFormat);
zOutput = createOutputVariable({prefix:"Z"}, xyzFormat);
feedOutput = createOutputVariable({prefix:"F"}, feedFormat);
eOutput = createOutputVariable({prefix:"E", type:getProperty("relativeExtrusion") ? TYPE_INCREMENTAL : TYPE_ABSOLUTE}, xyzFormat);
sOutput = createOutputVariable({prefix:"S", control:CONTROL_FORCE}, xyzFormat); // parameter temperature or speed
iOutput = createOutputVariable({prefix:"I", control:CONTROL_FORCE}, xyzFormat); // circular output
jOutput = createOutputVariable({prefix:"J", control:CONTROL_FORCE}, xyzFormat); // circular output
if (typeof parseSpatialProperties == "function") {
parseSpatialProperties();
}
}
// <<<<< INCLUDED FROM ../common/setFormats.cpi
// >>>>> INCLUDED FROM ../common/writeProgramHeader.cpi
function writeProgramHeader() {
if (programName) {
writeComment(programName);
}
if (programComment) {
writeComment(programComment);
}
writeComment(subst(localize("Printer name: %1 %2"), machineConfiguration.getVendor(), machineConfiguration.getModel()));
writeComment("TIME:" + integerFormat.format(printTime)); // do not localize
writeComment(subst(localize("Print time: %1"), formatCycleTime(printTime)));
for (var i = 1; i <= numberOfExtruders; ++i) {
writeComment(subst(localize("Extruder %1 material used: %2"), i, dimensionFormat.format(toPreciseUnit(getExtruder(i).extrusionLength, MM))));
writeComment(subst(localize("Extruder %1 material name: %2"), i, getExtruder(i).materialName));
writeComment(subst(localize("Extruder %1 filament diameter: %2"), i, dimensionFormat.format(toPreciseUnit(getExtruder(i).filamentDiameter, MM))));
writeComment(subst(localize("Extruder %1 nozzle diameter: %2"), i, dimensionFormat.format(toPreciseUnit(getExtruder(i).nozzleDiameter, MM))));
writeComment(subst(localize("Extruder %1 offset x: %2"), i, dimensionFormat.format(toPreciseUnit(machineConfiguration.getExtruderOffsetX(i), MM))));
writeComment(subst(localize("Extruder %1 offset y: %2"), i, dimensionFormat.format(toPreciseUnit(machineConfiguration.getExtruderOffsetY(i), MM))));
writeComment(subst(localize("Extruder %1 offset z: %2"), i, dimensionFormat.format(toPreciseUnit(machineConfiguration.getExtruderOffsetZ(i), MM))));
writeComment(subst(localize("Extruder %1 max temp: %2"), i, integerFormat.format(getExtruder(i).temperature)));
}
writeComment(subst(localize("Bed temp: %1"), integerFormat.format(bedTemp)));
writeComment(subst(localize("Layer count: %1"), integerFormat.format(layerCount)));
writeComment(subst(localize("Width: %1"), dimensionFormat.format(toPreciseUnit(machineConfiguration.getWidth() - machineConfiguration.getCenterPositionX(), MM))));
writeComment(subst(localize("Depth: %1"), dimensionFormat.format(toPreciseUnit(machineConfiguration.getDepth() - machineConfiguration.getCenterPositionY(), MM))));
writeComment(subst(localize("Height: %1"), dimensionFormat.format(toPreciseUnit(machineConfiguration.getHeight() + machineConfiguration.getCenterPositionZ(), MM))));
writeComment(subst(localize("Center x: %1"), dimensionFormat.format(toPreciseUnit((machineConfiguration.getWidth() / 2.0) - machineConfiguration.getCenterPositionX(), MM))));
writeComment(subst(localize("Center y: %1"), dimensionFormat.format(toPreciseUnit((machineConfiguration.getDepth() / 2.0) - machineConfiguration.getCenterPositionY(), MM))));
writeComment(subst(localize("Center z: %1"), dimensionFormat.format(toPreciseUnit(machineConfiguration.getCenterPositionZ(), MM))));
writeComment(subst(localize("Count of bodies: %1"), integerFormat.format(partCount)));
writeComment(subst(localize("Fusion version: %1"), getGlobalParameter("version")));
}
// <<<<< INCLUDED FROM ../common/writeProgramHeader.cpi
// >>>>> INCLUDED FROM ../common/commonAdditiveFunctions.cpi
function writeBlock() {
writeWords(arguments);
}
validate(settings.comments, "Setting 'comments' is required but not defined.");
function formatComment(text) {
var prefix = settings.comments.prefix;
var suffix = settings.comments.suffix;
var _permittedCommentChars = settings.comments.permittedCommentChars == undefined ? "" : settings.comments.permittedCommentChars;
switch (settings.comments.outputFormat) {
case "upperCase":
text = text.toUpperCase();
_permittedCommentChars = _permittedCommentChars.toUpperCase();
break;
case "lowerCase":
text = text.toLowerCase();
_permittedCommentChars = _permittedCommentChars.toLowerCase();
break;
case "ignoreCase":
_permittedCommentChars = _permittedCommentChars.toUpperCase() + _permittedCommentChars.toLowerCase();
break;
default:
error(localize("Unsupported option specified for setting 'comments.outputFormat'."));
}
if (_permittedCommentChars != "") {
text = filterText(String(text), _permittedCommentChars);
}
text = String(text).substring(0, settings.comments.maximumLineLength - prefix.length - suffix.length);
return text != "" ? prefix + text + suffix : "";
}
/**
Output a comment.
*/
function writeComment(text) {
if (!text) {
return;
}
var comments = String(text).split(EOL);
for (comment in comments) {
var _comment = formatComment(comments[comment]);
if (_comment) {
writeln(_comment);
}
}
}
function onComment(text) {
writeComment(text);
}
function forceXYZE() {
xOutput.reset();
yOutput.reset();
zOutput.reset();
eOutput.reset();
}
function getCode(code) {
return typeof code == "undefined" ? "" : code;
}
function onParameter(name, value) {
switch (name) {
case "feedRate":
rapidFeedrate = toPreciseUnit(value, MM);
break;
}
}
var nextTriggerValue;
var newTemperature;
function executeTempTowerFeatures(num) {
if (getProperty("_trigger") != "disabled") {
var multiplier = getProperty("_trigger") == "height" ? 100 : 1;
var currentValue = getProperty("_trigger") == "height" ? xyzFormat.format(getCurrentPosition().z * 100) : (num - 1);
if (num == 1) { // initialize
nextTriggerValue = getProperty("_triggerValue") * multiplier;
newTemperature = getProperty("tempStart");
} else {
if (currentValue >= nextTriggerValue) {
newTemperature += getProperty("tempInterval");
nextTriggerValue += getProperty("_triggerValue") * multiplier;
if (newTemperature <= maximumExtruderTemp[activeExtruder]) {
onExtruderTemp(newTemperature, false, activeExtruder);
} else {
error(subst(
localize("Temperature tower - The requested extruder temperature of '%1' exceeds the maximum value of '%2'."), newTemperature, maximumExtruderTemp[activeExtruder])
);
}
}
}
}
}
function formatCycleTime(cycleTime) {
var seconds = cycleTime % 60 | 0;
var minutes = ((cycleTime - seconds) / 60 | 0) % 60;
var hours = (cycleTime - minutes * 60 - seconds) / (60 * 60) | 0;
if (hours > 0) {
return subst(localize("%1h:%2m:%3s"), hours, minutes, seconds);
} else if (minutes > 0) {
return subst(localize("%1m:%2s"), minutes, seconds);
} else {
return subst(localize("%1s"), seconds);
}
}
function onRapid(_x, _y, _z) {
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var z = zOutput.format(_z);
var f = feedOutput.format(rapidFeedrate);
if (settings.skipParkPosition) {
var num =
(!xyzFormat.areDifferent(_x, currentSection.getFinalPosition().x) ? 1 : 0) +
(!xyzFormat.areDifferent(_y, currentSection.getFinalPosition().y) ? 1 : 0) +
(!xyzFormat.areDifferent(_z, currentSection.getFinalPosition().z) ? 1 : 0);
if (num > 0 && isLastMotionRecord(getNextRecord().getId() + 1)) {
return; // skip movements to park position
}
}
if (x || y || z || f) {
writeBlock(gMotionModal.format(settings.useG0 ? 0 : 1), x, y, z, f);
feedOutput.reset();
}
}
function onLinearExtrude(_x, _y, _z, _f, _e) {
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var z = zOutput.format(_z);
var f = feedOutput.format(_f);
var e = eOutput.format(_e);
if (x || y || z || f || e) {
writeBlock(gMotionModal.format(1), x, y, z, f, e);
}
}
function onCircularExtrude(_clockwise, _cx, _cy, _cz, _x, _y, _z, _f, _e) {
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var z = zOutput.format(_z);
var f = feedOutput.format(_f);
var e = eOutput.format(_e);
var start = getCurrentPosition();
var i = iOutput.format(_cx - start.x);
var j = jOutput.format(_cy - start.y);
switch (getCircularPlane()) {
case PLANE_XY:
writeBlock(gMotionModal.format(_clockwise ? 2 : 3), x, y, i, j, f, e);
break;
default:
linearize(tolerance);
}
}
function getLayersFromProperty(_property) {
var layer = getProperty(_property).toString().split(",");
for (var i in layer) {
if (!isNaN(parseFloat(layer[i])) && !isNaN(layer[i] - 0) && (layer[i] - Math.floor(layer[i])) === 0) {
layer[i] = parseFloat(layer[i], 10);
} else {
error(subst(
localize("The property '%1' contains an invalid value of '%2'. Only integers are allowed."), _property.title, layer[i])
);
return undefined;
}
}
return layer; // returns an array of layer numbers as integers
}
var pauseLayers;
function pausePrint(num) {
if (getProperty("pauseLayers") != "") {
validate(commands.pauseCommand != undefined, "The pause command is not defined.");
if (num == 1) { // initialize array
pauseLayers = getLayersFromProperty(properties.pauseLayers);
}
if (pauseLayers.indexOf(num) > -1) {
writeComment(localize("PAUSE PRINT"));
writeBlock(getCode(commands.displayCommand), getProperty("pauseMessage"));
forceXYZE();
writeBlock(gMotionModal.format(1), zOutput.format(machineConfiguration.getParkPositionZ()));
writeBlock(gMotionModal.format(1), xOutput.format(machineConfiguration.getParkPositionX()), yOutput.format(machineConfiguration.getParkPositionY()));
writeBlock(getCode(commands.pauseCommand));
}
}
}
var changeLayers;
function changeFilament(num) {
if (getProperty("changeLayers") != "") {
validate(commands.changeFilament.command != undefined, "The filament change command is not defined.");
if (num == 1) { // initialize array
changeLayers = getLayersFromProperty(properties.changeLayers);
}
if (changeLayers.indexOf(num) > -1) {
writeComment(localize("FILAMENT CHANGE"));
if (getProperty("changeMessage") != "") {
writeBlock(getCode(commands.displayCommand), getProperty("changeMessage"));
}
var words = new Array();
words.push(commands.changeFilament.command);
/*
if (!getProperty("useFirmwareConfiguration")) {
words.push("X" + xyzFormat.format(machineConfiguration.getParkPositionX()));
words.push("Y" + xyzFormat.format(machineConfiguration.getParkPositionY()));
words.push("Z" + xyzFormat.format(getProperty("zPosition")));
words.push(commands.changeFilament.initialRetract + xyzFormat.format(getProperty("initialRetract")));
words.push(commands.changeFilament.removalRetract + xyzFormat.format(getProperty("removalRetract")));
}
*/
writeBlock(words);
forceXYZE();
feedOutput.reset();
}
}
}
function isLastMotionRecord(record) {
while (!(getRecord(record).isMotion())) {
if (getRecord(record).getType() == RECORD_OPERATION_END) {
return true;
}
++record;
}
return false;
}
var maximumExtruderTemp = [210, 210];
var rapidFeedrate = highFeedrate;
function initializeMachineParameters() {
var machineData = hasGlobalParameter("machine-v2") ? JSON.parse(getGlobalParameter("machine-v2")) : null;
if (machineData && typeof machineData == "object") {
// data in the machine definition is always stored as degree celsius and millimeters
maximumExtruderTemp[0] = parseFloat(machineData.additive_extruder[0].max_temp); // max temp for extruder 1
if (machineData.additive_extruder[1]) {
maximumExtruderTemp[1] = parseFloat(machineData.additive_extruder[1].max_temp); // max temp for extruder 2
}
rapidFeedrate = toPreciseUnit(parseFloat(machineData.limits.default.speed_xy_max) * 60, MM); // convert mm/s to mm/min
} else {
warning("Failed to read machine data, default values will be used instead.");
}
if (highFeedMapping != HIGH_FEED_NO_MAPPING) {
highFeedMapping = HIGH_FEED_NO_MAPPING;
warning(localize("The selected High Feedrate mapping method is not supported and has been automatically set to 'Preserve rapid movement' by the postprocessor."));
}
}
// <<<<< INCLUDED FROM ../common/commonAdditiveFunctions.cpi

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,598 @@
/**
Copyright (C) 2012-2025 by Autodesk, Inc.
All rights reserved.
Hypertherm jet post processor configuration.
$Revision: 45583 10f6400eaf1c75a27c852ee82b57479e7a9134c0 $
$Date: 2025-08-21 13:23:15 $
FORKID {B9932870-E8DA-4805-9AFD-C639CB6FF089}
*/
description = "Hypertherm Jet";
vendor = "Hypertherm";
vendorUrl = "https://www.hypertherm.com/";
legal = "Copyright (C) 2012-2025 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Generic jet post for Hypertherm.";
extension = "nc";
setCodePage("ascii");
capabilities = CAPABILITY_JET;
tolerance = spatial(0.002, MM);
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(180);
allowHelicalMoves = false;
allowedCircularPlanes = undefined; // allow any circular motion
// user-defined properties
properties = {
writeMachine: {
title : "Write machine",
description: "Output the machine settings in the header of the code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
showSequenceNumbers: {
title : "Use sequence numbers",
description: "Use sequence numbers for each block of outputted code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
sequenceNumberStart: {
title : "Start sequence number",
description: "The number at which to start the sequence numbers.",
group : "formats",
type : "integer",
value : 10,
scope : "post"
},
sequenceNumberIncrement: {
title : "Sequence number increment",
description: "The amount by which the sequence number is incremented by in each block.",
group : "formats",
type : "integer",
value : 5,
scope : "post"
},
allowHeadSwitches: {
title : "Allow head switches",
description: "Enable to output code to allow heads to be manually switched for piercing and cutting.",
group : "preferences",
type : "boolean",
value : true,
scope : "post"
},
separateWordsWithSpace: {
title : "Separate words with space",
description: "Adds spaces between words if 'yes' is selected.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
pierceTime: {
title : "Pierce time",
description: "Specifies the pierce time. Specifying a value of 0 will use the Setup Dwell Time defined in the controller.",
group : "preferences",
type : "number",
value : 5,
range : [0, 99999.999],
scope : "post"
},
};
// wcs definiton
wcsDefinitions = {
useZeroOffset: false,
wcs : [
{name:"Standard", format:"#", range:[1, 1]}
]
};
var gFormat = createFormat({prefix:"G", decimals:0});
var mFormat = createFormat({prefix:"M", decimals:0});
var dFormat = createFormat({prefix:"D", decimals:0}); // kerf index
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
var feedFormat = createFormat({decimals:(unit == MM ? 1 : 2)});
var toolFormat = createFormat({decimals:0});
var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-1000
var xOutput = createVariable({prefix:"X"}, xyzFormat);
var yOutput = createVariable({prefix:"Y"}, xyzFormat);
var feedOutput = createVariable({prefix:"F"}, feedFormat);
// circular output
var iOutput = createReferenceVariable({prefix:"I"}, xyzFormat);
var jOutput = createReferenceVariable({prefix:"J"}, xyzFormat);
var gMotionModal = createModal({}, gFormat); // modal group 1 // G0-G3, ...
var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91
var gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21
// collected state
var sequenceNumber;
var currentWorkOffset;
/**
Writes the specified block.
*/
function writeBlock() {
if (getProperty("showSequenceNumbers")) {
writeWords2("N" + sequenceNumber, arguments);
sequenceNumber += getProperty("sequenceNumberIncrement");
} else {
writeWords(arguments);
}
}
function formatComment(text) {
return "(" + String(text).replace(/[()]/g, "") + ")";
}
/**
Output a comment.
*/
function writeComment(text) {
writeln(formatComment(text));
}
function onOpen() {
if (!getProperty("separateWordsWithSpace")) {
setWordSeparator("");
}
sequenceNumber = getProperty("sequenceNumberStart");
if (programName) {
writeComment(programName);
}
if (programComment) {
writeComment(programComment);
}
// dump machine configuration
var vendor = machineConfiguration.getVendor();
var model = machineConfiguration.getModel();
var description = machineConfiguration.getDescription();
if (getProperty("writeMachine") && (vendor || model || description)) {
writeComment(localize("Machine"));
if (vendor) {
writeComment(" " + localize("vendor") + ": " + vendor);
}
if (model) {
writeComment(" " + localize("model") + ": " + model);
}
if (description) {
writeComment(" " + localize("description") + ": " + description);
}
}
// absolute coordinates and feed per min
writeBlock(gAbsIncModal.format(90));
switch (unit) {
case IN:
writeBlock(gUnitModal.format(20));
break;
case MM:
writeBlock(gUnitModal.format(21));
break;
}
}
function onComment(message) {
writeComment(message);
}
/** Force output of X, Y, and Z. */
function forceXYZ() {
xOutput.reset();
yOutput.reset();
}
/** Force output of X, Y, Z, A, B, C, and F on next output. */
function forceAny() {
forceXYZ();
feedOutput.reset();
}
function onSection() {
var insertToolCall = isFirstSection() ||
currentSection.getForceToolChange && currentSection.getForceToolChange() ||
(tool.number != getPreviousSection().getTool().number);
var retracted = false; // specifies that the tool has been retracted to the safe plane
var newWorkOffset = isFirstSection() ||
(getPreviousSection().workOffset != currentSection.workOffset); // work offset changes
var newWorkPlane = isFirstSection() ||
!isSameDirection(getPreviousSection().getGlobalFinalToolAxis(), currentSection.getGlobalInitialToolAxis());
writeln("");
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
if (comment) {
writeComment(comment);
}
}
if (insertToolCall) {
retracted = true;
onCommand(COMMAND_COOLANT_OFF);
switch (tool.type) {
case TOOL_WATER_JET:
writeBlock(mFormat.format(36), "T" + toolFormat.format(6)); // waterjet
break;
case TOOL_LASER_CUTTER:
writeBlock(mFormat.format(36), "T" + toolFormat.format(5)); // laser
break;
case TOOL_PLASMA_CUTTER:
// process 1 - use T2 for process 2
writeBlock(mFormat.format(36), "T" + toolFormat.format(1)); // plasma
break;
/*
case TOOL_MARKER:
writeBlock(mFormat.format(36), "T" + toolFormat.format(3)); // marker 1 - use 4 for marker 2
break;
*/
default:
error(localize("The CNC does not support the required tool."));
return;
}
// use could use - G59 Dxxx Xkerf to set kerf
if (tool.comment) {
writeComment(tool.comment);
}
switch (currentSection.jetMode) {
case JET_MODE_THROUGH:
writeComment("Through cutting");
break;
case JET_MODE_ETCHING:
writeComment("Etch cutting");
break;
case JET_MODE_VAPORIZE:
writeComment("Vaporize cutting");
break;
default:
error(localize("Unsupported cutting mode."));
}
writeln("");
}
// wcs
/*
if (insertToolCall) { // force work offset when changing tool
currentWorkOffset = undefined;
}
if (currentSection.workOffset != currentWorkOffset) {
writeBlock(currentSection.wcs);
currentWorkOffset = currentSection.workOffset;
}
*/
forceXYZ();
{ // pure 3D
var remaining = currentSection.workPlane;
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
error(localize("Tool orientation is not supported."));
return;
}
setRotation(remaining);
}
/*
// set coolant after we have positioned at Z
if (false) {
var c = mapCoolantTable.lookup(tool.coolant);
if (c) {
writeBlock(mFormat.format(c));
} else {
warning(localize("Coolant not supported."));
}
}
*/
forceAny();
var initialPosition = getFramePosition(currentSection.getInitialPosition());
if (insertToolCall || retracted) {
gMotionModal.reset();
if (!machineConfiguration.isHeadConfiguration()) {
writeBlock(
gAbsIncModal.format(90),
gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
);
} else {
writeBlock(
gAbsIncModal.format(90),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y)
);
}
} else {
writeBlock(
gAbsIncModal.format(90),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y)
);
}
}
function onDwell(seconds) {
if (seconds > 99999.999) {
warning(localize("Dwelling time is out of range."));
}
seconds = clamp(0, seconds, 99999.999);
writeBlock(gFormat.format(4), conditional(seconds != 0, "F" + secFormat.format(seconds)));
}
function onCycle() {
onError("Drilling is not supported by CNC.");
}
var pendingRadiusCompensation = -1;
function onRadiusCompensation() {
pendingRadiusCompensation = radiusCompensation;
}
var shapeArea = 0;
var shapePerimeter = 0;
var shapeSide = "inner";
var cuttingSequence = "";
function onParameter(name, value) {
if ((name == "action") && (value == "pierce")) {
writeComment("POINT-PIERCE");
onDwell(getProperty("pierceTime")); // wait until cut through
// for plasma AVC - writeBlock(mFormat.format(51), "T" + secFormat.format(delay)); // wait
} else if (name == "shapeArea") {
shapeArea = value;
} else if (name == "shapePerimeter") {
shapePerimeter = value;
} else if (name == "shapeSide") {
shapeSide = value;
} else if (name == "beginSequence") {
if (value == "piercing") {
if (cuttingSequence != "piercing") {
if (getProperty("allowHeadSwitches")) {
writeln("");
writeComment("Switch to piercing head before continuing");
onCommand(COMMAND_STOP);
writeln("");
}
}
} else if (value == "cutting") {
if (cuttingSequence == "piercing") {
if (getProperty("allowHeadSwitches")) {
writeln("");
writeComment("Switch to cutting head before continuing");
onCommand(COMMAND_STOP);
writeln("");
}
}
}
cuttingSequence = value;
}
}
var deviceOn = false;
function setDeviceMode(enable) {
if (enable != deviceOn) {
deviceOn = enable;
if (enable) {
switch (tool.type) {
/*
case TOOL_MARKER:
writeComment("TURN ON MARKER 1");
writeBlock(mFormat.format(9)); // enable marker 1
break;
*/
default:
writeComment((currentSection.jetMode == JET_MODE_ETCHING) ? "TURN ON ETCHING" : "TURN ON CUTTING");
if (currentSection.jetMode == JET_MODE_ETCHING) {
writeBlock(mFormat.format(63));
}
writeBlock(mFormat.format(7)); // DEVICE ON
// writeBlock(mFormat.format(15)); // CUT ON
}
} else {
switch (tool.type) {
/*
case TOOL_MARKER:
writeComment("TURN OFF MARKER 1");
writeBlock(mFormat.format(10)); // disable marker 1
break;
*/
default:
writeComment((currentSection.jetMode == JET_MODE_ETCHING) ? "TURN OFF ETCHING" : "TURN OFF CUTTING");
writeBlock(mFormat.format(8)); // DEVICE OFF - could add delay here
if (currentSection.jetMode == JET_MODE_ETCHING) {
writeBlock(mFormat.format(64));
}
// writeBlock(mFormat.format(16)); // CUT OFF
}
}
}
}
function onPower(power) {
setDeviceMode(power);
}
function onRapid(_x, _y, _z) {
var x = xOutput.format(_x);
var y = yOutput.format(_y);
if (x || y) {
if (pendingRadiusCompensation >= 0) {
error(localize("Radius compensation mode cannot be changed at rapid traversal."));
return;
}
writeBlock(gMotionModal.format(0), x, y);
feedOutput.reset();
}
}
function onLinear(_x, _y, _z, feed) {
// at least one axis is required
if (pendingRadiusCompensation >= 0) {
// ensure that we end at desired position when compensation is turned off
xOutput.reset();
yOutput.reset();
}
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var f = feedOutput.format(feed);
if (x || y) {
if (pendingRadiusCompensation >= 0) {
pendingRadiusCompensation = -1;
switch (radiusCompensation) {
case RADIUS_COMPENSATION_LEFT:
writeBlock(gFormat.format(41));
// use dFormat for keft offset - which is currently not supported
writeBlock(gMotionModal.format(1), x, y, f);
break;
case RADIUS_COMPENSATION_RIGHT:
writeBlock(gFormat.format(42));
// use dFormat for keft offset - which is currently not supported
writeBlock(gMotionModal.format(1), x, y, f);
break;
default:
writeBlock(gFormat.format(40));
writeBlock(gMotionModal.format(1), x, y, f);
}
} else {
writeBlock(gMotionModal.format(1), x, y, f);
}
} else if (f) {
if (getNextRecord().isMotion()) { // try not to output feed without motion
feedOutput.reset(); // force feed on next line
} else {
writeBlock(gMotionModal.format(1), f);
}
}
}
function onRapid5D(_x, _y, _z, _a, _b, _c) {
error(localize("The CNC does not support 5-axis simultaneous toolpath."));
}
function onLinear5D(_x, _y, _z, _a, _b, _c, feed) {
error(localize("The CNC does not support 5-axis simultaneous toolpath."));
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
// one of X/Y and I/J are required and likewise
if (pendingRadiusCompensation >= 0) {
error(localize("Radius compensation cannot be activated/deactivated for a circular move."));
return;
}
var start = getCurrentPosition();
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);
}
}
}
var mapCommand = {
COMMAND_STOP : 0,
COMMAND_OPTIONAL_STOP: 1,
COMMAND_END : 2
};
function onCommand(command) {
switch (command) {
case COMMAND_POWER_ON:
return;
case COMMAND_POWER_OFF:
return;
case COMMAND_COOLANT_ON:
return;
case COMMAND_COOLANT_OFF:
return;
case COMMAND_LOCK_MULTI_AXIS:
return;
case COMMAND_UNLOCK_MULTI_AXIS:
return;
case COMMAND_BREAK_CONTROL:
return;
case COMMAND_TOOL_MEASURE:
return;
}
var stringId = getCommandStringId(command);
var mcode = mapCommand[stringId];
if (mcode != undefined) {
writeBlock(mFormat.format(mcode));
} else {
onUnsupportedCommand(command);
}
}
function onSectionEnd() {
setDeviceMode(false);
forceAny();
}
function onClose() {
writeln("");
onCommand(COMMAND_COOLANT_OFF);
writeBlock(mFormat.format(19));
// writeBlock(gFormat.format(280), gFormat.format(281));
onImpliedCommand(COMMAND_END);
writeBlock(mFormat.format(30)); // stop program
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,644 @@
/**
Copyright (C) 2015-2025 by Autodesk, Inc.
All rights reserved.
Jet template post processor configuration. This post is intended to show
the capabilities for use with waterjet, laser, and plasma cutters. It only
serves as a template for customization for an actual CNC.
$Revision: 45583 10f6400eaf1c75a27c852ee82b57479e7a9134c0 $
$Date: 2025-08-21 13:23:15 $
FORKID {51C1E5C7-D09E-458F-AC35-4A2CE1E0AE32}
*/
description = "Jet template (DEMO ONLY)";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2015-2025 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "This post demonstrates the capabilities of the post processor for waterjet, laser, and plasma cutting. You can use this as a foundation when you need a post for a new CNC. Note that this post cannot be used with milling toolpath. You can only use it for 'jet' style toolpath.";
extension = "nc";
setCodePage("ascii");
capabilities = CAPABILITY_JET;
tolerance = spatial(0.002, MM);
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(180);
allowHelicalMoves = false;
allowedCircularPlanes = undefined; // allow any circular motion
// user-defined properties
properties = {
writeMachine: {
title : "Write machine",
description: "Output the machine settings in the header of the code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
showSequenceNumbers: {
title : "Use sequence numbers",
description: "Use sequence numbers for each block of outputted code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
sequenceNumberStart: {
title : "Start sequence number",
description: "The number at which to start the sequence numbers.",
group : "formats",
type : "integer",
value : 10,
scope : "post"
},
sequenceNumberIncrement: {
title : "Sequence number increment",
description: "The amount by which the sequence number is incremented by in each block.",
group : "formats",
type : "integer",
value : 5,
scope : "post"
},
allowHeadSwitches: {
title : "Allow head switches",
description: "Enable to output code to allow heads to be manually switched for piercing and cutting.",
group : "preferences",
type : "boolean",
value : true,
scope : "post"
},
useRetracts: {
title : "Use retracts",
description: "Output retracts, otherwise only output part contours for importing into a third-party jet application.",
group : "homePositions",
type : "boolean",
value : true,
scope : "post"
},
separateWordsWithSpace: {
title : "Separate words with space",
description: "Adds spaces between words if 'yes' is selected.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
}
};
// wcs definiton
wcsDefinitions = {
useZeroOffset: false,
wcs : [
{name:"Standard", format:"#", range:[1, 1]}
]
};
var gFormat = createFormat({prefix:"G", decimals:0});
var mFormat = createFormat({prefix:"M", decimals:0});
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
var feedFormat = createFormat({decimals:(unit == MM ? 1 : 2)});
var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-1000
var xOutput = createVariable({prefix:"X"}, xyzFormat);
var yOutput = createVariable({prefix:"Y"}, xyzFormat);
var feedOutput = createVariable({prefix:"F"}, feedFormat);
// circular output
var iOutput = createReferenceVariable({prefix:"I"}, xyzFormat);
var jOutput = createReferenceVariable({prefix:"J"}, xyzFormat);
var gMotionModal = createModal({}, gFormat); // modal group 1 // G0-G3, ...
var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91
var gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21
// collected state
var sequenceNumber;
var currentWorkOffset;
var split = false;
/**
Writes the specified block.
*/
function writeBlock() {
if (getProperty("showSequenceNumbers")) {
writeWords2("N" + sequenceNumber, arguments);
sequenceNumber += getProperty("sequenceNumberIncrement");
} else {
writeWords(arguments);
}
}
function formatComment(text) {
return "(" + String(text).replace(/[()]/g, "") + ")";
}
/**
Output a comment.
*/
function writeComment(text) {
writeln(formatComment(text));
}
function onOpen() {
if (!getProperty("separateWordsWithSpace")) {
setWordSeparator("");
}
sequenceNumber = getProperty("sequenceNumberStart");
if (programName) {
writeComment(programName);
}
if (programComment) {
writeComment(programComment);
}
// dump machine configuration
var vendor = machineConfiguration.getVendor();
var model = machineConfiguration.getModel();
var description = machineConfiguration.getDescription();
if (getProperty("writeMachine") && (vendor || model || description)) {
writeComment(localize("Machine"));
if (vendor) {
writeComment(" " + localize("vendor") + ": " + vendor);
}
if (model) {
writeComment(" " + localize("model") + ": " + model);
}
if (description) {
writeComment(" " + localize("description") + ": " + description);
}
}
if (hasGlobalParameter("material")) {
writeComment("MATERIAL = " + getGlobalParameter("material"));
}
if (hasGlobalParameter("material-hardness")) {
writeComment("MATERIAL HARDNESS = " + getGlobalParameter("material-hardness"));
}
{ // stock - workpiece
var workpiece = getWorkpiece();
var delta = Vector.diff(workpiece.upper, workpiece.lower);
if (delta.isNonZero()) {
writeComment("THICKNESS = " + xyzFormat.format(workpiece.upper.z - workpiece.lower.z));
}
}
// absolute coordinates and feed per min
writeBlock(gAbsIncModal.format(90));
switch (unit) {
case IN:
writeBlock(gUnitModal.format(20));
break;
case MM:
writeBlock(gUnitModal.format(21));
break;
}
}
function onComment(message) {
writeComment(message);
}
/** Force output of X, Y, and Z. */
function forceXYZ() {
xOutput.reset();
yOutput.reset();
}
/** Force output of X, Y, Z, A, B, C, and F on next output. */
function forceAny() {
forceXYZ();
feedOutput.reset();
}
function onSection() {
var insertToolCall = isFirstSection() ||
currentSection.getForceToolChange && currentSection.getForceToolChange() ||
(tool.number != getPreviousSection().getTool().number);
var retracted = false; // specifies that the tool has been retracted to the safe plane
var newWorkOffset = isFirstSection() ||
(getPreviousSection().workOffset != currentSection.workOffset); // work offset changes
var newWorkPlane = isFirstSection() ||
!isSameDirection(getPreviousSection().getGlobalFinalToolAxis(), currentSection.getGlobalInitialToolAxis());
writeln("");
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
if (comment) {
writeComment(comment);
}
}
if (insertToolCall) {
retracted = true;
onCommand(COMMAND_COOLANT_OFF);
switch (tool.type) {
case TOOL_WATER_JET:
writeComment("Waterjet cutting.");
break;
case TOOL_LASER_CUTTER:
writeComment("Laser cutting");
break;
case TOOL_PLASMA_CUTTER:
writeComment("Plasma cutting");
break;
/*
case TOOL_MARKER:
writeComment("Marker");
break;
*/
default:
error(localize("The CNC does not support the required tool."));
return;
}
writeln("");
writeComment("tool.jetDiameter = " + xyzFormat.format(tool.jetDiameter));
writeComment("tool.jetDistance = " + xyzFormat.format(tool.jetDistance));
writeln("");
switch (currentSection.jetMode) {
case JET_MODE_THROUGH:
writeComment("THROUGH CUTTING");
break;
case JET_MODE_ETCHING:
writeComment("ETCH CUTTING");
break;
case JET_MODE_VAPORIZE:
writeComment("VAPORIZE CUTTING");
break;
default:
error(localize("Unsupported cutting mode."));
return;
}
writeComment("QUALITY = " + currentSection.quality);
if (tool.comment) {
writeComment(tool.comment);
}
writeln("");
}
/*
// wcs
if (insertToolCall) { // force work offset when changing tool
currentWorkOffset = undefined;
}
if (currentSection.workOffset != currentWorkOffset) {
writeBlock(currentSection.wcs);
currentWorkOffset = currentSection.workOffset;
}
*/
forceXYZ();
{ // pure 3D
var remaining = currentSection.workPlane;
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
error(localize("Tool orientation is not supported."));
return;
}
setRotation(remaining);
}
/*
// set coolant after we have positioned at Z
if (false) {
var c = mapCoolantTable.lookup(tool.coolant);
if (c) {
writeBlock(mFormat.format(c));
} else {
warning(localize("Coolant not supported."));
}
}
*/
forceAny();
split = false;
if (getProperty("useRetracts")) {
var initialPosition = getFramePosition(currentSection.getInitialPosition());
if (insertToolCall || retracted) {
gMotionModal.reset();
if (!machineConfiguration.isHeadConfiguration()) {
writeBlock(
gAbsIncModal.format(90),
gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
);
} else {
writeBlock(
gAbsIncModal.format(90),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y)
);
}
} else {
writeBlock(
gAbsIncModal.format(90),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y)
);
}
} else {
split = true;
}
}
function onDwell(seconds) {
if (seconds > 99999.999) {
warning(localize("Dwelling time is out of range."));
}
seconds = clamp(0.001, seconds, 99999.999);
writeBlock(gFormat.format(4), "X" + secFormat.format(seconds));
}
function onCycle() {
onError("Drilling is not supported by CNC.");
}
var pendingRadiusCompensation = -1;
function onRadiusCompensation() {
pendingRadiusCompensation = radiusCompensation;
}
var shapeArea = 0;
var shapePerimeter = 0;
var shapeSide = "inner";
var cuttingSequence = "";
function onParameter(name, value) {
if ((name == "action") && (value == "pierce")) {
writeComment("RUN POINT-PIERCE COMMAND HERE");
} else if (name == "shapeArea") {
shapeArea = value;
writeComment("SHAPE AREA = " + xyzFormat.format(shapeArea));
} else if (name == "shapePerimeter") {
shapePerimeter = value;
writeComment("SHAPE PERIMETER = " + xyzFormat.format(shapePerimeter));
} else if (name == "shapeSide") {
shapeSide = value;
writeComment("SHAPE SIDE = " + value);
} else if (name == "beginSequence") {
if (value == "piercing") {
if (cuttingSequence != "piercing") {
if (getProperty("allowHeadSwitches")) {
writeln("");
writeComment("Switch to piercing head before continuing");
onCommand(COMMAND_STOP);
writeln("");
}
}
} else if (value == "cutting") {
if (cuttingSequence == "piercing") {
if (getProperty("allowHeadSwitches")) {
writeln("");
writeComment("Switch to cutting head before continuing");
onCommand(COMMAND_STOP);
writeln("");
}
}
}
cuttingSequence = value;
}
}
var deviceOn = false;
function setDeviceMode(enable) {
if (enable != deviceOn) {
deviceOn = enable;
if (enable) {
writeComment("TURN ON CUTTING HERE");
} else {
writeComment("TURN OFF CUTTING HERE");
}
}
}
function onPower(power) {
setDeviceMode(power);
}
function onRapid(_x, _y, _z) {
if (!getProperty("useRetracts") && ((movement == MOVEMENT_RAPID) || (movement == MOVEMENT_HIGH_FEED))) {
doSplit();
return;
}
if (split) {
split = false;
var start = getCurrentPosition();
onExpandedRapid(start.x, start.y, start.z);
}
var x = xOutput.format(_x);
var y = yOutput.format(_y);
if (x || y) {
if (pendingRadiusCompensation >= 0) {
error(localize("Radius compensation mode cannot be changed at rapid traversal."));
return;
}
writeBlock(gMotionModal.format(0), x, y);
feedOutput.reset();
}
}
function onLinear(_x, _y, _z, feed) {
if (!getProperty("useRetracts") && ((movement == MOVEMENT_RAPID) || (movement == MOVEMENT_HIGH_FEED))) {
doSplit();
return;
}
if (split) {
resumeFromSplit(feed);
}
// at least one axis is required
if (pendingRadiusCompensation >= 0) {
// ensure that we end at desired position when compensation is turned off
xOutput.reset();
yOutput.reset();
}
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var f = feedOutput.format(feed);
if (x || y) {
if (pendingRadiusCompensation >= 0) {
pendingRadiusCompensation = -1;
switch (radiusCompensation) {
case RADIUS_COMPENSATION_LEFT:
writeBlock(gFormat.format(41));
writeBlock(gMotionModal.format(1), x, y, f);
break;
case RADIUS_COMPENSATION_RIGHT:
writeBlock(gFormat.format(42));
writeBlock(gMotionModal.format(1), x, y, f);
break;
default:
writeBlock(gFormat.format(40));
writeBlock(gMotionModal.format(1), x, y, f);
}
} else {
writeBlock(gMotionModal.format(1), x, y, f);
}
} else if (f) {
if (getNextRecord().isMotion()) { // try not to output feed without motion
feedOutput.reset(); // force feed on next line
} else {
writeBlock(gMotionModal.format(1), f);
}
}
}
function onRapid5D(_x, _y, _z, _a, _b, _c) {
error(localize("The CNC does not support 5-axis simultaneous toolpath."));
}
function onLinear5D(_x, _y, _z, _a, _b, _c, feed) {
error(localize("The CNC does not support 5-axis simultaneous toolpath."));
}
function doSplit() {
if (!split) {
split = true;
gMotionModal.reset();
xOutput.reset();
yOutput.reset();
feedOutput.reset();
}
}
function resumeFromSplit(feed) {
if (split) {
split = false;
var start = getCurrentPosition();
var _pendingRadiusCompensation = pendingRadiusCompensation;
pendingRadiusCompensation = -1;
onExpandedLinear(start.x, start.y, start.z, feed);
pendingRadiusCompensation = _pendingRadiusCompensation;
}
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
if (!getProperty("useRetracts") && ((movement == MOVEMENT_RAPID) || (movement == MOVEMENT_HIGH_FEED))) {
doSplit();
return;
}
// one of X/Y and I/J are required and likewise
if (pendingRadiusCompensation >= 0) {
error(localize("Radius compensation cannot be activated/deactivated for a circular move."));
return;
}
if (split) {
resumeFromSplit(feed);
}
var start = getCurrentPosition();
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);
}
}
}
var mapCommand = {
COMMAND_STOP : 0,
COMMAND_OPTIONAL_STOP: 1,
COMMAND_END : 2
};
function onCommand(command) {
switch (command) {
case COMMAND_POWER_ON:
return;
case COMMAND_POWER_OFF:
return;
case COMMAND_COOLANT_ON:
return;
case COMMAND_COOLANT_OFF:
return;
case COMMAND_LOCK_MULTI_AXIS:
return;
case COMMAND_UNLOCK_MULTI_AXIS:
return;
case COMMAND_BREAK_CONTROL:
return;
case COMMAND_TOOL_MEASURE:
return;
}
var stringId = getCommandStringId(command);
var mcode = mapCommand[stringId];
if (mcode != undefined) {
writeBlock(mFormat.format(mcode));
} else {
onUnsupportedCommand(command);
}
}
function onSectionEnd() {
setDeviceMode(false);
forceAny();
}
function onClose() {
writeln("");
onCommand(COMMAND_COOLANT_OFF);
onImpliedCommand(COMMAND_END);
writeBlock(mFormat.format(30)); // stop program
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,123 @@
/**
Copyright (C) 2012-2014 by Autodesk, Inc.
All rights reserved.
Minimal post processor configuration.
$Revision: 44139 80d5b547398dd7ca370e73d92fa55ce8cbc140b9 $
$Date: 2022-10-17 08:12:41 $
FORKID {96F3CC76-19C0-4828-BF27-6A50AED3B187}
*/
description = "Minimal Heidenhain";
vendor = "Heidenhain";
vendorUrl = "http://www.heidenhain.com";
legal = "Copyright (C) 2012-2014 by Autodesk, Inc.";
certificationLevel = 2;
longDescription = "Minimal milling post for Heidenhain.";
extension = "h";
setCodePage("ansi");
capabilities = CAPABILITY_MILLING;
var spindleAxisTable = new Table(["X", "Y", "Z"], {force:true});
var radiusCompensationTable = new Table(
[" R0", " RL", " RR"],
{initial:RADIUS_COMPENSATION_OFF},
"Invalid radius compensation"
);
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceSign:true});
var feedFormat = createFormat({decimals:(unit == MM ? 0 : 2), scale:(unit == MM ? 1 : 10)});
var rpmFormat = createFormat({decimals:0});
var mFormat = createFormat({prefix:"M", decimals:0});
var xOutput = createVariable({prefix:" X"}, xyzFormat);
var yOutput = createVariable({prefix:" Y"}, xyzFormat);
var zOutput = createVariable({prefix:" Z"}, xyzFormat);
var feedOutput = createVariable({prefix:" F"}, feedFormat);
var blockNumber = 0;
/**
Writes the specified block.
*/
function writeBlock(block) {
writeln(blockNumber + SP + block);
++blockNumber;
}
function onOpen() {
writeBlock(
"BEGIN PGM" + (programName ? (SP + programName) : "") + ((unit == MM) ? " MM" : " INCH")
);
writeBlock(mFormat.format(3)); // spindle on - clockwise
machineConfiguration.setRetractPlane(-1.0); // safe machine retract plane (M91)
}
/**
Invalidates the current position and feedrate. Invoke this function to
force X, Y, Z, and F in the following block.
*/
function invalidate() {
xOutput.reset();
yOutput.reset();
zOutput.reset();
feedOutput.reset();
}
function onSection() {
writeBlock("L Z" + xyzFormat.format(machineConfiguration.getRetractPlane()) + " M91");
var retracted = true;
writeBlock(
"TOOL CALL " + tool.number + SP + spindleAxisTable.lookup(spindleAxis) + " S" + rpmFormat.format(tool.spindleRPM)
);
setTranslation(currentSection.workOrigin);
setRotation(currentSection.workPlane);
invalidate();
var initialPosition = getFramePosition(currentSection.getInitialPosition());
if (!retracted) {
if (getCurrentPosition().z < initialPosition.z) {
writeBlock("L" + zOutput.format(initialPosition.z) + " FMAX");
}
}
writeBlock("L" + xOutput.format(initialPosition.x) + yOutput.format(initialPosition.y) + zOutput.format(initialPosition.z));
}
function onRapid(x, y, z) {
var xyz = xOutput.format(x) + yOutput.format(y) + zOutput.format(z);
if (xyz) {
writeBlock("L" + xyz + radiusCompensationTable.lookup(radiusCompensation) + " FMAX");
feedOutput.reset();
}
}
function onLinear(x, y, z, feed) {
var xyz = xOutput.format(x) + yOutput.format(y) + zOutput.format(z);
var f = feedOutput.format(feed);
if (xyz) {
writeBlock("L" + xyz + radiusCompensationTable.lookup(radiusCompensation) + f);
}
}
function onSectionEnd() {
// full retract in machine coordinate system
writeBlock("L Z" + xyzFormat.format(machineConfiguration.getRetractPlane()) + " R0 FMAX " + mFormat.format(91));
invalidate();
}
function onClose() {
writeBlock(mFormat.format(30)); // stop program, spindle stop, coolant off
writeBlock(
"END PGM" + (programName ? (SP + programName) : "") + ((unit == MM) ? " MM" : " INCH")
);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,477 @@
/**
Copyright (C) 2012-2021 by Autodesk, Inc.
All rights reserved.
Mori APT post processor configuration.
$Revision: 43898 8a6a8a924f86fab9397f9d69d17b1e07897a7fe6 $
$Date: 2022-04-20 16:35:00 $
FORKID {CA87E621-8476-4a08-B127-3B3592563184}
*/
description = "Mori APT (MfgSuite)";
vendor = "DMG MORI";
vendorUrl = "http://www.dmgmori.com";
legal = "Copyright (C) 2012-2021 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Use this post to interface with MfgSuite from DMG MORI using the APT-CL format.";
capabilities = CAPABILITY_INTERMEDIATE;
extension = "apt";
setCodePage("ansi");
// user-defined properties
properties = {
useTailStock: {
title : "Use tail stock",
description: "Enable to use the tail stock.",
group : "configuration",
type : "boolean",
value : false,
scope : "post"
},
useBarFeeder: {
title : "Use bar feeder",
description: "Enable to use the bar feeder.",
group : "configuration",
type : "boolean",
value : false,
scope : "post"
},
usePartCatcher: {
title : "Use part catcher",
description: "Enable to use the part catcher.",
group : "configuration",
type : "boolean",
value : false,
scope : "post"
}
};
allowHelicalMoves = true;
allowedCircularPlanes = undefined; // allow any circular motion
allowSpiralMoves = true;
maximumCircularSweep = toRad(270);
var xyzFormat = createFormat({decimals:(unit == MM ? 6 : 7)});
var txyzFormat = createFormat({decimals:8});
var feedFormat = createFormat({decimals:(unit == MM ? 0 : 2)});
var rpmFormat = createFormat({decimals:3}); // spindle speed
var secFormat = createFormat({decimals:3}); // time
// collected state
var currentFeed;
var coolantActive = false;
var radiusCompensationActive = false;
function formatComment(text) {
return filterText(text, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(.,)/-+*= \t");
}
function writeComment(text) {
writeln("PPRINT/ '" + formatComment(text) + "'");
}
function onOpen() {
writeln("PARTNO/ '" + programName + "'");
writeComment(programComment);
writeln("BEGIN");
writeln("UNITS/ " + ((unit == IN) ? "INCH" : "MM"));
{ // stock - workpiece
var workpiece = getWorkpiece();
var delta = Vector.diff(workpiece.upper, workpiece.lower);
if (delta.isNonZero()) {
writeln("MATERL/ TYPE, 5, COND, 6, XDIM, " + xyzFormat.format(delta.x) + ", YDIM, " + xyzFormat.format(delta.y) + ", ZDIM, " + xyzFormat.format(delta.z));
}
}
/*
if (machineId) {
var machineId = machineConfiguration.getModel();
writeln("MACHIN/ " + machineId); // not required
}
*/
}
function onComment(comment) {
writeComment(comment);
}
var mapCommand = {
COMMAND_STOP : "STOP",
COMMAND_OPTIONAL_STOP: "OPSTOP",
COMMAND_STOP_SPINDLE : "SPINDL/ ON",
COMMAND_START_SPINDLE: "SPINDL/ OFF",
// COMMAND_ORIENTATE_SPINDLE
COMMAND_SPINDLE_CLOCKWISE : "SPINDL/ CLW",
COMMAND_SPINDLE_COUNTERCLOCKWISE: "SPINDL/ CCLW"
// COMMAND_ACTIVATE_SPEED_FEED_SYNCHRONIZATION
// COMMAND_DEACTIVATE_SPEED_FEED_SYNCHRONIZATION
};
function onCommand(command) {
switch (command) {
case COMMAND_LOCK_MULTI_AXIS:
writeln("CLAMP/ TABLE, ALL, AUTO");
return;
case COMMAND_UNLOCK_MULTI_AXIS:
writeln("CLAMP/ TABLE, ALL, OFF");
return;
case COMMAND_BREAK_CONTROL:
return;
case COMMAND_TOOL_MEASURE:
return;
}
if (mapCommand[command]) {
writeln(mapCommand[command]);
} else {
warning("Unsupported command: " + getCommandStringId(command));
writeComment("Unsupported command: " + getCommandStringId(command));
}
}
function setCoolant(coolant) {
if (coolant == COOLANT_OFF) {
if (coolantActive) {
writeln("COOLNT/ OFF");
coolantActive = false;
}
} else {
switch (coolant) {
case COOLANT_FLOOD:
writeln("COOLNT/ " + "FLOOD");
break;
case COOLANT_MIST:
writeln("COOLNT/ " + "MIST");
break;
case COOLANT_TOOL:
writeln("COOLNT/ " + "THRU");
break;
default:
warning("Unsupported coolant mode: " + coolant);
writeComment("Unsupported coolant mode: " + coolant);
}
if (!coolantActive) {
writeln("COOLNT/ ON");
coolantActive = true;
}
}
}
function onCoolant() {
setCoolant(coolant);
}
function onSection() {
writeln("");
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
if (comment) {
writeln("OPNAME/ '" + formatComment(comment) + "'"); // quotes are not required
}
}
writeln("APPLY/ " + ((currentSection.getType() == TYPE_TURNING) ? "TURN" : "MILL"));
// writeln("OPSKIP");
if (currentSection.getType() != TYPE_TURNING) {
writeln(
"MCSYS/ NUM, " + ((currentSection.workOffset > 0) ? currentSection.workOffset : 1) +
", POINT, " + xyzFormat.format(currentSection.workOrigin.x) + ", " + xyzFormat.format(currentSection.workOrigin.y) + ", " + xyzFormat.format(currentSection.workOrigin.z) +
", VECTOR, " + txyzFormat.format(currentSection.workPlane.right.x) + ", " + txyzFormat.format(currentSection.workPlane.right.y) + ", " + txyzFormat.format(currentSection.workPlane.right.z) +
", VECTOR, " + txyzFormat.format(currentSection.workPlane.up.x) + ", " + txyzFormat.format(currentSection.workPlane.up.y) + ", " + txyzFormat.format(currentSection.workPlane.up.z)
);
}
if (currentSection.isMultiAxis()) {
writeln("MULTAX/ ON");
writeln("TCP/ ON"); // alternatively TCPCTL
}
if ((currentSection.getType() != TYPE_TURNING) && !currentSection.isMultiAxis()) {
onCommand(COMMAND_LOCK_MULTI_AXIS);
}
/*
var d = tool.diameter;
var r = tool.cornerRadius;
var e = 0;
var f = 0;
var a = 0;
var b = 0;
var h = tool.bodyLength;
writeln("CUTTER/ " + d + ", " + r + ", " + e + ", " + f + ", " + a + ", " + b + ", " + h);
*/
if (currentSection.getType() == TYPE_TURNING) {
writeln("SELECT/ TRSPND, " + currentSection.spindle);
}
if (currentSection.getType() != TYPE_TURNING) {
writeln("TOOLNO/ " + tool.number + ", MILL, OSETNO, " + tool.lengthOffset + ", " + tool.diameterOffset);
}
setCoolant(tool.coolant);
var nextTool = getNextTool(tool.number);
if (!nextTool) {
nextTool = getSection(0).getTool();
}
writeln("LOAD/ TOOL, " + tool.number + ", '" + tool.comment + "', NEXTTL, " + nextTool.number);
if (currentSection.getType() != TYPE_TURNING) {
writeln("SPINDL/ RPM, " + rpmFormat.format(spindleSpeed) + ", " + (tool.clockwise ? "CLW" : "CCLW"));
}
if (currentSection.getType() == TYPE_TURNING) {
writeln(
"SPINDL/ " + rpmFormat.format(spindleSpeed) + ", " + ((unit == IN) ? "SFM" : "SMM") + ", " + (tool.clockwise ? "CLW" : "CCLW")
);
writeln("TLSTCK/ QUILL, " + (getProperty("useTailStock") ? "IN" : "OUT")); // TAG: customize
}
writeln("CUTCOM/ ON, LENGTH, " + tool.lengthOffset); // also required for multi-axis
}
function onDwell(time) {
writeln("DELAY/ " + secFormat.format(time)); // in seconds / REV is also supported
}
function onRadiusCompensation() {
if (radiusCompensation == RADIUS_COMPENSATION_OFF) {
if (radiusCompensationActive) {
radiusCompensationActive = false;
writeln("CUTCOM/ OFF"); // only turns off diameter compensation
}
} else {
if (!radiusCompensationActive) {
radiusCompensationActive = true;
writeln("CUTCOM/ ON");
}
var direction = (radiusCompensation == RADIUS_COMPENSATION_LEFT) ? "LEFT" : "RIGHT";
if (true || (tool.diameterOffset != 0)) {
writeln("CUTCOM/ " + direction + ", XYPLAN, OSETNO, " + tool.diameterOffset);
} else {
writeln("CUTCOM/ " + direction + ", XYPLAN");
}
}
}
function onSpindleSpeed(spindleSpeed) {
if (currentSection.getType() != TYPE_TURNING) {
writeln("SPINDL/ RPM, " + rpmFormat.format(spindleSpeed));
}
if (currentSection.getType() == TYPE_TURNING) {
writeln("SPINDL/ " + rpmFormat.format(spindleSpeed) + ", " + ((unit == IN) ? "SFM" : "SMM"));
}
}
function onRapid(x, y, z) {
writeln("RAPID");
writeln("GOTO/ " + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z));
}
function onLinear(x, y, z, feed) {
if (feed != currentFeed) {
currentFeed = feed;
writeln("FEDRAT/ PERMIN, " + feedFormat.format(feed));
}
writeln("GOTO/ " + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z));
}
function onRapid5D(x, y, z, dx, dy, dz) {
writeln("RAPID");
writeln("GOTO/ " + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z) + ", " + txyzFormat.format(dx) + ", " + txyzFormat.format(dy) + ", " + txyzFormat.format(dz));
}
function onLinear5D(x, y, z, dx, dy, dz, feed) {
if (feed != currentFeed) {
currentFeed = feed;
writeln("FEDRAT/ PERMIN, " + feedFormat.format(feed));
}
writeln("GOTO/ " + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z) + ", " + txyzFormat.format(dx) + ", " + txyzFormat.format(dy) + ", " + txyzFormat.format(dz));
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
if (feed != currentFeed) {
currentFeed = feed;
writeln("FEDRAT/ PERMIN, " + feedFormat.format(feed));
}
if (isHelical()) {
switch (getCircularPlane()) {
case PLANE_XY:
writeln("ARCSLP/ " + xyzFormat.format((clockwise ? 1 : -1) * getHelicalDistance()));
break;
default:
linearize(tolerance);
return;
}
}
switch (getCircularPlane()) {
case PLANE_XY:
case PLANE_ZX:
case PLANE_YZ:
break;
default:
linearize(tolerance);
return;
}
var n = getCircularNormal();
if (clockwise) {
n = Vector.product(n, -1);
}
writeln(
"MOVARC/ CENTER, " + xyzFormat.format(cx) + ", " + xyzFormat.format(cy) + ", " + xyzFormat.format(cz) +
", AXIS, " + txyzFormat.format(n.x) + ", " + txyzFormat.format(n.y) + ", " + txyzFormat.format(n.z) + // ccw
", RADIUS, " + xyzFormat.format(getCircularRadius())
// ", TIMES, " + n
);
writeln("GOTO/ " + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(z));
}
function onCycle() {
var d = cycle.depth - cycle.stock;
var f = cycle.feedrate;
var c = cycle.clearance - cycle.stock;
var r = cycle.clearance - cycle.retract;
var q = cycle.dwell;
var i = cycle.incrementalDepth; // for pecking
var statement;
switch (cycleType) {
case "drilling":
statement = "CYCLE/ DRILL, DEPTH, " + xyzFormat.format(d) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
break;
case "counter-boring":
statement = "CYCLE/ FACE, DEPTH, " + xyzFormat.format(d) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "reaming":
statement = "CYCLE/ REAM, DEPTH, " + xyzFormat.format(d) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "boring":
statement = "CYCLE/ BORE, DEPTH, " + xyzFormat.format(d) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "deep-drilling":
statement = "CYCLE/ DEEP, DEPTH, " + xyzFormat.format(d) + ", STEP, " + xyzFormat.format(i) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "chip-breaking":
statement = "CYCLE/ BRKCHP, DEPTH, " + xyzFormat.format(d) + ", STEP, " + xyzFormat.format(i) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
if (q > 0) {
statement += ", DWELL, " + secFormat.format(q);
}
break;
case "tapping":
if (tool.type == TOOL_TAP_LEFT_HAND) {
cycleNotSupported();
} else {
statement = "CYCLE/ TAP, DEPTH, " + xyzFormat.format(d) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
}
break;
case "right-tapping":
statement = "CYCLE/ TAP, DEPTH, " + xyzFormat.format(d) + ", PERMIN, " + feedFormat.format(f) + ", CLEAR, " + xyzFormat.format(c) + ", RETURN, " + xyzFormat.format(c);
if (r > 0) {
statement += ", RAPTO, " + xyzFormat.format(r);
}
break;
default:
cycleNotSupported();
}
writeln(statement);
}
function onCyclePoint(x, y, z) {
writeln("FEDRAT/ " + feedFormat.format(cycle.feedrate));
writeln("GOTO/ " + xyzFormat.format(x) + ", " + xyzFormat.format(y) + ", " + xyzFormat.format(cycle.stock));
}
function onCycleEnd() {
writeln("CYCLE/ OFF");
}
function onSectionEnd() {
if (currentSection.isMultiAxis()) {
writeln("TCP/ OFF");
writeln("MULTAX/ OFF");
}
if (coolantActive) {
coolantActive = false;
writeln("COOLNT/ OFF");
}
if (getProperty("usePartCatcher") &&
hasParameter("operation-strategy") &&
(getParameter("operation-strategy") == "turningPart")) {
writeln("");
writeln("CATCHR/ IN"); // TAG: customize
forceXYZ();
}
}
function onClose() {
writeln("");
if (coolantActive) {
coolantActive = false;
writeln("COOLNT/ OFF");
}
writeln("GOHOME/");
if (getProperty("useBarFeeder")) {
writeln("BARFED/ 0, TO, 0"); // TAG: customize
}
writeln("END/");
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,430 @@
/**
Copyright (C) 2012-2021 by Autodesk, Inc.
All rights reserved.
OMAX waterjet post processor configuration.
$Revision: 44489 463fd7c2dd9948f82fbd288395b22f549b778dc5 $
$Date: 2023-05-17 14:08:01 $
FORKID {A806DFCD-07A4-4506-9AF6-04397CF5BF05}
*/
/*
ATTENTION:
1. The initial head position must always match the WCS XY origin
specified in the CAM Setup.
2. The initial Z head position must always be zeroed just above the top of the stock.
*/
description = "OMAX Waterjet";
vendor = "OMAX";
vendorUrl = "https://www.omax.com";
legal = "Copyright (C) 2012-2021 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
extension = "omx";
setCodePage("ascii");
longDescription = "Post for OMAX Waterjet. 1) The initial head position must always match the WCS XY origin specified in the CAM Setup. 2) The initial Z head position must always be zeroed just above the top of the stock.";
// unit = IN; // only inch mode is supported
capabilities = CAPABILITY_MILLING | CAPABILITY_JET; // milling will be removed
tolerance = spatial(0.002, MM);
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(180);
allowHelicalMoves = false;
allowedCircularPlanes = 1 << PLANE_XY; // allow only XY circular motion
properties = {
etchQuality: {
title : "Etch quality",
description: "Defines the etch quality.",
type : "number",
value : 6,
scope : "post"
}
};
// use fixed width instead
var xyzFormat = createFormat({decimals:4, trim:false});
var bowFormat = createFormat({decimals:4, trim:false});
var tFormat = createFormat({decimals:4, trim:false});
var integerFormat = createFormat({decimals:0});
// fixed settings
var preamble = true;
var qualFeed = 0; // turn off waterjet
var tas = 0; // unused tilt start
var tae = 0; // unused tilt end
var thickness = 0;
// used for delaying moves
var xTemp = 0;
var yTemp = 0;
var zTemp = 0;
var bowTemp = 0;
var gotMove = false;
// center compensation
var _compensationOffset = 0;
var etchOperation = false; // though-cut unless set to true
var EOB = "R,R,R,R,R,R,[END]";
/**
Writes the specified block.
*/
function writeBlock() {
writeWords2("[0], ", arguments, EOB);
}
function convertJSDateToExcelDate(date) {
var returnDateTime = 25569.0 + ((date.getTime() - (date.getTimezoneOffset() * 60 * 1000)) / (1000 * 60 * 60 * 24));
return returnDateTime.toString().substr(0, 5);
}
var FIELD = " ";
/** Make sure fields are aligned. */
function f(text) {
var length = text.length;
if (length > 10) {
return text;
}
return FIELD.substr(0, 10 - length) + text;
}
/** Make sure fields are aligned. */
function fi(text, size) {
var length = text.length;
if (length > size) {
return text;
}
return FIELD.substr(0, size - length) + text;
}
function onOpen() {
if ((getProperty("etchQuality") != 6) && (getProperty("etchQuality") != 7)) {
error(localize("Etch quality must be either 6 or 7."));
return;
}
setWordSeparator("");
switch (unit) {
case IN:
// Do nothing, Omax files can only be in IN
break;
case MM:
xyzFormat = createFormat({decimals:4, trim:false, scale:1 / 25.4}); // convert to inches
// error(localize("Program must be in inches."));
// return;
break;
}
{ // stock - workpiece
var workpiece = getWorkpiece();
var delta = Vector.diff(workpiece.upper, workpiece.lower);
if (delta.isNonZero()) {
// thickness = (workpiece.upper.z - workpiece.lower.z);
}
}
if (preamble) {
writeln("// Slash Slash marks (//) represent remarks that are ignored by the computer");
writeln("// if the slashes are the first characters in the line");
writeln("// For additional information about .OMX files, consult the OMAX Interactive Reference.");
writeln("// The line below identifies this file as a .OMX file. Do not modify it, or the file will not open.");
writeln("This is an OMAX (.OMX) file. Do not modify the first " + "\"" + "2" + "\"" + " lines of this file. For information on this file format contact softwareengineering@omax.com or visit http://www.omax.com.");
writeln("2");
writeln("// Above is a flag that indicates the kind of data this file contains 2 means tool path data.");
writeln("// Below is the version of this file format. Do not modify it, unless you are confident you know what you are doing.");
writeln("2");
writeln("// Below is the date that this file was first created, in units of days since 1900.");
var dateNow = new Date();
writeln(convertJSDateToExcelDate(dateNow));
writeln("// The following fields are reserved for future use. Do not delete or modify them.");
writeln("[Reserved]");
writeln("[Reserved]");
writeln("[Reserved]");
writeln("[Reserved]");
writeln("[Reserved]");
writeln("[Reserved]");
writeln("// Insert any comments here. These may be displayed in some dialogs to the user,");
writeln("// Such as the dialog for the parametric shape library.");
writeln("[COMMENT]");
var product = "Autodesk CAM";
if (hasGlobalParameter("generated-by")) {
product = getGlobalParameter("generated-by");
}
writeln("Generated by " + product);
if (programComment) {
writeln(programComment);
}
writeln("[END]");
writeln("[VARIABLES]");
writeln("// Insert variable declarations here if making a parametric file.");
writeln("// Format is:");
writeln("// Variable Name, Min Value, Max Value, Default Value, LengthFlag (True or False)");
writeln("[END]");
writeln("// Tool path data is below.");
writeln("// Items marked with R are reserved for future use");
writeln("// Some features such as Thickness and Tilt may not yet be supported.");
writeln("// ");
writeln("// " + f("X") + " " + f("Y") + " " + f("Z") + " " + f("StartTilt") + " " + f("EndTilt") + " " + f("Bow") + " " + fi("Quality", 8) + " " + fi("Side", 6) + " " + fi("Thickness", 10));
}
if (getNumberOfSections() > 0) {
var firstSection = getSection(0);
var remaining = firstSection.workPlane;
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
error(localize("Tool orientation is not supported."));
return;
}
setRotation(remaining);
var originZ = firstSection.getGlobalZRange().getMinimum(); // the cutting depth of the first section
for (var i = 0; i < getNumberOfSections(); ++i) {
var section = getSection(i);
var z = section.getGlobalZRange().getMinimum();
if ((z + 1e-9) < originZ) {
error(localize("You are trying to machine at multiple depths which is not allowed."));
return;
}
}
}
// always output X0 Y0 Z0 as the first move for OMAX - first position is always incremental from current head position
writeBlock(
f(xyzFormat.format(0)), ", ", f(xyzFormat.format(0)), ", ", f(xyzFormat.format(0)), ", ",
f(tFormat.format(tas)), ", ", f(tFormat.format(tae)), ", ", // need to switch format if this is going to be used
f(bowFormat.format(bowTemp)), ", ",
fi(integerFormat.format(qualFeed), 8), ", ",
fi(integerFormat.format(currentCompensationOffset), 6), ", ",
fi(integerFormat.format(thickness), 10), ", "
);
if (getNumberOfSections() > 0) {
var firstSection = getSection(0);
var initialPosition = getFramePosition(firstSection.getInitialPosition());
// move up to initial Z position
validate(xyzFormat.getResultingValue(initialPosition.z) >= 0, "Toolpath is unexpectedly below Z0."); // just for safety
writeBlock(
f(xyzFormat.format(0)), ", ", f(xyzFormat.format(0)), ", ", f(xyzFormat.format(initialPosition.z)), ", ",
f(tFormat.format(tas)), ", ", f(tFormat.format(tae)), ", ", // need to switch format if this is going to be used
f(bowFormat.format(bowTemp)), ", ",
fi(integerFormat.format(qualFeed), 8), ", ",
fi(integerFormat.format(currentCompensationOffset), 6), ", ",
fi(integerFormat.format(thickness), 10), ", "
);
}
}
function onSection() {
var remaining = currentSection.workPlane;
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
error(localize("Tool orientation is not supported."));
return;
}
setRotation(remaining);
etchOperation = false;
if (currentSection.getType() == TYPE_JET) {
switch (tool.type) {
case TOOL_WATER_JET:
break;
default:
error(localize("The CNC does not support the required tool."));
return;
}
switch (currentSection.jetMode) {
case JET_MODE_THROUGH:
break;
case JET_MODE_ETCHING:
etchOperation = true;
break;
case JET_MODE_VAPORIZE:
error(localize("Vaporize is not supported by the CNC."));
return;
default:
error(localize("Unsupported cutting mode."));
return;
}
// currentSection.quality
} else if (currentSection.getType() == TYPE_MILLING) {
warning(localize("Milling toolpath will be used as waterjet through-cutting toolpath."));
} else {
error(localize("CNC doesn't support the toolpath."));
return;
}
}
function onParameter(name, value) {
}
var currentQual = 0;
var currentCompensationOffset = 0; // center compensation
function flushMove() {
if (gotMove) {
if ((currentQual == 0) || (qualFeed == 0)) {
// the alternative would be to skip the moves where the compensation is changed - but this would cause the lead in/out to be different
currentCompensationOffset = _compensationOffset; // compensation offset may only be changed during quality 0
}
currentQual = qualFeed;
/*
if (currentCompensationOffset != compensationOffset) {
writeComment("Compensation mismatch");
}
*/
validate(xyzFormat.getResultingValue(zTemp) >= 0, "Toolpath is unexpectedly below Z0."); // just for safety
writeBlock(
f(xyzFormat.format(xTemp)), ", ", f(xyzFormat.format(yTemp)), ", ", f(xyzFormat.format(zTemp)), ", ",
f(tFormat.format(tas)), ", ", f(tFormat.format(tae)), ", ", // need to switch format if this is going to be used
f(bowFormat.format(bowTemp)), ", ",
fi(integerFormat.format(qualFeed), 8), ", ",
fi(integerFormat.format(currentCompensationOffset), 6), ", ",
fi(integerFormat.format(thickness), 10), ", "
);
gotMove = false;
bowTemp = 0;
}
}
function onRapid(x, y, z) {
flushMove();
xTemp = x;
yTemp = y;
zTemp = z;
bowTemp = 0;
gotMove = true;
}
function onLinear(x, y, z, feed) {
flushMove();
xTemp = x;
yTemp = y;
zTemp = z;
bowTemp = 0;
gotMove = true;
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
// spirals are not allowed - arcs must be < 360deg
// fail if radius compensation is changed for circular move
validate(gotMove, "Move expected before circular move.");
validate(bowTemp == 0);
bowTemp = (clockwise ? -1 : 1) * Math.tan(getCircularSweep() / 4); // ATTENTION: setting bow for the pending move!
flushMove();
xTemp = x;
yTemp = y;
zTemp = z;
bowTemp = 0;
gotMove = true;
}
function onMovement(movement) {
switch (movement) {
case MOVEMENT_CUTTING:
case MOVEMENT_FINISH_CUTTING:
if (etchOperation) {
qualFeed = getProperty("etchQuality");
} else {
switch (currentSection.quality) {
case 1:
qualFeed = 5;
break;
case 2:
qualFeed = 4;
break;
case 3:
qualFeed = 2;
break;
default:
qualFeed = 3;
}
break;
}
break;
case MOVEMENT_LEAD_IN:
case MOVEMENT_LEAD_OUT:
if (etchOperation) {
qualFeed = getProperty("etchQuality");
} else {
qualFeed = 9; // make a user defined setting
}
break;
case MOVEMENT_RAPID:
qualFeed = 0; // turn off waterjet
break;
default:
if (etchOperation) {
qualFeed = getProperty("etchQuality");
} else {
qualFeed = 0; // turn off waterjet - used for head down moves
}
}
}
function onRadiusCompensation() {
switch (radiusCompensation) {
case RADIUS_COMPENSATION_LEFT:
_compensationOffset = 1;
break;
case RADIUS_COMPENSATION_RIGHT:
_compensationOffset = 2;
break;
default:
_compensationOffset = 0; // center compensation
}
}
function onCycle() {
error(localize("Canned cycles are not supported."));
}
function onSectionEnd() {
qualFeed = 0; // turn off waterjet
_compensationOffset = 0; // center compensation
if (!gotMove) {
var p = getCurrentPosition();
xTemp = p.x;
yTemp = p.y;
zTemp = p.z;
bowTemp = 0;
gotMove = true;
}
validate(gotMove, "Move expected at end of operation to turn off waterjet.");
flushMove();
}
function onClose() {
}
function setProperty(property, value) {
properties[property].current = value;
}

View File

@ -0,0 +1,228 @@
/**
Copyright (C) 2012-2024 by Autodesk, Inc.
All rights reserved.
Operation sheet CSV configuration.
$Revision: 44948 1104db9da08471dc1d758431fd9ef8822fd95c21 $
$Date: 2024-03-12 07:10:57 $
FORKID {FD67790C-7676-4ee2-B726-87942A6FAB34}
*/
description = "Operation Sheet CSV";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2024 by Autodesk, Inc.";
certificationLevel = 2;
longDescription = "Setup sheet for exporting relevant info for each operation to an CSV file which can be imported easily into other applications like a spreadsheet.";
capabilities = CAPABILITY_SETUP_SHEET;
extension = "csv";
mimetype = "plain/csv";
setCodePage("ascii");
allowMachineChangeOnSection = true;
properties = {
decimal: {
title : "Decimal symbol",
description: "Defines the decimal symbol.",
type : "string",
value : ".",
scope : "post"
},
separator: {
title : "Separator symbol",
description: "Defines the field separator.",
type : "string",
value : ";",
scope : "post"
},
rapidFeed: {
title : "Rapid feed",
description: "Specifies the rapid traversal feed.",
type : "number",
value : 5000,
scope : "post"
}
};
var feedFormat = createFormat({decimals:(unit == MM ? 0 : 2)});
var toolFormat = createFormat({decimals:0});
var rpmFormat = createFormat({decimals:0});
var secFormat = createFormat({decimals:3});
var angleFormat = createFormat({decimals:0, scale:DEG});
var pitchFormat = createFormat({decimals:3});
var spatialFormat = createFormat({decimals:3});
var taperFormat = angleFormat; // share format
function quote(text) {
var result = "";
for (var i = 0; i < text.length; ++i) {
var ch = text.charAt(i);
switch (ch) {
case "\\":
case "\"":
result += "\\";
}
result += ch;
}
return "\"" + result + "\"";
}
function formatCycleTime(cycleTime) {
cycleTime += 0.5; // round up
var seconds = cycleTime % 60 | 0;
var minutes = ((cycleTime - seconds) / 60 | 0) % 60;
var hours = (cycleTime - minutes * 60 - seconds) / (60 * 60) | 0;
return subst("%1:%2:%3", hours, minutes, seconds);
}
function getStrategyDescription() {
if (!hasParameter("operation-strategy")) {
return "";
}
var strategies = {
"drill" : localize("Drilling"),
"probe" : localize("Probe"),
"face" : localize("Facing"),
"path3d" : localize("3D Path"),
"pocket2d" : localize("Pocket 2D"),
"contour2d" : localize("Contour 2D"),
"adaptive2d": localize("Adaptive 2D"),
"slot" : localize("Slot"),
"circular" : localize("Circular"),
"bore" : localize("Bore"),
"thread" : localize("Thread"),
"contour_new" : localize("Contour"),
"contour" : localize("Contour"),
"parallel_new" : localize("Parallel"),
"parallel" : localize("Parallel"),
"pocket_new" : localize("Pocket"),
"pocket" : localize("Pocket"),
"adaptive" : localize("Adaptive"),
"horizontal_new" : localize("Horizontal"),
"horizontal" : localize("Horizontal"),
"blend" : localize("Blend"),
"flow" : localize("Flow"),
"morph" : localize("Morph"),
"pencil_new" : localize("Pencil"),
"pencil" : localize("Pencil"),
"project" : localize("Project"),
"ramp" : localize("Ramp"),
"radial_new" : localize("Radial"),
"radial" : localize("Radial"),
"scallop_new" : localize("Scallop"),
"scallop" : localize("Scallop"),
"morphed_spiral" : localize("Morphed Spiral"),
"spiral_new" : localize("Spiral"),
"spiral" : localize("Spiral"),
"swarf5d" : localize("Multi-Axis Swarf"),
"multiAxisContour": localize("Multi-Axis Contour"),
"multiAxisBlend" : localize("Multi-Axis Blend")
};
var description = "";
if (strategies[getParameter("operation-strategy")]) {
description = strategies[getParameter("operation-strategy")];
} else {
description = localize("Unspecified");
}
return description;
}
var cachedParameters = {};
function onParameter(name, value) {
cachedParameters[name] = value;
}
function onOpen() {
writeln(["OPERATION", "COMMENT", "STRATEGY", "TOLERANCE", "RADIAL STOCK TO LEAVE", "AXIAL STOCK TO LEAVE", "STEPDOWN", "STEPOVER", "TOOL #", "DIAMETER #", "LENGTH #", "TYPE", "COMMENT", "DIAMETER", "CORNER RADIUS", "ANGLE", "BODY LENGTH", "FLUTE #", "MAXIMUM FEED", "MAXIMUM SPINDLE SPEED", "FEED DISTANCE", "RAPID DISTANCE", "CYCLE TIME"].join(getProperty("separator")));
cachedParameters = {};
}
function onSection() {
feedFormat.setDecimalSymbol(getProperty("decimal"));
secFormat.setDecimalSymbol(getProperty("decimal"));
angleFormat.setDecimalSymbol(getProperty("decimal"));
pitchFormat.setDecimalSymbol(getProperty("decimal"));
spatialFormat.setDecimalSymbol(getProperty("decimal"));
var s = getProperty("separator");
var tolerance = cachedParameters["operation:tolerance"];
var stockToLeave = cachedParameters["operation:stockToLeave"];
var axialStockToLeave = cachedParameters["operation:verticalStockToLeave"];
var maximumStepdown = cachedParameters["operation:maximumStepdown"];
var maximumStepover = cachedParameters["operation:maximumStepover"] ? cachedParameters["operation:maximumStepover"] : cachedParameters["operation:stepover"];
var record = "" + (getCurrentSectionId() + 1);
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
record += s + quote(comment);
} else {
record += s;
}
record += s + quote(getStrategyDescription());
record += s + (tolerance ? spatialFormat.format(tolerance) : "");
record += s + (stockToLeave ? spatialFormat.format(stockToLeave) : "");
record += s + (axialStockToLeave ? spatialFormat.format(axialStockToLeave) : "");
record += s + (maximumStepdown ? spatialFormat.format(maximumStepdown) : "");
record += s + (maximumStepover ? spatialFormat.format(maximumStepover) : "");
record += s + "T" + toolFormat.format(tool.number);
record += s + "D" + toolFormat.format(tool.diameterOffset);
record += s + "L" + toolFormat.format(tool.lengthOffset);
record += s + quote(getToolTypeName(tool.type));
if (tool.comment) {
record += s + quote(tool.comment);
} else {
record += s;
}
record += s + spatialFormat.format(tool.diameter);
if (tool.cornerRadius) {
record += s + spatialFormat.format(tool.cornerRadius);
} else {
record += s;
}
if ((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) {
record += s + taperFormat.format(tool.taperAngle);
} else {
record += s;
}
record += s + spatialFormat.format(tool.bodyLength);
record += s + spatialFormat.format(tool.numberOfFlutes);
if (!isProbeOperation(currentSection)) {
var maximumFeed = currentSection.getMaximumFeedrate();
var maximumSpindleSpeed = currentSection.getMaximumSpindleSpeed();
var cuttingDistance = currentSection.getCuttingDistance();
var rapidDistance = currentSection.getRapidDistance();
var cycleTime = currentSection.getCycleTime();
if (getProperty("rapidFeed") > 0) {
cycleTime += rapidDistance / getProperty("rapidFeed") * 60;
}
record += s + feedFormat.format(maximumFeed);
record += s + maximumSpindleSpeed;
record += s + spatialFormat.format(cuttingDistance);
record += s + spatialFormat.format(rapidDistance);
record += s + formatCycleTime(cycleTime);
}
writeln(record);
skipRemainingSection();
}
function onSectionEnd() {
cachedParameters = {};
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,275 @@
/**
Copyright (C) 2012-2025 by Autodesk, Inc.
All rights reserved.
SCM post processor configuration.
$Revision: 45368 0d19ee6a7707c0a900d60dabd67224d4924c61f6 $
$Date: 2025-02-12 05:40:37 $
FORKID {F4EC72B8-D7E7-45c4-A703-7089F83842E9}
*/
description = "SCM-Prisma 110";
vendor = "SCM";
vendorUrl = "http://www.scmgroup.com";
legal = "Copyright (C) 2012-2025 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Generic post for SCM-Prisma 110.";
extension = "xxl";
setCodePage("ascii");
capabilities = CAPABILITY_MILLING;
tolerance = spatial(0.002, MM);
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(180);
allowHelicalMoves = false;
allowedCircularPlanes = undefined; // allow any circular motion
// user-defined properties
properties = {
machineOrigin: {
title : "Machine origin",
description: "Depending on the type of machine, the point from which the distances are measured (machine origin) may be at the front or rear. For example: the Record and Ergon machines use the Front origin, while the Pratix and Tech machines use the Rear origin.",
group : "configuration",
type : "enum",
values : [
{title:"Front", id:"front"},
{title:"Rear", id:"rear"}
],
value: "front",
scope: "post"
},
writeTools: {
title : "Write tool list",
description: "Output a tool list in the header of the code.",
group : "formats",
type : "boolean",
value : true,
scope : "post"
},
useRadius: {
title : "Radius arcs",
description: "If yes is selected, arcs are output using radius values rather than IJK.",
group : "preferences",
type : "boolean",
value : true,
scope : "post"
},
reverseZaxis: {
title : "Invert Z-axis",
description: "Machines equipped with OSAI invert the Z-axis (Positive Z=towards the work table, negative Z=away from the work table.)",
group : "configuration",
type : "boolean",
value : false,
scope : "post"
}
};
var xyFormat = createFormat({decimals:3});
var zFormat = createFormat({decimals:3});
var abcFormat = createFormat({decimals:3, forceDecimal:true, scale:DEG});
var feedFormat = createFormat({decimals:(unit == MM ? 1 : 2)});
var toolFormat = createFormat({decimals:0});
var taperFormat = createFormat({decimals:1, scale:DEG});
var rpmFormat = createFormat({decimals:0});
var xOutput = createVariable({prefix:"X="}, xyFormat);
var yOutput = createVariable({prefix:"Y="}, xyFormat);
var zOutput = createVariable({prefix:"Z="}, zFormat);
var feedOutput = createVariable({prefix:"V="}, feedFormat);
// circular output
var iOutput = createVariable({prefix:"I=", force:true}, xyFormat);
var jOutput = createVariable({prefix:"J=", force:true}, xyFormat);
/**
Writes the specified block.
*/
function writeBlock() {
writeWords(arguments);
}
/**
Output a comment.
*/
function writeComment(text) {
if (text) {
writeln("; " + text);
}
}
function onOpen() {
if (getProperty("reverseZaxis") == true) {
zFormat.setScale(-1);
zOutput = createVariable({prefix:"Z="}, zFormat);
}
if (getProperty("useRadius")) {
maximumCircularSweep = toRad(90); // avoid potential center calculation errors for CNC
}
var workpiece = getWorkpiece();
writeBlock("H", "DX=" + xyFormat.format(workpiece.upper.x), "DY=" + xyFormat.format(workpiece.upper.y), "DZ=" + xyFormat.format(workpiece.upper.z - workpiece.lower.z), "-A", "*MM", "/DEF");
writeComment(programName);
if (programComment != programName) {
writeComment(programComment);
}
// dump tool information
if (getProperty("writeTools")) {
var zRanges = {};
if (is3D()) {
var numberOfSections = getNumberOfSections();
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
var zRange = section.getGlobalZRange();
var tool = section.getTool();
if (zRanges[tool.number]) {
zRanges[tool.number].expandToRange(zRange);
} else {
zRanges[tool.number] = zRange;
}
}
}
var tools = getToolTable();
if (tools.getNumberOfTools() > 0) {
for (var i = 0; i < tools.getNumberOfTools(); ++i) {
var tool = tools.getTool(i);
var comment = "T" + toolFormat.format(tool.number) + " " +
"D=" + xyFormat.format(tool.diameter) + " " +
localize("CR") + "=" + xyFormat.format(tool.cornerRadius);
if ((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) {
comment += " " + localize("TAPER") + "=" + taperFormat.format(tool.taperAngle) + localize("deg");
}
if (zRanges[tool.number]) {
comment += " - " + localize("ZMIN") + "=" + zFormat.format(zRanges[tool.number].getMinimum());
}
comment += " - " + getToolTypeName(tool.type);
writeComment(comment);
}
}
}
}
function onComment(message) {
writeComment(message);
}
/** Force output of X, Y, and Z. */
function forceXYZ() {
xOutput.reset();
yOutput.reset();
zOutput.reset();
}
/** Force output of X, Y, Z, and F on next output. */
function forceAny() {
forceXYZ();
feedOutput.reset();
}
function onSection() {
var abc = currentSection.workPlane.getTurnAndTilt(0, 2);
writeBlock(
"XPL",
"X=" + xyFormat.format(currentSection.workOrigin.x),
"Y=" + xyFormat.format(currentSection.workOrigin.y),
"Z=" + zFormat.format(currentSection.workOrigin.z),
"Q=" + abcFormat.format(abc.z),
"R=" + abcFormat.format(abc.x)
);
forceAny();
var initialPosition = getFramePosition(currentSection.getInitialPosition());
writeBlock(
"XG0",
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y),
zOutput.format(initialPosition.z),
"T=" + toolFormat.format(tool.number),
"S=" + rpmFormat.format(spindleSpeed)
);
feedOutput.reset();
}
function onSpindleSpeed(spindleSpeed) {
writeBlock("S=" + rpmFormat.format(spindleSpeed));
}
function onRadiusCompensation() {
if (radiusCompensation != RADIUS_COMPENSATION_OFF) {
error(localize("Radius compensation mode not supported."));
}
}
function onRapid(_x, _y, _z) {
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var z = zOutput.format(_z);
if (x || y || z) {
writeBlock(
"XG0", x, y, z,
"T=" + toolFormat.format(tool.number),
"S=" + rpmFormat.format(spindleSpeed)
);
feedOutput.reset();
}
}
function onLinear(_x, _y, _z, feed) {
var x = xOutput.format(_x);
var y = yOutput.format(_y);
var z = zOutput.format(_z);
if (x || y || z) {
writeBlock("XL2P", x, y, z, feedOutput.format(feed));
}
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
if (isHelical() || (getCircularPlane() != PLANE_XY)) {
var t = tolerance;
if ((t == 0) && hasParameter("operation:tolerance")) {
t = getParameter("operation:tolerance");
}
linearize(t);
return;
}
xOutput.reset();
yOutput.reset();
if (!getProperty("useRadius")) {
zOutput.reset();
writeBlock("XA2P", "G=" + (clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx), jOutput.format(cy), feedOutput.format(feed));
} else {
var r = getCircularRadius();
if (toDeg(getCircularSweep()) > (180 + 1e-9)) {
r = -r; // allow up to <360 deg arcs
}
writeBlock("XAR2", xOutput.format(x), yOutput.format(y), "r=" + xyFormat.format(r), "G=" + (clockwise ? 2 : 3), feedOutput.format(feed));
}
}
function onSectionEnd() {
writeBlock("XPL", "X=" + xyFormat.format(0), "Y=" + xyFormat.format(0), "Z=" + zFormat.format(0), "Q=" + abcFormat.format(0), "R=" + abcFormat.format(0)); // reset plane
writeComment("******************************");
forceAny();
}
function onClose() {
// home position
writeBlock("N", "X=" + xyFormat.format(0), "Y=" + xyFormat.format(0), "Z=" + zFormat.format(0), "; " + localize("home"));
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,980 @@
/**
Copyright (C) 2012-2024 by Autodesk, Inc.
All rights reserved.
Excel 2007 setup sheet configuration.
$Revision: 44984 d1fbfee84cee9490694878b7036b07214a678903 $
$Date: 2024-03-28 13:34:20 $
FORKID {CDDF7D05-7EFA-49b2-A6C8-D3CAEA690A7E}
*/
description = "Setup Sheet Excel 2007";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2024 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45702;
longDescription = "Setup sheet for generating spreadsheet in Excel 2007 format. Only supported on Windows.";
capabilities = CAPABILITY_SETUP_SHEET;
extension = "xlsx";
mimetype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
keywords = "MODEL_IMAGE";
setCodePage("utf-8");
dependencies = "setup-sheet-excel-2007-template.xlsx";
allowMachineChangeOnSection = true;
properties = {
rapidFeed: {
title: "Rapid feed",
description: "Sets the rapid traversal feedrate. Set this to get more accurate cycle times.",
type: "number",
value: 5000,
scope: "post"
},
toolChangeTime: {
title: "Tool change time",
description: "Sets the tool change time in seconds. Set this to get more accurate cycle times.",
type: "number",
value: 15,
scope: "post"
},
listVariables: {
title: "List variables",
description: "If enabled, all available variables are outputted to the log.",
type: "boolean",
value: false,
scope: "post"
}
};
/** Sets variable prefix. */
function prepend(prefix, variables) {
var result = {};
var p = prefix + ".";
for (var k in variables) {
result[p + k] = variables[k];
}
return result;
}
function isProbeOperation(section) {
return section.hasParameter("operation-strategy") && (section.getParameter("operation-strategy") == "probe");
}
/** Returns the global program information. */
function getProgramInfo() {
var result = {};
for (var p in properties) {
result[p] = properties[p];
}
result["name"] = (programName == undefined) ? "" : programName;
result["comment"] = (programComment == undefined) ? "" : programComment;
var now = new Date();
result["generationTime"] = (now.getTime()/1000.0 - now.getTimezoneOffset()*60)/(24*60*60) + 25569;
result["numberOfSections"] = getNumberOfSections();
var tools = getToolTable();
result["numberOfTools"] = tools.getNumberOfTools();
var maximumFeed = 0;
var maximumSpindleSpeed = 0;
var cuttingDistance = 0;
var rapidDistance = 0;
var cycleTime = 0;
var multipleWorkOffsets = false;
var workOffset;
var numberOfSections = getNumberOfSections();
var currentTool;
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
if (workOffset == undefined) {
workOffset = section.workOffset;
} else {
if (workOffset != section.workOffset) {
multipleWorkOffsets = true;
}
}
if (!isProbeOperation(section)) {
maximumFeed = Math.max(maximumFeed, section.getMaximumFeedrate());
maximumSpindleSpeed = Math.max(maximumSpindleSpeed, section.getMaximumSpindleSpeed());
cuttingDistance += section.getCuttingDistance();
rapidDistance += section.getRapidDistance();
cycleTime += section.getCycleTime();
if (getProperty("toolChangeTime") > 0) {
var tool = section.getTool();
if (currentTool != tool.number) {
currentTool = tool.number;
cycleTime += getProperty("toolChangeTime");
}
}
}
}
if (getProperty("rapidFeed") > 0) {
cycleTime += rapidDistance/getProperty("rapidFeed") * 60;
}
result["workOffset"] = multipleWorkOffsets ? "" : workOffset;
result["maximumFeed"] = maximumFeed;
result["maximumSpindleSpeed"] = maximumSpindleSpeed;
result["cuttingDistance"] = cuttingDistance;
result["rapidDistance"] = rapidDistance;
result["cycleTime"] = formatTime(cycleTime);
return prepend("program", result);
}
/** Returns the tool information in an array. */
function getToolInfo() {
var result = [];
var tools = getToolTable();
for (var i = 0; i < tools.getNumberOfTools(); ++i) {
var tool = tools.getTool(i);
var first = true;
var minimumZ = 0;
var maximumZ = 0;
var maximumFeed = 0;
var maximumSpindleSpeed = 0;
var cuttingDistance = 0;
var rapidDistance = 0;
var cycleTime = 0;
var numberOfSections = getNumberOfSections();
for (var j = 0; j < numberOfSections; ++j) {
var section = getSection(j);
if (section.getTool().number != tool.number) {
continue;
}
if (is3D()) {
var zRange = section.getGlobalZRange();
if (first) {
minimumZ = zRange.getMinimum();
maximumZ = zRange.getMaximum();
} else {
minimumZ = Math.min(minimumZ, zRange.getMinimum());
maximumZ = Math.max(maximumZ, zRange.getMaximum());
}
}
if (!isProbeOperation(section)) {
maximumFeed = Math.max(maximumFeed, section.getMaximumFeedrate());
maximumSpindleSpeed = Math.max(maximumSpindleSpeed, section.getMaximumSpindleSpeed());
cuttingDistance += section.getCuttingDistance();
rapidDistance += section.getRapidDistance();
cycleTime += section.getCycleTime();
}
first = false;
}
if (getProperty("rapidFeed") > 0) {
cycleTime += rapidDistance/getProperty("rapidFeed") * 60;
}
if (!is3D()) {
minimumZ = "";
maximumZ = "";
}
var record = {
"number": tool.number,
"diameterOffset": tool.diameterOffset,
"lengthOffset": tool.lengthOffset,
"toolAngle": getToolAngle(tool),
"diameter": tool.diameter,
"cornerRadius": tool.cornerRadius,
"taperAngle": toDeg(tool.taperAngle),
"fluteLength": tool.fluteLength,
"shoulderLength": tool.shoulderLength,
"bodyLength": tool.bodyLength,
"numberOfFlutes": tool.numberOfFlutes,
"type": getToolTypeName(tool.type),
"maximumFeed": maximumFeed,
"maximumSpindleSpeed": maximumSpindleSpeed,
"cuttingDistance": cuttingDistance,
"rapidDistance": rapidDistance,
"cycleTime": formatTime(cycleTime),
"minimumZ": minimumZ,
"maximumZ": maximumZ,
"description": tool.description,
"comment": tool.comment,
"vendor": tool.vendor,
"productId": autoLink(getSectionParameterForTool(tool, "operation:tool_productLink"), tool.productId),
"holderDescription": tool.holderDescription,
"holderComment": tool.holderComment,
"holderVendor": tool.holderVendor,
"holderProductId": autoLink(getSectionParameterForTool(tool, "operation:holder_productLink"), tool.holderProductId)
};
result.push(prepend("tool", record));
}
return result;
}
function getSectionParameterForTool(tool, id) {
var numberOfSections = getNumberOfSections();
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
if (section.getTool().number == tool.number) {
return section.getParameter(id, "");
}
}
return undefined;
}
function getToolAngle(tool) {
var toolAngle = getSectionParameterForTool(tool, "operation:tool_angle");
if (typeof toolAngle == "number") {
switch (toolAngle) {
case 0:
return "Radial";
case 90:
case -90:
return "Axial";
default:
return toolAngle + " deg";
}
}
return "";
}
//** Returns a HTML link if text looks like a link. */
function autoLink(link, description) {
if (!description) {
description = "";
}
if (!link) {
if ((description.toLowerCase().indexOf("https://") == 0) || (description.toLowerCase().indexOf("http://") == 0)) {
link = description;
if (description.length > 16) {
description = localize("click to visit");
}
}
}
if (!link) {
return description;
}
if (link.toLowerCase().indexOf("https://") == 0) {
if (!description) {
description = link.substr(8);
if (description.length > 16) {
description = localize("click to visit");
}
}
} else if (link.toLowerCase().indexOf("http://") == 0) {
if (!description) {
description = link.substr(7);
if (description.length > 16) {
description = localize("click to visit");
}
}
} else {
if (!description) {
description = link;
if (description.length > 16) {
description = localize("click to visit");
}
}
link = "http://" + link;
}
return link ? "HYPERLINK(\"" + link + "\",\"" + description + "\")" : description;
}
var programInfo = {};
var operationInfo = [];
var toolInfo = [];
var global = (function(){return this;}).call();
function getVariable(variables, id) {
// log("LOOKUP: " + id + "=" + variables[id]);
var value = variables[id];
if (value != undefined) {
var i = id.indexOf("(");
if ((i >= 0) && (id.indexOf(")", i + 1) > i)) { // assume function
try {
value = eval.call(global, id); // TAG: not supported
} catch(e) {
value = undefined;
}
}
}
if (value != undefined) {
return value;
}
// warning(subst(localize("The variable '%1' is unknown."), id));
if (false) {
variables[id] = "$" + id; // avoid future warnings
return "$" + id;
}
variables[id] = ""; // avoid future warnings
return "";
}
function replaceVariables(variables, xml) {
/*jsl:ignore*/
default xml namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
var cs = xml..c;
for (var i = 0; i < cs.length(); ++i) {
var c = cs[i];
var v = c.v;
if (c.@t == "s") { // string
var text = getString(c.v);
if (text.charAt(0) == "$") { // variable
var value = getVariable(variables, text.substr(1));
switch (typeof(value)) {
case "boolean":
delete c.@t;
c.v = value ? 1 : 0;
break;
case "number":
delete c.@t;
c.v = value;
break;
case "string":
default:
if ((value.indexOf("$") < 0) && (text.substr(text.length - 4) == "Time")) {
delete c.@t;
c.v = value;
} else if ((value.indexOf("$") < 0) && (value.substr(0,9) == "HYPERLINK")) {
var pId = String(value).split('"');
delete c.v;
c.@t = "str";
c.f = value;
c.v = pId[3];
} else {
c.@t = "inlineStr";
delete c.v;
c.is = <is/>;
c.is.t = value;
}
}
}
}
}
/*jsl:end*/
}
var cachedParameters = {};
var globalParameters = true;
function onParameter(name, value) {
if (globalParameters) {
if (name.substr(name.length - 6) == "marker") {
globalParameters = false;
} else {
programInfo[name] = value;
}
}
cachedParameters[name] = value;
}
var temporaryFolder;
function onOpen() {
if (getPlatform() != "WIN32") {
error(localize("This post is only supported on Windows."));
return;
}
if (!FileSystem.isFolder(FileSystem.getTemporaryFolder())) {
FileSystem.makeFolder(FileSystem.getTemporaryFolder());
}
temporaryFolder = FileSystem.getTemporaryFile("setup-sheet-excel-2007");
FileSystem.removeFolderRecursive(temporaryFolder);
var templatePath = FileSystem.getCombinedPath(getConfigurationFolder(), "setup-sheet-excel-2007-template.xlsx");
FileSystem.makeFolder(temporaryFolder);
ZipFile.unzipTo(templatePath, temporaryFolder);
programInfo = getProgramInfo();
programInfo["program.jobDescription"] = hasGlobalParameter("job-description") ? getGlobalParameter("job-description") : "";
programInfo["program.partPath"] = hasGlobalParameter("document-path") ? getGlobalParameter("document-path") : "";
programInfo["program.partName"] = FileSystem.getFilename(programInfo["program.partPath"]);
programInfo["program.user"] = hasGlobalParameter("username") ? getGlobalParameter("username") : "";
var workpiece = getWorkpiece();
var delta = Vector.diff(workpiece.upper, workpiece.lower);
programInfo["program.stockLowerX"] = workpiece.lower.x;
programInfo["program.stockLowerY"] = workpiece.lower.y;
programInfo["program.stockLowerZ"] = workpiece.lower.z;
programInfo["program.stockUpperX"] = workpiece.upper.x;
programInfo["program.stockUpperY"] = workpiece.upper.y;
programInfo["program.stockUpperZ"] = workpiece.upper.z;
programInfo["program.stockDX"] = delta.x;
programInfo["program.stockDY"] = delta.y;
programInfo["program.stockDZ"] = delta.z;
var partLowerX = hasGlobalParameter("part-lower-x") ? getGlobalParameter("part-lower-x") : 0;
var partLowerY = hasGlobalParameter("part-lower-y") ? getGlobalParameter("part-lower-y") : 0;
var partLowerZ = hasGlobalParameter("part-lower-z") ? getGlobalParameter("part-lower-z") : 0;
var partUpperX = hasGlobalParameter("part-upper-x") ? getGlobalParameter("part-upper-x") : 0;
var partUpperY = hasGlobalParameter("part-upper-y") ? getGlobalParameter("part-upper-y") : 0;
var partUpperZ = hasGlobalParameter("part-upper-z") ? getGlobalParameter("part-upper-z") : 0;
programInfo["program.partLowerX"] = partLowerX;
programInfo["program.partLowerY"] = partLowerY;
programInfo["program.partLowerZ"] = partLowerZ;
programInfo["program.partUpperX"] = partUpperX;
programInfo["program.partUpperY"] = partUpperY;
programInfo["program.partUpperZ"] = partUpperZ;
programInfo["program.partDX"] = partUpperX - partLowerX;
programInfo["program.partDY"] = partUpperY - partLowerY;
programInfo["program.partDZ"] = partUpperZ - partLowerZ;
toolInfo = getToolInfo();
cachedParameters = {};
}
function onSection() {
skipRemainingSection();
}
function getStrategy() {
if (hasParameter("operation-strategy")) {
var strategies = {
drill: localize("Drilling"),
face: localize("Facing"),
path3d: localize("3D Path"),
pocket2d: localize("Pocket 2D"),
contour2d: localize("Contour 2D"),
adaptive2d: localize("Adaptive 2D"),
slot: localize("Slot"),
circular: localize("Circular"),
bore: localize("Bore"),
thread: localize("Thread"),
probe: localize("Probe"),
contour_new: localize("Contour"),
contour: localize("Contour"),
parallel_new: localize("Parallel"),
parallel: localize("Parallel"),
pocket_new: localize("Pocket"),
pocket: localize("Pocket"),
adaptive: localize("Adaptive"),
horizontal_new: localize("Horizontal"),
horizontal: localize("Horizontal"),
flow: localize("Flow"),
morph: localize("Morph"),
pencil_new: localize("Pencil"),
pencil: localize("Pencil"),
project: localize("Project"),
ramp: localize("Ramp"),
radial_new: localize("Radial"),
radial: localize("Radial"),
scallop_new: localize("Scallop"),
scallop: localize("Scallop"),
morphed_spiral: localize("Morphed Spiral"),
spiral_new: localize("Spiral"),
spiral: localize("Spiral"),
swarf5d: localize("Multi-Axis Swarf"),
multiAxisContour: localize("Multi-Axis Contour")
};
if (strategies[getParameter("operation-strategy")]) {
return strategies[getParameter("operation-strategy")];
}
}
return "";
}
/**
Returns the specified coolant as a string.
*/
function getCoolantName(coolant) {
switch (coolant) {
case COOLANT_OFF:
return localize("Off");
case COOLANT_FLOOD:
return localize("Flood");
case COOLANT_MIST:
return localize("Mist");
case COOLANT_THROUGH_TOOL:
return localize("Through tool");
case COOLANT_AIR:
return localize("Air");
case COOLANT_AIR_THROUGH_TOOL:
return localize("Air through tool");
case COOLANT_SUCTION:
return localize("Suction");
case COOLANT_FLOOD_MIST:
return localize("Flood and mist");
case COOLANT_FLOOD_THROUGH_TOOL:
return localize("Flood and through tool");
default:
return localize("Unknown");
}
}
function onSectionEnd() {
var operationParameters = {};
operationParameters["id"] = currentSection.getId() + 1;
operationParameters["description"] = hasParameter("operation-comment") ? getParameter("operation-comment") : "";
operationParameters["strategy"] = getStrategy();
operationParameters["workOffset"] = currentSection.workOffset;
var tolerance = cachedParameters["operation:tolerance"];
var stockToLeave = cachedParameters["operation:stockToLeave"];
var axialStockToLeave = cachedParameters["operation:verticalStockToLeave"];
var maximumStepdown = cachedParameters["operation:maximumStepdown"];
var maximumStepover = cachedParameters["operation:maximumStepover"] ? cachedParameters["operation:maximumStepover"] : cachedParameters["operation:stepover"];
operationParameters["tolerance"] = tolerance;
operationParameters["stockToLeave"] = stockToLeave;
operationParameters["axialStockToLeave"] = axialStockToLeave;
operationParameters["maximumStepdown"] = maximumStepdown;
operationParameters["maximumStepover"] = maximumStepover;
if (!isProbeOperation(currentSection)) {
var cycleTime = currentSection.getCycleTime();
if (is3D()) {
var zRange = currentSection.getGlobalZRange();
operationParameters["minimumZ"] = zRange.getMinimum();
operationParameters["maximumZ"] = zRange.getMaximum();
} else {
operationParameters["minimumZ"] = "";
operationParameters["maximumZ"] = "";
}
operationParameters["maximumFeed"] = currentSection.getMaximumFeedrate();
operationParameters["maximumSpindleSpeed"] = currentSection.getMaximumSpindleSpeed();
operationParameters["cuttingDistance"] = currentSection.getCuttingDistance();
operationParameters["rapidDistance"] = currentSection.getRapidDistance();
if (getProperty("rapidFeed") > 0) {
cycleTime += currentSection.getRapidDistance()/getProperty("rapidFeed") * 60;
}
operationParameters["cycleTime"] = formatTime(cycleTime);
}
var tool = currentSection.getTool();
operationParameters["tool.number"] = tool.number;
operationParameters["tool.diameterOffset"] = tool.diameterOffset;
operationParameters["tool.lengthOffset"] = tool.lengthOffset;
operationParameters["tool.diameter"] = tool.diameter;
operationParameters["tool.cornerRadius"] = tool.cornerRadius;
operationParameters["tool.taperAngle"] = toDeg(tool.taperAngle);
operationParameters["tool.fluteLength"] = tool.fluteLength;
operationParameters["tool.shoulderLength"] = tool.shoulderLength;
operationParameters["tool.bodyLength"] = tool.bodyLength;
operationParameters["tool.numberOfFlutes"] = tool.numberOfFlutes;
operationParameters["tool.type"] = getToolTypeName(tool.type);
operationParameters["tool.spindleSpeed"] = tool.spindleSpeed;
operationParameters["tool.coolant"] = getCoolantName(tool.coolant);
operationParameters["tool.description"] = tool.description;
operationParameters["tool.comment"] = tool.comment;
operationParameters["tool.vendor"] = tool.vendor;
operationParameters["tool.productId"] = autoLink(getSectionParameterForTool(tool, "operation:tool_productLink"), tool.productId);
operationParameters["tool.holderDescription"] = tool.holderDescription;
operationParameters["tool.holderComment"] = tool.holderComment;
operationParameters["tool.holderVendor"] = tool.holderVendor;
operationParameters["tool.holderProductId"] = autoLink(getSectionParameterForTool(tool, "operation:holder_productLink"), tool.holderProductId);
operationInfo.push(prepend("operation", operationParameters));
cachedParameters = {};
}
function formatTime(cycleTime) {
var epoc = new Date(1900, 0, 1, 0, 0, 0, 0);
cycleTime = cycleTime + 0.5; // round up
return cycleTime/(24.0*60*60);
}
/**
Loads XML from the specified file.
*/
function loadXML(path) {
var xml = loadText(path, "utf-8");
xml = xml.replace(/<\?xml (.*?)\?>/, "");
return new XML(xml);
}
function dumpIds() {
// only for debugging
for (var k in programInfo) {
log(k + " = " + programInfo[k]);
}
for (var i = 0; i < toolInfo.length; ++i) {
log("TOOL " + i);
var variables = toolInfo[i];
for (var k in variables) {
log(k + " = " + variables[k]);
}
}
for (var i = 0; i < operationInfo.length; ++i) {
log("OPERATION " + i);
var variables = operationInfo[i];
for (var k in variables) {
log(k + " = " + variables[k]);
}
}
}
var sharedStringsPath;
var sharedStrings = [];
var sharedStringsXML;
function loadSharedStrings() {
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\_rels\\workbook.xml.rels");
var Relationships = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/package/2006/relationships";
var rs = Relationships.Relationship;
for (var i = 0; i < rs.length(); ++i) {
var r = rs[i];
if (r.@Type == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings") {
var target = r.@Target;
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\" + target.replace(/\//g, "\\"));
sharedStringsPath = path;
var sst = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
var ts = sst.si.t;
for (var i = 0; i < ts.length(); ++i) {
var t = ts[i];
sharedStrings.push(t);
}
sharedStringsXML = sst;
break;
}
}
}
function saveSharedStrings() {
if (!sharedStringsPath) {
return;
}
default xml namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
var ts = sharedStringsXML.si.t;
for (var i = 0; i < ts.length(); ++i) {
var t = ts[i];
if (t.charAt(0) != "$") { // variable
ts[i] = localize(t);
}
}
try {
var file = new TextFile(sharedStringsPath, true, "utf-8");
file.writeln("<?xml version='1.0' encoding='utf-8'?>");
file.write(sharedStringsXML.toXMLString());
file.close();
} catch (e) {
error(localize("Failed to write shared string."));
}
}
function getString(index) {
return sharedStrings[index];
}
function addString(text) {
sharedStrings.push(text);
return sharedStrings.length - 1;
}
function updateWorksheet(path) {
var worksheet = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
var rr = new Namespace("http://schemas.openxmlformats.org/officeDocument/2006/relationships");
// find operation rows to fill
var rows = worksheet.sheetData.row;
for (var i = 0; i < rows.length(); ++i) {
var row = rows[i];
var cs = row.c;
var found = false;
for (var j = 0; j < cs.length(); ++j) {
var c = cs[j];
if (c.@t == "s") { // string
var text = getString(c.v);
if (text == "$OPERATION_ROW") {
found = true;
break;
}
}
}
if (found) {
var r = parseInt(row.@r);
var rows = worksheet.sheetData.row;
for (var j = 0; j < rows.length(); ++j) {
var _row = rows[j];
var rr = parseInt(_row.@r);
if (rr> r) {
_row.@r = rr + (operationInfo.length - 1);
delete _row.c.@r;
}
}
// insert new rows
var sheetData = row.parent();
for (var j = operationInfo.length - 1; j >= 0; --j) {
var filledRow = row.copy(); // uses a lot of memory
delete filledRow.c.@r;
if (!operationInfo[j]) {
log(localize("Invalid operation information."));
return;
}
replaceVariables(operationInfo[j], filledRow);
filledRow.@r = r + j;
worksheet.sheetData.insertChildAfter(row, filledRow);
}
delete worksheet.sheetData.row[i]; // remove original row
}
}
// find tool rows to fill
for (var i = 0; i < rows.length(); ++i) {
var row = rows[i];
var cs = row.c;
var found = false;
for (var j = 0; j < cs.length(); ++j) {
var c = cs[j];
if (c.@t == "s") { // string
var text = getString(c.v);
if (text == "$TOOL_ROW") {
found = true;
break;
}
}
}
if (found) {
var r = parseInt(row.@r);
var rows = worksheet.sheetData.row;
for (var j = 0; j < rows.length(); ++j) {
var _row = rows[j];
var rr = parseInt(_row.@r);
if (rr> r) {
_row.@r = rr + (toolInfo.length - 1);
delete _row.c.@r;
}
}
// insert new rows
var sheetData = row.parent();
for (var j = toolInfo.length - 1; j >= 0; --j) {
var filledRow = row.copy(); // uses a lot of memory
delete filledRow.c.@r;
if (!toolInfo[j]) {
log(localize("Invalid tool information."));
return;
}
replaceVariables(toolInfo[j], filledRow);
filledRow.@r = r + j;
worksheet.sheetData.insertChildAfter(row, filledRow);
}
delete worksheet.sheetData.row[i]; // remove original row
}
}
if (!programInfo) {
log(localize("Invalid program information."));
return;
}
replaceVariables(programInfo, worksheet); // we need to subst correct type
/* we translate shared strings
var cs = worksheet..c;
for (var i = 0; i < cs.length(); ++i) {
var c = cs[i];
if (c.@t == "s") { // string
var text = getString(c.v);
c.@t = "inlineStr";
delete c.v;
c.is = <is/>;
c.is.t = localize(text); // only allowed for strings
}
}
*/
var vs = worksheet..v;
for (var i = 0; i < vs.length(); ++i) {
var v = vs[i];
if (v == "#VALUE!") {
delete v.parent().v;
}
}
try {
var file = new TextFile(path, true, "utf-8");
file.writeln("<?xml version='1.0' encoding='utf-8'?>");
file.write(worksheet.toXMLString());
file.close();
} catch (e) {
error(localize("Failed to write worksheet."));
}
}
function updateWorksheets() {
// see http://msdn.microsoft.com/en-us/library/bb332058%28v=office.12%29.aspx
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\_rels\\workbook.xml.rels");
var Relationships = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/package/2006/relationships";
var rs = Relationships.Relationship;
for (var i = 0; i < rs.length(); ++i) {
var r = rs[i];
if (r.@Type == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet") {
var target = r.@Target;
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\" + target.replace(/\//g, "\\"));
if (FileSystem.isFile(path)) {
updateWorksheet(path);
}
}
}
}
function updateWorkbook() {
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\workbook.xml");
var workbook = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
var sheets = workbook.sheets.sheet;
for (var i = 0; i < sheets.length(); ++i) {
var sheet = sheets[i];
sheet.@name = localize(sheet.@name);
}
try {
var file = new TextFile(path, true, "utf-8");
file.writeln("<?xml version='1.0' encoding='utf-8'?>");
file.write(workbook.toXMLString());
file.close();
} catch (e) {
error(localize("Failed to write workbook."));
}
}
function onClose() {
if (getProperty("listVariables")) {
dumpIds();
}
loadSharedStrings();
if (false) {
for (var i = 0; i < sharedStrings.length; ++i) {
log("sharedStrings[" + i + "]=" + getString(i));
}
}
updateWorksheets();
updateWorkbook();
saveSharedStrings();
}
function onTerminate() {
if (!modelImagePath) {
var extensions = ["jpg", "png"];
for (var i = 0; i < extensions.length; ++i) {
var modelImageName = FileSystem.replaceExtension(getOutputPath(), extensions[i]);
if (FileSystem.isFile(FileSystem.getCombinedPath(FileSystem.getFolderPath(getOutputPath()), modelImageName))) {
modelImagePath = modelImageName;
break;
}
}
}
if (modelImagePath) {
/*
// find job image
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\drawings\\drawing1.xml");
var wsDr = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing";
var a = new Namespace("http://schemas.openxmlformats.org/drawingml/2006/main");
var r = new Namespace("http://schemas.openxmlformats.org/package/2006/relationships");
var pics = wsDr..pic;
for (var i = 0; i < pics.length(); ++i) {
var pic = pics[i];
if (pic.nvPicPr.cNvPr.@descr == "Job preview") {
var blipFill = pic..blipFill;
}
}
*/
var destFolder = FileSystem.getCombinedPath(temporaryFolder, "xl\\media");
var original = FileSystem.getCombinedPath(destFolder, "image1.png");
FileSystem.remove(original);
// extension must be png or excel fails to load file - still works if file is actually in jpg format
var imageFilename = "model.png"; // do NOT use non-ASCII characters - and do NOT use spaces
// var imageFilename = FileSystem.replaceExtension(FileSystem.getFilename(modelImagePath).replace(/ /g, "_"), "png");
var src = FileSystem.getCombinedPath(FileSystem.getFolderPath(getOutputPath()), modelImagePath);
var dest = FileSystem.getCombinedPath(destFolder, imageFilename);
try {
FileSystem.copyFile(src, dest);
} catch (e) {
warning(subst(localize("Failed to copy image from '%1' to '%2'."), src, dest));
}
var path = FileSystem.getCombinedPath(temporaryFolder, "xl\\drawings\\_rels\\drawing1.xml.rels");
var Relationships = loadXML(path);
default xml namespace = "http://schemas.openxmlformats.org/package/2006/relationships";
var rs = Relationships.Relationship;
for (var i = 0; i < rs.length(); ++i) {
var r = rs[i];
if (r.@Type == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image") {
if (r.@Target == "../media/image1.png") {
r.@Target = "../media/" + imageFilename;
}
}
}
try {
var file = new TextFile(path, true, "utf-8");
file.writeln("<?xml version='1.0' encoding='utf-8'?>");
file.write(Relationships.toXMLString());
file.close();
} catch (e) {
error(localize("Failed to write shared string."));
return;
}
}
ZipFile.zipTo(temporaryFolder, getOutputPath());
FileSystem.removeFolderRecursive(temporaryFolder);
// executeNoWait("excel", "\"" + getOutputPath() + "\"", false, "");
}
function setProperty(property, value) {
properties[property].current = value;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,661 @@
/**
Copyright (C) 2012-2024 by Autodesk, Inc.
All rights reserved.
Excel setup sheet configuration.
$Revision: 44950 86f283c49a2bb5324a205abec3cea6ae68b4e30e $
$Date: 2024-03-12 15:03:07 $
FORKID {F4FA39E1-B6CA-4fbe-A094-8761870B1F78}
*/
description = "Setup Sheet Excel";
vendor = "Autodesk";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2024 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45948;
longDescription = "Setup sheet for generating spreadsheet in Excel format. Consider using the Setup Sheet Excel 2007 post instead which also supports preview picture of the model.";
capabilities = CAPABILITY_SETUP_SHEET;
extension = "xls";
mimetype = "text/xml";
keywords = "MODEL_IMAGE";
setCodePage("utf-8");
dependencies = "setup-sheet-excel-template.xls";
allowMachineChangeOnSection = true;
properties = {
rapidFeed: {
title: "Rapid feed",
description: "Sets the rapid traversal feedrate. Set this to get more accurate cycle times.",
type: "number",
value: 5000,
scope: "post"
},
toolChangeTime: {
title: "Tool change time",
description: "Sets the tool change time in seconds. Set this to get more accurate cycle times.",
type: "number",
value: 15,
scope: "post"
},
listVariables: {
title: "List variables",
description: "If enabled, all available variables are outputted to the log.",
type: "boolean",
value: false,
scope: "post"
}
};
var timeFormat = createFormat({width:2, zeropad:true, decimals:0});
/** Sets variable prefix. */
function prepend(prefix, variables) {
var result = {};
var p = prefix + ".";
for (var k in variables) {
result[p + k] = variables[k];
}
return result;
}
/** Returns the global program information. */
function getProgramInfo() {
var result = {};
for (var p in properties) {
result[p] = properties[p];
}
result["name"] = (programName == undefined) ? "" : programName;
result["comment"] = (programComment == undefined) ? "" : programComment;
// 2003-06-11T00:00:00.000
var now = new Date();
result["generationTime"] = subst(
"%1-%2-%3T%4:%5:%6.000",
now.getFullYear(),
timeFormat.format(now.getMonth() + 1),
timeFormat.format(now.getDate()),
timeFormat.format(now.getHours()),
timeFormat.format(now.getMinutes()),
timeFormat.format(now.getSeconds())
);
result["numberOfSections"] = getNumberOfSections();
var tools = getToolList("number", "lengthOffset");
result["numberOfTools"] = tools.length;
var maximumFeed = 0;
var maximumSpindleSpeed = 0;
var cuttingDistance = 0;
var rapidDistance = 0;
var cycleTime = 0;
var multipleWorkOffsets = false;
var workOffset;
var numberOfSections = getNumberOfSections();
var currentTool;
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
if (workOffset == undefined) {
workOffset = section.workOffset;
} else {
if (workOffset != section.workOffset) {
multipleWorkOffsets = true;
}
}
if (!isProbeOperation(section)) {
maximumFeed = Math.max(maximumFeed, section.getMaximumFeedrate());
maximumSpindleSpeed = Math.max(maximumSpindleSpeed, section.getMaximumSpindleSpeed());
cuttingDistance += section.getCuttingDistance();
rapidDistance += section.getRapidDistance();
cycleTime += section.getCycleTime();
if (getProperty("toolChangeTime") > 0) {
var tool = section.getTool();
if (currentTool != tool.number) {
currentTool = tool.number;
cycleTime += getProperty("toolChangeTime");
}
}
}
}
if (getProperty("rapidFeed") > 0) {
cycleTime += rapidDistance/getProperty("rapidFeed") * 60;
}
result["workOffset"] = multipleWorkOffsets ? "" : workOffset;
result["maximumFeed"] = maximumFeed;
result["maximumSpindleSpeed"] = maximumSpindleSpeed;
result["cuttingDistance"] = cuttingDistance;
result["rapidDistance"] = rapidDistance;
result["cycleTime"] = formatTime(cycleTime);
return prepend("program", result);
}
function getSectionParameterForTool(tool, id) {
var numberOfSections = getNumberOfSections();
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
if (section.getTool().number == tool.number) {
return section.hasParameter(id) ? section.getParameter(id) : undefined;
}
}
return undefined;
}
function getToolAngle(tool) {
var toolAngle = getSectionParameterForTool(tool, "operation:tool_angle");
if (toolAngle != undefined) {
switch (toolAngle) {
case 0:
return "Radial";
case 90:
case -90:
return "Axial";
default:
return toolAngle + " deg";
}
}
return "";
}
/** Returns the tool information in an array. */
function getToolInfo() {
var result = [];
var tools = getToolList("number", "lengthOffset");
for (var i = 0; i < tools.length; ++i) {
var tool = tools[i].tool;
var first = true;
var minimumZ = 0;
var maximumZ = 0;
var maximumFeed = 0;
var maximumSpindleSpeed = 0;
var cuttingDistance = 0;
var rapidDistance = 0;
var cycleTime = 0;
var numberOfSections = getNumberOfSections();
for (var j = 0; j < numberOfSections; ++j) {
var section = getSection(j);
if (section.getTool().number != tool.number) {
continue;
}
if (is3D()) {
var zRange = section.getGlobalZRange();
if (first) {
minimumZ = zRange.getMinimum();
maximumZ = zRange.getMaximum();
} else {
minimumZ = Math.min(minimumZ, zRange.getMinimum());
maximumZ = Math.max(maximumZ, zRange.getMaximum());
}
}
if (!isProbeOperation(section)) {
maximumFeed = Math.max(maximumFeed, section.getMaximumFeedrate());
maximumSpindleSpeed = Math.max(maximumSpindleSpeed, section.getMaximumSpindleSpeed());
cuttingDistance += section.getCuttingDistance();
rapidDistance += section.getRapidDistance();
cycleTime += section.getCycleTime();
}
first = false;
}
if (getProperty("rapidFeed") > 0) {
cycleTime += rapidDistance/getProperty("rapidFeed") * 60;
}
if (!is3D()) {
minimumZ = "";
maximumZ = "";
}
var record = {
"number": tool.number,
"diameterOffset": tool.diameterOffset,
"lengthOffset": tool.lengthOffset,
"toolAngle": getToolAngle(tool),
"diameter": tool.diameter,
"cornerRadius": tool.cornerRadius,
"taperAngle": toDeg(tool.taperAngle),
"fluteLength": tool.fluteLength,
"shoulderLength": tool.shoulderLength,
"bodyLength": tool.bodyLength,
"numberOfFlutes": tool.numberOfFlutes,
"type": getToolTypeName(tool.type),
"maximumFeed": maximumFeed,
"maximumSpindleSpeed": maximumSpindleSpeed,
"cuttingDistance": cuttingDistance,
"rapidDistance": rapidDistance,
"cycleTime": formatTime(cycleTime),
"minimumZ": minimumZ,
"maximumZ": maximumZ,
"description": tool.description,
"comment": tool.comment,
"vendor": tool.vendor,
"productId": tool.productId,
"holderDescription": tool.holderDescription,
"holderComment": tool.holderComment,
"holderVendor": tool.holderVendor,
"holderProductId": tool.holderProductId
};
result.push(prepend("tool", record));
}
return result;
}
var programInfo = {};
var operationInfo = [];
var toolInfo = [];
var global = (function(){return this;}).call();
function getVariable(variables, id) {
// log("LOOKUP: " + id + "=" + variables[id]);
var value = variables[id];
if (value != undefined) {
var i = id.indexOf("(");
if ((i >= 0) && (id.indexOf(")", i + 1) > i)) { // assume function
try {
value = eval.call(global, id);
} catch(e) {
value = undefined;
}
}
}
if (value != undefined) {
return value;
}
// warning(subst(localize("The variable '%1' is unknown."), id));
if (false) {
variables[id] = "$" + id; // avoid future warnings
return "$" + id;
}
variables[id] = ""; // avoid future warnings
return "";
}
function replaceVariables(variables, xml) {
/*eslint-disable*/
var ss = new Namespace("urn:schemas-microsoft-com:office:spreadsheet");
var datas = xml..ss::Data;
for (var i = 0; i < datas.length(); ++i) {
var e = datas[i];
var t = e.valueOf();
if (/*(t.length() > 1) &&*/ (t.charAt(0) == "$")) { // variable
var value = getVariable(variables, t.substr(1));
switch (typeof(value)) {
case "boolean":
e.@ss::Type = "Boolean";
value = value ? 1 : 0;
break;
case "number":
e.@ss::Type = "Number"; // always using decimal .
break;
case "string":
default:
if ((value.indexOf("$") < 0) && (t.substr(t.length - 4) == "Time")) {
e.@ss::Type = "DateTime";
} else {
e.@ss::Type = "String";
}
}
datas[i] = value;
}
}
/*eslint-enable*/
}
function updateWorksheet(worksheet) {
default xml namespace = "urn:schemas-microsoft-com:office:spreadsheet";
var ss = new Namespace("urn:schemas-microsoft-com:office:spreadsheet");
worksheet.@ss::Name = localize(worksheet.@ss::Name); // title
// find operation rows to fill
var datas = worksheet..ss::Row.ss::Cell.ss::Data.(function::valueOf() == "$OPERATION_ROW");
for (var i = 0; i < datas.length(); ++i) {
var row = datas[i].parent().parent();
var table = row.parent();
delete row.ss::Cell.ss::Data.(function::valueOf() == "$OPERATION_ROW")[0];
for (var j = operationInfo.length - 1; j >= 0; --j) {
var filledRow = row.copy(); // uses a lot of memory
replaceVariables(operationInfo[j], filledRow);
table.insertChildAfter(row, filledRow);
}
var offset = getNumberOfSections() - 1;
var base = row.childIndex();
var rows = table.ss::Row;
for (var r = 0; r < rows.length(); ++r) {
var rr = rows[r];
var index = parseInt(rr.@ss::Index);
if ((index >= 0) && (rr.childIndex() > (base + offset))) {
rr.@ss::Index = index + offset;
}
}
delete table.children()[base];
table.@ss::ExpandedRowCount = parseInt(table.@ss::ExpandedRowCount) + offset;
}
// find tool rows to fill
var datas = worksheet..ss::Row.ss::Cell.ss::Data.(function::valueOf() == "$TOOL_ROW");
for (var i = 0; i < datas.length(); ++i) {
var row = datas[i].parent().parent();
var table = row.parent();
delete row.ss::Cell.ss::Data.(function::valueOf() == "$TOOL_ROW")[0];
for (var j = toolInfo.length - 1; j >= 0; --j) {
var filledRow = row.copy(); // uses a lot of memory
replaceVariables(toolInfo[j], filledRow);
table.insertChildAfter(row, filledRow);
}
var offset = getNumberOfSections() - 1;
var base = row.childIndex();
var rows = table.ss::Row;
for (var r = 0; r < rows.length(); ++r) {
var rr = rows[r];
var index = parseInt(rr.@ss::Index);
if ((index >= 0) && (rr.childIndex() > (base + offset))) {
rr.@ss::Index = index + offset;
}
}
delete table.children()[base];
table.@ss::ExpandedRowCount = parseInt(table.@ss::ExpandedRowCount) + offset;
}
replaceVariables(programInfo, worksheet);
var datas = worksheet..ss::Data.(@ss::Type == "String");
for (var i = 0; i < datas.length(); ++i) {
var e = datas[i];
var texts = e.text();
for (var j = 0; j < texts.length(); ++j) {
var t = texts[j];
texts[j] = localize(t); // only allowed for strings
}
}
}
var cachedParameters = {};
var globalParameters = true;
function onParameter(name, value) {
if (globalParameters) {
if (name.substr(name.length - 6) == "marker") {
globalParameters = false;
} else {
programInfo[name] = value;
}
}
cachedParameters[name] = value;
}
function onOpen() {
programInfo = getProgramInfo();
programInfo["program.jobDescription"] = hasGlobalParameter("job-description") ? getGlobalParameter("job-description") : "";
programInfo["program.partPath"] = hasGlobalParameter("document-path") ? getGlobalParameter("document-path") : "";
programInfo["program.partName"] = FileSystem.getFilename(programInfo["program.partPath"]);
programInfo["program.user"] = hasGlobalParameter("username") ? getGlobalParameter("username") : "";
var workpiece = getWorkpiece();
var delta = Vector.diff(workpiece.upper, workpiece.lower);
programInfo["program.stockLowerX"] = workpiece.lower.x;
programInfo["program.stockLowerY"] = workpiece.lower.y;
programInfo["program.stockLowerZ"] = workpiece.lower.z;
programInfo["program.stockUpperX"] = workpiece.upper.x;
programInfo["program.stockUpperY"] = workpiece.upper.y;
programInfo["program.stockUpperZ"] = workpiece.upper.z;
programInfo["program.stockDX"] = delta.x;
programInfo["program.stockDY"] = delta.y;
programInfo["program.stockDZ"] = delta.z;
var partLowerX = hasGlobalParameter("part-lower-x") ? getGlobalParameter("part-lower-x") : 0;
var partLowerY = hasGlobalParameter("part-lower-y") ? getGlobalParameter("part-lower-y") : 0;
var partLowerZ = hasGlobalParameter("part-lower-z") ? getGlobalParameter("part-lower-z") : 0;
var partUpperX = hasGlobalParameter("part-upper-x") ? getGlobalParameter("part-upper-x") : 0;
var partUpperY = hasGlobalParameter("part-upper-y") ? getGlobalParameter("part-upper-y") : 0;
var partUpperZ = hasGlobalParameter("part-upper-z") ? getGlobalParameter("part-upper-z") : 0;
programInfo["program.partLowerX"] = toPreciseUnit(partLowerX, MM);
programInfo["program.partLowerY"] = toPreciseUnit(partLowerY, MM);
programInfo["program.partLowerZ"] = toPreciseUnit(partLowerZ, MM);
programInfo["program.partUpperX"] = toPreciseUnit(partUpperX, MM);
programInfo["program.partUpperY"] = toPreciseUnit(partUpperY, MM);
programInfo["program.partUpperZ"] = toPreciseUnit(partUpperZ, MM);
programInfo["program.partDX"] = toPreciseUnit(partUpperX - partLowerX, MM);
programInfo["program.partDY"] = toPreciseUnit(partUpperY - partLowerY, MM);
programInfo["program.partDZ"] = toPreciseUnit(partUpperZ - partLowerZ, MM);
toolInfo = getToolInfo();
cachedParameters = {};
}
function onSection() {
skipRemainingSection();
}
function getStrategy() {
if (hasParameter("operation-strategy")) {
var strategies = {
drill: localize("Drilling"),
face: localize("Facing"),
path3d: localize("3D Path"),
pocket2d: localize("Pocket 2D"),
contour2d: localize("Contour 2D"),
adaptive2d: localize("Adaptive 2D"),
slot: localize("Slot"),
circular: localize("Circular"),
bore: localize("Bore"),
thread: localize("Thread"),
probe: localize("Probe"),
contour_new: localize("Contour"),
contour: localize("Contour"),
parallel_new: localize("Parallel"),
parallel: localize("Parallel"),
pocket_new: localize("Pocket"),
pocket: localize("Pocket"),
adaptive: localize("Adaptive"),
horizontal_new: localize("Horizontal"),
horizontal: localize("Horizontal"),
flow: localize("Flow"),
morph: localize("Morph"),
pencil_new: localize("Pencil"),
pencil: localize("Pencil"),
project: localize("Project"),
ramp: localize("Ramp"),
radial_new: localize("Radial"),
radial: localize("Radial"),
scallop_new: localize("Scallop"),
scallop: localize("Scallop"),
morphed_spiral: localize("Morphed Spiral"),
spiral_new: localize("Spiral"),
spiral: localize("Spiral"),
swarf5d: localize("Multi-Axis Swarf"),
multiAxisContour: localize("Multi-Axis Contour")
};
if (strategies[getParameter("operation-strategy")]) {
return strategies[getParameter("operation-strategy")];
}
}
return "";
}
/**
Returns the specified coolant as a string.
*/
function getCoolantName(coolant) {
switch (coolant) {
case COOLANT_OFF:
return localize("Off");
case COOLANT_FLOOD:
return localize("Flood");
case COOLANT_MIST:
return localize("Mist");
case COOLANT_THROUGH_TOOL:
return localize("Through tool");
case COOLANT_AIR:
return localize("Air");
case COOLANT_AIR_THROUGH_TOOL:
return localize("Air through tool");
case COOLANT_SUCTION:
return localize("Suction");
case COOLANT_FLOOD_MIST:
return localize("Flood and mist");
case COOLANT_FLOOD_THROUGH_TOOL:
return localize("Flood and through tool");
default:
return localize("Unknown");
}
}
function onSectionEnd() {
var operationParameters = {};
operationParameters["id"] = currentSection.getId() + 1;
operationParameters["description"] = hasParameter("operation-comment") ? getParameter("operation-comment") : "";
operationParameters["strategy"] = getStrategy();
operationParameters["workOffset"] = currentSection.workOffset;
var tolerance = cachedParameters["operation:tolerance"];
var stockToLeave = cachedParameters["operation:stockToLeave"];
var axialStockToLeave = cachedParameters["operation:verticalStockToLeave"];
var maximumStepdown = cachedParameters["operation:maximumStepdown"];
var maximumStepover = cachedParameters["operation:maximumStepover"] ? cachedParameters["operation:maximumStepover"] : cachedParameters["operation:stepover"];
operationParameters["tolerance"] = tolerance;
operationParameters["stockToLeave"] = stockToLeave;
operationParameters["axialStockToLeave"] = axialStockToLeave;
operationParameters["maximumStepdown"] = maximumStepdown;
operationParameters["maximumStepover"] = maximumStepover;
if (!isProbeOperation(currentSection)) {
var cycleTime = currentSection.getCycleTime();
if (is3D()) {
var zRange = currentSection.getGlobalZRange();
operationParameters["minimumZ"] = zRange.getMinimum();
operationParameters["maximumZ"] = zRange.getMaximum();
} else {
operationParameters["minimumZ"] = "";
operationParameters["maximumZ"] = "";
}
operationParameters["maximumFeed"] = currentSection.getMaximumFeedrate();
operationParameters["maximumSpindleSpeed"] = currentSection.getMaximumSpindleSpeed();
operationParameters["cuttingDistance"] = currentSection.getCuttingDistance();
operationParameters["rapidDistance"] = currentSection.getRapidDistance();
if (getProperty("rapidFeed") > 0) {
cycleTime += currentSection.getRapidDistance()/getProperty("rapidFeed") * 60;
}
operationParameters["cycleTime"] = formatTime(cycleTime);
}
var tool = currentSection.getTool();
operationParameters["tool.number"] = tool.number;
operationParameters["tool.diameterOffset"] = tool.diameterOffset;
operationParameters["tool.lengthOffset"] = tool.lengthOffset;
operationParameters["tool.diameter"] = tool.diameter;
operationParameters["tool.cornerRadius"] = tool.cornerRadius;
operationParameters["tool.taperAngle"] = toDeg(tool.taperAngle);
operationParameters["tool.fluteLength"] = tool.fluteLength;
operationParameters["tool.shoulderLength"] = tool.shoulderLength;
operationParameters["tool.bodyLength"] = tool.bodyLength;
operationParameters["tool.numberOfFlutes"] = tool.numberOfFlutes;
operationParameters["tool.type"] = getToolTypeName(tool.type);
operationParameters["tool.spindleSpeed"] = tool.spindleSpeed;
operationParameters["tool.coolant"] = getCoolantName(tool.coolant);
operationParameters["tool.description"] = tool.description;
operationParameters["tool.comment"] = tool.comment;
operationParameters["tool.vendor"] = tool.vendor;
operationParameters["tool.productId"] = tool.productId;
operationParameters["tool.holderDescription"] = tool.holderDescription;
operationParameters["tool.holderComment"] = tool.holderComment;
operationParameters["tool.holderVendor"] = tool.holderVendor;
operationParameters["tool.holderProductId"] = tool.holderProductId;
operationInfo.push(prepend("operation", operationParameters));
cachedParameters = {};
}
function formatTime(cycleTime) {
cycleTime = cycleTime + 0.5; // round up
var d = new Date(1899, 11, 31, 0, 0, cycleTime, 0);
return subst(
"%1-%2-%3T%4:%5:%6.000",
d.getFullYear(),
timeFormat.format(d.getMonth() + 1),
timeFormat.format(d.getDate()),
timeFormat.format(d.getHours()),
timeFormat.format(d.getMinutes()),
timeFormat.format(d.getSeconds())
);
}
function dumpIds() {
for (var k in programInfo) {
log(k + " = " + programInfo[k]);
}
if (toolInfo.length > 0) {
var variables = toolInfo[0];
for (var k in variables) {
log(k + " = " + variables[k]);
}
}
if (operationInfo.length > 0) {
var variables = operationInfo[0];
for (var k in variables) {
log(k + " = " + variables[k]);
}
}
}
function onClose() {
if (getProperty("listVariables")) {
dumpIds();
}
var xml = loadText("setup-sheet-excel-template.xls", "utf-8");
var xml = xml.replace(/<\?xml (.*?)\?>/, "");
var d = new XML(xml);
default xml namespace = "urn:schemas-microsoft-com:office:spreadsheet";
var ss = new Namespace("urn:schemas-microsoft-com:office:spreadsheet");
var worksheets = d.ss::Worksheet;
for (var w in worksheets) {
updateWorksheet(worksheets[w]);
}
writeln("<?xml version='1.0' encoding='utf-8'?>");
write(d.toXMLString());
}
function onTerminate() {
//openUrl(getOutputPath());
executeNoWait("excel", "\"" + getOutputPath() + "\"", false, "");
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,184 @@
/**
Copyright (C) 2012-2018 by Autodesk, Inc.
http://www.autodesk.com
All rights reserved
*/
body {
background-color: White;
font-family: Arial, Helvetica, sans-serif;
}
h1 {
font-size: 15pt;
text-align: center;
}
h2 {
font-size: 13pt;
}
h3 {
font-size: 11pt;
}
h3.section {
text-decoration: underline;
}
table {
border: none;
border-spacing: 0;
}
table.jobhead {
width: 18cm;
}
table.job, table.sheet {
width: 18cm;
border: thin solid Gray;
}
th {
background-color: #e0e0e0;
border-bottom: 1px solid Gray;
}
tr.space td {
border-bottom: 1px solid Gray;
height: 1px;
font-size: 1px;
}
table.info {
padding-top: 0.1cm;
}
table.info td {
padding-left: 0.1cm;
}
.job td {
padding: 0.1cm 0.1cm 0.1cm 0.1cm;
}
.model img {
width: 12cm;
border: 2px solid Black;
}
.preview img {
border: 2px solid Black;
}
tr {
border: 1 solid Black;
page-break-inside: avoid;
padding-top: 30px;
padding-bottom: 20px;
white-space: nowrap;
}
.even td {
background-color: White;
}
.odd td {
background-color: #f0f0f0;
}
.jobhead td {
font-size: 12pt;
vertical-align: top;
}
td {
font-size: 9pt;
vertical-align: top;
}
.toolimage {
vertical-align: middle;
}
td.image {
text-align: right;
}
.notes {
white-space: normal;
}
pre {
padding-left: 0.5cm;
font-size: 8pt;
}
p {
white-space: nowrap;
font-size: 12pt;
text-indent: 1cm;
display: block;
}
.jobhead td .description {
display: inline;
font-variant: small-caps;
}
td .description {
font-size: 8pt;
display: inline;
font-variant: small-caps;
}
.value {
display: inline;
font-family: Geneva, sans-serif;
color: #606060;
}
td .percentage {
display: inline;
font-size: 7pt;
}
.longtext {
white-space: normal;
}
img.logo {
height: 0.75cm;
vertical-align: middle;
margin-right: 1em;
}
.footer {
font-size: 9pt;
color: Silver;
text-align: center;
}
line {
stroke-width: 1px;
vector-effect:non-scaling-stroke;
}
path.holder {
stroke-width: 0.5px;
vector-effect: non-scaling-stroke;
}
path.cutter {
stroke-width: 1px;
vector-effect:non-scaling-stroke;
}
path.holderIE {
stroke-width: 0; // non-scaling not worker
}
path.cutterIE {
stroke-width: 0; // non-scaling not worker
}

Some files were not shown because too many files have changed in this diff Show More