Ok so heres the whole kitten caboodle, you can comment out the tool Z check.mac but Id like it to cycle through unwritten ncprograms stop once theyre all done. As of now it just continues to cycle like teh loops not closed. also my $XLENGTH & $YLENGTH functions are not working. I watch it run through the debugger and the values in each string are clearly being defined but the if ==, if >, and if < are not working correctly. Any help from this point would be great. I thought I had it all worked out but darned if one of my members proved me wrong.
//STRING projectloc = project_pathname(0)
//print = $projectloc
STRING PROJECTNAME = project_pathname(1)
STRING SQNO = SUBSTRING("$PROJECTNAME",0,5)
STRING PART = SUBSTRING("$PROJECTNAME",6,6)
STRING destination = 'c:\temp\'
STRING filename = 'c:\temp\PLACEHOLDER.TXT'
STRING extension = '.P3X'
STRING FILESTART = '<?xml version="1.0" encoding="shift-jis"?>'
STRING COMMENT1 = '<!-- NC PROGRAM INFORMATION -->'
STRING ncpinfo1 = '<NCPINFO>'
STRING ncpinfo2 = '</NCPINFO>'
STRING NCPACKAGEINFO1 = ' ' + '<NCPACKAGE_INFO>'
STRING CREATE1 = ' ' + ' ' + '<CREATE>'
STRING APP = ' ' + ' ' + ' ' + '<APP NAME="POST3D" VERSION="2.170"/>'
STRING CREATE2 = ' ' + ' ' + '</CREATE>'
STRING TOOLZ = ' ' + ' ' + '<TOOLZ VAL="'
STRING PROGRAMMER = $project.Programmer
STRING PROGRAMMERVAL = ' ' + ' ' + '<PROGRAMMER VAL="'
STRING CAMSOFTWARE = ' ' + ' ' + '<CAMSOFT VAL="Delcam"/>'
STRING PROCESSSTAMP = ' ' + ' ' + '<PROCESS_STAMP VAL="'
STRING NCPACKAGEINFO2 = ' ' + '</NCPACKAGE_INFO>'
STRING MOLDINFO = ' ' + '<MOLD_INFO>'
STRING SEQNOVAL = ' ' + ' ' + '<SEQ_NO VAL="'
STRING MOLDINFO2 = ' ' + '</MOLD_INFO>'
STRING WORKINFO = ' ' + '<WORK_INFO>'
STRING PARTNOVAL = ' ' + ' ' + '<PART_NO VAL="'
STRING PARTSTYPE = ' ' + ' ' + '<WORK_TYPE ID=" 0" NAME=""/>'
STRING MATERIALID = ' ' + ' ' + '<MATERIAL ID="'
STRING MATERIALID2 = '" NAME="'
STRING WORKINFO2 = ' ' + '</WORK_INFO>'
STRING FACEINFO = ' ' + '<FACE_INFO>'
STRING FACEID1 = ' ' + ' ' + '<FACE_ID VAL="'
STRING ORIGINVAL = ' ' + ' ' + '<ORIGIN VAL="'
STRING DIRECTIONVAL = ' ' + ' ' + '<DIRECTION VAL="'
STRING WORKSIZE = ' ' + ' ' + '<WORK_SIZE'
STRING XEQ = ' X="'
STRING YEQ = ' Y="'
STRING ZEQ = ' Z="'
STRING CLOSESIZE = '"'
STRING FACEINFO2 = ' ' + '</FACE_INFO>'
STRING MACHINEINFO = ' ' + '<MACHINE_INFO>'
STRING MACHINEID1 = ' ' + ' ' + '<MACHINE ID="'
STRING MACHINEID2 = '" NAME="'
STRING MACHINE2 = ' ' + ' ' + '<MACHINE2 ID="" NAME=""/>'
STRING MACHINEINFO2 = ' ' + '</MACHINE_INFO>'
STRING files1 = ' ' + '<FILES>'
STRING files2 = ' ' + '</FILES>'
STRING ncfilepath1 = ' ' + ' ' + '<NCFILE PATH="'
STRING ncfilepath2 = '">'
STRING ncfilepath3 = ' ' + ' ' + '</NCFILE>'
STRING ncfiletoolname1 = ' ' + ' ' + ' ' + '<TOOL NAME="'
STRING ncfiletoolname2 = '" DIR="'
STRING ncfiletoolname2a = '"/>'
STRING ncfiletoolname3 = ' ' + ' ' + ' ' + '<SORT VAL="0"/>'
STRING ncfiletoolname4 = ' ' + ' ' + ' ' + '<NCD_OFFSET VAL="0"/>'
STRING ncfiletoolname5 = ' ' + ' ' + ' ' + '<PATH_TYPE VAL="0"/>'
STRING testing = 'END NC PROGRAM'
STRING removethis = '{ncprogram}'
//CHECKS IF THERE IS A MATERIAL MODEL WITHIN THE PROJECT
IF NOT entity_exists('model','MATERIAL') {
MESSAGE ERROR " There is no Material model in the project"
MACRO ABORT ALL
}
//CHECKS IF NCPROGRAM IS ALREADY WRITTEN, IF SO SKIP AND CONTINUE TO THE NEXT NCPROGRAM
//FOREACH ncP IN Folder ('NCProgram') {
//STRING NCPSTAT = $ncP.status
//IF $NCPSTAT != "written" {
// RUN TOOL Z CHECK MACRO TO ENSURE ALL STARTPOINTS ARE THE SAME FOR EACH FACE
MACRO "G:\Program\03-member\Stephan\Delcam\MACROS\ToolZ Check.mac"
INT i = 0
REAL spZ = ""
STRING MACHINE = ""
STRING MATERIAL = ""
STRING MT = ""
STRING MC = ""
//SPECIFY MACHINE AND MATERIAL
STRING LIST Options= {"V33", "A51", "A71", "A51/A71"}
INT A = INPUT CHOICE $Options "Select the output machine"
IF $A==0 {
$MACHINE = 'V33'
$MC = 'MC33'
} ELSE {
IF $A==1 {
$MACHINE = 'A51'
$MC = 'MC51'
} ELSE {
IF $A==2 {
$MACHINE = 'A71'
$MC = 'MC51'
} ELSE {
IF $A==3 {
$MACHINE = 'A51/A71'
}
}
}
}
//BUILD FINAL MACHINE STRING INFO FOR P3D
STRING PROCESSSTAMPCOMPLETE = $PROCESSSTAMP + $MACHINE + $ncfiletoolname2a
STRING MACHINEIDCOMPLETE = $MACHINEID1 + $MC + $MACHINEID2 + $MACHINE + $ncfiletoolname2a
STRING LIST MATERIALS= {"ALUMINUM", "MOLDSTAR", "P20", "420SS", "440SS", "H13", "S7", "D2/DC53"}
INT D = INPUT CHOICE $MATERIALS "Select the material being cut"
IF $D==0 {
$MATERIAL = 'ALUM'
$MT = 'MT01'
} ELSE {
IF $D==1 {
$MATERIAL = 'MOLDSTAR'
$MT = 'MT02'
} ELSE {
IF $D==2 {
$MATERIAL = 'P20'
$MT = 'MT03'
} ELSE {
IF $D==3 {
$MATERIAL = '420SS'
$MT = 'MT04'
} ELSE {
IF $D==4 {
$MATERIAL = '440SS'
$MT = 'MT05'
} ELSE {
IF $D==5 {
$MATERIAL = 'H13'
$MT = 'MT06'
} ELSE {
IF $D==6 {
$MATERIAL = 'S7'
$MT = 'MT07'
} ELSE {
IF $D==7 {
$MATERIAL = 'D2/DC53'
$MT = 'MT08'
}
}
}
}
}
}
}
}
//BUILD FINAL MATERIAL STRING FOR P3D
STRING MATERIALIDCOMPLETE = $MATERIALID + $MT + $MATERIALID2 + $MATERIAL + $ncfiletoolname2a
// Cycle through the NC programs
FOREACH ncp IN folder('NCProgram') {
STRING $curncp = 'CURRENT NCPROGRAM IS: ' + ncp.name
print = ncp.name
// FIND TOOL Z FROM FIRST TOOLPATH OF THE NCPROGRAM
GRAPHICS LOCK
FOREACH ncP IN Folder ('NCProgram') {
INT c = 0
STRING ncName = $ncP.name
STRING LIST tpNames = extract(entity('ncprogram', ncName).nctoolpath, 'Name')
ACTIVATE TOOLPATH $tpNames[0]
$spZ = startpoint.position.Z
STRING TOOLZCOMPLETE = $TOOLZ + $spZ + $ncfiletoolname2a
// Collect workplane name to use for face value in P3D
STRING WORKPLANE = $entity('workplane','').name
STRING FACE = SUBSTRING("$WORKPLANE",0,1)
STRING FACEIDCOMPLETE = $FACEID1 + $FACE + $ncfiletoolname2a
// Complete Project name and number string
STRING SEQNOVALCOMPLETE = $SEQNOVAL + $SQNO + $ncfiletoolname2a
STRING PARTNOVALCOMPLETE = $PARTNOVAL + $PART + $ncfiletoolname2a
// FILE WRITE $curncp TO output
// Moved the filename generator here so seperate files will be made for each ncprogram.
// A file is open to be written here, and is closed once the macro reaches the last toolpath contained within
$filename = $destination + project.name +'_-_' + ncp.name + $extension
FILE OPEN $filename FOR WRITE AS output
// start writing to the file
FILE WRITE $FILESTART TO output
FILE WRITE $COMMENT1 TO output
FILE WRITE $ncpinfo1 TO output
FILE WRITE $NCPACKAGEINFO1 TO output
FILE WRITE $CREATE1 TO output
FILE WRITE $APP TO output
FILE WRITE $CREATE2 TO output
FILE WRITE $TOOLZCOMPLETE TO output
// PULL PROGRAMMER NAME FROM PROJECT AND MATCH P3D NAME
IF position (PROGRAMMER, 'Svoborni') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "Svoborni", "Stephan")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'jfischer') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "jfischer", "Jeff")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'Fkiser') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "Fkiser", "Kiser")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'jhorhutz') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "jhorhutz", "Jhorhutz")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'jzielins') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "jzielins", "Jared")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'cconner') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "cconner", "Chris")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'rwaller') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "rwaller", "Rodney")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'psowden') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "psowden", "Paul")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'vbundy') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "vbundy", "Vicki")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'DoBrown') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "DoBrown", "Donnie")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
} ELSE {
IF position (PROGRAMMER, 'khawthor') >= 0 {
STRING FINALPROGRAMMER = replace($PROGRAMMER, "khawthor", "Kent")
STRING PROGRAMMERNAME = '$PROGRAMMERVAL' + '$FINALPROGRAMMER' + '$ncfiletoolname2a'
FILE WRITE $PROGRAMMERNAME TO output
}
}
}
}
}
}
}
}
}
}
}
FILE WRITE $CAMSOFTWARE TO output
FILE WRITE $PROCESSSTAMPCOMPLETE TO output
FILE WRITE $NCPACKAGEINFO2 TO output
FILE WRITE $MOLDINFO TO output
FILE WRITE $SEQNOVALCOMPLETE TO output
FILE WRITE $MOLDINFO2 TO output
FILE WRITE $WORKINFO TO output
FILE WRITE $PARTNOVALCOMPLETE TO output
FILE WRITE $PARTSTYPE TO output
FILE WRITE $MATERIALIDCOMPLETE TO output
FILE WRITE $WORKINFO2 TO output
FILE WRITE $FACEINFO TO output
FILE WRITE $FACEIDCOMPLETE TO output
// COPY AND PASTE NUMBERS FROM FRAME TO FORCE BLOCK TO TOLERANCES SHOWN
DELETE BLOCK
DRAW BLOCK
EDIT MODEL ALL DESELECT ALL
EDIT PAR powermill.Options.Block.UseReferenceModel 1
EDIT MODEL "MATERIAL" SELECT SURFACE
EDIT BLOCK TOLERANCE "0.1"
EDIT BLOCKTYPE BOX
EDIT BLOCK COORDINATE WORKPLANE
EDIT BLOCK RESETLIMIT "0.0"
EDIT BLOCK LIMITTYPE MODEL
EDIT BLOCK RESET
//INT pause = 30
//DO {
//$pause = $pause-1
//} WHILE $pause > 0
OBJECT faceblock = Block
$Block = faceblock
REAL roundX = round($Block.Limits.XMin,3)
REAL XMIN = abs($roundX)
REAL roundX2 = round($Block.Limits.XMax,3)
REAL XMAX = abs($roundX2)
REAL roundY = round($Block.Limits.YMin,3)
REAL YMIN = abs($roundY)
REAL roundY2 = round($Block.Limits.YMax,3)
REAL YMAX = abs($roundY2)
REAL roundZ = round($Block.Limits.ZMin,3)
REAL ZMIN = abs($roundZ)
REAL roundZ2 = round($Block.Limits.ZMax,3)
REAL ZMAX = abs($roundZ2)
FORM BLOCK
STRING WIDGETXLENGTH = $widget("RoughBlock.LimitFrame.LenX").Value
STRING XLENGTH = SUBSTRING("$WIDGETXLENGTH",0,7)
STRING WIDGETYLENGTH = $widget("RoughBlock.LimitFrame.LenY").Value
STRING YLENGTH = SUBSTRING("$WIDGETYLENGTH",0,7)
STRING WIDGETZLENGTH = $widget("RoughBlock.LimitFrame.LenZ").Value
STRING ZLENGTH = SUBSTRING("$WIDGETZLENGTH",0,7)
//DETERMINE ORIGIN LOCATION BASED ON BLOCK LIMITS IN RELATION TO THE ORIGIN OF THE FACE
IF ($XMAX == $XMIN) AND ($YMAX == $YMIN) {
STRING CORNER = 'CT'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX == $XMIN) AND ($YMAX > $YMIN) {
STRING CORNER = 'B'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX == $XMIN) AND ($YMAX < $YMIN) {
STRING CORNER = 'A'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX > $XMIN) AND ($YMAX > $YMIN) {
STRING CORNER = 'BL'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX > $XMIN) AND ($YMAX == $YMIN) {
STRING CORNER = 'L'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX > $XMIN) AND ($YMAX < $YMIN) {
STRING CORNER = 'AL'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX < $XMIN) AND ($YMAX > $YMIN) {
STRING CORNER = 'BR'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX < $XMIN) AND ($YMAX == $YMIN) {
STRING CORNER = 'R'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
} ELSE {
IF ($XMAX < $XMIN) AND ($YMAX < $YMIN) {
STRING CORNER = 'AR'
STRING ORIGINVALCOMPLETE = $ORIGINVAL + $CORNER + $ncfiletoolname2a
FILE WRITE $ORIGINVALCOMPLETE TO output
}
}
}
}
}
}
}
}
}
// FIND THE DIRECTION BASED OFF THE BLOCK IN RELATIONSHIP TO THE WORKPLANE
IF ($XLENGTH == $YLENGTH) {
STRING DIRECTION = 'N'
STRING DIRECTIONVALCOMPLETE = $DIRECTIONVAL + $DIRECTION + $ncfiletoolname2a
FILE WRITE $DIRECTIONVALCOMPLETE TO output
} ELSE {
IF ($XLENGTH < $YLENGTH) {
STRING DIRECTION = 'T'
STRING DIRECTIONVALCOMPLETE = $DIRECTIONVAL + $DIRECTION + $ncfiletoolname2a
FILE WRITE $DIRECTIONVALCOMPLETE TO output
} ELSE {
IF ($XLENGTH > $YLENGTH) {
STRING DIRECTION = 'Y'
STRING DIRECTIONVALCOMPLETE = $DIRECTIONVAL + $DIRECTION + $ncfiletoolname2a
FILE WRITE $DIRECTIONVALCOMPLETE TO output
}
}
}
BLOCK CANCEL
BLOCK CANCELLED
//FETCH X,Y,Z DIMENSIONS OF THE MATERIAL AND POPULATE P3D FORM
STRING WORKSIZEFINAL = $WORKSIZE + $XEQ + $XLENGTH + $CLOSESIZE + $YEQ + $YLENGTH + $CLOSESIZE + $ZEQ + $ZLENGTH + $ncfiletoolname2a
FILE WRITE $WORKSIZEFINAL TO output
FILE WRITE $FACEINFO2 TO output
FILE WRITE $MACHINEINFO TO output
FILE WRITE $MACHINEIDCOMPLETE TO output
FILE WRITE $MACHINE2 TO output
FILE WRITE $MACHINEINFO2 TO output
FILE WRITE $files1 TO output
// loop over the components in the nc prog
INT $count = 0
FOREACH tp IN components(ncp) {
// print = tp.name
// STRING $curname = 'CURRENT TOOLPATH IS: ' + tp.name
INT wholediam = tp.Tool.diameter
STRING $curtool = ' '
// build the string that is the eventual resultant file string where the nc file will end up.
// Adds the count number starting at 0. Each toolpath contained under a single NC program increments this value
// The count resets upon a new NC Program
STRING $curoutfile = $ncfilepath1 + ncp.filename + $count + '.tap' + $ncfilepath2
// Switch all forward slashes in the output file string to backslashes
$curoutfile = replace($curoutfile, "/", "\")
// replace the verbatim {ncprogram} with the NC PROGRAM name
$curoutfile = replace($curoutfile, removethis, ncp.name)
// Collect the tool name and prep the string for output
// Need to check to see if the number is an integer or a fraction. Fractions are output verbatim, integers have no trailing 0
IF (tp.Tool.diameter - $wholediam > 0) {
$curtool = $ncfiletoolname1 + tp.Tool.Identifier + $ncfiletoolname2 + tp.Tool.diameter + $ncfiletoolname2a
} ELSE {
$curtool = $ncfiletoolname1 + tp.Tool.Identifier + $ncfiletoolname2 + $wholediam + $ncfiletoolname2a
}
// write the blocks that will output this lone NC program and toolpath
FILE WRITE $curoutfile TO output
FILE WRITE $curtool TO output
FILE WRITE $ncfiletoolname3 TO output
FILE WRITE $ncfiletoolname4 TO output
FILE WRITE $ncfiletoolname5 TO output
FILE WRITE $ncfilepath3 TO output
$count = $count + 1
}
FILE WRITE $files2 TO output
FILE WRITE $ncpinfo2 TO output
// FILE WRITE $testing TO output and close
print = $filename
FILE CLOSE output
}
}
//}
//}