Custom Macro for DNC software.

Custom Macro for DNC software.

Eskondedo
Advocate Advocate
2,356 Views
15 Replies
Message 1 of 16

Custom Macro for DNC software.

Eskondedo
Advocate
Advocate

Hello all,

   I am looking for somone that can help me finish a custom macro that was developed for my comany prior to the Autodesk merge.  We have a proprietary DNC system and to help streamline the process from posted code to DNC files we devised a macro that generates the "lower half" of the form pertaining to tooling.  Which tools to run on what NCPrograms in particular.  What I am trying to do now is complete this macro so the entire form is populated solely by information out of  Powermill.  I understand that this macro will require a BOATLOAD of string information and probably a BOATLOAD of IF/THEN functions and lists within it but maybe I can slowly chip away at it with all of your help.  I have attached three files showing the macro we are currently using, a file that is created with the macro (unfinished), and a completed file which is created after we run it through our DNC prep software.  I have also attached a photo showing the areas that I "think" these fields can be populated from.  The method of gathering these variables is where I stuggle.  I know what I am looking for but getting there is half the battle.Where to.PNG

0 Likes
2,357 Views
15 Replies
Replies (15)
Message 2 of 16

TK.421
Advisor
Advisor

have you gotten anywhere on this?

 


the numbers never lie
0 Likes
Message 3 of 16

Eskondedo
Advocate
Advocate
I have not.
0 Likes
Message 4 of 16

Eskondedo
Advocate
Advocate

So I am starting to work on the final peices of this macro now and am running into what is im sure a newjack mistake.  I am trying to create a dropdown of selectable machines, and eventually materials, and creating strings from the choices made.  The problem is the string doesn't stay defined as the macro progresses beyond the point of defintion.  I need to be able to recall the selected choice later in the macro so the string is written at the correct time.  How can I keep the string from disappearing?  The code in question is defined below:

 

 

STRING LIST Options= {"V33", "A51", "A71", "A51/A71"}
INT c = INPUT CHOICE $Options "Select the output machine"
IF $C==0 {
 STRING MACHINE = 'V33'
} ELSEIF $C==1 {
 STRING MACHINE = 'A51'
} ELSEIF $C==2 {
 STRING MACHINE = 'A71'
} ELSEIF $C==3 {
 STRING MACHINE = 'A51/A71'
}

 

What I want is for STRING MACHINE to be used laster in the program to be built into a larger string but as soon as the ELSEIF is triggered it disappears when debugging the much larger macro. Any help is appreciated.

0 Likes
Message 5 of 16

TK.421
Advisor
Advisor

c is lowercase when you define your variable and uppercase when you write your if/else statements. does it work if you make them all the same case?


the numbers never lie
0 Likes
Message 6 of 16

TK.421
Advisor
Advisor

i think also you need to refer to the variable as $Options[$c]   $Options is your list, $c is simply a number. $c tells the macro what place to look at in $Options


the numbers never lie
0 Likes
Message 7 of 16

Eskondedo
Advocate
Advocate

Had to do some diggin but figured out where I went wrong.  I needed to specify the string prior to the list then use the $ in my IF ELSE statement.  I ended up changing the structure though because it was skipping all over the place with the old format.  New format shows as follows.

STRING MACHINE = ""
STRING MATERIAL = ""
STRING MT = ""

STRING LIST Options= {"V33", "A51", "A71", "A51/A71"}
INT C = INPUT CHOICE $Options "Select the output machine"
IF $C==0 {
 $MACHINE = 'V33'
} ELSE {
 IF $C==1 {
 $MACHINE = 'A51'
} ELSE {
 IF $C==2 {
 $MACHINE = 'A71'
} ELSE {
 IF $C==3 {
 $MACHINE = 'A51/A71'
}
}
}
}

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'
}
}
}
}
}
}
}
}

 

Now on to the next hurdle, how do I get the macro to continue past these statements?  When I run through debug once both conditions have been met the macro resets and theres 300 more lines to run through...Smiley Mad

 

Close one door, only to open another... thanks again.

0 Likes
Message 8 of 16

TK.421
Advisor
Advisor

I'll just clarify this again: I've not read through your entire macro, and I don't fully understand your process or big picture... that said, what if you just use a series of IF statements instead of all the if/else:

IF $d == 0 {

  ewrwer

}

 

IF $d ==1 {

  34234234

}

 

another way to try it would be to write it as:
IF $D == 0 {

  sadsadf

} ELSEIF $D == 1{

  sdfsdfdf

}

 

in my thinking, once those commands are met, it will skip all the other statements. do the same with your machine assignment code.


the numbers never lie
0 Likes
Message 9 of 16

TK.421
Advisor
Advisor

i think you can also shorten your code by trying this (i think it'll work better)

STRING LIST Options= {"V33", "A51", "A71", "A51/A71"}
INT C = INPUT CHOICE $Options "Select the output machine"

STRING MACHINE = ${$Options[$C]}   or $Options[$C]     i can never remember the syntax for that

 

you may not even need that last line. if you want the machine name pasted somewhere, just try using ${$Options[$C]} where you have $MACHINE

 

once you have that working, follow suit with your material and what else not


the numbers never lie
0 Likes
Message 10 of 16

Eskondedo
Advocate
Advocate

@Eskondedo wrote:

Had to do some diggin but figured out where I went wrong.  I needed to specify the string prior to the list then use the $ in my IF ELSE statement.  I ended up changing the structure though because it was skipping all over the place with the old format.  New format shows as follows.

STRING MACHINE = ""
STRING MATERIAL = ""
STRING MT = ""

STRING LIST Options= {"V33", "A51", "A71", "A51/A71"}
INT C = INPUT CHOICE $Options "Select the output machine"
IF $C==0 {
 $MACHINE = 'V33'
} ELSE {
 IF $C==1 {
 $MACHINE = 'A51'
} ELSE {
 IF $C==2 {
 $MACHINE = 'A71'
} ELSE {
 IF $C==3 {
 $MACHINE = 'A51/A71'
}
}
}
}

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

 

And theres my error i was missing a ' after 'MT02....

 


 

0 Likes
Message 11 of 16

TK.421
Advisor
Advisor

it's this:

 

STRING MACHINE = $Options[$C]

 

just use $Options[$C] anywhere you use $MACHINE instead of defining a new variable. that'll shorten up your code A TON and get rid of all those if statements


the numbers never lie
0 Likes
Message 12 of 16

TK.421
Advisor
Advisor

now I'm thinking about this more than my work!

make a list also for $MT  (i'm assuming MT01 is for alum, MT02 is moldstar and so on...?)

 

STRING LIST Materials= {"ALUMINUM", "MOLDSTAR", "P20", "420SS", "440SS", "H13", "S7", "D2/DC53"}

STRING LIST MT = {"MT01","MT02","MT03","MT04","MT05","MT06","MT07","MT08"}

 

then use $MT[$D]   where you use the $MT variable. that'll cut your code down even more.

 

I just saw your profile picture. that is my favorite Farley skit...

 

 


the numbers never lie
0 Likes
Message 13 of 16

Eskondedo
Advocate
Advocate

This has turned into quite the monster but as of now all is working accordingly.  Thanks TK.421 for the help with streamlining this, its made things so much better for my members.  Less user interface and more automation = less chance for error.

 

One additional thing i would like it to do is only run on unwritten NC Programs, as of now it runs on all programs whether they've been written or not, I'd really like to prevent it from running on finalized and written NC programs.  I think the way id like it to work is:

 

//CHECKS IF NCPROGRAM IS ALREADY WRITTEN, IF SO SKIP AND CONTINUE TO THE NEXT NCPROGRAM

FOREACH ncP IN Folder ('NCProgram') {
 IF $ncp.status = not_written {

run whole macro...

} ELSE {

and this is where I get stuck, how do I tell it to skip the written and continue on?  I can post the entire macro if it makes things easier lord knows its a beast.  Thanks again for everything.

0 Likes
Message 14 of 16

Eskondedo
Advocate
Advocate

FOREACH ncP IN Folder ('NCProgram') {
 
 STRING NCPSTAT = $ncP.status
 IF $NCPSTAT != "written" {

 

Well here it is and is working.

0 Likes
Message 15 of 16

TK.421
Advisor
Advisor

Awesome! Glad you got it working.  the code you wrote should work:

FOREACH ncP IN Folder ('NCProgram') {
 IF $ncp.status = not_written {

run whole macro...

} ELSE {

with a couple minor tweaks:

FOREACH ncP IN Folder ('NCProgram') {
 IF $ncP.status == 'not_written' {

run whole macro...

} ELSE {

happy programming


the numbers never lie
0 Likes
Message 16 of 16

Eskondedo
Advocate
Advocate

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
	}
	}
	
	//}
	
	//}
	
	
	
	

 

 

0 Likes