Você está na página 1de 390

mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/What...

What is a Macro?

Macros are a way to automatically perform a sequence of functions. Typcially they are special commands which
the user makes a recording of, while interactively performing the function he wishes to replicate. However, a
CAM350 macro is much more than just a record and play back proposition. A CAM350 macro can also interact
with the user, make decisions, and get information from the database.

Some users may be familiar with the term Script. Scripts are common in UNIX products and are basically the
same thing as macros. Of course not all UNIX products use scripts, and a script may only provide for record and
play back functions, rather than allowing for full user interaction, including database queries.

A Simple Process

Creating, editing, and using a macro is fairly easy with the Macro Menu commands, but more advanced use does
require a knowledge of BASIC programming. A macro typically begins by turning on macro record and then
recording a series of steps. When played back, the macro merely plays back the recorded steps. Next, you may
want to modify certain parameters for subsequent runs of the macro, so you can edit the macro using a text
editor and prompt the user to enter parameters. This makes the same macro useful across other databases.
Then you may realize that it would be nice to have the macro itself detect certain problems for you (such as not
allowing a drill sort unless drill data exists), and perhaps repeat a series of commands automatically. Once you
have a useful set of macros you may want to make them easier to execute, so you assign them to the menu or
a function key.

Examples of How Macros Can Be Useful

One of the sample macros provided with your CAM350 software, Automatic Panelizer, panelizes any database
onto a specified panel size. It then queries the database to find the smallest apertures used for draws and
flashes. It uses the smallest shapes to build a test coupon. The test coupon is placed ½" below the resultant
panel images centered on the X axis. It also queries the database to get all the drill tools. It then builds a drill
coupon and it places it ½" below the images and right justified on the X axis. This is an example of how a macro
can be used to build a "Panelization Station" that requires very little user input. Using a macro like this results in
more productivity with fewer errors and yields consistent results.

Macros are not required to use the application, but they can become quite handy for optimizing a production
environment, accelerating multiple processes and making sure that all steps in a process are followed in a
consistent manner.

Macro Syntax

BASIC is a common programming language. Knowledge of BASIC is not required to record and play back
macros. BASIC is only needed for the more advanced user who may want to add capabilities to their macros. If
you want the macro to perform other functions, such as interact with the user, test values, or repeat a command
sequence (looping), you have to use a little BASIC.

Overview of BASIC
BASIC commands
Product Macro Commands

Pag. 1 di 1
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Types of BASIC Commands

BASIC commands fall under some simple categories, depending on the functions they perform. Some commands
deal specifically with string processing, while others can only perform file input and output procedures. Below is
a categorized list of all BASIC commands used in CAM350: for a more detailed description of each command,
click on its link to view the full description.

Note: Some of these commands fall under two or more categories.

To See Information on each command category, click below:


PROCESS FLOW COMMANDS
CONTROL FLOW FUNCTIONS
STRING FUNCTIONS
MATH FUNCTIONS & OPERATORS
FILE FUNCTIONS
MESSAGE & DIALOG FUNCTIONS
DEBUGGING COMMANDS
MISC FUNCTIONS

Process Flow Commands

These are commands which control the structure of a BASIC program, including its termination, etc.

DELAY used to pause a script while running, for the specified


amount of milliseconds
END terminates the macro which is currently running
EXIT MACRO similar to END, but leaves the application in whatever
command it was currently executing (i.e. Edit > Delete).
GOSUB calls a subroutine in the macro
GOTO continues running the macro from the line specified in
the command
!INCLUDE allows the macro to insert another macro as if it were a
part of the original macro
MACRO_LINK the macro make activate another macro using this
command. Original macro ends.
MACRO_PLAY the macro may activate another macro, but unlike
MACRO_LINK, the original macro continues running after
the called macro ends.
RETURN returns control from the subroutine being called by a
GOSUB statement
SUSPEND/ temporarily suspends the macro currently running. User
SUSPEND may perform normal system commands and then resume
USING macro.

Control Flow Functions

Commands which organize a macro's execution sequence. These commands determine which aspects of a macro
will run, based on conditional values or numeric counters.

DO..LOOP repeats statements between the do..loop commands,


until either a condition is met (loop until) or while a
condition is true (do while)

Pag. 1 di 4
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

FOR..NEXT repeats statements between the for..next commands a


specified number of times, using a counter variable
IF..THEN..ELSE executes commands or modifies statements if a given
condition has been met (can be nested to perform
multiple conditional checks)
SELECT CASE executes commands or modifies statements based on
the value of a specified variable

String Functions

These are commands which manipulate string variables, by returning substrings within the main string,
modifying strings, changing strings to upper/lowercase, etc.

ASC returns the ASCII code number for any given character
CHR$ returns the string equivalent of an ASCII code number
FMTUSING$ can be used to assign a string to a variable that is
formatted as if a PRINT USING statement was used
INSTR determines if a given string exists within another string
LCASE$ returns a copy of a string with all characters converted to
lower case
LEFT$ returns a given number of characters from the left side of
a string
LEN tells how many characters are in a string
LTRIM$ returns a copy of a string which has had the leading
blank spaces stripped away
MID$ has two uses:
1) as a function, returns a specified number of characters
from any location in a string
2) as a statement, replaces part of a string with another
string
RIGHT$ returns a given number of characters from the right side
of a string
RTRIM$ returns a copy of a string which has had the trailing blank
spaces stripped away
STR$ converts a numeric value to a string
UCASE$ returns a copy of a string with all characters converted to
upper case
VAL converts a numeric string to a number value

Math Functions and Operators

Commands which allow you to perform operations on integer and real numbers.

ABS returns the absolute value of a number


ATN returns the arctangent of a number
COS returns the cosine of an angle (in radians)
EXP calculates the exponential function of a number
HEX$ returns a string representing the hexadecimal value of a
decimal number
LOG returns the natural logarithm of a number
MOD divides one number by another and returns the resulting
value

Pag. 2 di 4
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

SGN gives the sign of a number


SIN returns the sine of an angle, given the radians value of
the angle
SQR returns the square root of a number
TAN returns the tangent of an angle, given the radians value of
the angle

File Functions

Commands to allow a macro to read and write data from an ASCII text file, manipulate files/directories on the
host system, and launch external programs.

CLOSE closes an external file which was being read from or


written to
EOF used to determine if the end of a file has been reached
FILEEXISTS used to determine if a file exists in a given directory
HTMLHELP used to display an HTML help topic, from a compressed
HTML Help file (*.chm format), in the Help System. (Note:
recommended for advanced macro programmers).
INPUT# reads fields from a data file and assigns them to variables
KILL deletes a file
LCLOSE closes the printer (prints any pending data first)
LINE assigns an entire line of a data file to a string variable,
INPUT# ignoring delimiters
LPRINT/ prints specified text and/or variables to a printer; LPRINT
LPRINT USING specifies the formatting of the text
USING
MKDIR creates a directory
NAME changes the name of a file or directory
OPEN opens a data file for input/output
PRINT#/ writes data (variables, strings, etc). to a data file. PRINT#
PRINT# USING specifies the format of the information being
USING output.
RESET closes all files currently open by the macro for input or
output
RMDIR deletes an existing directory
WINCALL launches an external program, and waits for it to close
before resuming macro. (Note: recommended for
advanced macro programmers).
WINEXEC same as WINCALL, but doesn't wait for application to
close before resuming macro. (Note: recommended for
advanced macro programmers).
WRITE# write data to a data file, but inserts commas between
fields and quotation marks around strings

Message & Dialog Commands

These commands allow you to place message boxes on screen for warnings or to receive input from the
operator.

CLOSE_MSG used to close a message box displayed on screen using


the PRINT_MSG or PRINT_MSG USING commands

Pag. 3 di 4
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

DELAY used to pause a script while running, for the specified


amount of milliseconds. Can be used to display a
PRINT_MSG message for a specific amount of time.
INPUT displays a window (with a specified message) which
retrieves information input by the user
LINE INPUT similar to INPUT, but allowing the user to enter up to
255 characters of text as a single string
MESSAGE_BOX displays a user-configurable message box, similar to
OK_CANCEL, but with more options (Note:
recommended for intermediate and up users)
OK_CANCEL displays a message box requiring a YES or NO response
from the user
PRINT opens a window which displays a string message to the
user, and also requires an OK button to close dialog
PRINT similar to PRINT command, but formatted in a number
USING of specified ways
PRINT_MSG/ displays a message on screen, like PRINT & PRINT
PRINT_MSG USING, but doesn't pause macro, as they do. Instead,
USING message remains on screen until CLOSE_MSG is used in
macro.
SUSPEND/ temporarily suspends the macro currently running. User
SUSPEND may perform normal system commands and then
USING resume macro.

Debugging Commands

These commands are intended to help in the debugging of macro programs themselves. As such they are not
useful in programming macros themselves, but are extremely useful in determining why a macro isn't
functioning as expected. The commands are executed only while running a macro through the Macro
Debugger.

BREAK execution pauses when this command is encountered in a


macro, resuming when the user hits RUN in the Debugger
BREAK AT like BREAK, pauses execution, but may specify the line #
LINE in the program to stop at
BREAK AT again, same as the above two, but specifies a program
LABEL label to pause at
SUSPEND/ temporarily suspends the macro currently running. User
SUSPEND may perform normal CAM350 commands and then resume
USING macro. Useful to pause a macro to determine the current
state of the application.
WATCH specifies a variable to track in the Debugger's WATCH
window

Miscellaneous Commands

These are commands which are not categorized in any of the sections above.

DEF can be used to set the data type for a series of variables
DIM used to specify the variables in an array
SWAP can be used to exchange the values of two variables

Pag. 4 di 4
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
BASIC Commands

Most of the following commands operate as standard BASIC commands. However, some have been added,
modified, or expanded in order to suit the needs of the software. They use a BASIC Keyword, along with one or
more of the following expressions:

Numeric/Mathematical - An expression which evaluates to a number

Boolean - Expressions which to evaluate a condition as either true or false. (See the IF/THEN/ELSE
Statement for more information.)

Strings - An expression which evaluates text.

Anything placed in brackets [ ] is optional.

Macro Commands
Database Queries
Forms

ABS Function

Returns the absolute value of a numeric expression.

Example:

n = -6
y = ABS(n)
y = 6

ASC Function

Returns a numeric value that is the ASCII code for the first character in a string expression.

Example:

n$ = "April"
y = ASC(n$)
y = 65

ATN Function

Returns the arctangent of a numeric expression (the angle whose tangent is equal to the numeric expression).

Example:

n% = 30
PRINT ATN (n%)

Output: 1.537475

Pag. 1 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

BREAK Command

Pauses a macro at the point the command is present in the program. To be used only in conjunction with the
Macro Debugger to determine problems in the execution of a macro script.

Syntax:

BREAK

Example:

X% = Y%
BREAK 'pause after variable definition

CHR$ Function

Returns a one-character string of the ASCII code used.

Example:

PRINT CHR$(65)

Output is "A"

CLOSE Statement

Concludes I/O to a file or device.

Example:

CLOSE 'close all open files


CLOSE #1 'close file #1

CLOSE_MSG Statement

Removes a message box.

Example:

FOR n = 1 to 10
PRINT_MSG "Number is",n
DELAY 500
CLOSE_MSG

COS Function

Pag. 2 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Returns the cosine of an angle given in radians.

Example:

n% = 30
PRINT COS (n%)

Output: 0.154251

DEFtype Statements

Sets the default data type for variables. DEFINT sets the data type as an Integer (%), DEFREAL sets it as a Real
number (#), and DEFSTRING sets it as a String ($).

Syntax:

DEFINT <letter range[,letter range]>


DEFREAL <letter range[,letter range]>
DEFSTRING <letter range[,letter range]>

Example:

DEFINT a-b,e
a = 34
b = 100
eagle = 10
PRINT eagle, a + b

Output: 10 134

DEFREAL q
quest = 3.45
quarry = 78.31
PRINT quest + quarry

Output: 81.76

DEFSTRING r-v
roger = "wilco, "
r = "and "
s = "out"
type = "over "
voice = "Roger, "
PRINT voice + roger + type + r + s

Output: Roger, wilco, over and out

DELAY Statement

The delay is used to slow down the playback of a macro. For example, you may want to display a message for a
set period of time. This function is independent of computer speed.

Syntax:

DELAY <n>

Pag. 3 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
n is the delay in milliseconds (1/1000 of a second).

Example:

FOR n = 1 to 10
PRINT_MSG "Number is",n
DELAY 500 'half second delay)
CLOSE_MSG

DIM Statement

Allocates space for an n dimensional array. The maximum number of dimensions is currently 20. The type of the
array is determined by the type of variable used.

Example:

DIM C%(10)

Dimensions an array of 11 integers (0-10) named C.

Examples of DIM Statements using multidimensional arrays, as well as arrays from one index to another:

DIM a%(10)
DIM b#(-10 to 0)
DIM c$(5)
DIM d%(10,10)

DO/LOOP Statements

Repeats a block of statements while a condition is true, or until a condition becomes true.

Example:

DO
INPUT "Enter a number less than 10",i
LOOP UNTIL i >= 10
PRINT "End of do test"
END

END Statement

Ends a BASIC program, procedure, or block.

Example:

DO
INPUT "Enter a number less than 10",i
LOOP UNTIL i >= 10
PRINT "End of do test"
END

EOF Function
Pag. 4 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Tests for the end-of-file condition (returns 1 if end of file is reached).

Syntax:

EOF (File#)

Example:

OPEN "Test.dat" FOR OUTPUT as #1


FOR i = 1 to 10
WRITE #1, i, 2 * i, 5 * i
NEXT
CLOSE #1
OPEN "Test.dat" FOR INPUT as #1
DO
LINE INPUT #1, a$
PRINT a$
LOOP UNTIL EOF (1) = 1

EXIT MACRO Statement

Ends the macro while leaving the command processor in its current state (even in the middle of a command).

Syntax:

EXIT MACRO

Example:

edit_aperture@ 10,1,10.0000,10.0000,0,""
update_dcodebar@
add_line@
axy@ 0.0000,0.0000
axy@ 125.0000,-125.0000
axy@ 250.0000,0.0000
view_redraw@
EXIT MACRO

EXP Function

Calculates the exponential function.

Example:

x = 10
PRINT EXP (x)
Output: 22026.465795

FILE EXISTS Statement

Determines if a file exists in a given directory. Returns a 1 if file exists; 0 if not.

Syntax:

FILEEXISTS(File$)
Pag. 5 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
File$ is the full filepath of the file being checked.

Example:

if FileExists("d:\temp\test.doc") = 1 then
OK_Cancel "There is already a file of that name in the directory. Overwrite file?", OK
end if

FMTUSING$ Statement

Returns a string which is formatted as if PRINT USING was used.

Syntax:

FMTUSING$(formatstring$,expressionlist)

formatstring$ is a character string which contains formatting characters. The syntax of this string is the
same as for PRINT USING.

expressionlist is one or more expressions separated by commas.

Characters that format a numeric expression

# Digit position

. Decimal point position

, Placed left of the decimal point, prints a comma every third digit

+ Position of number sign

- Placed after digit, prints trailing sign for negative numbers

$$ Prints leading $.

** Fills leading spaces with *

**$ Combines ** and $$

Characters used to format a string expression

& Prints entire string

! Prints only the first character of the string

\ \ Prints first n characters, where n is the number of blanks between slashes + 2

Characters used to print literal characters

_ Prints the following formatting character as a literal

Any character not in this table is printed as a literal.

Example:

s$ = FMTUSING$(" ###.##",x,y,z)

Pag. 6 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

FOR/NEXT Statement

Repeats the statements enclosed in the loop a definite number of times, counting from a starting value to an
ending value by increasing or decreasing the loop counter. As long as the loop counter has not reached the
ending value, the loop continues to execute. Note that when playing a macro that has For/Next statements, the
system checks for "suspect logic." Specifically, if there is more than one Next for a For statement, an error is
reported.

In a FOR...NEXT loop, the counter variable initially has the value of the expression start. After each repetition of
the loop, the value of counter is adjusted. If you leave off the optional STEP keyword, the default value for this
adjustment is one (one is added to counter each time the loop executes).

If you use STEP, then counter is adjusted by the stepsize amount. The stepsize argument can be any numeric
value; if it is negative, the loop counts down from start to end. After the counter is increased or decreased, its
value is compared with end. At this point, if either of the following is true, the loop is completed:

The loop is counting up (stepsize is positive) and counter is greater then end.

The loop is counting down (stepsize is negative) and counter is less then end.

Syntax:

FOR <counter> = <start value> TO <end value> [STEP stepsize]


[statementblock-1]
[EXIT FOR]
[statementblock-2]
NEXT

Example:

FOR a# = 1 to 10 step .5
PRINT_MSG "a# = ",a#
DELAY 10
NEXT
PRINT "a# = ",a#
END

GETOPENFILENAME Statement

Functions similarly to the Windows "Open" file dialog box: obtains a filename from the user by displaying a
Windows-style drop down list (see the Forms topic). The returned filename can be used for file input/output
purposes.

Syntax:

GetOpenFilename filename$, filter$, filter_desc$, FLAG

filename$ is the variable which will return the retrieved filename. Returns the full filepath of the file.

filter$ is a file filter to limit which file types are displayed (such as *.txt). More than one file type can be
indicated by separating them with semi-colons ( "*.gbr;*.lgr"). If omitted, the default will be *.*.

filter_desc$ describes filter$ (e.g. "Gerber files").

FLAG is any one of the following:

Pag. 7 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
NoFileMustExist Does not verify if the file exists or not.

NoPathMustExist Does not verify if the path exists or not.

NoChangeDir Will not allow the user to change the current working directory.

Multiple FLAGS are permitted, separated by commas. If none of the above FLAGS are used, then their
opposite, default functions will be used.

Example:

getopenfilename Read$, "*.txt","Text Files", NoFileMustExist

GETSAVEFILENAME Statement

Functions similarly to the Windows "Save As" file dialog box: obtains a filename from the user by displaying a
Windows-style drop down list (see the Forms topic). The returned filename can be used for file input/output
purposes.

Syntax:

GetSaveFilename filename$, default_ext$, filter$, filter_desc$, FLAG

filename$ is the variable which will return the retrieved filename. Returns the full filepath of the file.

default_ext$ is the default extension of the file being saved. It is a three character string with no period
(e.g. "txt").

filter$ is a file filter to limit which files are displayed (such as "*.txt"). If omitted, will be "*.*".

filter_desc$ describes filter$ (e.g. "Text files").

FLAG is any one of the following:

NoOverWritePrompt If the filename already exists, it does not prompt the user to verify before
overwriting it.

PathMustExist Requires the saved file's path to already exist.

NoChangeDir Will not allow the user to change the current working directory.

Multiple FLAGS are permitted, separated by commas. If none of the above FLAGS are used, then the
opposite, default functions will be used.

Example:

getsavefilename Save$, "gbr","*.gbr","Gerber Files", PathMustExist

GOSUB/RETURN Statements

Transfers control to, and returns from, a subroutine. The target, or return, for a gosub may be a number or
alphanumeric notation. The label may be on the same line as a command or it may be on its own line. Note that
labels which are not numeric must be ended in a colon.

Example:

Pag. 8 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
This macro draws a box around any coordinate.

50 INPUT "The size of the box in inches",boxsize


half = (boxsize * 1000)/2
INPUT "The center X coordinate in inches",x
INPUT "The center Y coordinate in inches",y
x = x * 1000
y = y * 1000
GOSUB 100
OK_CANCEL "Continue?",OK
IF OK = 1 THEN GOTO 50
END

' Box drawing subroutine


100 startx = x - half
starty = y - half
endx = x + half
endy = y + half
Add_rectangle@
axy@ startx,starty
axy@ endx,endy
RETURN

Use a subroutine whenever a task must be repeated. Note also that all variables are "global," meaning that a
variable has the same value in a subroutine as in the main program.

GOTO Statement

Branches unconditionally to the specified line. A goto is a way to control the macro flow. The target, or label, for
a goto may be a number or alphanumeric notation. The label may be on the same line as a command or it may
be on its own line. Note that Labels which are not numeric must be ended in a colon

Example:

GOTO 100
100 PRINT "this is a numeric label"
GOTO label1
label1: PRINT "this is an alphanumeric label"

HEX$ Function

Returns a hexadecimal string representation of a number.

Example:

x = 10
PRINT HEX$ (x)
Output: A

HTMLHELP Statement

Allows the programmer to open an individual HTML document from a compressed HTML help file (*.chm).

Note: This command is recommended for advanced macro programmers.

Pag. 9 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Syntax:

HtmlHelp htmlhelpfile$, htmlhelppage$

htmlhelpfile$ = the filename for the HTML Help format file (e.g. help.chm)

htmlhelppage$ = the specific HTML topic file within that help file (e.g. TOC.html)

Example:

Htmlhelp "help.chm","basic_commands.html"

IF/THEN/ELSE Statements

Allows conditional execution, based on the evaluation of a Boolean expression. This statement may be a single
line, or a block

Single Line Syntax:

IF <Boolean expression> [AND <Boolean expression> ]THEN <expression> [ELSE Statement]

Block Syntax:

IF <Boolean expression> [AND <Boolean expression> ]THEN


<Block statements>
[ELSEIF <boolean expression> THEN
<Block statements>]
[ELSE
<Block statements>]
END IF

If the expression is true then the statement is executed. Strings can also be compared using the If/Then
statement.

Example:

IF taxes > 10000 AND taxes <100000 THEN GOTO 500


IF X = 14 THEN Time = Time + 1

!INCLUDE Statement

!INCLUDE functions like the MACRO_PLAY Statement, except for the following differences.

!INCLUDE can see variables which are used in the macro program calling the !INCLUDE statement,
whereas MACRO_PLAY cannot.

When the subprogram called by MACRO_PLAY comes to an END statement, the calling macro continues on
the next line. If an END statement is encountered in a macro called by !INCLUDE, then the main macro is
also ended.

Unlike MACRO_PLAY, you cannot use a variable for the filename parameter of the command. (The full
filename path for the macro to be included must be entered in the parameter).

See also the MACRO_PLAY and MACRO_LINK statements.

Syntax:

Pag. 10 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
!INCLUDE Filename

Example:

if Add% = 1 then
!INCLUDE "d:\temp\testscript.scr"
end if

INPUT Statement

The input command opens a dialog box, displays a string, and waits for the user to enter a value and press OK.
Adding CR! to your message inputs a carriage line feed. This allows you to have multiple lines in the dialog box,
and control where the line breaks.

Example:

INPUT "Enter your name", name$

INPUT# Statement

Reads data items from a sequential device or file and assigns them to variables.

Example:

OPEN "Price.dat" FOR INPUT AS #1


INPUT "Display all items below what level"; Reorder
DO UNTIL EOF (1)
INPUT #1, Company$, Styles$, Sizes$, Clr$,

INSTR Statement

Determines if a string exists within another string. It returns a numeric value for the position the substring
begins, relative to the beginning of the string.

Syntax:

INSTR(position,string,substring)

where:

position = character position in the string to begin the search (optional - defaults to first char. in string)

string = the string expression to be searched

Pag. 11 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
substring = the string expression to be searched for

Example:

Test% = instr(1,"where is mary jane?","mary")

KILL Statement

Deletes a file from disk.

Example:

KILL "c:\Act_Inc\Scripts\testing1.scr"

LCASE$ Function

Returns a string expression with all letters in lower-case.

Example:

Test$ = "THE string"


PRINT Test$
PRINT LCASE$(Test$); " in lowercase"

LCLOSE Statement

Closes the printer and sends any unprinted characters to the printer.

Example:

FOR i = 32 to 127
s$ = s$ + chr$(i)
NEXT
FOR i = 1 to 190
LPRINT s$;
NEXT
LCLOSE
END

LEFT$ Function

Returns a string consisting of the leftmost n characters of a string.

Example:

a$ = "Microsoft Qbasic"
PRINT LEFT$(a$, 5)

Output is "Micro"

Pag. 12 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

LEN Statement

Returns the number of characters in a string, or the number of bytes required by a variable.

Example:

Temp$ = "1234567"
PRINT LEN (Temp$)

Output: "7"

LINE INPUT Statement

Inputs an entire line (up to 255 characters) to a string variable, without the use of delimiters.

Syntax:

LINE INPUT[;][ "prompt string"] string variable

Example:

LINE INPUT "Enter three values separated by commas: ", D$


PRINT "D$ = " D$

LINE INPUT# Statement

Reads an entire line, without delimiters, from a sequential file to a string variable.

Example:

Creates sample file:

OPEN "List" FOR OUTPUT as #1


DO
INPUT " NAME: ", Name$
INPUT " AGE: ", Age$
WRITE #1, Name$, Age$
INPUT "Add another entry? Y or N", R$
LOOP WHILE UCASE$(R$) = "Y"
CLOSE #1

Reads the file:

OPEN "List" FOR INPUT as #1


PRINT "Entries in file:": PRINT
DO WHILE NOT EOF (1) =1
LINE INPUT #1, REC$
PRINT REC$
LOOP
CLOSE #1

Pag. 13 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
LOG Function

Returns the natural logarithm of a numeric expression.

Example:

x = 10
PRINT LOG (x)

Output: 2.302585

LPRINT, LPRINT USING Statements

LPRINT prints data to the default printer (as defined by the printer settings under Macro > Setup Printer).
LPRINT USING prints the data in a specified format. These statements function exactly the same as PRINT and
PRINT USING, but instead of the output going to the screen it goes to a printer

See also the File > Print macro commands.

Characters that format a numeric expression

# Digit position

. Decimal point position

, Placed left of the decimal point, prints a comma every third digit

+ Position of number sign

^^^^ Prints in exponential format

- Placed after digit, prints trailing sign for negative numbers

$$ Prints leading $.

**Fills leading spaces with *

**$ Combines ** and $$

Characters used to format a string expression

& Prints entire string

! Prints only the first character of the string

\ \ Prints first n characters, where n is the number of blanks between slashes + 2

Characters used to print literal characters

_ Prints the following formatting character as a literal

Any character not in this table is printed as a literal.

Example:

FOR i = 32 to 127

Pag. 14 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
s$ = s$ + chr$(i)
NEXT
FOR i = 1 to 190
LPRINT s$;
NEXT
LCLOSE
END

Example:

x# = 1441.2318
LPRINT USING "No Decimal ####";x#

Output would be: 1441

LPRINT USING "The number with 3 decimal places ####.###";x#

Output would be: 1441.232

LPRINT USING "The number with a dollar sign and 2 decimals $$##.##";x#

Output would be: $1441.23

LPRINT USING "Number with plus signs +###.#### "; x#

Output would be: +1441.2318

LPRINT USING "The number with a comma ##,.##";x#

Output would be: 1,441.23

b$ = "ABCDEFG"
LPRINT USING "The entire string &";b$

Output would be: ABCDEFG

LPRINT USING "The first character of the string !"; b$

Output would be: A

LPRINT USING "The first 3 characters \ \"; b$

Output would be: ABC

LTRIM$ Function

Returns a copy of a string with leading spaces removed.

Example:

a$ = " Basic "


PRINT "*" + a$ + "*" 'Output is: * Basic *
PRINT "*" + LTRIM$(a$) + "*" 'Output is: *Basic *

MACRO_LINK Statement

Pag. 15 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Links an existing macro file to your macro. Control will not return when the new macro ends. If you do not
specify a path in the filename, the system will assume it is the same as the path of the macro you are linking
from.

See also the MACRO_PLAY and !INCLUDE Statements.

Syntax:

Macro_link "filename.ext"

MACRO_PLAY Statement

Starts the macro script indicated. When this new macro ends, the existing macro resumes with the next
instruction after the MACRO_PLAY command.

See also the MACRO_LINK and !INCLUDE statements.

Syntax:

MACRO_PLAY "filename.ext"

MESSAGE BOX Statement

This command displays a Windows-style message box, with configurable buttons and titles. A number of choices
are offered for the display title. Each command returns a numeric value, depending on the buttons used in the
box, which can be used as a conditional value in other statements.

Note: This command is recommended for intermediate to advanced macro programmers. Beginning macro
programmers should use the OK_CANCEL or PRINT commands

Syntax:

MessageBox message$ [, title$] [, flags] [, return%]

message$ = message displayed within the box

title$ = title of dialog (INFORMATION is assumed if title$ value is empty).

flags = specifies the style of box to display (again, INFORMATION is assumed default) The following flags
are available:

INFORMATION = OK button and lowercase i icon

WARNING = OK button and Exclamation point icon

ERROR = OK button and Stop sign icon

OKCANCEL = OK and CANCEL buttons, Question mark icon

YESNO = YES and NO buttons, Question mark icon

YESNOCANCEL = YES, NO, and CANCEL buttons, Question mark icon

RETRYCANCEL = RETRY and CANCEL buttons, Question mark icon

Pag. 16 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
# = an integer representing the code for other Windows-style buttons (requires knowledge of MS codes;
negative integer is possible).

return% = integer value returned, dependant on button pressed:

1 OK button was selected.

2 Cancel button was selected.

3 Abort button was selected. (Only if flag integer is set to ABORT)

4 Retry button was selected.

5 Ignore button was selected. (Only if flag integer is set to IGNORE)

6 Yes button was selected.

7 No button was selected.

Example:

MessageBox "Continue Running Macro?","INFORMATION",YESNO,MacroEnd%


if MacroEnd% = 6 then end

MID$ Function

The MID$ Function returns a substring of a string. The MID$ statement replaces part of a string variable with
another string.

Syntax:

As a Function:

MID$<stringexpression$,start%[,length%]>

As a Statement:

MID$<stringvariable$,start%[,length%]>=stringexpression$

Example:

a$ = "Where is Paris?"
PRINT MID$(a$, 10, 3)

Output is "Par"

Text$ = "Paris, France"


PRINT Text$

Output is "Paris, France"

MID$(Text$, 8) = "Texas"
PRINT Text$

Output is "Paris, Texas"

Pag. 17 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

MKDIR Statement

Creates a new directory.

Example:

MKDIR "c:\MacroTest"

This creates a directory on the C drive called MacroTest.

MOD Function

Divides one number by another and returns the remainder. Real numbers are rounded to integers.

Syntax:

numeric-expression1 MOD numeric-expression2

Example:

PRINT 19 MOD 6.7

BASIC rounds 6.7 to 7, then divides. Output is 5.

NAME Statement

Changes the name of a disk file or directory.

Syntax:

NAME <OldFilename> AS <NewFilename>

Example:

NAME "c:\Test" AS "c:\Testing"

This renames the file Test on the C drive to Testing.

OK_CANCEL Statement

The OK_CANCEL command is similar to the Print Statement except there are two buttons: Yes and No. The
command returns a value (1=Yes, 0=No) which can be used as a conditional in other macro commands.

Pag. 18 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

Syntax:

Ok_cancel message$, return%

Example:

FOR n = 1 to 10
PRINT "Number is",n
OK_CANCEL "Continue?",OK
IF OK = 1 THEN next
END

OPEN Statement

Enables I/O to a file. In CAM350, it is ASCII Text based, not binary, so only the following syntaxes are accepted:

OPEN "filename" FOR INPUT AS #n


OPEN "filename" FOR OUTPUT AS #n
OPEN "filename" FOR APPEND AS #n

In each case, n is the number between 1 and 255, and is used to refer to the file in subsequent PRINT, WRITE,
and INPUT statements

Example:

OPEN "print.data" for output as #1


PRINT #1, "This is some test data",10,33.4,"Snark",25
PRINT #1, "This is some more test data",200
CLOSE #1
END

PRINT Statement

Print opens a dialog box to display a message. The message may include variables, and can be multiple lines.
This dialog box has an OK button. This box stays up, and macro execution is suspended, until OK is pressed.

Syntax:

PRINT "message",variable(s)

Example:

PRINT "Number of flashes using current Dcode: ",numflashes!

Pag. 19 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

Adding CR! to your message inputs a carriage line feed. This allows you to have multiple lines in the dialog box,
and control where the line breaks.

Example:

PRINT "Number of times the current Dcode Type"+CR!+"is used as a flash: ", NumdcodetypeF!

Because quotation marks are used to specify file names or text to print in macros, a special database query
command, Quote!, will insert the character (") into the text that you are printing

Example:

PRINT "This is a "+Quote!+"quote."+Quote!

Output is: This is a "quote."

PRINT USING Statement

Prints strings or numbers using a specified format.

Characters that format a numeric expression

# Digit position

. Decimal point position

, Placed left of the decimal point, prints a comma every third digit

+ Position of number sign

- Placed after digit, prints trailing sign for negative numbers

$$ Prints leading $.

** Fills leading spaces with *

Pag. 20 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
**$ Combines ** and $$

Characters used to format a string expression

& Prints entire string

! Prints only the first character of the string

\ \ Prints first n characters, where n is the number of blanks between slashes + 2

Characters used to print literal characters

_ Prints the following formatting character as a literal

Any character not in this table is printed as a literal.

Example:

x# = 1441.2318
PRINT USING "No Decimal ####";x#

Output would be: 1441

PRINT USING "The number with 3 decimal places ####.###";x#

Output would be: 1441.232

PRINT USING "The number with a dollar sign and 2 decimals $$##.##";x#

Output would be: $1441.23

PRINT USING "Number with plus signs +###.#### "; x#

Output would be: +1441.2318

PRINT USING "The number with a comma ##,.##";x#

Output would be: 1,441.23

b$ = "ABCDEFG"
PRINT USING "The entire string &";b$

Output would be: ABCDEFG

PRINT USING "The first character of the string !"; b$

Output would be: A

PRINT USING "The first 3 characters \ \"; b$

Output would be: ABC

PRINT#, PRINT# USING Statements

PRINT# writes data to a sequential file. PRINT# USING writes the strings or numbers using a specified format.

Pag. 21 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Characters that format a numeric expression

# Digit position

. Decimal point position

, Placed left of the decimal point, prints a comma every third digit

+ Position of number sign

- Placed after digit, prints trailing sign for negative numbers

$$ Prints leading $.

** Fills leading spaces with *

**$ Combines ** and $$

Characters used to format a string expression

& Prints entire string

! Prints only the first character of the string

\ \ Prints first n characters, where n is the number of blanks between slashes + 2

Characters used to print literal characters

_ Prints the following formatting character as a literal

Any character not in this table is printed as a literal.

Example:

OPEN "print.data" for output as #1


PRINT #1, "This is some test data",10,33.4,"Snark",25
PRINT #1, "This is some more test data",200
CLOSE #1
END

Example:

OPEN "print.data" for output as #1


a# = 123.4567
PRINT #1, USING "###.##"; a#
CLOSE #1
END

Output is 123.46

PRINT_MSG, PRINT_MSG USING Statements

PRINT_MSG is similar to PRINT: you may include variables and have multiple lines. The only difference is there
is no OK button. The message will remain until another print_msg or close_msg command, or until macro
execution stops.

Syntax:

Pag. 22 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
PRINT_MSG "message",variable(s)

Adding CR! to your message inputs a carriage line feed. This allows you to have multiple lines in the dialog box,
and control where the line breaks.

Because quotation marks are used to specify file names or text to print in macros, a special database query
command, Quote!, will insert the character (") into the text that you are printing.

PRINT_MSG USING prints the strings and numbers using a specified format.

Characters that format a numeric expression

# Digit position

. Decimal point position

, Placed left of the decimal point, prints a comma every third digit

+ Position of number sign

- Placed after digit, prints trailing sign for negative numbers

$$ Prints leading $.

** Fills leading spaces with *

**$ Combines ** and $$

Characters used to format a string expression

& Prints entire string

! Prints only the first character of the string

\ \ Prints first n characters, where n is the number of blanks between slashes + 2

Characters used to print literal characters

_ Prints the following formatting character as a literal

Any character not in this table is printed as a literal.

Example:

PRINT_MSG Quote!+"Promise only what you can deliver."+CR+"Then deliver more than you
promise."+Quote!
DELAY 5000
NEXT

Example:

a# = 123.4567
PRINT_MSG USING "###.##"; a#
PRINT_MSG USING "+###.####"; a#
a$ = "ABCDEFG"
PRINT_MSG USING "!"; a$
PRINT_MSG USING "\ \"; a$

Pag. 23 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
RESET Statement

Closes all disk files.

Example:

OPEN "print.data" for output as #1


PRINT #1, "This is some test data",10,33.4,"Snark",25
PRINT #1, "This is some more test data",200
RESET
END

RETURN Statement

Returns control from a subroutine.

Example:

' This macro draws a box about any coordinate.


50 INPUT "The size of the box in inches",boxsize
half = (boxsize * 1000)/2
INPUT "The center X coordinate in inches",x
INPUT "The center Y coordinate in inches",y
x = x * 1000
y = y * 1000
GOSUB 100
OK_CANCEL "Continue?",OK
IF OK = 1 THEN GOTO 50
END
' Box drawing subroutine
100 startx = x - half
starty = y - half
endx = x + half
endy = y + half
Add_rectangle@
axy@ startx,starty
axy@ endx,endy
RETURN

RIGHT$ Function

Returns the right-most n characters of a string.

Example:

a$ = "Microsoft Qbasic"
PRINT RIGHT$(a$, 5)

Output is "basic"

RMDIR Statement

Removes an existing directory.

Pag. 24 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Example:

RMDIR "c:\MacroTest"

This will remove a directory on your c drive called MacroTest.

RTRIM$ Function

Returns a string with trailing (right-hand) spaces removed.

Example:

a$ = " Basic "


PRINT "*" + a$ + "*" 'Output is: * Basic *
PRINT "*" + RTRIM$(a$) + "*" 'Output is: * Basic*

SELECT CASE Statement

This is similar to the If/Then statement, but it evaluates a single expression then executes different statements
or branches to different parts of the script, based on results.

Syntax:

SELECT CASE <expression>


CASE <expression>
<statement>
CASE ELSE
<statement>
END SELECT

If the expression is true, then the statement is executed. A numeric or string expression can be evaluated. End
select terminates statement.

Example:

INPUT "Enter an interger between 1-9", TestValue

SELECT CASE TestValue


CASE 1, 3, 5, 7, 9
PRINT "Odd"
CASE 2, 4, 6, 8
PRINT "Even"
CASE IS < 1
PRINT "Too low"
CASE IS > 9
PRINT "Too high"
CASE ELSE
PRINT "Not an integer"
END SELECT

SGN Function

Indicates the sign of a number.

Pag. 25 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Example:

n = -5
PRINT SGN (n)

Output: -1

Y = 10
PRINT SGN (y)

Output: 1

SIN Function

Returns the sine of the angle x, where x is in radians.

Example:

n% = 30
PRINT SIN (n%)

Output: =0.988032

SQR Function

Returns the square root of n.

Example:

n% = 25
PRINT SQR (n%)

Output: 5.000000

STR$ Function

Returns a string representation of a number.

Example:

PRINT "The answer is: "+str$(answer%)

SUSPEND, SUSPEND USING Statements

SUSPEND stops running the macro and puts up a message box with a Resume button so you can return to the
macro later. While the macro is suspended, you can use the software as if the macro weren't running at all.
When you press the Resume button, execution of the macro resumes with the next instruction after the
SUSPEND command.

Pag. 26 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Syntax:

SUSPEND <message$>

message$ is the text in the message box which is displayed when the macro is executed.

SUSPEND USING displays a message in the specified format.

Characters that format a numeric expression

# Digit position

. Decimal point position

, Placed left of the decimal point, prints a comma every third digit

+ Position of number sign

- Placed after digit, prints trailing sign for negative numbers

$$ Prints leading $.

** Fills leading spaces with *

**$ Combines ** and $$

Characters used to format a string expression

& Prints entire string

! Prints only the first character of the string

\ \ Prints first n characters, where n is the number of blanks between slashes + 2

Characters used to print literal characters

_ Prints the following formatting character as a literal

Any character not in this table is printed as a literal.

Example:

FOR n = 1 to 10
PRINT_MSG "number is", n
DELAY 500
SUSPEND
CLOSE_MSG

Example:

SUSPEND USING "###.##",123.45

SWAP Statement

Exchanges the values of two variables.

Example:

Pag. 27 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Temp$ = "123456"
Temp2$ = "789"
SWAP Temp$, Temp2$
PRINT Temp$
PRINT Temp2$

Output: "789"

Output: "123456"

TAN Function

Returns the tangent of the angle x, where x is in radians.

Example:

n% = 30
PRINT TAN (n%)

Output: -6.405331

UCASE$ Function

Returns a string expression with all letters in uppercase.

Example:

Test$ = "THE string"


PRINT Test$
PRINT UCASE$(Test$); " IN UPPERCASE"

VAL Function

Returns the numeric value of a string of digits.

Example:

n$ = 3456
PRINT VAL (n$)

Output: 3456

WINCALL Statement

Allows the macro to execute an external application (Notepad, etc), and waits for the application to exit before
returning control to the calling macro.

Note: This command is recommended for advanced macro programmers.

Pag. 28 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...
Syntax:

WinCall commandline$ [, cmdshow] [, return%]

commandline$ is the full path and name of the external program, along with all parameters (e.g.
"d:\mybin\prog.exe param1 param2").

Spaces may be used in parameters and paths, but they must be surrounded by quotes ("):

e.g. commandline$ = chr$(34) + "d:\my bin\prog.exe" + chr$(34) + " " + chr$(34) + "param" +
chr$(34) produces the following character string: "\"d:\my bin\prog.exe\" \"param\"" (Here \" is " in the
string)

cmdshow is a keyword for how a Windows-based application window is to be shown. Values for cmdshow
are (if value is not provided, NormalFocus is assumed):

Show = window has focus and is restored to its original size and position.

Hide = window is hidden and focus is passed to the hidden window.

NormalFocus = window has focus and is restored to its original size and position.

MinimizedFocus = wiindow is displayed as an icon with focus.

MaximizedFocus = wiindow is maximized with focus.

NormalNoFocus = window is restored to its most recent size and position. The currently active window
remains active.

MinimizedNoFocus = wiindow is displayed as an icon. The currently active window remains active.

cmdshow can be an integer instead. (See the "Microsoft Win32 API" for more information about the
integer values for cmdshow, under ShowWindow).

return% is the return code from the external program. This is a value defined by the external program,
so you must check its documentation for the appropriate value. (Note: 0 usually means the program
finished successfully - but that is not guaranteed).

Example:

Program$ = chr$(34) + "d:\programs\notepad.exe" + chr$(34) + " " + chr$(34) + "param" +


chr$(34)
WinCall Program$, Show, Done%
if Done% = 0 then print "External Application was closed"

WINEXEC Statement

Like WinCall, allows the macro to execute an external application (Notepad, etc), but does not wait for the
application to exit before returning control to the calling macro (like WinCall does).

Note: This command is recommended for advanced macro programmers.

Syntax:

WinExec commandline$ [, cmdshow]

commandline$ is the full path and name of the external program, along with all parameters (e.g.
"d:\mybin\prog.exe param1 param2").

Pag. 29 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/Basic...

Spaces may be used in parameters and paths, but they must be surrounded by quotes ("):

e.g. commandline$ = chr$(34) + "d:\my bin\prog.exe" + chr$(34) + " " + chr$(34) + "param" +
chr$(34) produces the following character string: "\"d:\my bin\prog.exe\" \"param\"" (Here \" is " in the
string)

cmdshow is a keyword for how a Windows-based application window is to be shown. Values for cmdshow
are (if value is not provided, NormalFocus is assumed):

Show = window has focus and is restored to its original size and position.

Hide = window is hidden and focus is passed to the hidden window.

NormalFocus = window has focus and is restored to its original size and position.

MinimizedFocus = wiindow is displayed as an icon with focus.

MaximizedFocus = wiindow is maximized with focus.

NormalNoFocus = window is restored to its most recent size and position. The currently active window
remains active.

MinimizedNoFocus = wiindow is displayed as an icon. The currently active window remains active.

cmdshow can be an integer instead. (See the "Microsoft Win32 API" for more information about the
integer values for cmdshow, under ShowWindow).

Example:

Program$ = chr$(34) + "d:\programs\notepad.exe" + chr$(34) + " " + chr$(34) + "param" +


chr$(34)
WinExec Program$, Show

WRITE# Statement

Writes data to a sequential file.

Example:

OPEN "write.dat" for output as #1


WRITE #1, "This is some test data",10,33.4,"Snark",25
WRITE #1, "This is some more test data",200
CLOSE #1
END

Pag. 30 di 30
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Macro Search Tips

Recording and Viewing Macros

Most CAM350 commands have macro's that can be recorded and played back. Macros that relate to each
command are noted in each of the main Help topics. These macro commands end with the @ sign.

As commands are added or modified, the recorded CAM350 commands may change. To verify a recorded
command, just select the Macro > Record command, execute the desired command(s), and view the saved
macro file.

Pressing the M hotkey changes the prompt on the status bar between (1) the actual prompt, (2) the memory
used, and (3) the actual macro command that would be saved. Using the M hotkey is a fast way to see each
macro command without going through the steps of recording a macro and then opening the macro file in an
editor.

Restriction: The availability of product macro commands is dependant on your product and its specific
modules. Some macro commands are available only to specific modules. If you encounter problems when using
specific macro commands, refer to the Editor List icon for each Menu Command you're attempting to use: this
will display a list of Editors the command is available for. If you do not have a listed Editor, you cannot run the
macro command.

Macro Basics

Macro commands are the RESULT of a command rather than the command itself. For example, to set the size
and shape of Dcode 71 you would interactively select Tables, then Apertures, then click in the Dcode 71 field,
enter an r (for round), and then 100 for the size. The recorded result for this process is:

edit_aperture@ 71,1,100.0000,100.0000,71,""

Where 71 is Dcode 71, 1 is the round shape, 100-100 are the X and Y values, the second 71 is the default
swap Dcode, and the "" is reserved for the name if it was a custom aperture.

Other commands are almost the same as what you would do if you selected them from the menu. For example,
the macro recorded for adding a line is something like this:

setdcode@ 12

Sets the active Dcode to 12.

setlayer@ 0

Sets the active layer to 1 (layer numbering starts from 0 in macros).

add_line@

The same as selecting add line.

axy@ 505.0000,4670.0000
axy@ 3753.0000,4751.0000
axy@ 1341.0000,2810.0000
back@
back@

All of the macro commands listed below appear in the order you would need to add them to your macro. In
other words, they must placed in the same sequence as they are listed to function properly.

INCORRECT:
axy@ 2.144,3.455
add_flash@
back@

Pag. 1 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Would NOT add a flash at the given coordinates, because the coordinates were specified before the command
was called.

CORRECT:
add_flash@
axy@ 2.144,3.455
back@

The commands follow the proper sequence, and a flash will be added at the coordinates.

Obsolete Macros and Their New Equivalents

Common Macros

The macros below are commonly used in scripts.

axy@ x,y

X,Y are coordinates (same as selecting a point with the left mouse button).

back@

Backs out of (cancels) a command (same as clicking the right mouse button to cancel a command). Useful
for terminating the previous macro command state before initiating a new one.

edit_selectall2@

Selects all data within the database extents. Can be used in commands which require a selection window to
specify the area being checked, etc. (Replaces commands, such as edit_group@, which must specify two points
on a rectangular selection window).

Example:

edit_selectall2@
back@

replaces

edit_group@
axy@ 10.1200,45.7500
axy@ 46.8700,15.8900
back@

end@

Ends a command. (Only certain commands need end@). An example is the + hotkey for zoom in. Since this
command is recursive the end@ is necessary to stop the zoom in function.

Pag. 2 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Data Analysis Macros

The following macros collect tolerance information about the designated layers. They are used solely in
preparation for the Database Analysis Queries that report their findings.

analyze_data@

Looks at the data on all ON electrical and NC layers.

analyze_data_in_box@ llx,lly,urx,ury

Looks at data which is inside the prescribed box (parameters are lower-left X coordinate, lower-left Y
coordinate, upper-right X, upper-right Y), for all ON NC and electrical layers.

analyze_data_out_box@ llx,lly,urx,ury

Looks at data which is outside the prescribed box (parameters are lower-left X coordinate, lower-left Y
coordinate, upper-right X, upper-right Y), for all ON NC and electrical layers.

Note: For the last two commands, data which crosses the box edge is considered both inside and outside the
box (it will be included in both analyze box commands).

Database Analysis Queries

Pag. 1 di 1
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/CAM350_Family_...
Hotkeys

Key Function Associated Macro Command


A Aperture table
C Zoom close view_close@
D Set active Dcode setdcode@ #
#=Dcode number
F Toggle fill mode setvmfill@ #
(filled/outline/centerline) 0=centerline, 1=filled, 2=outline
view_redraw@
G Turn graphics on/off view_SuppressGrphcs@ #
(speeds up edit selections) 0=on, 1=off
H Highlight active Dcode Hilite_dcode_on@
Hilite_dcode_off@
K Turn layer(s) off (inactive) layer_kill@
Must be followed by
edit_layer@ 0,-2,-2,0,1
layer number, draw color, flash color,
layer type, 1=off
L Turn layer(s) on (active) layer_set@
Must be followed by
edit_layer@0,-2,-2,0,0
layer number, draw color, flash color,
layer type, 0=on
Ctrl L Toggle Full Screen mode view_fullscreen@
N Toggle active layer view_NegateActiveLayer@ #
negative/positive (display only)0=Negative, 1=Positive
O Toggle orthogonal snap (0/45/90 setortho@ #
degrees) 0=90, 1=45, 2=0
P Zoom previous view_previous@
Q Query all data query_all@
R Redraw view_redraw@
S Snap-to-grid on/off setgridsnap@ #
0=off, 1=on
T Transparency on/off setvmtrans@ #
0=off, 1=on
U Undo undo@
Ctrl U Redo redo@
V Grid visibility on/off setgridvis@ #
1=on, 0=off
W Zoom window (must select 2 view_window@
points) For example:
view_window@
axy@ 1375.0,5350.0
axy@ 3300.0,3175.0
back@
X Toggle cursor (target/cross-hair)
Y Layer table
Z Object snap on/off setsnap@ #
1=on, 0=off
F1 Context-Sensitive Help
F2-F9, User-Definable keys
F11, F12
Home View all view_all@
0-9 Number keys 1 to 9 turn ON layerset_view@ #
layer sets 1 to 9, respectively. # is the number of the layerset to turn

Pag. 1 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/CAM350_Family_...

0 turns on layer set 10. The first ON.


layer of the layer set is made
active. (If no layer set exists,
nothing happens.)
Ins Pan to cursor location
+ Zoom in view_zoomin@
- Zoom out view_zoomout@
PgUp Increase snap box size setsnapdist@ #
# in pixels
setsnapdistdb@ #
# in current user units (mils or mm)
PgDn Decrease snap box size setsnapdist@ #
# in pixels
setsnapdistdb@ #
# in current user units (mils or mm)

Hotkeys that change during Edit commands

A Select All
B Toggle group display box
mode/ghost mode
C Toggle window mode
crossing/non-crossing
I Toggle windowed selection edit_inside@
inside/outside edit_outside@
M Mirror a part during Add > quickpart_mirror@
Part and Quick Part, or
Mirror the Reference
Designator or Device
Name during Build Part or
in the Part Editor.
T Rotate a part during Add quickpart_turn@
> Part and Quick Part, or partname_turn@
rotate the Reference setturn100angle@ #
Designator or Device Sets the turn angle. # is 100 times the angle
Name during Build Part or (650=6.5 degrees)
in the Part Editor
W Enable group Window
mode

Keyboard/Mouse Equivalents

Spacebar Left mouse button


, Center mouse button (re-execute last command)
Esc Right mouse button

Pag. 2 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Layer Bar Macros

setlayer@ 4

Sets the active layer.

settoplayer@ 5

Displays this layer on top. Remember layers start from 0 (layer 1 = layer 0 in a macro).

layer_alloff@ 1

Turns all layers expect the active layer on or off: 1 = all off and 0 = all on.

update_layerbar@

Updates the display to reflect the current Layer Bar settings.

edit_layer@ Layer#,drawcolor,flashcolor,type,on/off,"name.gbr"

See Import Gerber for a full explanation of the edit_layer@ command.

The layer bar can only turn layers on/off, set the active layer, bring a layer to the top, and set the draw and
flash colors. The numbers associated with each of the colors depends upon the current positions of each of the
colors in the palette. Here is an example of a color palette, with the numbers that are assigned to each position.
Since the numbers correlate to the position and not the color itself, please refer to the palette in your CAM350
software to determine which number is assigned to your desired color. (Right-click on any of the colors in the
layer bar to open the palette editor.)

savecolors@ "name.pal"

If you've customized your display with unique colors, this command allows you to save the palette.

loadcolors@ "name.pal"

Allows you to load a unique color palette.

view_LayerFlash #, #

Flashes can be turned off, even though the active layer is On.

First #: layer number

Second #: 0=Flashes are Off, 1=Flashes are On.

view_layerDraw #,#

Draws can be turned off even though the active layer is On.

First #: layer number

Pag. 1 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Second #: 0=Draws are Off, 1=Draws are On.

Pag. 2 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Status Bar Macros

Coordinate Readout/Input

setabsrel@ 1

Sets the coordinate box readout type: 0 = absolute, 1 = relative.

H button

Used to highlight the active Dcode in the Tool Bar. Dcode must be made active first: see Active Dcode.

Hilite_dcode_on@

Turns highlight on.

Hilite_dcode_off@

Turns highlight off.

S button

setgridsnap@ #

Sets the grid snap: (1=on, 0=off). Grid may be set using Grid Selection.

T button

setvmtrans@ #

Sets transparency mode: 0=off, 1=on

V button

setgridvis@ #

Turns the grid on or off: 1=on, 0=off.

Pag. 1 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Z button

setsnap@ #

Set the object snap: 1=on, 0=off.

Desirable to turn off when in macros, to avoid snapping to objects accidentally when providing exact
coordinates.

Pag. 2 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Tool Bar Macros

The Tool Bar changes depending what editor you are in and what menu command you have selected. Only those
functions which have associated macro commands are listed here.

update_buttonbars@

Causes the display of the Tool Bar buttons and Units Measurement field to be refreshed to reflect the current
settings.

Active Dcode

setdcode@ 19

Sets the active Dcode to the given number.

update_dcodebar@

Updates the Dcode bar.

Active Layer

setlayer@ 5

Sets the active layer (remember layers start from 0).

Check Boxes

There are a variety of check boxes available during Edit Menu commands, which allow you to limit the types of
data being selected. The availability of a check box for an Edit command is dependant on the editor.

Each check box is a yes/no toggle to indicate if the data type should be available to the Edit command.

CMP

seteditcmp@ #

If Set, you can select Components ('parts') in the database for editing. If Cleared, the components are not
selectable. 0 = clear, 1 = set the "Cmp" selection filter.

Drill & Mill

Pag. 1 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

seteditdrill@ #
seteditmill@ #

Sets edit drill and mill options (1=on, 0=off)

Drw & Flsh

seteditflash@ #
seteditdraw@ #

Sets edit draw and flash options (1=on, 0=off)

Via

seteditvia@ #

0 = Clear
1 = Set the "Via" selection filter.

If Set, you can select entire vias for deletion (though not component pins). This also allows you to delete
empty vias (padstacks without any apertures assigned). If Clear, and the "Flsh" selection filter is set, only
the individual pads of vias will be selected for deletion.

Note: This check box is only available for the Edit > Delete command.

See also Filter button

Example

edit_delete@
seteditvia@ 1
seteditcmp@ 1
seteditdraw@ 1
seteditflash@ 0
seteditdrill@ 1
seteditmill@ 0
axy@ 3000.4000,1586.2000
back@

Check button

There is no macro command for this feature.

Config button

Pag. 2 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Fixture Setup:

Each fixture (top and bottom) must be setup individually, using the following commands:

bn_fixture_width@ 1,20000.0000

Sets the width of the fixture being added (in inches or mm).

bn_fixture_height@ 1,20000.0000

Sets the height of the fixture being added (in inches or mm).

bn_add_newgrid@ 1,100.0000,100.0000

Defines the new gridsize for the fixture side:

First parameter is 1=topside, 2=bottomside

Second and third parameters are the X and Y values (respectively) for the grid spacing.

bn_add_newplt@ 1,"4,2540000,-95250000,-95250000,158750000,158750000,0,3"
bn_add_newplt@ 1,"1,1587500,-95250000,-95250000,158750000,158750000,76200,1"
bn_add_newplt@ 1,"4,2540000,-95250000,-95250000,158750000,158750000,0,3"
bn_add_newplt@ 1,"3,1270000,-95250000,-95250000,158750000,158750000,76200,1"
bn_add_newplt@ 1,"4,2540000,-95250000,-95250000,158750000,158750000,0,3"
bn_add_newplt@ 1,"2,2374900,-95250000,-95250000,158750000,158750000,76200,1"
bn_fitboard@ 1,20000.0000,20000.0000

Fixture Modification

Use these commands to modify existing fixtures. Commands must be run for each fixture side.

bn_grid_init@ 1

Removes the grid on for the designated fixture (1=topside, 2=bottomside).

bn_pltlyr_init@ 1

Removes the fixture plates for the designated fixture (1=topside, 2=bottomside).

bn_error_init@ 1

Deletes the error flags for the designated fixture (1=topside, 2=bottomside).

bn_testpin_init@ 1

Removes the test probes for the designated fixture (1=topside, 2=bottomside).

bn_stiffener_init@ 1

Removes the stiffeners for the designated fixture (1=topside, 2=bottomside).

bn_plate_init@ 1

Removes the plates for the designated fixture (1=topside, 2=bottomside).

Probe Setup

Test Probe

Pag. 3 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
bn_testpin_rebuild@ 1

Rebuilds test probes of the designated fixture (1=topside, 2=bottomside).

bn_stiffener_rebuild@ 1

Rebuilds stiffeners of the designated fixture (1=topside, 2=bottomside).

bn_grid_reset@ 1

Resets the grid for the designated fixture to the default values (1=topside, 2=bottomside).

bn_add_testpindef@ "3,3175000,12700,254000,2540,2000,5000,200,0"
bn_add_testpindef@ "3,3175000,12700,127000,2540,2000,5000,200,0"
bn_testpindef_init@

Removes all test probe definitions for the designated fixture (1=topside, 2=bottomside).

Stiffener

bn_stiffenerdef_init@

Removes all stiffener definitions for the designated fixture (1=topside, 2=bottomside).

bn_add_stiffenerdef@ "4,3175000,12700,635000,2000,2000,5000,200,200"
bn_add_stiffenerdef@ "4,3175000,12700,127000,2000,2000,5000,200,200"

Fixture Drill Setup

Drill Table

See the Tables > NC Tool Tables macro commands. A Fixture Drill table is identical to a normal NC Tool Table,
but must be assigned to the fixture NC drill layers created for each fixture (top and/or bottom).

Drill Rule

bn_set_mindrloversize@ 2.0000

Tells the system that the drill hole size must be this amount greater than the probe size (in user units), so
that the probe will not touch the plate.

bn_set_maxdrloversize@ 5.0000

If you do not have a drill tool that exactly matches a particular drill size, the system will use the next biggest
drill tool in the table that is within this range (in user units).

Create button

See File > Create Test Points

Drill button

Pag. 4 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

bn_adddrill@ 23.0000

Adds a drill to the fixture NC drill layer. Parameter is the size of the drill being added.

bn_drill@ 1

Creates the NC Data layers for fixture drills. Must follow bn_adddrill@ command to assign the drill to the
correct NC drill table.
1=top fixture side
2=bottom fixture side.

Drop Pins button

bn_droppin@ #

Determines the disposition of probes being added to test fixtures:


0 = Minimize multiple grid assignment
1 = Minimize grid deflection.

Export button

See the following topics for the specific Bed-of-Nails export format:
TTI, Circuit-Line
See the following topics for the specific Flying Probe export format:
ATG, Integri-test, Probot, PROBOTECH, ACT Neutral

Filter button

Available during Edit commands

setbydcode@ "18"

Sets selection Dcode filter. Notice the Dcode number is a string. This is required since the Dcode filter can
have many Dcodes, Dcode ranges, etc.

set_polyvector_filter@ #

Includes/Excludes vector polygons from selection. (1=include, 0=exclude)

set_polyoutline_filter@ #

Pag. 5 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Includes/Excludes outline polygons from selection. (1=include, 0=exclude)

set_polyraster_filter@ #

Includes/Excludes raster polygons from selection. (1=include, 0=exclude))

set_textstroked_filter@ #

Includes/Excludes stroked text from selection. (1=include, 0=exclude)

set_texttruetype_filter@ #

Includes/Excludes TrueType fonts from selection. (1=include, 0=exclude)

set_pldrill_filter@ #

Includes/Excludes plated drill hits from selection. (1=include, 0=exclude)

set_upldrill_filter@ #

Includes/Excludes unplated drill hits from selection. (1=include, 0=exclude)

set_drillcircle_filter@ #

Includes/Excludes drilled circles from selection. (1=include, 0=exclude)

set_drillslot_filter@ #

Includes/Excludes drilled slots from selection. (1=include, 0=exclude)

set_drilltext_filter@ #

Includes/Excludes drilled text from selection. (1=include, 0=exclude)

set_millcircle_filter@ #

Includes/Excludes milled circles from selection. (1=include, 0=exclude)

set_millpath_filter@ #

Includes/Excludes mill paths from selection. (1=include, 0=exclude)

set_millslot_filter@ #

Includes/Excludes milled slots from selection. (1=include, 0=exclude)

set_operatormsg_filter@ #

Includes/Excludes operator messages from selection. (1=include, 0=exclude)

set_optionalstop_filter@ #

Includes/Excludes optional stops from selection. (1=include, 0=exclude)

Grid Selection

Pag. 6 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

setgrid@ 3,55.0000,55.0000

Chooses or sets the grid.

First parameter sets the grid number (Remember, like macro layers, they begin at 0: i.e. grids 1-5 are
numbered 0-4).

Second parameter sets the x-dimension of the grid.

Third parameter sets the y-dimension of the grid.

Orthogonal Lock

setortho@ 2

Sets the orthogonal lock: 0=90, 1=45, 2=0.

Output button

Camtek interface

camtek_batch@ #,#,"job setup file name"

Saves setup file for the layers you wish to inspect.

First parameter sets the server notification: 0 = do not notify server or 1 = notify server.

Second parameter specifies export directory: 0 = export to 2V20 directory or 1 = export to 2V50 directory.

Third parameter specifies the filename of the output file.

Prev button

Available during Edit commands

addprevious@

Add previous selection list to the current list.

Pag. 7 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Return To CAM Editor button

util_camed@

Returns control to CAM Editor from any of the listed sub-editors.

SelectAll button

Available during Edit commands

edit_selectall2@

Selects all data within the database extents. Can be used in commands which require a selection window to
specify the area being checked, etc. (Replaces commands, such as edit_group@, which must specify two
points on a rectangular selection window).

Example:

edit_selectall2@
back@

Test Pt button

Test Point Settings:


testpt_dcodefil@ Type,Side,"Dcode"

Specifies the Dcode filter to use for each test probe type. Must be set for each style of probe being used, and
each fixture side being used (see example below).

Type sets the test point style being used:


1=through-hole pin
2=SMT pin
3=plated through-hole
4=surface pad

Side sets the fixture for the test points being added:
0=top and bottom
1=top
2=bottom

Dcode is a string stating a single Dcode or range of Dcode numbers to filter by.

testpt_genfil@ Filter,Set

Sets Selection Criteria filter being applied to the test probes. Must be set on or off for each filter criteria type.

Filter specifies the filter being used:


0=use top mask
1=use bottom mask

Pag. 8 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
2=use end points only
3=offset through hole
4=include single point nets

Set determines if filter is to be used: 1=used, 0=not used.

testpt_genfil_minsize@ 40.0000

If you elect to offset through hole test probes, this command sets the minimum size (in user units) a through
hole must be before it should be offset.

testpt_sidefil@ Type,Side,Used

Sets the board side to use when generating test points. Must be set for each type of test point being used and each side
being used for that type of test point.

Type sets the test point style being used:


1=through-hole pin
2=SMT pin
3=plated through-hole
4=surface pad

Side sets the fixture for the test points being added: 0=top, 1=bottom.

Used determines whether that fixture is used for this test point type: 0=no, 1=yes

testpt_minsizefil@ Type,Size

Command sets the minimum size a potential test point can be for selection as a test point. Must be set for
each type of test point being used.

Type sets the test point style: 1=through-hole pin, 2=SMT pin, 3=plated through-hole, 4=surface pad

Size is the minimum size the data can be (in user units)

Test Point Generation:

Once test point settings have been defined, the following commands create the actual test points.

testpt_clear@

If you have previously created test points, this command deletes them before placing test points again.

singlenetextract@

Includes single-point nets in creation.

testpt_startcreatefil@

A necessary "internal" function that gathers the information from the filter that has been set up by the above
commands, and applies it to the test point creation process.

testpt_create@

Generates the test points.

testpt_stagger@

Staggers the test points on any SMT layer.

view_settestpt@ 1

Pag. 9 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Displays created test points: 0 = do not show test points, 1=show test points

testpt_endcreatefil@

Ends test point creation. A necessary "internal" function that clears the filter information from memory.

Example

testpt_dcodefil@ 3,1,"" 'Set Dcode filter for each type of probe


testpt_dcodefil@ 3,2,""
testpt_dcodefil@ 3,0,"10"
testpt_dcodefil@ 1,1,"10"
testpt_dcodefil@ 1,2,""
testpt_dcodefil@ 1,0,""
testpt_dcodefil@ 2,1,""
testpt_dcodefil@ 2,2,"10"
testpt_dcodefil@ 2,0,""
testpt_genfil@ 0,1 'Set filter criteria applied to the test points
testpt_genfil@ 1,1
testpt_genfil@ 2,0
testpt_genfil@ 3,1
testpt_genfil@ 5,1
testpt_genfil@ 6,1
testpt_genfil_minsize@ 40.0000 'Sets min. size for an offsettable through-hole test point
testpt_sidefil@ 1,0,1 'Sets board side for generating test points
testpt_sidefil@ 1,1,0
testpt_minsizefil@ 1,15.0000 'Sets minimum size for through-hole test points at 15 mils
testpt_sidefil@ 2,0,1 'subsequent repeats set same information for other point types
testpt_sidefil@ 2,1,0
testpt_minsizefil@ 2,15.0000
testpt_sidefil@ 3,0,1
testpt_sidefil@ 3,1,0
testpt_minsizefil@ 3,15.0000
testpt_sidefil@ 4,0,0
testpt_sidefil@ 4,1,0
testpt_minsizefil@ 4,0.0000
'Generate new test points
testpt_clear@
singlenetextract@
testpt_startcreatefil@
testpt_create@
testpt_stagger@
view_settestpt@ 1
testpt_endcreatefil@

Visibility button

bn_view_pincircle@ 1,1

Displays the pins as circles.

First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_pinline@ 1,0

Displays a line through the center points of the pins.

Pag. 10 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_stiffener@ 1,1

Shows stiffeners.

First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_plate@ 1,1

Shows plates.

First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_grid@ 1,0

Displays the fixture grid.

First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_testpin@ 1,1

Displays the test probes.

First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_violation@ 1,0

Shows any violations (after Check function has been run).

First parameter is the fixture side (1=top side, 2=bottom side)

Second parameter is 1=Visible, 0=Not Visible

bn_view_gridcolor@ 1,4
bn_view_pincolor@ 1,6
bn_view_toolcolor@ 1,7

Each of the above commands control the color of the Grid, Pins, and and Stiffener, respectively.

The first parameter is the Fixture side (1=top, 2=bottom) and the second parameter is the color code.

bn_view_gridsize@ 1,5.0000

Controls the size of the grid.

First parameter is 1=top, 2=bottom.

Second parameter is the grid size in mils.

testpt_setsize@ 30.0000

Pag. 11 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Parameter is the test point graphic size, in mils.

testpt_setcolor@ 8,9,11

Sets the display color for test points.

First # is the Top color, second is the Bottom color, and third is the Through-Hole color.

See Layer Color Codes.


view_settoptf@ 1

Controls visibility of top test fixture: 1=visible, 0=not visible

view_setbottf@ 1

Controls visibility of bottom test fixture: 1=visible, 0=not visible

view_settoptestpt@ 1
view_setbottestpt@ 1
view_setthrutestpt@ 0

Controls visibility of top, bottom, and through-hole test points, respectively. 1=visible, 0=not visible

Example

testpt_setsize@ 45.0000
testpt_setcolor@ 0,10,14
bn_view_pincircle@ 2,1
bn_view_pinline@ 2,1
bn_view_stiffener@ 2,1
bn_view_plate@ 2,1
bn_view_grid@ 2,1
bn_view_testpin@ 2,1
bn_view_violation@ 2,1
bn_view_gridcolor@ 2,12
bn_view_pincolor@ 2,5
bn_view_toolcolor@ 2,3
bn_view_gridsize@ 2,15.0000
view_settoptf@ 0
view_setbottf@ 1
view_settoptestpt@ 0
view_setbottestpt@ 1
view_setthrutestpt@ 1

Pag. 12 di 12
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Markers

Markers are a visual reference that you can use in any macro: they appear like a small X, in the same color as
the cursor. It is a visual reference only: you cannot snap to it because it is not part of your design. The X is
scaleable, just as if it were real data (the size changes with a zoom in or out). Markers are not saved with the
database, though they will remain visible for the entire time your data is loaded, unless you use the
clearmarkers@ command to turn them off.

addmarker@ N,X,Y,S

Adds a marker. It can also be used to move a marker or change its size, by entering a marker number that
currently exists.

N: marker ID number (unlimited)


X,Y: the X and Y coordinates to place the marker
S: size of the marker (in user units)

delmarker@ N

Deletes the marker (N is the marker ID number).

clearmarkers@

Deletes all markers.

currentmarker@ N

Sets the current marker to N.

markerX!

Returns the X coordinate for the current marker.

markerY!

Returns the Y coordinate for the current marker

markerX! and markerY! always return a value. 0 is returned for both if no markers are present or the
currentmarker@ value is not valid.

Pag. 1 di 1
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Getting Mouse Coordinates

Sometimes it is required to get the current mouse cursor coordinates for use in your macro. For example, a
macro that builds a test coupon from the current database needs to know where to place the test coupon. In
other cases a macro may need to process data only after the user is prompted to select it.

getmousepos@ "Text"

Causes macro execution to pause until a mouse button or key is pushed. The text string will be displayed as
message on the prompt line to assist the user.

button!

Returns the action taken on the mouse, following the getmousepos@ command:
1=left mouse button
2=right mouse button
3=middle mouse button
0=keyboard action

Coordinates of the mouse when the button/key is pushed are stored internally until requested by either of these
sets of queries:

coordx!
coody!

These queries return the actual coordinates of the mouse cursor. If grid snap is on, they return the nearest
grid coordinate. If object snap is on, they return the coordinate of the object within the snap box.

If you do not want the effects of snapping and want the exact coordinate of the mouse cursor when the button
was pushed, either turn all snapping off prior to the command's execution, or use these queries:

mouseposx!
mouseposy!

Example

100
Getmousepos@ "Select FIRST Point (Right Button Exits)"
If Button! = 1 then goto 110
If Button! = 2 then goto 820
Goto 100
110
Marker = 1
Gosub 840
...
...
' Exit routine
820
OK_Cancel "OK to EXIT? ",OK
If OK = 0 then goto 110
end@
' Add the marker subroutine
' Coord X & Y are after the effects of all snap modes.
840
CoordX# = CoordX!
CoordY# = CoordY!
Addmarker@ Marker,CoordX#,CoordY#,60
Getmousepos@ "Button 1 to MOVE, Button 2 to ACCEPT!"
If Button! = 1 then goto 840
If Button! = 2 then Return
Goto 840
end@

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Database Queries

Once you start writing macros you quickly recognize how important it is to be able to get data from the
database: what is the current active layer, what size is Dcode 10, what is the name of the current database, or
what is the date and time? Database queries provide you information on the current state of the database, and
its various elements.

Database query functions all end with the ! symbol and can return either real, integer or string values.

An example of a database query is dbminx! The code: MX% = dbminx! results in the integer variable MX% being
set to a whole value (in mils), representing the minimum X coordinate of the current database.

View Queries by Type:

Database Analysis Mouse/Cursor


Database Net & Padstack
Properties
Dcode System & Product
Drill & Mill Text
Layer Analysis
Miscellaneous

Macros Provided with the CAM350 Software


Obsolete Macros and Their New Equivalents
Macro Variables: Real, Integer and String

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Database Analysis Queries

These queries give specific design information about the current database. All of the following database queries
must be preceded by one of the Analyze Data macros. These queries only retrieve information that is gathered
by those macros. Otherwise, no information will be given by the query. All data returned is only for ACTIVE
layers.

R = Real, I = Integer, S = String

Tip: Remember, macro language layer numbering starts at 0. For example, layer 1 in a database returns layer
ID 0 within a macro.

Requirement: Most of these queries require the data be part of the netlist. If the design doesn't have extracted
nets, you can use Utilities > Netlist Extract to do so.

Select a query:

Smallest Pad Smallest Air Gap


Smallest Trace Dcode Smallest Annular Ring
Smallest Line Dcode Smallest Drill
SMT Pads Present Smallest Drill to Trace
SMT Pitch

Smallest Pad

Returns the smallest round Dcode that is part of a net.

Command Type Description/Example


min_pad_round_valid! I If nets are present, and round pads were found, this
returns 1. Otherwise, returns 0.
num_pads_round! I Number of round pads present.
min_pad_round_dcode! I Dcode number of the smallest round pad.
min_pad_round_loc_x! R X coordinate of the smallest round pad.
min_pad_round_loc_y! R Y coordinate of the smallest round pad.
min_pad_round_layer! I Number of layer that contains the smallest round
pad. (Remember, layer numbers start at 0)
min_pad_round_netname! S Net which contains the smallest round pad.

Smallest Trace Dcode

Returns the smallest round Dcode used in a trace (if nets are present)

Command Type Description/Example


min_trace_valid! I Returns a 1 if traces were found, 0 if not.
min_trace_dcode! I Returns the number of the smallest Dcode used in
a trace.
min_trace_loc_x! R Returns the X coordinate of the start of the trace.
min_trace_loc_y! R Returns the Y coordinate of the start of the trace.
min_trace_layer! I Returns the Layer ID of the layer that the smallest
Dcode occurs on.
min_trace_netname! S Returns the name of the Net that the smallest

Pag. 1 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Dcode occurs on.

Smallest Line Dcode

Returns the smallest round Dcode used in a graphic line (if nets are not present in the database).

Command Type Description/Example


min_line_valid! I Returns a 1 if lines were found, 0 if not.
min_line_dcode! I Returns the number of the smallest Dcode used in
a line.
min_line_loc_x! R Returns the X coordinate of the start of the line.
min_line_loc_y! R Returns the Y coordinate of the start of the line.
min_trace_layer! I Returns the Layer ID of the layer that the smallest
Dcode occurs on.

SMT Pads Present

Returns the number of SMT pads present on the selected layer(s). They must be part of nets.

Command Type Description/Example


min_pad_smt_valid! I If nets are present, and SMT pads were found,
this returns 1. Otherwise returns 0.
num_pads_smt! I Number of SMT pads on nets found.
min_pad_smt_width_dcode! I Dcode number of the SMT with the shortest
width (measuring the shortest side).
min_pad_smt_width_loc_x! R X coordinate of the SMT with the shortest
width.
min_pad_smt_width_loc_y! R Y coordinate of the SMT with the shortest
width.
min_pad_smt_width_layer! I Number of the layer that contains the SMT
with the shortest width.
min_pad_smt_width_netname! S Name of the net containing the SMT with the
shortest width.
min_pad_smt_length_dcode! I Dcode number of the SMT with the shortest
length (measuring the longest side).
min_pad_smt_length_loc_x! R X coordinate of the SMT with the shortest
length.
min_pad_smt_length_loc_y! R Y coordinate of the SMT with the shortest
length.
min_pad_smt_length_layer! I Number of the layer that contains the SMT
with the shortest length.
min_pad_smt_length_netname! S Name of the net containing the SMT with the
shortest length.
min_pad_smt_area_dcode! I Dcode of the SMT with the smallest area.
min_pad_smt_area_loc_x! R X coordinate of the SMT with the smallest
area.
min_pad_smt_area_loc_y! R Y coordinate of the SMT with the smallest
area.
min_pad_smt_area_layer! I Number of the layer that contains the SMT
with the smallest area.
min_pad_smt_area_netname! S Name of the net containing the SMT with the
smallest area.

Pag. 2 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...

SMT Pitch

Returns the shortest center-to-center distance between SMT pads.

Command Type Description/Example


min_smt_pitch_valid! I Returns a 1 if SMT were found, 0 if not.
min_smt_pitch_size! R Returns the shortest pitch distance.
min_smt_pitch_layer! I Number of the layer with the shortest pitch.
min_smt_pitch_loc1_x! R Returns the X coordinate of the two SMT pads.
min_smt_pitch_loc2_x!
min_smt_pitch_loc1_y! R Returns the Y coordinate of the two SMT pads.
min_smt_pitch_loc2_y!

Smallest Air Gap (metal-to-metal clearance)

Returns the air gap when nets are present. If no nets are detected, returns the area between any graphical
objects.

Command Type Description/Example


min_spacing_valid! I Returns a 1 if an air gap is found, 0 if not.
min_spacing_size! R Returns the smallest clearance.
min_spacing_layer! I Number of the layer with the smallest clearance.
min_spacing_loc1_x! R Represents an "imaginary line" drawn at the
min_spacing_loc1_y! location where the two nets/objects that have the
min_spacing_loc2_x! smallest clearance are closest (such as with Info >
min_spacing_loc2_y! Measure > Object-Object, which has a small
white line which indicates the location and distance
being measured between the objects).

Smallest Annular Ring

Returns the smallest width of material between a pad and the drill piercing it (to assure proper plating).

Command Type Description/Example


min_annular_ring_valid! I Returns a 1 if any annular ring space is found, 0 if
not.
min_annular_ring_size! R Returns the shortest annular ring space.
min_annular_ring_layer! I Number of the layer with the shortest annular ring
space.
min_annular_ring_loc1_x! R Represents an "imaginary line" drawn between the
min_annular_ring_loc1_y! drill and pad that have the smallest annular ring
min_annular_ring_loc2_x! space (such as with Info > Measure > Object-
min_annular_ring_loc2_y! Object, which has a small white line which
indicates the location and distance being measured
between the objects).

Smallest Drill

Smallest drill used in the design.

Pag. 3 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Command Type Description/Example
min_drill_valid! I Returns a 1 if drills are found in design, 0 if not.
min_drill_ref! I Returns the drill reference number of the smallest
drill.
min_drill_size! R Size of the smallest drill.
min_drill_layer! I Layer number of the drill layer with the smallest
drill.
min_drill_loc_x! R Returns the X coordinate of the smallest drill hit.
min_drill_loc_y! R Returns the Y coordinate of the smallest drill hit.

Smallest Drill-to-Trace Spacing

Returns the smallest distance between a drill and a trace that does not touch it. Must be on a positive electrical
layer (top, internal, bottom, pos. plane, etc.).

Command Type Description/Example


min_drill_2_trace_valid! I Returns a 1 if any drill-to-trace spacing is found, 0
if not.
min_drill_2_trace_size! R Returns the drill-to-trace space.
min_drill_2_trace_layer! I Number of the layer with the shortest drill-to-trace
space.
min_drill_2_trace_loc1_x! R Represents an "imaginary line" drawn between the
min_drill_2_trace_loc1_y! drill and trace that have the shortest spacing (such
min_drill_2_trace_loc2_x! as with Info > Measure > Object-Object, which
min_drill_2_trace_loc2_y! has a small white line which indicates the location
and distance being measured between the objects).

Pag. 4 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Database Properties Queries

Queries which return information about the extents of the database, workspace, etc., as well as general
database information.

Restriction: Database extent queries take into account all data in the design or specific layer, including any
Step&Repeat and Panel data present.

R = Real, I = Integer, S = String

Command Type Description/Example


Dbminx! R X coordinate of the minimum extent in the database, to
the centerline of the data at that coordinate
Dbmaxx! R X coordinate of the maximum extent in the database, to
the centerline of the data at that coordinate
Dbminy! R Y coordinate of the minimum extent in the database, to
the centerline of the data at that coordinate
Dbmaxy! R Y coordinate of the maximum extent in the database, to
the centerline of the data at that coordinate
Visminx! R Similar to the database extent queries above: however
Visminy! R these commands return the coordinate values for only
Vismaxx! R the "visible data" (layers turned ON). Coordinates
Vismaxy! R returned are to the centerline of the extent data.
Visminx_tshape! R Function much the same as the visxxxx! queries above,
Vismaxx_tshape! R but return the full extent of any data on the layer,
Visminy_tshape! R including the width of the Dcode used to draw the
Vismaxy_tshape! R extent data.
These queries are better to use for determining the true
extents of the data in the design.
Filmminx! R X coordinate of the minimum filmbox extent
Filmminy! R Y coordinate of the minimum filmbox extent
Filmmaxx! R X coordinate of the maximum filmbox extent
Filmmaxy! R Y coordinate of the maximum filmbox extent
Dbname! S String value for the filename of the current database,
including full path information
Units! I Returns the current user units setting for the database:
0 for English, 1 for Metric.
(These values are the same as the parameter for
setunit@).
Precision! I Returns the current database precision (as set in
Settings > Unit command). Value is denominator of
the resolution: 1, 10, 100, 1000, etc.
(These are the same as the parameter for
setresolution@).
Borderminx! R X coordinate of the minimum one-up border extent.
Borderminy! R Y coordinate of the minimum one-up border extent.
Bordermaxx! R X coordinate of the maximum one-up border extent.
Bordermaxy! R Y coordinate of the maximum one-up border extent.

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Dcode Queries

Returns information on the active Dcode in the design. Interactively this is indicated by the Dcode on the Tool
Bar. Within a macro, dcodes can be made active by using the setdcode@ command.

Tip: It is recommended you familiarize yourself with the available intrinsic apertures (especially their
parameters) and aperture macro commands before attempting to use them in a macro.

User Interface > ToolBar


Product Macro Commands > setdcode@
Product Macro Commands > Tables > Apertures
Getting Started > Aperture Chart

R = Real, I = Integer, S = String

Command Type Description/Example


Activedcode! I 10 - 9999
Dcodename! S Returns the name of the active Dcode if it is a custom.
Returns a null "" if not.
Dcodeshape! I 1=Round, 2=Square, 3=Rectangle, 4=Target,
5=Thermal, 6=Custom, 7=Donut, 8=Octagon,
9=Oblong
Dcodesizex! R In mils. Returns x-size for applicable apertures (Round,
etc). and width for applicable apertures (Diamond, etc).
Dcodesizey! R In mils. Returns y-size for applicable apertures (Round,
etc). and heigth for applicable apertures (Diamond,
etc).
DcodeExtentsx! R Returns the X extent (width) of the bounding box which
encloses an aperture. Useful for rotated apertures.
DcodeExtentsy! R Returns the Y extent (heigth) of the bounding box which
encloses an aperture. Useful for rotated apertures.
Dcodewidth! R Returns the width of all intrinsic apertures with the
width parameter, regardless of rotation.
Dcodeheight! R Returns the heigth of all intrinsic apertures with the
heigth parameter, regardless of rotation.
DcodeDescript! S Returns the parameter string for all apertures which use
it. (see CAM350 commands>set_aperture@ command )
Active_dcode_flashed! I Returns the number of times the active Dcode has been
used as a Flash on the active layer.
(In Cam Editor returns value for one-up; in Panel Editor
for panel data only).
Active_dcode_drawn! I Returns the number of times the active Dcode has been
used as a Draw on the active layer.
(In Cam Editor returns value for one-up; in Panel Editor
for panel data only).
NumdcodetypeD! I Number of times the active Dcode TYPE has been used
as a Draw on the active layer.
NumdcodetypeF! I Number of times the active Dcode TYPE has been used
as a Flash on the active layer.
Numflashes! I Number of times Dcode is used as a flash.
Numdraws! I Number of times Dcode is used as a draw.
Highestdcode! I The highest USED Dcode.
Blankdcode! I 10 - 999

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Drill & Mill Queries

NC Data macro queries have two states for determining tool information: current layer or current table.

For Current Layer mode, the NC data layer must be ON for tool queries. Information is derived about the NC
tools from the table which is assigned to that NC data layer. Tool information for other layers or NC Tables is
ignored.

For Current Table mode, the NC Table itself is referenced directly for the tool information, regardless of layer.
This state will return values for NC tools on all layers the table is assigned to.

Each state has its own set of macro queries assigned to it. The table below are formatted to provide all queries
from the same state.

In addition, there are a number of miscellaneous NC data queries which are not tool or table dependant.

Select a set of queries:

Current Layer:
Current Table:
Miscellaneous NC Queries

NC EDITOR

Current Layer Queries:

To access current tool information, you must first turn ON the NC layer you wish to query. If you wish to get
tool-specific information, you will need to use the following command to set the tool to retrieve information
from:

set_current_toolref@ # where the # is the Reference number of the tool in the table attached to the NC
layer.

Once you have set a tool, you may use these queries to retrieve information about it:

Rule: Each NC tool is automatically assigned a reference number by the system, which should be used to
manipulate the tool when writing macros related to NC data. The tool ID number, which is more familiar to most
operators, is used to identify the tool for import/export purposes.

R = Real, I = Integer, S = String

Tool-Specific Information:

Command Type Description/Example


Lyrdrillcount! I Number of occurrences of the current drill, on the
active layer.
Lyrdrillcount_plated! I Same as above, but counts only Plated drill hits on
the NC data layer.
Lyrdrillcount_unplated! I Same as above, but counts only Unplated drill hits
on the NC data layer.
Toolnum! I Returns the tool ID number of the current tool.
Toolsize! or R Size of current NC tool.
Drillsize!
Toolused! I Returns a 1 if tool is used on the current NC data
layer, 0 if not.
Pag. 1 di 5
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Drilllegend! I Returns the DCode of the aperture used to display
usage of the tool; if necessary an entry in the
aperture table will be created.
Toolreference! I Returns the tool reference of the current tool.
Tooltype! I Returns an integer specifying the type of the tool:
0 = Type Unknown
1 = Either (tool can be used for both mill and drill)
2 = Mill tool
3 = Drill tool
Toolinfeed! I Returns in feed value, 0 implies use machine
default.
Tooloutfeed! I Returns out feed value, 0 implies use machine
default.
Toolfeedrate! I Returns feed rate value, 0 implies use machine
default.
Toolrpms! I Returns tool RPM, 0 implies use machine default.
Toollinktool! I Returns tool reference of link tool (tool to be used
when maxhits reached on this tool).
Toolshape! I Returns shape to be used when displaying the tool:
-1 = Unknown
1 = Round
4 = Target
6 = Custom Aperture
Toolusesize! I Returns the setting of the Use Tool Size checkbox in
the NC Table (ignored when shape is custom
aperture):
0 = Display user-supplied size (value is 0 when
shape is custom aperture)
1 = Match displayed size to tool size (shape must
be round or target)
Tooldisplaysize! R Returns the size used in the Display Size field of the
NC Table. Value returned is not applicable if shape
is Custom Aperture. Only returns a value if Use Tool
Size is selected in table.
Toolcapname! I If tool is assigned a Custom Aperture display shape,
query returns the name of the custom aperture.

Tables>NC Tools>Use Tool Size checkbox

Table-Specific Information:

Command Type Description/Example


Highestdrill! I Returns the tool reference of the drill tool with the
highest tool ID number, that is USED on any drill
layer.
Highestuseddrillnum! I Same as above, but returns highest used drill tool
ID number.
Highestmill! I Returns the tool reference of the mill tool with the
highest tool ID number, that is USED on any mill
layer.
Highestusedmillnum! I Same as above, but returns highest used mill tool
ID number.
Highesttool! I Similar to above queries, but returns tool reference
regardless of used tool type (drill or mill).
Highestusedtoolnum! I Same as above, but returns highest used NC tool ID
number.
Highestdefdrill! I Returns the tool reference of the drill tool with the

Pag. 2 di 5
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
highest tool ID number in the table, irregardless of
usage.
Highestdefdrillnum! I Same as above, but returns highest drill tool ID
number in the table.
Highestdefmill! I Returns the tool reference of the mill tool with the
highest tool ID number in the table, irregardless of
usage.
Highestdefmillnum! I Same as above, but returns the highest mill tool ID
number in the table.
Highestdeftool! I Returns the tool reference of the tool with the
highest ID number in the table, irregardless of tool
type.
Highestdeftoolnum! I Same as above, but returns highest tool ID number.
Highesttoolref! I Returns the highest tool reference in the table.
Toolexportorder! I Returns tool export order (note that drill tools are
always exported before mill tools).
Tooltable! I Returns the number of the current tool table

Current Table Queries:

The following NC data queries retrieve information from a specific tool table. Note that these queries perform the
same functions as the ones just listed in the previous section, but do so regardless of the NC layer. The queries
themselves share a similar naming format, with the exception of the addition text "dbq_" indicating these are
database queries.

To activate the tool table to be checked, you must use this command:

set_nc_table@ #, where # is the number of the table to be used

In addition, to retrieve tool-specific information, you must use this command:

set_nc_tool@ #, where # is the tool reference of the tool to be queried

R = Real, I = Integer, S = String

Tool-Specific Information:

Command Type Description/Example


dbq_drillcount! I Number of occurrences of the current drill, on the
active layer.
dbq_drillcount_plated! I Same as above, but counts only Plated drill hits on
the NC data layer.
dbq_drillcount_unplated! I Same as above, but counts only Unplated drill hits
on the NC data layer.
dbq_toolnum! I Returns the tool ID number of the current tool.
dbq_toolsize! or R Size of current NC tool.
dbq_drillsize!
dbq_toolused! I Returns a 1 if tool is used on the current NC data
layer, 0 if not.
dbq_drilllegend! I Returns the DCode of the aperture used to display
usage of the tool; if necessary an entry in the
aperture table will be created.
dbq_toolreference! I Returns the tool reference of the current tool.
dbq_tooltype! I Returns an integer specifying the type of the tool:
0 = Type Unknown
1 = Either (tool can be used for both mill and drill)
2 = Mill tool

Pag. 3 di 5
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
3 = Drill tool
dbq_toolinfeed! I Returns in feed value, 0 implies use machine
default.
dbq_tooloutfeed! I Returns out feed value, 0 implies use machine
default.
dbq_toolfeedrate! I Returns feed rate value, 0 implies use machine
default.
dbq_toolrpms! I Returns tool RPM, 0 implies use machine default.
dbq_toollinktool! I Returns tool reference of link tool (tool to be used
when maxhits reached on this tool).
dbq_toolshape! I Returns shape to be used when displaying the tool:
-1 = Unknown
1 = Round
4 = Target
6 = Custom Aperture
dbq_toolusesize! I Returns the setting of the Use Tool Size checkbox in
the NC Table (ignored when shape is custom
aperture):
0 = Display user-supplied size (value is 0 when
shape is custom aperture)
1 = Match displayed size to tool size (shape must
be round or target)
dbq_tooldisplaysize! R Returns the size used in the Display Size field of the
NC Table. Value returned is not applicable if shape
is Custom Aperture. Only returns a value if Use Tool
SIze is selected in table.
dbq_toolcapname! I If tool is assigned a Custom Aperture display shape,
query returns the name of the custom aperture.

Tables>NC Tools>Use Tool Size checkbox

Ta ble-Specific Information:

Command Type Description/Example


dbq_highestdrill! I Returns the tool reference of the drill tool with the
highest tool ID number, that is USED on any drill
layer.
dbq_highestuseddrillnum! I Same as above, but returns highest used drill tool
ID number.
dbq_highestmill! I Returns the tool reference of the mill tool with the
highest tool ID number, that is USED on any mill
layer.
dbq_highestusedmillnum! I Same as above, but returns highest used mill tool
ID number.
dbq_highesttool! I Similar to above queries, but returns tool reference
regardless of used tool type (drill or mill).
dbq_highestusedtoolnum! I Same as above, but returns highest used NC tool ID
number.
dbq_highestdefdrill! I Returns the tool reference of the drill tool with the
highest tool ID number in the table, irregardless of
usage.
dbq_highestdefdrillnum! I Same as above, but returns highest drill tool ID
number in the table.
dbq_highestdefmill! I Returns the tool reference of the mill tool with the
highest tool ID number in the table, irregardless of
usage.
dbq_highestdefmillnum! I Same as above, but returns the highest mill tool ID

Pag. 4 di 5
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
number in the table.
dbq_highestdeftool! I Returns the tool reference of the tool with the
highest ID number in the table, irregardless of tool
type.
dbq_highestdeftoolnum! I Same as above, but returns highest tool ID number.
dbq_highesttoolref! I Returns the highest tool reference in the table.
dbq_toolexportorder! I Returns tool export order (note that drill tools are
always exported before mill tools).
dbq_tooltable! I Returns the number of the current tool table

Miscellaneous NC Data Queries:

Information pertaining to NC data layers and tools.

R = Real, I = Integer, S = String

Command Type Description/Example


Drilllayer! I Returns plated drill layer. Layers start at 0.
Drilllayer_unplated! I Returns unplated drill layer. Layers start at 0.
Milllayer! I Returns the mill layer.
Drilltool! I Returns the drill tool reference of the drill assigned
to the current padstack.

Pag. 5 di 5
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Layer Queries

Returns information about the layers in the current database.

Tip: Remember, macro language layer numbering starts at 0. For example, layer 1 in a database returns layer
ID 0 within a macro.

R = Real, I = Integer, S = String

Command Type Description/Example


Blanklayer! I Returns the first blank layer.
Activelayer! I Returns the active layer.
Borderlayer! I Returns the border layer .
Numlayers! I Total number of defined layers.
Drilllayer! I Returns plated drill layer.
Drilllayer_unplated! I Returns unplated drill layer.
Milllayer! I Returns the NC data layer containing mill data. (If
more than one exists, first layer's ID is returned).
Highestlayer! I The number of the highest layer.
Layerblank! I Returns a 1 if the active layer is blank, or a 0 if not.
Tests the active layer in the current editor being
used (i.e. Symbol Editor).
Layername! S The name of the current layer.
Layertype! I Returns the type for the active layer:
0=Top 13=Temporary
1=Internal 14=PosPlane
2=NegPlane 16=RefDes Top
3=Bottom 17=RefDes Bottom
4=Graphic 18=Insulator
6=Border 19=Paste Top
7=Silktop 20=Paste Bottom
8=Silkbot 21=NC Data
11=Masktop -2 = keep old value
12=Maskbot
Layerncrank! I Returns the NC Rank for the active layer (for use
with layers of type NC Data) :
0=NC_PRIMARY 1=NC_SECONDARY
Layermirrorstate! I Reports whether the active layer will be exported as
mirrored. Returns a 1 if it will be mirrored, returns a
0 if not.
Layerimagepolarity! I Returns the image polarity of the active layer.
0=positive, 1=negative.
Firstlayer! I The layer ID of the first layer.
Nextlayer! I The layer ID of the next layer AFTER the active
layer. Returns a -1 if there is no next layer.
Previouslayer! I The layer ID of the layer BEFORE the active layer.
Returns a -1 if there is no previous layer.
First_composite! I Returns the ID of the first composite in the design.
Returns -1 if there are no composites.
Next_composite! I Returns the ID of the next composite in the design.
Returns -1 if there are no composites.
Composite_background! I Returns 1 for dark, -1 for clear, or 0 for no
composite selected.
Composite_mirrored! I Returns 0 if the composite is not mirrored, 1 if
mirrored, -1 if there are no composites.
Composite_name! S Returns the name of the current composite.

Pag. 1 di 2
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Composite_plot_name! S Returns the plot (file) name of the current
composite.
First_composite_layer! I Returns the layer ID of the first layer in the
composite. -1 if no composite layer.
Next_composite_layer! I Returns the layer ID of the next layer in the
composite. -1 if no more composite layers.
Composite_layer_polarity! I Returns 1 for dark, -1 for clear, 0 if no composite
selected.

Pag. 2 di 2
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Misc. Queries

All other uncategorized queries.

R = Real, I = Integer, S = String

Command Type Description/Example


Quote! S Returns a quotation mark (")
CR! S Returns a new line character (carriage return)
Queryfound! I During a query, this returns whether anything was
found (1 if something is found, 0 if not found). This
remains in effect until the next query or the end of
the macro.
Example: if queryfound! = 1 then [do something]
querystring! S During any query, this returns all strings that
appear in the Query dialog. During any Measure,
this returns all strings that appear in the Measure
dialog.
Example: if queryfound! = 1 then [do something]
MarkerX! R Return the X and Y coordinates of the current
MarkerY! graphical Marker.

Marker Macros

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Mouse/Cursor Queries

Return input from the mouse, including coordinate of mouse cursor.

R = Real, I = Integer, S = String

Command Type Description/Example


Mouseposx! R Returns the X coordinate of the cursor after the
getmousepos@ command (ignores object and grid
snapping).
Mouseposy! R Returns the Y coordinate of the cursor after the
getmousepos@ command (ignores object and grid
snapping).
Coordx! R These commands return the coordinates of the
Coordy! R mouse cursor after a command has been run
which changes the mouse cursor's position (for
example, Info > Query > Dcode). This new
position is returned using grid and object
snapping: if grid snap is on, it returns the nearest
grid coordinate. If object snap is on, it returns the
coordinate of the object within the snap box.
Button! R Returns the cause of the termination of the
getmousepos@ command:

1=left mouse button


2=right mouse button
3=middle mouse button
0=keyboard action

Getting Mouse Coordinates

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Net & Padstack Queries

Returns information on the nets and padstacks in the database.

R = Real, I = Integer, S = String

Command Type Description/Example


Numnets! I Total number of nets in a database.
Nets! I 1=nets present, 0=no nets present
Padstacks! I 1=padstacks present, 0=no padstacks
Activepadstack! I Current padstack # (Padstacks start at 0)
Padstacksizex! R X dimension of current padstack.
Padstacksizey! R Y dimension of current padstack.
Highestpstk! I The highest USED padstack.

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
System & Product Queries

General queries about the application, and its state of performance.

R = Real, I = Integer, S = String

Command Type Description/Example


System_memory! I The amount of memory allocated, and is expected
to remain allocated for the entire session, for
working space. This amount is independent of data
loaded.
Data_memory! I The amount of memory allocated for user data.
Font_memory! I The amount of memory used to load fonts.
Product! S Returns the current application's product name.
Exepath! S Returns the application's executable file directory.
Time! S Example: Wed Apr 13 09:21:45 1994
Version! R Returns the current application's version number.

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Text Queries

Allows you to query the text style and contents of any current text in the database. For more information see
the macro commands for Add > Text.

R = Real, I = Integer, S = String

Command Type Description/Example


Text_fontname! S Returns current font name.
Text_height! R Returns current text height. This is the total
height of the text, not capital letter height.
Text_character_spacing! R Returns spacing between characters.
Text_line_spacing! R Returns spacing between lines.
Text_spaces_per_tab! R Returns number of spaces inserted for each tab
character.
Text_angle! R Returns angle of text.
Text_slant! I Returns slant of characters.
Text_fitted! I Returns whether selected text is fitted or not:
0 = Not
1 = Fitted
Text_horizontal_justification! I Returns horizontal justification:
0 = None
1 = Left
2 = Middle
3 = Right
Text_vertical_justification! I Returns vertical justification:
0 = None
1 = Baseline
2 = Bottom
3 = Center
4 = Top
Text_mirror! I Returns mirror setting: 0=not mirrored or
1=mirrored.
Text_vertical! I Returns vertical text display setting: 1=yes or
0=no
Text_width_scale! I Returns width X-scaling factor.

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
Analysis Queries

These queries return various information found by the Analysis Menu commands they refer to. In each case, the
Analysis command must be run either interactive, or in the course of the macro, for the query to return a value.

R = Real, I = Integer, S = String

Command Type Description/Example


Copperarea! R Returns total copper area for ON
layers in CAM Editor, and copper
area for panel layers in Panel
Editor. (Analysis > Copper Area
must be run first).
Number_solder_bridges! I Reports the number of solder
bridges found
(Analysis > Find Solder Bridges
must be run first).
Number_layer_compares! I Reports the number of layer
comparison errors found (Analysis
> Compare Layers must be run
first).
Number_starved_thermals! I Reports the number of starved
thermals found (Analysis > Find
Starved Thermals must be run
first).
Number_drill_errors! I Reports the number of drill errors
found (Analysis > Check Drill
must be run first).
Number_mill_errors! I Reports the number of mill errors
found (Analysis>Check Mill must
be run first).
Number_slivers! I Reports the number of slivers--
both mask and copper--found
(Analysis > Copper Slivers or
Analysis > Mask Slivers must be
run first).
Number_acid_traps! I Reports the number of acid traps
Number_acid_traps_ON_layers! found (Analysis > Acid Traps
must be run first).
Number_minimum_gap_errors! I Reports the number of minimum
Number_minimum_gap_errors_ON_layers! gap errors found (Analysis >
Minimum Gaps must be run first).
Number_minimum_width_errors! I Reports the number of minimum
Number_minimum_width_errors_ON_layers! width errors found (Analysis >
Minimum Widths must be run
first).
Number_drc_errors I Reports the number of DRC errors
found (Analysis > DRC must be
run first).
Histo1! I Number of violations for that
Histo2! I particular histogram. (Analysis >
Histo3! I DRC Histogram must be run
Histo4! I first).
Number_negplanethermconflicts! I Reports the number of negative
plane thermal conflicts found
(Analysis > Negative Plane
Thermal Conflicts must be run
first).
Number_pin_holes! I Reports the number of pin holes
found (Analysis > Find Pin Holes

Pag. 1 di 2
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/Q...
must be run first).
Number_Part2Part_errors! I Reports the number of part to
part spacing errors found
(Analysis > Part to Part Spacing
must be run first).
Number_SilkScreen_errors! I Reports the number of silkscreen
to solder mask spacing errors
found (Analysis > Silk to Solder
Spacing must be run first).
Number_ElecSolder_errors! I Reports the number of solder
mask to trace layer spacing errors
found (Analysis > Solder Mask to
Trace Spacing must be run first).

Analysis > Copper Area


Analysis > Find Solder Bridges
Analysis > Compare Layers
Analysis > Find Starved Thermals
Analysis > Check Drill
Analysis > Check Mill
Analysis > Copper Slivers
Analysis > Mask Slivers
Analysis > Acid Traps
Analysis > DRC
Analysis > DRC Histogram
Analysis > Negative Plane Thermal Conflicts
Analysis > Find Pin Holes
Analysis > Part to Part Spacing
Analysis > Silk to Solder Spacing
Analysis > Solder Mask to Trace Spacing

Pag. 2 di 2
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
Forms

A form is a dialog box similar to a Windows-style dialog: it is used to query input from the user. Instead of
relying upon combinations of Print and Input to obtain user-entered data, forms in BASIC allow macro
programmers to design a more powerful user interface by creating data entry forms which are custom-tailored
to a specific job function. Forms relieve the macro programmer from having to follow the traditional method of
using several input statements to get simple information from the user. If there is a choice between multiple
options, the programmer may now list the options within a single Form instead of using Yes/No tree answers or
having the user enter a number, letter, name, etc. to determine which path to follow. However, it is an
advanced piece of programming and not recommended for the beginning BASIC programmer.

Each form is comprised of a title bar, a control area, and one to three buttons at the bottom.

Example:

To add a form to a macro, you must use the macro commands listed below to create it, place controls inside the
control area, and then display the form for user interaction. There are a number of input options available to the
form writer: Input, Check, and Choice, as well as the ability to retrieve filenames from the user, and to Print
descriptive lines in the form. All of these input controls can be assigned variables which can be used by the
calling macro.

During the course of running a macro, the form is displayed on screen for the user to fill out. When the user has
finished filling out the form, they press one of the buttons at the bottom of the form to delete it and continue the
macro. If either the OK or the Yes button is pressed, the values entered into the input controls are saved in the
user-supplied variables. If either the Cancel or the No button is pressed, the values entered into the controls are
thrown away and the user's variables are left unchanged.

Each form must contain an OpenForm, a DisplayForm and a DeleteForm statement. The number of controls and
print lines contained in the form can be variable; the only limitations occur depending on the type of display
units chosen for the form:

Pixel display units show the form in direct screen resolution, giving you absolute control over the size of
the form, but can make it more difficult to arrange the layout of the form, especially when dealing with
line-spacing issues between the controls.

Pag. 1 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
Character display assumes the width and height of a screen font as its display unit. This allows you to
more easily space out lines and controls, but can result in limitations on the number of lines your form can
display, dependant on the resolution of the screen the macro is running on.

Using either display mode, the form cannot be larger or wider than the CAM350 work area (which includes any
toolbars that are currently turned on). To increase the available space in the work area, you may turn off the
toolbars while the form is being displayed on screen, using the macro commands for View > Toolbar, View >
Status Bar, and View > Layer Bar. Once the form has been deleted, these toolbars may be turned back on
again.

STATEMENTS

These commands create, populate, and close the form. Each command has should appear in the sequence
below: the exception is the AddForm command, which may be repeated multiple times to fill the form with
controls, before calling the DisplayForm command brings the Form up on screen.

Note: Any parameters enclosed in brackets [] are optional. If these parameters are not specified in a macro, the
system uses default values.

OpenForm

Creates a blank form and gives it the identifier n. This must be done before controls can be placed on a form.

Syntax:

OpenForm #n, width%, height%, title$, unit, buttons

#n is a number used to identify the form for adding controls, and for displaying and deleting the form. It
must be in the range 1 to 255.

width% is the width of the forms control area (based on the setting for unit)

height% is the height of the form's control area (based on the setting for unit) This value does not
make provisions for any buttons that you might put at the bottom of the form; you must factor those
into the overall height of the form.

title$ is the text placed in the title bar.

unit is either PIXEL or CHARACTER. If the unit is PIXEL, then all form coordinates (as well as the form
height and width) are in pixels. (Note that if you have a 640X480 display, then the display has 640 pixels
across by 480 pixels down.) If unit is CHARACTER, then all form coordinates (as well as the form height
and width) are in characters across and lines down. (A line is the height of a capital letter plus some
space to separate it from the next line.)

buttons indicates which buttons will appear at the bottom of the form (these are not in the control
area). You can choose between several combinations of buttons:

OK Just one button with "OK" on it.


OKCANCEL Two buttons, "OK" and "Cancel"
YESNO Two buttons, "Yes" and "No"
YESNOCANCEL Three buttons, "Yes", "No", and "Cancel"
PREVFINISH Two buttons, "Prev" and "Finish". Useful in conjunction with forms using the
NEXT buttons below, or as a final form.
NEXTCANCEL Two buttons, "Next" and "Cancel".
NEXTFINISH Two buttons, "Next" and "Finish". Useful as the final form in a series.
PREVNEXT Two buttons, "Prev" and "Next".
PREVNEXTFINISH Three buttons, "Prev", "Next", and "Finish". Useful as the
final form in a series.

AddForm
Pag. 2 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
Adds a control to the form identified by n in OpenForm.

Syntax:

AddForm #n, x%, y%, prompt$, type[, variable][, options]

#n identifies the form to which the control is to be added.

x% is the distance the control is offset from the left side of the form; this value uses the unit set in
OpenForm.

If CHARACTER, then this is the number of lines from the left of the control area.

If PIXEL, then this is the number of pixels from the left of the control area.

y% is the distance the control is offset from the top of the control area of the form (ignoring the
distance for the title bar); this value is in the unit set in OpenForm.

If CHARACTER, then this is the number of lines from the top of the cotnrol area.

If PIXEL, this is the number of pixels from the top of the control area.

prompt$ is a character string (either a literal or a string variable) which is displayed as a prompt line.

type is the kind of control to be added. This is either PRINT, INPUT, CHECK or CHOICE. Two other
controls may also be used here (GetOpenFilename and GetSaveFilename), but these alter the syntax
of the AddForm command (see their descriptions for the proper syntax).

variable applies to all control types except PRINT. The control will have a default state, which is set
based upon the value of the variable.

options are specific to each control type.

DisplayForm

Displays the form and waits for the user to fill it out. Control returns after the user presses one of the buttons
specified in OpenForm (OK, Cancel, etc.)

Syntax:

DisplayForm #n[, where]

where indicates where the form is to be displayed within the main application window. The setting can
be one of the following:CENTER, UPPERLEFT, UPPERRIGHT, LOWERLEFT or LOWERRIGHT. If not
specified, then CENTER is assumed.

DeleteForm

Frees the form ID n so that it can be reused. This should be called when the form is no longer needed.

Syntax:

DeleteForm #n

CONTROLS
Pag. 3 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
Controls use the standard values explained in the AddForm command. However, each control may have unique
variables:

Check

Displays a check box, which the user may check and uncheck with the mouse or keyboard.

Syntax:

AddForm #n, x%, y%, prompt$, Check, state%

state% is a variable that records the current state of the check box: 0 = off, 1 = on. It may be used
initially to set the box state, but returns the value the user has set after the form is displayed.

Example:

AddForm #1, 0, 4, "Display summary", Check, SummaryState%

Choice

Displays radio buttons, surrounded by a box, which the user may select one option from, using the mouse or
keyboard.

Syntax:

AddForm #n, x% y%, prompt$, Choice, which%, choice1$, choice2$[, choice3$, .....]

which% is the variable that returns the choice the user made: choices are numbered in sequence from
0 to n This value can be set initially to a specific choice before the form is displayed, but returns
whatever value the user chose while the form was displayed.

choicen$ represents the set of choices made available to the user. Each choice must have its own
variable. Two or more choices must be given.

Example:

AddForm #1, 0, 5, "Choose a name", Name%, "Tom", "Dick", "Harry"

GetOpenFileName

Functions similarly to the Windows "Open" file dialog box: obtains a filename from the user by displaying a
Windows-style drop down list. The returned filename can be used for file input/output purposes.

Syntax:

AddForm #n, x%, y%, prompt$, GetOpenFilename, filename$[, filter$[, filter_desc$[, FLAG[,
FLAG]]]]

filename$ is the variable which will return the retrieved filename. Returns the full filepath of the file.

filter$ is a file filter to limit which file types are displayed (such as *.txt). More than one file type can be
indicated by separating them with semi-colons ( "*.gbr;*.lgr"). If omitted, the default will be *.*.

filter_desc$ describes filter$ (e.g. "Gerber files").

Pag. 4 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
FLAG is any one of the following:

NoFileMustExist Does not verify if the file exists or not.

NoPathMustExist Does not verify if the path exists or not.

NoChangeDir Will not allow the user to change the current working directory.

Multiple FLAGS are permitted, separated by commas. If none of the above FLAGS are used, then their
opposite (default) functions will be used.

Example:

AddForm #1, 0, 5, "Open file:", GetOpenFilename, Read$, "*.txt","Text Files",


NoFileMustExist

GetSaveFileName

Functions similarly to the Windows "Save As" file dialog box: obtains a filename from the user by displaying a
Windows-style drop down list. The returned filename can be used for file input/output purposes.

Syntax:

AddForm #n,x%,y%,prompt$,GetSaveFilename,filename$[,default_ext$[,filter[,filter_desc$[,FLAG
[,FLAG]]]]]

filename$ is the variable which will return the retrieved filename. Returns the full filepath of the file.

default_ext$ is the default extension of the file being saved. It is a three character string with no
period (e.g. "txt").

filter$ is a file filter to limit which files are displayed (such as "*.txt"). If omitted, will be "*.*".

filter_desc$ describes filter$ (e.g. "Text files").

FLAG is any one of the following:

NoOverWritePrompt If the filename already exists, it does not prompt the user to verify before
overwriting it.

PathMustExist Requires the saved file's path to already exist.

NoChangeDir Will not allow the user to change the current working directory.

Multiple FLAGS are permitted, separated by commas. If none of the above FLAGS are used, then the
opposite, default functions will be used.

Example:

AddForm #1, 0, 5, "Please select a file to save", GetSaveFilename, Save$,


"gbr","*.gbr","Gerber Files", PathMustExist

Input

Accepts typed input from the user. There are three types of input controls: integer, real, and string:

1. Integer Input

Pag. 5 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
Syntax for integer controls:

AddForm #n, x%, y%, prompt$, Input, integer%[, low% to high%]

Example:

AddForm #1, 0, 1, "Enter the current year:", Input, Year%, 1990 to 2999

2. Real Input

Syntax for real controls:

AddForm #n, x%, y%, prompt$, Input, real#[, low# to high#]

Example:

AddForm #1, 0, 2, "Enter the offset in Inches:", Input, Offset#, 0.0 to 5.0

3. String Input

Syntax for string controls:

AddForm #n, x%, y%, prompt$, Input, string$[, width%]

Example:

AddForm#1, 0, 3, "Enter file name:", Input, Filename$, 80

Arguments for these commands are as follows:

integer% is used to retrieve the interger value entered by the user.

real# is used to retrieve the real value entered by the user.

string$ returns the string entered by the user.

low% to high% is an optional range of values which the user input must lie within. The control will
automatically validate this range, if it is present. It may be used for either integer or real input values.

width% is the optional string width (in characters) of the input box. If width% is not given, then the
width of the control is approximately 21 characters. The input box automatically scrolls to the left if more
characters are entered.

Print

Prints "dumb" text on the form, useful for information or instructions.

Syntax:

AddForm #n, x%, y%, prompt$, Print[, width%]

width% is the width (in characters) of the text. If necessary, the string will wrap either at this width%
number of characters or at the right edge of the control area (whichever is less).

prompt$ is the text to be displayed on the form.

Example:

Pag. 6 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
AddForm #1, 0, 0, "this is a string", Print, 40

FUNCTIONS

All these functions are used to check if a given button is pressed. They return n, which is either a 1 or a 0 and
may all be used in a Boolean expression. These functions only refer to the buttons on the bottom of the form,
they are not used by the macro programmer to add buttons to a form.

BUTTON FUNCTIONS

Button Function
OK FORMOK(n)
CANCEL FORMCANCEL(n)
YES FORMYES(n)
NO FORMNO(n)

OTHER FUNCTIONS

OpenNameOK

SaveNameOK

Both functions check to see if the last GetOpenFileName or GetSaveFileName were completed properly (by the
user selecting a file and pressing OK)..

Syntax:

OpenNameOK(n) = ok%
SaveNameOK(n) = ok%

n is the number of the form

ok% is the returned value:

1 = completed
0 = not completed

Example:

IF OpenName(1) = 0 THEN Error% = 1


IF SaveName(1) = 1 THEN GOTO 500

FileExists

May be used to determine if the file returned by GetOpenFileName or GetSaveFileName exists.

Syntax:

Pag. 7 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
FileExists(filename$) = ok%

ok% returns 1 if the file exists and is readable, 0 if not.

Example:

IF FileExists(test.gbr) = 1 THEN GOTO 100

EXAMPLE OF A FORM:

Following is an example of a macro that creates a form, and the resulting form.

label1$ = "This is an eighty character string to be used as a test for the Print command."
i% = 4
d# = 12345.678
s$ = "The quick brown fox"
j% = 1
k% = 2

OpenForm #1, 40, 12, "Test form", character, yesnocancel


AddForm #1, 0, 0, "Integer:", INPUT, i%, 0 to 10
AddForm #1, 0, 1, "Real : ", INPUT, d#
AddForm #1, 0, 2, "String :", INPUT, s$
AddForm #1, 1, 3, "Check:", CHECK, j%
AddForm #1, 2, 4, "Choice", CHOICE, k%, "Choice One", "Choice Two", "Choice Three"
AddForm #1, 0, 8, label1$, PRINT
AddForm #1, 2, 10, "Open File", GETOPENFILENAME, filename$
DisplayForm #1
if formcancel(1) then goto skipit

'Set strings for print statement:


i$ = str$(i%)
d$ = str$(d#)
j$ = str$(j%)
k$ = str$(k%)

print "i% = ",i$+cr!+"d# = ",d$+cr!+"s$ = "+quote!+s$+quote!+cr!+"Check = ",j$+cr!+"Choice = ",

skipit:
DeleteForm #1
End

Pag. 8 di 9
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...

Pag. 9 di 9
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Add Menu Macros

Alignment Pins Flash Rectangle


Arc Line Refdes
Border Mill Circle Step Image
Circle Mill Path Stiffener
Device Name Mill Slot Symbol
Drill Mill Tab Test Points
Drill Circle Operator Message Text
Drill Hit Optional Stop Tooling Offset (G93)
Drill Sequence Padstack Variable Text
Drill Slot Part Via
Drill Text Pin Wire
Ellipse (macro only) Polygon
Fixture Probes Polygon Void

Add > Alignment Pins

add_probot_marker@

Initiates command.

alignpt_side@ #
axy@ 0.0000,0.0000

Adds a new alignment pin, at the coordinates given. Multiple sets of coordinates may be given to add
additional pins. Parameter sets the type of alignment pin to use:

1=Top
2=Bottom
3=Through-Hole

Example

add_probot_marker@
alignpt_side@ 1
axy@ 1225.0000,2725.0000
axy@ 2175.0000,2275.0000
alignpt_side@ 2
axy@ 1750.0000,2500.0000
axy@ 2000.0000,2000.0000
alignpt_side@ 3
axy@ 1500.0000,2675.0000
axy@ 1250.0000,2250.0000
back@

Add > Arc

Center-Angle

Pag. 1 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

add_arc@
axy@ -50.0000,100.0000
axy@ 0.0000,100.0000
axy@ -150.0000,100.0000
back@

Adds an arc. Points specified are the center, start, and point that defines the angle.

In addition to the command sequence above, several commands may be added after the add_arc@ command
to assign the layer(s) which arc will appear on in the symbol, once the symbol is placed in a panel.

setlayer@ #

Sets the layer in the Symbol Editor that the arc will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

Type:

See Layer Type codes

Same as the above CAM Editor command sequence, but commands listed below may be added after
add_arc@ command to define attributes of the arc's graphic:

setpolarity@ Value

Sets the draw polarity for the line.

Value : 0=positive, 1=negative.

setwidth@ Width

Sets the drawing width in either mils or mm.

3-Point

add_arc3pts@
axy@ -50.0000,-50.0000
axy@ 100.0000,-50.0000
axy@ 50.0000,100.0000
back@

Pag. 2 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
The first two points are the end points of the arc. The third point is any other point (except the end points)
on the arc.

In addition to the command sequence above, several commands may be added after the add_arc3pts@
command to assign the layer(s) which arc will appear on in the symbol, once symbol is placed in a panel.

setlayer@ #

Sets the layer in the Symbol Editor that the arc will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Same as the above CAM Editor command sequence, but commands listed below may be added after
add_arc3pts@ command to define attributes of the arc's graphic:

setpolarity@ Value

Sets the draw polarity for the line.

Value : 0=positive, 1=negative.

setwidth@ Width

Sets the drawing width in either mils or mm.

2-Point

add_arctang@
axy@ -100.0000,50.0000
axy@ 200.0000,200.0000
back@

The two points are the end points of the arc.

In addition to the command sequence above, several commands may be added after the add_arctang@
command to assign the layer(s) which arc will appear on in the symbol, once symbol is placed in a panel.

setlayer@ #

Pag. 3 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Sets the layer in the Symbol Editor that the arc will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Same as the above CAM Editor command sequence, commands listed below may be added after
add_arctang@ command to define attributes of the arc's graphic:

setpolarity@ Value

Sets the draw polarity for the line.

Value : 0=positive, 1=negative.

setwidth@ Width

Sets the drawing width in either mils or mm.

Add > Border

Adds a polygonal border to the one-up design in the CAM Editor. This border will be used to determine
step&repeat image spacing in the Panel Editor, as well as provide a border for panel venting. Any number of
points describing the border may be entered - the command will automatically close the polygon after the
final point is specified.

add_border@

Inititates command.

setortho@ #

Sets the orthagonal angle of the slot being made.

0 = 90 degrees
1 = 45 degrees
2 = any angle

axy@ -118.6000,2355.5000
axy@ 2355.9000,2367.9000
axy@ 2268.8000,769.4000
back@

Pag. 4 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Axy@ commands select each susequent point on the polygonal outline. Back@ command closes polygon and
ends function.

add_symbol_border@
axy@ -25.0000,100.0000
axy@ 75.0000,0.0000
back@

Draws a rectangular border for the symbol, as defined by two opposite corner coordinates.

Add > Circle

3 Points

add_circle3pts@
axy@ -50.0000,150.0000
axy@ 100.0000,150.0000
axy@ 0.0000,250.0000
back@

Adds a circle given three points: the first two points are the end-points of the circle's arc. The third point is
any point on the circle EXCEPT an end point.

Same as the above command sequence, but command listed below may be added after add_circle3pts@
command to define attributes of the circle's graphic:

setpolarity@ Value

Sets the draw polarity for the line.

Value : 0=positive, 1=negative.

Similar to the CAM Editor 3 Point Circle command above, but several commands may be added after
add_circle3pts@ to assign the layer(s) which circle will appear on, in the symbol, once symbol is placed in a
panel.

add_circle3pts@

Adds a circle. given the following settings:

setlayer@ #

Sets the layer in the Symbol Editor that the circle will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

Pag. 5 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

axy@ -50.0000,150.0000
axy@ 100.0000,150.0000
axy@ 0.0000,250.0000
back@

Creates the circle, given three points: the first two points are the end-points of the circle's arc. The third
point is any point on the circle EXCEPT an end point.

Center Radius

add_circle@
axy@ -100.0000,200.0000
axy@ -50.0000,200.0000
back@

This adds a normal 2 point circle, with the first point defining the center and the second point defining a point
on the radius.

Same as the above command sequence, but command listed below may be added after add_circle@
command to define attributes of the circle's graphic:

setpolarity@ Value

Sets the draw polarity for the line.

Value : 0=positive, 1=negative.

Similar to the CAM Editor Center Radius command above, but several commands may be added after
add_circle@ to assign the layer(s) which circle will appear on, in the symbol, once symbol is placed in a panel.

add_circle3pts@

Adds a circle, given the following settings:

setlayer@ #

Sets the layer in the Symbol Editor that the circle will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers

Pag. 6 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Add > Device Name

add_name@

Adds a Device Name designator to the part.

partname_Turn@

Turns the Device Name attached to the cursor. Each instance of the command turns the Device Name a fixed
degree counter-clockwise. Degree is specified by setturn100angle@ command.

setturn100angle@ #

Sets the turn angle. # is 100 times the angle (650=6.5 degrees)

partname_Mirror@ #

Mirrors the Device Name attached to the cursor.

textcapheight@ #

Sets the text height of the Device Name (capital letter height), in current user units.

axy@ 0.0000, 0.0000

Placement point for the Device Name designator.

Example

add_name@
setturn100angle@ 4500
partname_Turn@
partname_Turn@
textcapheight@ 45.0000
partname_Mirror@
axy@ -325.0000,0.0000
back@

Add > Drill

Adds a single drill hit in a drill coupon. Hit must be associated with the drill tools in the NC Table.

add_symbol_drill@

Pag. 7 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Initiates the command.

Select one of the following to set the tool value for the drill:

SymDrlSpecSmallest@ Nth, Set, min/max

Sets the first drill based on the smallest drill in the design. Parameters are:

Nth: sets how far offset from the smallest drill in the table it should be: 0 means smallest, 1 is next to
smallest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the smallest size the first tool in the sequence can be (i.e. 45 indicates a tool
larger than 45 mils must be the first tool in the sequence)

SymDrlSpecLargest@ Nth, Set, min/max

Sets the first drill based on the largest drill in the design. Parameters are:

Nth: sets how far offset from the largest drill in the table it should be: 0 means largest, 1 is one below
largest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the largest size the first tool in the sequence can be (i.e. 100 indicates a tool
no larger than 100 mils must be the first tool in the sequence)

SymDrlSpecToolNum@ Tool Number

Sets the first tool in the sequence based on the ID number of the tool.

SymDrlSpecToolSize@ Size

Sets the first tool in the sequence based on the size of the tool (in user units).

SymSetDrillType@ 1

Sets the drill type to use in the sequence. 0 = Plated, 1 = Unplated.

axy@ x,y

Sets the coordinate to place the drill hit.

Example

add_symbol_drill@
SymDrlSpecLargest@ 0,0,0.0000
SymSetDrillType@ 0
axy@ -375.0000,-100.0000
back@

Add > Drill Circle

nc_add_drilled_circle@

Pag. 8 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
set_current_toolref@ #

Specifies the tool being used to make the circle. # is the tool REF number of the new tool.

axy@ -3075.0000,1300.0000
axy@ -2150.0000,825.0000
back@

This adds a drilled circle using the same format as a normal 2 point circle, with the first point defining the
center and the second point defining a point on the radius.

Add > Drill Hit

nc_add_drill_hit@

Initiates command.

set_current_toolref@ #

Specifies the tool being used to make the hit. # is the tool REF number of the new tool.

set_nc_plated_add_drill@ #

Specifies if a hit is plated (1) or unplated/tented (0).

axy@ 525.0000,5000.0000

Hit is added at the specified coordinate.

back@

Ends command.

Example

nc_add_drill_hit@
set_current_toolref@ 4
set_nc_plated_add_drill@ 0
axy@ 15.0800,53.7200
back@

Add > Drill Sequence

Adds a series of drill hits to a drill coupon. Drills may be ordered from smallest to largest, largest to smallest,
etc.: once the coupon is used in a panel, the command will space drill hits evenly along the path specified by the
two end points of the sequence. These "anchor" drills may be defined by their relationship to the smallest or
largest tool in the NC Table, by tool number, or by tool size. The hits will be propagated using the NC tool table
in the design.

add_drill_sequence@

Intializes the command.

First Drill tool settings:

Pag. 9 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Select one of the following to set the FIRST anchor tool's value.

FirstSymDrlSpecSmallest@ Nth, Set, min/max

Sets the first drill based on the smallest drill in the design. Parameters are:

Nth: sets how far offset from the smallest drill in the table it should be: 0 means smallest, 1 is next to
smallest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the smallest size the first tool in the sequence can be (i.e. 45 indicates a tool
larger than 45 mils must be the first tool in the sequence)

FirstSymDrlSpecLargest@ Nth, Set, min/max

Sets the first drill based on the largest drill in the design. Parameters are:

Nth: sets how far offset from the largest drill in the table it should be: 0 means largest, 1 is one below
largest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the largest size the first tool in the sequence can be (i.e. 100 indicates a tool
smaller than 100 mils must be the first tool in the sequence)

FirstSymDrlSpecToolNum@ Tool Number

Sets the first tool in the sequence based on the ID number of the tool.

FirstSymDrlSpecToolSize@ Size

Sets the first tool in the sequence based on the size of the tool (in user units).

Last Drill Tool settings:

Select one of the following to set the LAST anchor tool's value.

LastSymDrlSpecSmallest@ Nth, Set, min/max

Sets the last drill based on the smallest drill in the design. Parameters are:

Nth: sets how far offset from the smallest drill in the table it should be: 0 means smallest, 1 is next to
smallest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the smallest size the first tool in the sequence can be (i.e. 45 indicates a tool
larger than 45 mils must be the first tool in the sequence)

LastSymDrlSpecLargest@ Nth, Set, min/max

Sets the first drill based on the largest drill in the design. Parameters are:

Nth: sets how far offset from the largest drill in the table it should be: 0 means largest, 1 is one below
largest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the largest size the first tool in the sequence can be (i.e. 100 indicates a tool
smaller than 100 mils must be the first tool in the sequence)

Pag. 10 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
LastSymDrlSpecToolNum@ Tool Number

Sets the first tool in the sequence based on the ID number of the tool.

LastSymDrlSpecToolSize@ Size

Sets the first tool in the sequence based on the size of the tool (in user units).

Other sequence settings:


SymSetNumHits@ 0

Sets the number of drill hits to use in the sequence.

SymSetDrillType@ 1

Sets the drill type to use in the sequence. 0 = Plated, 1 = Unplated.

axy@ 32.8000,153.6000
axy@ 340.2000,-27.7000

Indicate the positions of the First and Last anchor drills in the sequence.

Example

add_drill_sequence@
FirstSymDrlSpecLargest@ 0,0,0.0000
LastSymDrlSpecSmallest@ 0,0,0.0000
SymSetNumHits@ 0
SymSetDrillType@ 0
axy@ 32.8000,153.6000
axy@ 340.2000,-27.7000
back@

Add > Drill Slot

nc_add_drilled_slot@

Adds a slot composed of overlapping drill hits.

set_current_toolref@ #

Specifies the tool being used to make the slot. # is the tool REF number of the new tool.

setortho@ #

Sets the orthagonal angle of the slot being made.

0 = 90 degrees
1 = 45 degrees
2 = any angle

axy@ 50.0000,2800.0000
axy@ 625.0000,2325.0000
back@

Coordinates are the beginning and ending drill hits of the slot.

Pag. 11 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Example

nc_add_drilled_slot@
set_current_toolref@ 7
setortho@ 1
axy@ 7.5300,63.6000
axy@ 23.9900,49.5100
back@

Add > Drill Text

nc_add_drilled_text@ X, Y, LyrID, Ref, Position,Text$

Adds text which is drilled using NC Tools:

X,Y are the starting point coordinates of the text.

LyrID is the number of the layer the text is being created on (must be an NC layer).

Ref is the tool reference number (in the tool table).

Position is the orientation of the text. 0=horizontal, 1=vertical

Test$ is the text string being drilled.

Example

nc_add_drilled_text@ 8234.4500,2792.5000,8,2,0,"THIS IS A TEST"


back@

Add an Ellipse

This special macro command sequence adds filled ellipses (sectorized representations of an ellipse).

Exception: this command is for macro use only, and does not have an Add Menu command equivalent.

add_filledellipse@

Initializes command.

set_filledellipsesize@ 100,200,10

First #: Width of the ellipse (greater than 0)

Second #: Height of the ellipse (greater than 0)

Third #: Angle (in degrees) of each sector of the ellipse (must be between -90 and 90 degrees, and not 0
degrees)

axy@ 500,500

Pag. 12 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Creates an ellipse at each X,Y coordinate. X,Y coordinate is the center of the ellipse.

Tip: you may use the set_filledellipsesize@ command between coordinates to change the size of the ellipse
being added.

Example

add_filledellipse@
set_filledellipsesize@ 100,200,10 'Sets first ellipse size
axy@ 500,500 'Adds two ellipses using this size
axy@ -500,-500
set_filledellipsesize@ 150,75,5 'Changes size of ellipse
axy@ -400,400 'Adds new ellipse of that size
back@

Add > Fixture Probes

On Bottom Fixture

bn_addbotpin@
axy@ 442.4000,4276.1000
axy@ 493.6000,4187.8000
back@

Adds a probe on bottom fixture. First coordinates are the test point location. Second set is the grid point
where the probe enters the first plate.

On Top Fixture

bn_addtoppin@
axy@ 442.4000,4276.1000
axy@ 493.6000,4187.8000
back@

Adds a probe on top fixture. First coordinates are the test point location. Second set is the grid point where
the probe enters the first plate.

Add > Flash

add_flash@
axy@ 5704.0000,17412.0000
back@

Adds a flash (using the Active Dcode) on the active layer, at the given location. Layer and Dcode must be
predefined before use.

In addition to the command sequence above, several commands may be added after the add_flash@ command

Pag. 13 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
to assign the layer(s) which flash will appear on in the symbol, once symbol is placed in a panel.

setlayer@ #

Sets the layer in the Symbol Editor that the flash will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

Type:

See Layer Type codes

Add > Line

add_line@
axy@ 5666.0000,17043.0000
axy@ 5856.0000,17240.0000
back@

Draws a line from the given beginning point to end point (using the Active Dcode) on the active layer. Layer
and Dcode must be predefined before use.

In addition to the command sequence above, several commands may be added after the add_line@ command
to assign the layer(s) which line will appear on in the symbol, once symbol is placed in a panel.

setlayer@ #

Sets the layer in the Symbol Editor that the line will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Pag. 14 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

add_line@

Draws a line, using the Active Dcode, on the active layer.

setpolarity@ Value

Sets the draw polarity for the line.

Value : 0=positive, 1=negative.

setendcap@ Value

Sets the drawn endcap shape.

Value: 0=square, 1=round.

setwidth@ Width

Sets the drawing width, in user units (either mils or mm).

axy@ 5666.0000,17043.0000
axy@ 5856.0000,17240.0000
back@

Sets beginning and end coordinates for the line being drawn.

Example

add_line@
setpolarity@ 2
setendcap@ 0
setwidth@ 20.0000
axy@ -53.8000,7.0000
axy@ 38.4000,3.3000
back@

Add > Mill Circle

nc_add_milled_circle@

Adds a milled circle using the following specifications:

set_current_toolref@ #

Specifies the mill tool being used. # is the tool REF number of the new tool.

nc_set_circ_inout@ 1

Defines the circle as Inside or Outside (0=inside, 1=outside)

nc_set_circ_dir@ 1

Pag. 15 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Denotes the direction the circle is to be milled. (0 = counter-clockwise, 1 = clockwise)

axy@ -1200.0000,1950.0000

Sets the center point.

axy@ -825.0000,1675.0000

Selects any point on the radius.

Example

nc_add_milled_circle@
set_current_toolref@ 1
nc_set_circ_inout@ 1
nc_set_circ_dir@ 1
axy@ 1400.0000,4350.0000
axy@ 1700.0000,4275.0000
back@

Add > Mill Path

nc_add_mill_path@

Starts the command.

Setup commands:

These commands may be set at the beginning of the path, or at subsequent new sections being added (i.e. if an
arc is added as the first section, setting nc_set_mill_path_seg_type@ 1 will change the path to a line for the
next section).

set_current_toolref@ #

Specifies the mill tool being used. # is the tool REF number of the new tool.

setortho@ #

Sets the orthagonal placement angle of the mill path section being added.

0 = 90 degrees
1 = 45 degrees
2 = any angle

nc_set_mill_path_seg_type@ 1

Sets the type of segment to be used in the path: 0= line, 1 = arc.

nc_set_mill_path_tang_type@ 1

Sets Tangential state of the path (smoothing connections between sections). 0 = off, 1 = on.

Coordinates:
axy@ -5875.0000,2875.000

Sets the First vertex of the path.

Pag. 16 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ -4250.0000,2875.0000

Any subsequent coordinate will set the end point of the first segment, and become the beginning point of a
new segment. There is no limit to the number of sections that can be added in this manner.

back@

Closes the first path being added.

You may continue adding more paths by using the commands outlined above, but these will be completely new
paths, unconnected to the original one.

back@

A second back@ command ends the path creation command entirely.

Example

nc_add_mill_path@
set_current_toolref@ 2
setortho@ 0
nc_set_mill_path_seg_type@ 0
nc_set_mill_path_tang_arc@ 0
axy@ 2050.0000,2875.0000 'Create first section of path
axy@ 4125.0000,2775.0000
setortho@ 1 'Add new settings for next section
nc_set_mill_path_seg_type@ 1
nc_set_mill_path_tang_arc@ 1
axy@ 5100.0000,1700.0000 'Add next section of path
axy@ 4300.0000,925.0000
setortho@ 2 'Change settings for last section
setortho@ 0
nc_set_mill_path_seg_type@ 0
nc_set_mill_path_tang_arc@ 0
axy@ 2100.0000,825.0000
back@ 'Add last section of path and close path
axy@ 5625.0000,4325.0000 'Start a new path here
axy@ 7000.0000,3675.0000
back@
back@ 'Exit Add Path command

Add > Mill Slot

nc_add_milled_slot@

Adds a milled slot using the following settings:

set_current_toolref@ #

Specifies the mill tool being used. # is the tool REF number of the new tool.

setortho@ #

Sets the orthagonal placement angle of the mill slot being added.

0 = 90 degrees
1 = 45 degrees
2 = any angle

Pag. 17 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ -125.0000,5125.0000

Sets the plunge point.

axy@ 900.0000,5075.0000

Sets the extraction point.

Example

nc_add_milled_slot@
set_current_toolref@ 1
setortho@ 2
axy@ 675.0000,1975.0000
axy@ 3825.0000,1750.0000
back@

Add > Mill Tab

nc_add_mill_tab@

Initiates command.

set_current_tabid@ 2

Selects the mill tab to be used. Parameter is Tab ID number. Tabs must be defined before they can used (see
Tables Define Mill Tabs).

axy@ 436.0769,3399.3846

Places tab at the assigned coordinates. You may continue adding tabs by specifying more coordinate points.

back@

Closes the command.

Example

nc_add_mill_tab@
set_current_tabid@ 2
axy@ 1372.4480,3991.8251
axy@ 1340.9424,3995.6548
axy@ 625.0000,3525.0000
back@

Add > Operator Message

nc_add_operator_msg@

Adds an operator message to a drill/mill path, as defined by these settings:

Pag. 18 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ -525.0000,3650.0000

This is a point on the drill/mill path that will have the operator message.

set_current_toolref@ #

If so desired, can be used to change the drill/mill tool used for the path. # is the tool REF number of the new
tool. (Optional)

nc_set_operator_msg_pos@ 0

0=message is displayed after the selected path, 1=message is displayed before the selected path.

nc_set_operator_msg_text@ "Test"

Defines the operator message. May be up to 20 alphanumerical digits.

axy@ -525.0000,3700.0000

The placement of the text.

back@

Closes command.

Example

nc_add_operator_msg@
axy@ 2474.6724,4148.0181
nc_set_operator_msg_pos@ 1
set_current_toolref@ 2
nc_set_operator_msg_text@ "this is a test"
axy@ 6150.0000,4325.0000
back@

Add > Optional Stop

nc_add_optional_stop@

Initiates command.

axy@ -290.1188,3457.9083

Any point on the drill/mill path to which the stop will be added.

axy@ -290.1188,3457.9083

The actual location of the stop.

back@

Ends command.

Pag. 19 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Add > Padstack

add_padstack@

Initiates command.

setpadstack@ 1

Chooses the padstack to add (remember padstacks, like layers, start from 0).

axy@ -150.0000,0.0000
back@

Adds padstack at selected point and closes command.

Add > Part

add_component@

Initiates command.

Part settings:

You may set the library and part to use. Project library is default, unless external library is selected. You
must also set the Device Name and Ref/Des number.

lib_setextlib@ Type, Id, Merge, "Filename"

Selects external part library. Only required when using external, not project, library.

Type is the type of library:


1=cap
2=part
3=symbol

Id is the source of the library:


0=system (filename parameter is ignored)
1=external

Merge determines if current library should be replaced:


0=overwrite
1=merge

Filename : Name of external library to load.

openlibitem@ Type, Part$

Selects part from the part library.

Type is the type of library:


1=cap
2=part
3=symbol

Pag. 20 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Part$ is the part name in the library.

addcomp_dev@ "Devname"

Specifies the Device Name of the part being added.

addcomp_refdes@ "RefDes"

Specifies the Ref/Des number of the part being added.

Part Placement:
addcomp_makecmp@
axy@ 1750.0000,4350.0000

Places part at given coordinate.

Prior to giving the coordinates, you may rotate the part or mirror it using the following commands:

addcomp_turn@

Rotates the part by the angle set in the setturn100angle@ command.

setturn100angle@ #

Sets the turn angle. # is 100 times the angle (650=6.5 degrees)

addcomp_mirror@

Mirrors part around centerline of part.

back@

Stops command. Used twice in sequence it completes the placement of one part. Macro may continue adding
parts by giving another coordinate point. Used 3 times it ends the command completely (see example).

Example

add_component@
lib_setextpartlib_wmap@ 1,0,"d:\CAM350\product\t-bird dev\demo.plb"
openlibitem@ 2,"DCASE"
addcomp_dev@ "Resistor"
addcomp_refdes@ "R1"
addcomp_makecmp@
setturn100angle@ 18000
addcomp_turn@
addcomp_mirror@
axy@ 2556.4000,18.4000 'Adds first part
back@
back@
axy@ 3232.9000,94.1000 'Adds another part of same type
back@
back@
back@ 'ends command

Add > Pin

add_pin@

Pag. 21 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Begins command.

set_pintype@ 1

Sets the type of pin to add to the device:

0 = Thru
1 = SMD Device side (mounted on the same side as part)
2 = SMD Opposite side (mounted on opposite side to part; used to denote edge connectors).

axy@ 0.0000,0.0000

Specifies the point to insert the new pin. The device's pin numbering will automatically be updated to include
the new pin you've entered, but if you want to designate the pin number, use the set_pinseq@ command:

set_pinseq@ "1"

Assigns a new pin number to the added pin.

Example

add_pin@
set_pintype@ 1
axy@ 50.0000,325.0000
set_pinseq@ "5"
back@

Add > Polygon

Style 1
Style 2
Style 3
Style 4

Style 1

Set Polygon Parameters:

Polygon parameters can be set at any time prior to the actual adding of the polygon:

polylayer@ lyrID

Sets the layer for the polygon to be created on. (-1 values specifies using the current layer).

polyfilldcode@ Dcode

Sets the Dcode for the polygon fill (Vector-filled polygons only).

polyclearance@ Clear

Clear specifies the offset distance from the border the polygon will pour up to. (0 offset fills the polygon).

polyfillpattern@ "Pattern"

Designates the fill pattern for a Vector-filled polygon.The pattern can be SOLID, HATCHED, or DCODE.

Pag. 22 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
polyfillmethod@ "Fill_method"

The fill method can be OUTLINE, RASTER, or VECTOR

polyaddtype@ "Polygon_type"

The polygon type can be SELBORDER, AREAFILL, or DRAWBORDER.

polyfilltoborder@ "Yes"

Define whether to fill to the border ("Yes" or "No")

polydeleteislands@ "No"

Determines the treatment of clearances (islands) within the polygon's area."Yes" indicates to Pour the
polygon, preserving islands, "No" indicates to Flood it, filling any islands.

polycenterline@ "No"

Determines the treatment of outlines within the polygon's area."Yes" indicates that any new polygon outline
and internal islands will trace exactly the outer edge of existing shapes. "No" indicates that the normal
polygon clearance will be used during outline generation. The polycenterline@ can only be "Yes: if the
polyfillmethod@ is "OUTLINE".

Set Polygon Patterns (Vector-filled polygons only):

HATCHED fill pattern: a hatched pattern uses 3 lines that make up the pattern, so the following values must be
set for all 3 lines (see example at end of section):

polypatdcode@ Line#, Dcode

Sets the Dcode number for a line in the polygon. Line# can be any line in the polygon (remember, like
layers, line numbers start at 0).

polypatangle@ Line#, Angle

Sets the Angle for the Line# being added to the hatch.

polypatstep@ Line#, Step

Sets the step distance (in mils) for the Line# being added to the hatch.

DCODE fill pattern: a Dcode pattern uses 3 lines that are spaced by offsetting and step distance, with the final
line representing only the Y-step value of the pattern. Lines 1 & 2 must set all three commands listed below,
while line 3 (the Y-step line) only needs to set the polypatstep@ command (see example at end of section):

polypatdcode@ Line#, Dcode

Sets the Dcode number for a line in the polygon. Line# can be any line in the polygon (remember, like
layers, line numbers start at 0).

polypatoffset@ Line#, Off

Sets the X-offset for the Line# being added.

polypatstep@ Line#, Step

Sets the X-step distance (in mils) for the Line# being added.

Note: this command also sets the Y-step for the final line in the pattern.

Creating the Polygon:

Pag. 23 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
After setup is finished, there are two types of pouring commands available to create the polygon:

add_pouring@
axy@ 225.0000,1575.0000
axy@ 225.0000,1375.0000
axy@ 450.0000,1375.0000
back@

add_pouring@ creates the polygon itself based on settings from the above macro commands. The resultant
polygon always deletes islands when it is poured.

To add a polygon without deleting islands, use:

add_poly_pouring@
axy@ 225.0000,1575.0000
axy@ 225.0000,1375.0000
axy@ 450.0000,1375.0000
back@

add_poly_pouring@ uses the polydeleteislands@ macro command to determine if islands should be deleted
during the pour.

see also Style 4

Example

Raster Polygon:

polylayer@ -1
polyfilldcode@ 10
polyclearance@ 0.0000
polyfillpattern@ "SOLID"
polyfillmethod@ "RASTER"
polyaddtype@ "DRAWBORDER"
polydeleteislands@ "No"
add_poly_pouring@
axy@ 8416.9000,8477.8000
axy@ 9675.8000,8499.1000
axy@ 9789.2000,7407.8000
axy@ 8473.6000,7360.6000
back@

HATCH Pattern:

polylayer@ -1
polyfilldcode@ 10
polyclearance@ 20.0000
polyfillpattern@ "HATCHED"
polypatdcode@ 0,232
polypatangle@ 0,45
polypatstep@ 0,400.0000
polypatdcode@ 1,232
polypatangle@ 1,30
polypatstep@ 1,400.0000
polypatdcode@ 2,232
polypatangle@ 2,45
polypatstep@ 2,400.0000
polyfillmethod@ "VECTOR"
polyaddtype@ "DRAWBORDER"
polydeleteislands@ "No"
add_poly_pouring@
axy@ 9054.6000,8034.9000
axy@ 9570.7000,8045.5000
axy@ 9642.7000,7574.3000
axy@ 8962.5000,7505.8000
back@

Pag. 24 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
DCODE Pattern:

polylayer@ -1
polyfilldcode@ 10
polyclearance@ 20.0000
polyfillpattern@ "DCODE"
polypatdcode@ 0,15
polypatoffset@ 0,0.0000
polypatstep@ 0,100.0000
polypatdcode@ 1,15
polypatoffset@ 1,50.0000
polypatstep@ 1,100.0000
polypatstep@ 2,100.0000
polyfillmethod@ "VECTOR"
polyaddtype@ "DRAWBORDER"
polydeleteislands@ "No"
add_poly_pouring@
axy@ 8960.1000,8112.9000
axy@ 9645.1000,8077.4000
axy@ 9645.1000,7551.9000
axy@ 8925.9000,7547.2000
back@
back@

SOLID fill:

polylayer@ -1
polyfilldcode@ 10
polyclearance@ 0.0000
polyfillpattern@ "SOLID"
polyfillmethod@ "VECTOR"
polyaddtype@ "DRAWBORDER"
polydeleteislands@ "No"
add_pouring@
axy@ 7995.0000,8766.8000
axy@ 9839.1000,8833.2000
axy@ 10146.9000,7272.8000
axy@ 8004.0000,7179.2000
back@

Style 2

Creating polygons in these editors is more simplified than in the CAM or Panel Editors: the editors are only
capable of creating solid polygons, requiring only basic commands:

add_gr_poly@
axy@ 0.0000, 0.0000

Adds a solid polygon, as denoted by a created border. The placement coordinates designate the end points of
one line segment in the border. Any number of line segments can be added in the border using new
coordinates for end points. Exiting the command, using back@, automatically closes the polygon.

see also Style 4

Example

add_gr_poly@
axy@ -100.0000,80.0000
axy@ 40.0000,76.0000
axy@ 40.0000,-56.0000
axy@ -148.0000,-72.0000
back@

Pag. 25 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Style 3

Creating polygons in the Symbol Editor is more simplified than in the CAM or Panel Editors: the editor is only
capable of creating solid polygons, requiring only basic commands:

add_gr_poly@
axy@ 0.0000, 0.0000

Adds a solid polygon, as denoted by a created border. The placement coordinates designate the end points of
one line segment in the border. Any number of line segments can be added in the border using new coordinates
for end points. Exiting the command, using back@, automatically closes the polygon.

In addition to the command sequence above, several commands may be added after the add_gr_poly@
command to assign the layer(s) which polygon will appear on in the symbol, once symbol is placed in a panel.

setlayer@ #

Sets the layer in the Symbol Editor that the polygon will be added to. (Remember macro layering begins at
0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Example

add_gr_poly@
SymSetLayerSpec@ 2
setlayer@ 2
axy@ -275.0000,200.0000
axy@ 250.0000,200.0000
axy@ 225.0000,-150.0000
axy@ -275.0000,-125.0000
back@

Style 4

You may use this macro-only command to add a positive polygon to your design. The polygon is solid-fill only,
and will be created on the active layer. However, unlike the add_pouring@ command, you may add "cut-
line" polygon voids during the course of creating the polygon:

add_polygon@
axy@ 870.0000,3885.0000
axy@ 870.0000,3910.0000
Pag. 26 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 885.0000,3910.0000
back@

Each coordinate denotes the end point of a line segment in the polygon's border. Entering the final coordinate
pair automatically closes the polygon.

Add > Polygon Void

Circle

add_polyvoid_cir@

Adds a circular void in a solid raster polygon. (Command will not work on vector-filled polygons).

axy@ 3129.6000,10784.2000
axy@ 3246.3000,10709.9000
axy@ 3458.6000,10571.9000

3 points follow the initial command: first point selects the polygon to add the void to (can be any point in
polygon), second is center of circular void, and third is the radius of the void.

back@

Ends command.

Line

add_polyvoid@

Adds a polygonal-shaped void in a solid raster polygon. (Command will not work on vector-filled polygons).

setortho@ #

Sets the orthagonal angle for placing line segments that will form the void's outline.

0 = 90 degrees
1 = 45 degrees
2 = any angle

axy@ 0.0000, 0.0000

Each coordinate following the initial command designates the end point of a line segment on the void's "outline".
Multiple coordinates may be entered to create the void.

back@

Ends the command; polygonal void will automatically close itself, forming a clearance in the polygon.

Example

add_polyvoid@
setortho@ 2
axy@ 3904.4000,10784.2000
axy@ 3893.7000,10954.0000
axy@ 6048.2000,10168.6000

Pag. 27 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 6048.2000,10943.4000
axy@ 4318.3000,11155.6000
back@

Add > Rectangle

add_rectangle@
axy@ -150.0000,-100.0000
axy@ 150.0000,-300.0000
back@

Draws a rectangle, as defined by the coordinates of two opposite corners, using the Active Dcode, on the
active layer (both must be pre-defined).

In addition to the command sequence above, several commands may be added after the add_rectangle@
command to assign the layer(s) which line will appear on in the symbol, once symbol is placed in a panel.

setlayer@ #

Sets the layer in the Symbol Editor that the rectangle will be added to. (Remember macro layering begins at
0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Add > Refdes

add_refdes@

Adds a Ref/Des designator to a part, as defined by the commands below:

setturn100angle@ #

Sets the turn angle. # is 100 times the angle (650=6.5 degrees)

partname_Turn@

Pag. 28 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Turns the Reference Designator attached to the cursor, at the angle defined by setturn100angle@.

partname_Mirror@ #

Mirrors the Reference Designator attached to the cursor.

textcapheight@ 70.0000

Sets the Reference Designator text height.

setdcode@ 10

Selects the Dcode to use to create the Ref/Des text in the finished part.

axy@ 0.0000,50.0000
back@

Specifies the placement point for the Ref/Des designator and ends command.

Example

add_refdes@
setturn100angle@ 4500
partname_Turn@
partname_Mirror@
textcapheight@ 45.0000
setdcode@ 10
update_dcodebar@
axy@ 0.0000,50.0000
back@

Add > Step Image

add_step_image@
axy@ X#, Y#
back@

Command adds a copy of the one-up design to the panel. axy@ command specifies placement coordinates:
note - these coordinates correspond to the location of the image's space origin in the one-up image.

Add > Stiffener

On Bottom Fixture

bn_addbottool@
axy@ 74.9000,4701.9000
back@

Places a stiffener on the bottom fixture. Coordinates are the location point of the stiffener.

On Top Fixture

Pag. 29 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

bn_addtoptool@
axy@ 74.9000,4701.9000
back@

Places a stiffener on the top fixture. Coordinates are the location point of the stiffener.

Add > Symbol

add_symbol@

Initializes command.

openlibitem@ 3,"change"

Specifies symbol to add: parameters are library being used (3 defaults to project library) and name of the
symbol.

setturn100angle@ #

Sets the turn angle. # is 100 times the angle (650=6.5 degrees)

add_symbinst_turn@

Turns the symbol attached to the cursor, at the angle defined by setturn100angle@.

axy@ -3875.0000,24700.0000

Notes location to add aymbol.

change_symbInstName@ "test"

Changes the symbol being added to a new selection (same effect as using the drop-down menu in the tool
bar while running command interactively).

Example

add_symbol@
openlibitem@ 3,"drill"
setturn100angle@ 4500
add_symbinst_turn@
axy@ -12250.0000,21825.0000
back@

Add > Test Points

Manually adds inidividual test points to a database. To add them automatically, use File > Create > Test
Points.

add_testpt@
Pag. 30 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Intializes command.

testpt_startcreatefil@

Begins addition of test points.

axy@ 1075.0000,4275.0000

Coordinates define the location for each test point. Any number can be added.

back@

Ends addition of new test point coordinates.

testpt_endcreatefil@
back@

Closes test point creation process and ends command.

Example

add_testpt@
testpt_startcreatefil@
axy@ 3875.0000,1925.0000
axy@ 7825.0000,3100.0000
axy@ 200.0000,1575.0000
axy@ 200.0000,2175.0000
axy@ 200.0000,2375.0000
back@
testpt_endcreatefil@
back@

Add > Text

Text parameters can be set at any time prior to the actual addition of the text with the add_text@ command.
For more information on these parameters see Edit > Change > Text.

Font Settings:

Specifies the font to use for text. May be set prior to or after text settings in the Text Settings section below.

textfont@ "SIMPLE.EFN"

This is used if an EFN font is used. Otherwise, the following command is used:

textfontface@ 2, "Arial"

Specifies a non-EFN font to use. This is the font face name, not a filename.

First number is the type of font:

2=True Type
4=Autocad SHP
8=Autocad SHX

The second parameter is the face name of the font.

Pag. 31 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Text Settings:

Once the text and font to be changed have been selected, any of the following commands can be issued (in any
order) to change the text attributes:

textfullheight@ 100.0000

Sets the full text height, in user units, taking into account characters with descenders (as well as a little
additional font-dependent spacing so that lines will not overlap). The old command textheight@, used with
version 2.X and earlier, will still function with this macro.

textcapheight@ 50

Specifies the exact height for the font's capital letters, in user units. All other characters are based relative to
this set height.

Note: the above two macro commands are mutually exclusive. When used in a macro, each overrides the
previous one's settings for any new text being added.

textangle@ 4500

Angle of the text, times 100 (i.e. 4500 = 45 degrees)

textmirror@ 1

Sets text mirroring state. 0=not mirrored or 1=mirrored

textjust@ 4

Sets the text justification, as follows:

33 = Left Baseline
36 = Center Baseline
34 = Right Baseline
17 = Left Bottom
20 = Center Bottom
18 = Right Bottom
5 = Left Center
4 = Center Center
6 = Right Center
9 = Left Top
12 = Center Top
10 = Right Top

textfitting@ 1

Sets the text as fitted or not. 0=no fit or 1=fit

textcspace@ 20.0000

Sets the character spacing, in user units.

textlspace@ 100.0000

Sets the line spacing, in user units.

textslant@ 0

Text slant is set in degrees times 100. Positive values slant the font to the right, negative values slant it to
the left. You can italicize a non-italics font face by specifying a slant angle. (Typical italic font faces are
slanted about 10 to 15 degrees.)

Pag. 32 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
textxscale@ 500

Sets a text scale value (times 100). This applies to the width of individual characters. For example,
textxscale@ 200 would make each character twice a wide as initially defined, while textxscale@ 50 would
make the characters half as wide as initially defined.

textvertical@ 1

Determines if text is displayed vertically. 1=yes or 0=no

Text creation:
add_text@

Initializes add text entry.

addtext@ BeginX, BeginY, PointX, PointY, "Text"

addtext@ commands performs the actual creation of the text:

BeginX and BeginY are the beginning coordinates of the text being added.

PointX & PointY is a coordinate anywhere within the text being added. This second set of coordinates finalizes
the addition of the text; for ease of use, it is recommended you reuse the beginning coordinates for these
coordinates.

Text is the text to be added. Notice that the text is carried as a string, and is limited to 250 characters per
string. You may use +CR!+ as a carriage return, so for example, a Text value of "This is line 1"+CR!+"Line
2" will display as:

This is line 1
Line 2

back@

Exits the command.

Example

add_text@
textfontface@ 2,"Arial Black"
textfullheight@ 100.0000
textfitting@ 0
textcspace@ 0.0000
textlspace@ 30.0000
textangle@ 27000
textslant@ 3400
textxscale@ 200
textmirror@ 1
textvertical@ 1
textjust@ 4
addtext@ 2017.1000,3547.0000,2489.2555,4246.9994,"this is a test"
back@

Commands are identical to the CAM Editor Add > Text commands above, but several additional commands may
be added after the add_text@ command to assign the layer(s) which text will appear on in the symbol, once
symbol is placed in a panel.

Pag. 33 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setlayer@ #

Sets the layer in the Symbol Editor that the text will be added to. (Remember macro layering begins at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

Add > Tooling Offset (G93)

Drill Origin

add_drillorg@
axy@ 1125.0000,2575.0000
back@

Sets the tooling offset drill origin (G93 command), as specified by the coordinates.

Mill Origin

add_millorg@
axy@ 1350.0000,2525.0000
back@

Sets the tooling offset mill origin (G93 command), as specified by the coordinates.

Add > Variable Text

Similar to Add > Text command, but adds Variable Text to a Symbol.

Text parameters can be set at any time prior to the actual addition of the variable text. For more information on
these parameters see Edit > Change > Text.

Font Settings:

Specifies the font to use for text. May be set prior to or after text settings in the Text Settings section below.

textfont@ "SIMPLE.EFN"

This is used if an EFN font is used. Otherwise, the following command is used:
Pag. 34 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
textfontface@ 2, "Arial"

Specifies a non-EFN font to use. This is the font face name, not a filename.

First number is the type of font:


2=True Type
4=Autocad SHP
8=Autocad SHX

The second parameter is the face name of the font.

Text Settings:

Once the text and font to be changed have been selected, any of the following commands can be issued (in any
order) to change the text attributes:

textfullheight@ 100.0000

Sets the full text height, in user units, taking into account characters with descenders (as well as a little
additional font-dependent spacing so that lines will not overlap). The old command textheight@, used with
version 2.X and earlier, will still function with this macro.

textcapheight@ 50

Specifies the exact height for the font's capital letters, in user units. All other characters are based relative to
this set height.

Note: the above two macro commands are mutually exclusive. When used in a macro, each overrides the
previous one's settings for any new text being added.

textangle@ 4500

Angle of the text, times 100 (i.e. 4500 = 45 degrees)

textmirror@ 1

Sets text mirroring state. 0=not mirrored or 1=mirrored

textjust@ 4

Sets the text justification, as follows:

33 = Left Baseline
36 = Center Baseline
34 = Right Baseline
17 = Left Bottom
20 = Center Bottom
18 = Right Bottom
5 = Left Center
4 = Center Center
6 = Right Center
9 = Left Top
12 = Center Top
10 = Right Top

textfitting@ 1

Sets the text as fitted or not. 0=no fit or 1=fit

textcspace@ 20.0000

Sets the character spacing, in user units.

Pag. 35 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
textlspace@ 100.0000

Sets the line spacing, in user units.

textslant@ 0

Text slant is set in degrees times 100. Positive values slant the font to the right, negative values slant it to
the left. You can italicize a non-italics font face by specifying a slant angle. (Typical italic font faces are
slanted about 10 to 15 degrees.)

textxscale@ 500

Sets a text scale value (times 100). This applies to the width of individual characters. For example,
textxscale@ 200 would make each character twice a wide as initially defined, while textxscale@ 50 would
make the characters half as wide as initially defined.

textvertical@ 1

Determines if text is displayed vertically. 1=yes or 0=no

Text Creation:
add_variable_text@

Initializes command.

setlayer@ #

Sets the layer in the Symbol Editor that the variable text will be added to. (Remember macro layering begins
at 0).

SymSetLayerSpec@ Lay

Specifies type of layer which symbol is to be placed on in a panel. Lay is as follows:

1 = ALL Layers
2 = All Electric Layers
3 = All Layers of the type data is being created on
4 = Current Layer (active layer # in the symbol editor)

SymSetLayerOfType@ Type

When choosing 3 in SymSetLayerSpec@, this command specifies the layertype of the layer.

See Layer Type codes

add_variable_text_do@ BeginX, BeginY, PointX, PointY, "Variable"

Command performs the actual creation of the text:

BeginX and BeginY are the beginning coordinates of the text being added.

PointX & PointY is a coordinate anywhere within the text being added. This second set of coordinates finalizes
the addition of the text; for ease of use, it is recommended you reuse the beginning coordinates for these
coordinates.

Variable is the text to be added. This is a string, and is limited to 250 characters per string.

Note: Spaces, tabs and carriage returns are not allowed in Variable Text. The text being added is considered a
single variable. To separate words/ideas, use an underscore "_".

back@

Pag. 36 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Exits the command.

Example

add_variable_text@
setlayer@ 2
SymSetLayerSpec@ 2
setdcode@ 10
update_dcodebar@
textfontface@ 2,"Algerian"
textfullheight@ 120.0000
textcspace@ 5.0000
textlspace@ 10.0000
textangle@ 4500
textxscale@ 100
textmirror@ 1
textjust@ 33
add_variable_text_do@ -1050.0000,175.0000,-790.6253,175.0000,"jobnumber"
back@

Add > Via

add_via@

Intiates the command.

setpadstack@ 1

Chooses the padstack to add (remember padstacks, like layers, start from 0).

axy@ -150.0000,0.0000
back@

Specifies the point to add the Via, and closes command.

Add > Wire

Adds sections to a trace that maintain electrical conductivity with the net. Can also be used to add new nets
to the design.

add_wire@

Initiates command.

setnetname@ "netname"

Sets net name for new net being added (not required if command is ammending a previous net. i.e. the first
section begins on a net).

setortho@ #

Sets the orthagonal angle for placing the line segments of the wire.

Pag. 37 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
0 = 90 degrees
1 = 45 degrees
2 = any angle

axy@ X, Y

Sets the begin/end points for line segments on the wire. Initial axy@ command is the first point, while all
other subsequent coordinates represent end point of each new section. If first coordinate is on an existing
net, wire is merged as part of that net. Any number of segments may be added to the wire.

back@

Ends segment addition, closing net and ending command.

Example

add_wire@
setnetname@ "test$"
setortho@ 1
setpadstack@ 3
axy@ 1907.7000,3632.4000
axy@ 2143.4000,3868.1000
axy@ 3739.0000,3868.1000
axy@ 4301.1000,3868.1000
axy@ 4600.3000,3868.1000
axy@ 4527.8000,3868.1000
axy@ 4908.6000,4248.9000
back@

Pag. 38 di 38
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Analysis Menu Macros

Acid Traps DRC Histogram Minimum Gaps


Check Drill Find Pin Holes Negative Plane Thermal Conflicts
Check Mill Find Solder Bridges Net Check
Compare Layers Find Starved Thermals Part to Part Spacing
Copper Area Isolated Connections Silk to Solder Spacing
Copper Slivers Mask Slivers Solder Mask to Trace Spacing
DRC Minimum Gaps

Analysis > Acid Traps

acidtrapdetect@

Initiates command.

setacidtrapparms1@ Size, Angle, Layers, Remove, Fix

Sets the values to use for finding acid traps:

Size: Maximum size of acid traps detected (mils).

Angle: Maximum angle of acid traps detected (1 to 89 degrees).

Layers: 1 = process ON copper/electrical layers only, 0 = process all ON layers.

Remove: Remove old acid trap flags on layers that are processed.

Fix : repair any located acid traps, 1 = fix any acid traps that are found, 0 = do not fix
acid traps

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ 16336.7000,12527.7000
axy@ 24443.2000,19409.3000
back@

To have the entire layer or composite be processed, the following command replaces the axy@ selection
commands:

acid_trap_layer@

Example

acidtrapdetect@
setacidtrapparms1@ 10.0000,50,1,1,1
axy@ 841.9000,1983.7000
axy@ 1935.4000,1043.5000
back@

Pag. 1 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Analysis > Check Drill

All of the following commands must be run for each drill layer being checked (see example).

delete_error_list@ ListID, lyrID

Removes any old error flags from previous use of the check.

ListID indicates type of error flags. In this case 5 indicates "drill".

lyrID indicates layer number of drill layer being checked.

nc_analysis_drill_errors@ Layer ID, Overlap, Redundant, Double, Clearance

Analyzes drill layers, given the settings in the parameters:

Layer ID: ID of the NC layer to be checked

Overlap: check for overlapping drill hits. 1=Yes, 0=No

Redundant: check for multiple drill hits by same tool in same location. 1=Yes, 0=No

Double: check for multiple drill hits by different tools in same location. 1=Yes, 0=No

Clearance:
# = when non-zero value is specified, checks for drill holes that are not touching, but are within this distance
from each other.
0 = do not check.

nc_set_fix_drill_errors@ FixCoincident, FixRedundant

Determines which type of fixes will be performed on drill errors:

FixCoincident: 1 = fix coincident drill hits, 0 = do not fix coincident drill hits

FixRedundant: 1 = fix redundant drill hits, 0 = do not fix redundant drill hits

Example

delete_error_list@ 5,7
nc_analysis_drill_errors@ 7,1,1,1,0.2540 'performs check for layer 8
nc_set_fix_drill_errors@ 1, 1
delete_error_list@ 5,10
nc_analysis_drill_errors@ 10,1,1,1,0.2540 'performs check for layer 11
nc_set_fix_drill_errors@ 1, 1
back@

Analysis > Check Mill

All commands must be run for each NC data layer, containing mill data, being checked (see example).

delete_error_list@ ListID, lyrID

Removes any old error flags from previous use of the check.

Pag. 2 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
ListID indicates type of error flags. In this case 6 indicates "mill".

lyrID indicates layer number of drill layer being checked.

nc_analysis_mill_errors@ Layer ID, Implode, Intersect, Tab Error

Analyzes drill layers, given the settings in the parameters:

Layer ID: ID of the NC layer to be checked

Implode: check for imploded arcs. 1=Yes, 0=No

Intersect: check for intersecting mill paths. 1=Yes, 0=No

Mill Tabs: check for mill tabs that are too large for the line segments they are placed on. 1=Yes, 0=No

Example

delete_error_list@ 6,10
nc_analysis_mill_errors@ 10,1,1,1 'performs check for layer 11
delete_error_list@ 6,13
nc_analysis_mill_errors@ 13,1,1,1 'performs check for layer 14
back@

Analysis > Compare Layers

layer_compare@

Intiates command.

set_layercompareparms1@ Layer ID 1, Layer ID 2, Resolution, Remove, ErrSize

The first two parameters are the ID's of the layers to be compared (remember, macro layer numbers start at
0)

Resolution: finer resolution produces greater accuracy, but processes slower. Available resolutions (in user
units):

.01, .025, .05, 0.1000, 0.5000, 1.0000 (mils).


.00025, .000625, .00125, .0025, .125, .025 (mms).

Remove: Remove old error flags on layers that are processed.

ErrSize: ErrSize is always in relation to the specified Resolution (errors will only be reported when the area of
difference exceeds the limits indicated by the ErrSize value):

0 = Errors must be > Resolution x Resolution (same as original layer compare command)
1 = Errors must be > (2 * Resolution) x (2 * Resolution)
2 = Errors must be > (4 * Resolution) x (4 * Resolution)
3 = Errors must be > (8 * Resolution) x (8 * Resolution)
Any value for ErrSize other than the 0-3 will be interpreted as 0.

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ 16336.7000,12527.7000
axy@ 24443.2000,19409.3000

Pag. 3 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
layer_compare_window@
back@

To have the entire area of the layers be processed, the following command replaces the axy@ commands above:

layer_compare_layer@

Example

layer_compare@
set_layercompareparms1@ 0,1,1.0000,1,2
axy@ -1.0000,2142.7000
axy@ 1526.1000,9.3000
layer_compare_window@ 'window area to compare
back@

or

layer_compare@
set_layercompareparms1@ 0,1,1.0000,1,2
layer_compare_layer@ 'compare entire layer(s)

Analysis > Copper Area

util_copper@

Initiates command.

copper@ Resolution, Scan, Drill, Board

Sets the preferences for the copper area check:

Resolution: smaller resolution increases accuracy, but slows provessing time.

Scan: sets the scan box size. Again, smaller box is more accurate, but slower. Available sizes:

.25, 1, 4 sq inch
161, 645, 2581 sq mm

Drill: specifies whether to include drill hole copper in totals (1=yes,0=no)

Board: the board thickness, used to help calculate drill copper.

report_copper_save@ Resolution, Scan, Drill, Board, "File"

Saves resulting copper area information to a textual report file. Parameters are the same as for copper@
command, except File, which is the complete filename & path to save the file under.

report_copper_print@ Resolution, Scan, Drill, Board

Prints copper area report file to the default printer for the system. Parameters are the same as for copper@
command.

Example

util_copper@
copper@ 5.0000,1000.0000,0,62.0000

Pag. 4 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
report_copper_save@ 5.0000,1000.0000,0,62.0000,"c:\my documents\copper.rpt"
report_copper_print@ 5.0000,1000.0000,0,62.0000

util_panelcopper@

Initiates command.

panelcopper@ Resolution, Scan, Drill, Board

Sets the preferences for the panel copper area check:

Resolution: smaller resolution increases accuracy, but slows provessing time.

Scan: sets the scan box size. Again, smaller box is more accurate, but slower. Available sizes:

.25, 1, 4 sq inch
161, 645, 2581 sq mm

Drill: specifies whether to include drill hole copper in totals (1=yes,0=no)

Board: the board thickness, used to help calculate drill copper.

report_panelcopper_save@ Resolution, Scan, Drill, Board, "File"

Saves resulting panel copper area information to a textual report file. Parameters are the same as for
panelcopper@ command, except File, which is the complete filename & path to save the file under.

report_panelcopper_print@ Resolution, Scan, Drill, Board

Prints panel copper area report file to the default printer for the system. Parameters are the same as for
panelcopper@ command.

Example

util_panelcopper@
panelcopper@ 5.0000,1000.0000,0,62.0000
report_panelcopper_save@ 5.0000,1000.0000,0,62.0000,"c:\my documents\copper.rpt"
report_panelcopper_print@ 5.0000,1000.0000,0,62.0000

Analysis > Copper Slivers

sliverdetect@

Detects slivers, using the following setting commands:

setsliverparms1@ Size, Slivers, Remove, Fix

Specifies the scan box, etc. to use when searching for copper slivers.

Size: Maximum size of slivers detected (mils).

Slivers: determines which type of sliver to find. 0 = Copper slivers, 1 = Mask slivers. (should be set to 0)

Remove: Remove old sliver flags on layers that are processed.

Pag. 5 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Fix: determines if command should attempt to repair encountered slivers. 1 = fix all slivers that are found, 0
= do not fix slivers. (should be set to 0)

Exception: sliver fix option is not available for Copper Slivers analysis, only Mask Slivers.

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ 16336.7000,12527.7000
axy@ 24443.2000,19409.3000
back@

To have the entire layer or composite be processed, the following command replaces the axy@ commands
above:

sliver_layer@

Example

sliverdetect@
setsliverparms1@ 8.0000,0,1,0
sliver_layer@

Analysis > DRC

DRC Analysis has the ability to set muliple passes and layers to check for DRC violations. After the passes are
set, you must set the parameters for each individual check being run in a pass. The pass ID value will be used to
denote which pass to run the test under. Multiple passes may be run by using the same check command, but
with a new pass ID number. In addition, layers or groups must be specified for the passes being run. You have
the option to set the layers being checked by specific layer, type, or selected groupings (see commands below).

A typical DRC macro layout would look something like this:

<Begin DRC>
<Load/Save Pass>
<Set Passes>
<Set Error Handling>
<Set Layers to Check>
<Set Checks to Run>
<Run DRC>
<End DRC>

Begin DRC:
util_drc@

Initiates DRC checking.

Load/Save Pass:

These macro commands allow you to load and save the DRC pass file. Each pass file may contain only one saved
pass. In addition, only generic layers and layer groups may be saved as part of the pass (see 'Set Layers to
Check' section below).

Tip: if you are using a pre-existing pass file in your macro, you may skip to the 'Run DRC' section below, since
the pass file you load will contain all of the DRC layer & check information. If you do not load an existing pass
file, you must set all the applicable DRC information in the sections below.

drc_LoadPass@ "FileName"
Pag. 6 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Loads a DRC pass file, from the full path denoted by FileName.

Tip: when loading a pass file, if any pass of the same name as the pass in the file exists, it will be overwritten
by the loaded file. If no pass name exists in the file, the pass will be assigned the name "Pass_<ID>" where ID
is the pass ID number fo the pass.

drc_SavePass@ PassID,"FileName"

Saves a DRC pass file.

PassID: the number of the DRC Pass to be saved. Remember, like layers, passes begin numbering at 0.

FileName: the DRC Pass file to be loaded or saved

Set Passes:

Passes are automatically tracked as both Pass ID numbers and pass names. Pass names are what the user
typically sees in the DRC dialog. Names may sometimes be used to manipulate passes, as outlined in the
commands below. In addition to names, Pass ID numbers are assigned by the system automatically. Each pass
added to the list of passes increments the ID counter. Likewise deleting a pass removes that number from the
list and compresses all pass ID numbers (i.e. if passes 0-4 exists and you delete pass #3, the list is now 0-3).

Rule: pass ID numbers begin with 0 for macro-writing purposes. I.e. the first pass in the list is considered pass
ID 0.

This information is crucial to manipulating DRC passes, as the actual run command (as well as some other
commands) only takes a pass ID number as a value. If you've done multiple changes to the passes' list, this
number may not be what it began as. For that reason it is safer to determine which pass ID is attached to the
pass name you are working with, and use that ID in commands which require it.

To do so, use the new drc_CurrentPassID! query to determine the ID of the pass. For example:

drc_SetCurrentPass@ "Low Tolerance" 'sets the pass named 'Low Tolerance' to the active pass
ID% = drc_CurrentPassID! 'determines the ID number of the active pass.
drc_Run_Pass@ ID% 'runs DRC checks for that pass ID number

drc_Add_Pass@

Adds a DRC pass. Automatically updates the Pass ID list to create a new ID #. (Should be accompanied by
drc_add_passname@ command).

drc_Add_PassName@ NameStr

Adds the pass name to the new pass created by the drc_add_pass@ command above. NameStr is a string.
(Must follow drc_add_pass@ to assure the pass name is assigned to the correct pass ID).

drc_Delete_Pass@ PassId

Delete a DRC pass with the given Pass ID.

drc_Delete_PassName@ NameStr
drc_Set_Pass_Name@ PassId, NameStr

Give new name to a specific DRC pass. PassID is the number of the pass. NameStr is a string.

drc_SetCurrentPass@ NameStr

Sets the DRC pass with the given name as the current pass.

Set Error Handling:

Pag. 7 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
drc_seterrorfile@ "c:\act30\errors.drc"

Sets the name of the DRC error file for a DRC run. If this is not set, the filename will default to "errors.drc" in
the current directory.

drc_deletefile@ "c:\act30\errors.drc"

Deletes a previous DRC error file specified in the filepath, prior to running any DRCs.

drc_deleteall@

Deletes ALL DRC violation flags.

Set Layers to Check:


drc_Add_Drc_Lyr_To_Pass@ PassId, LyrId, LyrGrp, NCRank

Add a layer or layer group to the Clearance checks layer list. Command must be run separately for each
individual layer being checked.

drc_Delete_Drc_Lyr@ PassId, LyrId, LyrGrp, NCRank

Delete a layer or layer group from the Clearance checks layer list.

drc_Set_Drill2Mask_Drill_Lyr@ PassId, LyrId, LyrGrp, NCRank

Set the drill layer(s) to get drills from for Drills to Mask Test.

drc_Set_Drill2Mask_Mask_Lyr@ PassId, LyrId, LyrGrp, NCRank

Set the mask layer(s) to test for Drills to Mask Test.

drc_Set_Drill2Pad_Drill_Lyr@ PassId, LyrId, LyrGrp, NCRank

Set the drill layer(s) to get drills from for Drills to Pads Test.

drc_Set_Drill2Pad_Pad_Lyr@ PassId, LyrId, LyrGrp, NCRank

Set the pad layer(s) to test for Drills to Pads Test.

drc_Set_SpChk_Drill_Lyr@ PassId, LyrId, LyrGrp, NCRank

Set the drill layer(s) to get drills from for all Special Checks.

drc_Set_SpChk_Copper_Lyr@ PassId, LyrId, LyrGrp, NCRank

Set the copper layer(s) to test for all Special Checks.

Parameters for all above commands:

PassId: Id number of the pass to be used.

LyrId: Layer Id to be checked, -1 indicates use layer group. (remember layer numbering in macros begins
with 0).

LyrGrp: Layer Group to be checked, layer groups are defined as:

0 = Top Layer
1 = Internal Layers (ALL)
2 = Neg Plane layers (ALL)
3 = Bottom Layer
11 = Mask Top layer (ALL)

Pag. 8 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
12 = Mask Bottom (ALL)
14 = Positive Planes layers (ALL)
21 = NC Primary layers (ALL), NCRank parameter must be 0
21 = NC Secondary layers (ALL), NCRank parameter must be 1
32 = All Electrical layers - all Top, Bottom, Internal, Pos Plane and Neg Plane layers
33 = Outer Electrical - Top and Bottom layers only
34 = Inner Electrical - all Internal, Pos Plane, and Neg Plane layers only
35 = Inner Pos Electrical - all Internal and Pos Plane layers
36 = Inner Neg Electrical - all Neg Plane layers
37 = All Mask - all Mask Top & Mask Bottom layers

NCRank: must be 0 unless LyrGrp NC Data (21) is specified, in which case 0 = NC Primary, 1 = NC
Secondary.

Set Checks to Run:

Each DRC check has several set-up commands, which control the values used by the check for each pass. Set all
commands for each DRC check being run in the current pass. Once all DRC checks have been setup, use the
drc_Run_Pass@ command to run all checks for that pass.

To run multiple passes for DRC checks, these commands must be set again for each subsequent pass being run
(followed, again, by the drc_Run_Pass@ command).

Clearance Checks:.

Track-Track

drc_Set_Trk2Trk_Test@ PassId, Flag

Sets the pass to run Track to Track check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Trk2Trk_Val@ PassId, Value

Set Track to Track clearance value to use. PassID: pass to use. Value is in user units.

drc_Set_Trk2Trk_Dcode@ PassId, DcodeStr

Set DCode filter for Track to Track check. PassID: pass to use. DcodeStr is a string.

Track to Pad

drc_Set_Trk2Pad_Test@ PassId, Flag

Sets the pass to run Track to Pad check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Trk2Pad_Val@ PassId, Value

Set Track to Pad clearance value to use. PassID: pass to use. Value is in user units.

drc_Set_Trk2Pad_Dcode@ PassId, DcodeStr

Set DCode filter for Track to Pad check. PassID: pass to use. DcodeStr is a string.

Pad to Pad

Pag. 9 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
drc_Set_Pad2Pad_Test@ PassId, Flag

Sets the pass to run Pad to Pad check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Pad2Pad_Val@ PassId, Value

Set Pad to Pad clearance value to use. PassID: pass to use. Value is in user units.

drc_Set_Pad2Pad_Dcode@ PassId, DcodeStr

Set DCode filter for Pad to Pad check. PassID: pass to use. DcodeStr is a string.

Outline

drc_Set_Outline_Test@ PassId, Flag

Sets the pass to run Outline check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Outline_Val@ PassId, Value

Set Outline clearance value to use. PassID: pass to use. Value is in user units.

Minimum Track Width

drc_Set_MinTrk_Test@ PassId, Flag

Sets the pass to run Min Track check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_MinTrk_Val@ PassId, Value

Set Min Track clearance value to use. PassID: pass to use. Value is in user units.

drc_Set_MinTrk_Dcode@ PassId, DcodeStr

Set DCode filter for Min Track check. PassID: pass to use. DcodeStr is a string.

Minimum Pad

drc_Set_MinPad_Test@ PassId, Flag

Sets the pass to run Min Pad check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_MinPad_Val@ PassId, Value

Set Min Pad clearance value to use. PassID: pass to use. Value is in user units.

Pag. 10 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
drc_Set_MinPad_Dcode@ PassId, DcodeStr

Set DCode filter for Min Pad check. PassID: pass to use. DcodeStr is a string.

Redundant Pads

drc_Set_RedundPad_Test@ PassId, Flag

Sets the pass to run Redundant Pad check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

Annular Ring Checks:

In addition to the usual setting commands for the annular ring checks, you must also Filter the Dcodes and drill
tools to use in the checks themselves.

Pad to Mask

Top Mask -

drc_Set_Pad2MaskTop_Test@ PassId, Flag

Sets the pass to run Top to Top Mask check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Pad2MaskTop_Val@ PassId, Value

Set Top to Top Mask annular ring clearance value to use. PassID: pass to use. Value is in user units.

drc_Set_Pad2MaskBot_Test@ PassId, Flag

Sets the pass to run Bottom to Bottom Mask check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Pad2MaskBot_Val@ PassId, Value

Set Bottom to Bottom Mask annular ring clearance value to use. PassID: pass to use. Value is in user units.

Drill to Mask

drc_Set_Drill2Mask_Test@ PassId, Flag

Sets the pass to run Drill to Mask check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Drill2Mask_Val@ PassId, Value

Set Drill to Mask annular ring clearance value to use. PassID: pass to use. Value is in user units.

Pag. 11 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Drill to Pad

drc_Set_Drill2Pad_Test@ PassId, Flag

Sets the pass to run Drill to Mask check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Drill2Pad_Val@ PassId, Value

Set Drill to Pad annular ring clearance value to use. PassID: pass to use. Value is in user units.

Filters

drc_Set_AnRingPad_Dcode@ PassId, DcodeStr

Set DCode filter for all annular ring tests involving pads (Pad to Mask, Drill to Pad).

drc_Set_AnRingDrill_TRef@ PassId, ToolRefStr

Set Tool Reference filter for all annular ring tests involving drills (Drill to Mask, Drill to Pad).

Special Checks:

Drills without Pads

drc_Set_DrillWOPad_Test@ PassId, Flag

Sets the pass to run Drills without Pads check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

Pads without Drills

drc_Set_PadWODrill_Test@ PassId, Flag

Sets the pass to run Pads without Drills check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

Drills to Copper

drc_Set_Drill2Trk_Test@ PassId, Flag

Sets the pass to run Drills to Copper check on:

PassId: Id number of the pass to be used.

Flag: 1 = On, 0 = Off

drc_Set_Drill2Trk_Val@ PassId, Value

Set Drills to Copper clearance value to use. PassID: pass to use. Value is in user units.

Run DRC:

Pag. 12 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Select the data to be checked by windowing out the search area:

axy@ 887.9000,1896.4000
axy@ 2816.4000,109.8000

Commands give coordinates for the two opposite corners of a selection rectangle.

drc_NetlistExtract@

Checks for the existence of nets, and runs layer netlist extract if necessary. Should be done before
drc_Run_Pass@ is executed.

drc_Run_Pass@ PassID

Run all DRC checks assigned to the specified PassID.

explode_allnets@

Should be executed if nets did NOT exist in the database prior to the DRC run. It reverses the
drc_NetlistExtract@ command so that the database is returned to its original state. While recording a DRC
run, this is recorded as a comment if nets existed in the database.

end@

Closes DRC command.

Example

util_drc@
'Add new pass to DRC
drc_Add_Pass@
drc_Add_PassName@ "test2"
'Set error files
drc_seterrorfile@ "d:\CAM350\product\t-bird dev\macro records\errors.drc"
drc_deletefile@ "d:\CAM350\product\t-bird dev\macro records\errors.drc"
drc_deleteall@
'Set layers
drc_Set_Drill2Mask_Drill_Lyr@ 1,10,-1,0
drc_Set_Drill2Mask_Mask_Lyr@ 1,6,-1,0
drc_Set_Drill2Pad_Drill_Lyr@ 1,10,-1,0
drc_Set_Drill2Pad_Pad_Lyr@ 1,0,-1,0
drc_Set_SpChk_Drill_Lyr@ 1,10,-1,0
drc_Set_SpChk_Copper_Lyr@ 1,3,-1,0
drc_Add_Drc_Lyr_To_Pass@ 1,0,-1,0
drc_Add_Drc_Lyr_To_Pass@ 1,3,-1,0
drc_Add_Drc_Lyr_To_Pass@ 1,6,-1,0
drc_Add_Drc_Lyr_To_Pass@ 1,7,-1,0
drc_Add_Drc_Lyr_To_Pass@ 1,10,-1,0
'Set Clearance checks to run
drc_Set_Trk2Trk_Test@ 1,1
drc_Set_Trk2Trk_Val@ 1,5.0000
drc_Set_Trk2Trk_Dcode@ 1,""
drc_Set_Trk2Pad_Test@ 1,1
drc_Set_Trk2Pad_Val@ 1,5.0000
drc_Set_Trk2Pad_Dcode@ 1,""
drc_Set_Pad2Pad_Test@ 1,1
drc_Set_Pad2Pad_Val@ 1,5.0000
drc_Set_Pad2Pad_Dcode@ 1,""
drc_Set_Outline_Test@ 1,1
drc_Set_Outline_Val@ 1,5.0000
drc_Set_MinTrk_Test@ 1,1
drc_Set_MinTrk_Val@ 1,5.0000
drc_Set_MinTrk_Dcode@ 1,""
drc_Set_MinPad_Test@ 1,1
drc_Set_MinPad_Val@ 1,5.0000
drc_Set_MinPad_Dcode@ 1,""
drc_Set_RedundPad_Test@ 1,1
Pag. 13 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
'Set Annular Ring checks to run
drc_Set_AnRingPad_Dcode@ 1,""
drc_Set_AnRingDrill_TRef@ 1,""
drc_Set_Pad2MaskTop_Test@ 1,1
drc_Set_Pad2MaskTop_Val@ 1,5.0000
drc_Set_Pad2MaskBot_Test@ 1,1
drc_Set_Pad2MaskBot_Val@ 1,5.0000
drc_Set_Drill2Mask_Test@ 1,1
drc_Set_Drill2Mask_Val@ 1,5.0000
'Set Special Checks to run
drc_Set_Drill2Pad_Test@ 1,1
drc_Set_Drill2Pad_Val@ 1,5.0000
drc_Set_PadWODrill_Test@ 1,1
drc_Set_Drill2Trk_Test@ 1,1
drc_Set_Drill2Trk_Val@ 1,5.0000
'Window area to check
axy@ 109.2000,2035.6000
axy@ 3867.4000,66.9000
'Check for nets and, if none, extract netlist
drc_NetlistExtract@
'perform checks for pass ID #2
drc_Run_Pass@ 1
'The following should be executed only if nets did not already exist
explode_allnets@
end@

Analysis > DRC Histogram

util_drchisto@

Starts DRC Histogram.

drchisto_setdata@ HistoIndex, EnableFlag, MinVal, MaxVal, Color ID

Command sets the histogram test data for each histogram row being used (Histo_1 through Histo_4).
Command must be repeated for each row you wish to use. Parameters are:

HistoIndex: row number ID representing the row being run. (Histo_1, Histo_2, Histo_3, Histo_4)
(Remember, like layers, row numbers begin at 0; i.e. row 1 = ID 0)

EnableFlag: whether row is used in histogram or not. 0 = no, 1 = yes.

MinVal: minimum clearance value of the range being checked, in user units.

MaxVal: maximum clearance value of the range being checked, in user units

Color ID: sets the color for the resulting histogram error layer. Default is 0 (red), but see Tables > Layers
for more color choices.

drchisto_run@

Run the DRC Histogram based on the previously defined Histogram data ranges.

Example

util_drchisto@
drchisto_setdata@ 0,1,5.0000,10.0000,2
drchisto_setdata@ 1,1,10.0000,15.0000,4
drchisto_setdata@ 2,1,15.0000,20.0000,10
drchisto_setdata@ 3,1,20.0000,30.0000,1

Pag. 14 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
drchisto_run@

Analysis > Find Pin Holes

setpinholeparms@ Max Size, Electric Only, Remove Old Errors, Fix Errors

Command called initially to set the pin hole checking parameters.

Max Size is the maximum size of pinholes that are to be detected.

Electric Only determines if check is to be preformed on electrical layers:

1 = Only electrical layers that are ON will be checked


0 = Any layer that is ON will be checked

Remove Old Errors sets the status to remove previously-flagged errors from the check:

1 = Remove any existing errors on layers that are checked


0 = Do not remove existing errors

Fix Errors specifies if errors should be repaired:

1 = Try to fix any errors detected (by adding a polygon to cover the pinhole)
0 = Do not try to fix errors

pinholedetect@
axy@ #,#
axy@ #,#

Activates pinhole detection command, in window mode. Subsequent axy@ commands are two points defining
the rectangular window area to be checked for pinholes.

pinhole_layer@

Runs pinhole detection on the entire layer for layers that qualify, axy@ commands are not needed.

Example

pinholedetect@
setpinholeparms@ 5.0000,1,1,1
pinhole_layer@

Analysis > Find Solder Bridges

dfm_solder_bridges@

Initiates command.

set_solderbridgeparms@ 10.0000,1,1

Sets the search criterion for the check.

Pag. 15 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
First parameter is the Bridge Distance.

Second parameter determines fix status: 1 = auto-fix solder bridge errors, 0 = do not auto-fix.

Third parameter removes old error flags: 1 = remove all previous error flags, 0 = do not remove.

To specify the area to be checked, the selection window coordinates must be added at the end, followed by the
solder_bridge@ command:

axy@ 4133.5000,2201.1000
axy@ 4458.2000,1977.7000
solder_bridge@ 0,1

Performs the actual check. This command may be repeated to check as many pairs of layers as necessary.

First parameter is the Layer ID of the mask layer to be checked (layer numbers start at 0)

Second parameter is the Layer ID of the copper layer to be checked against.

back@

Ends check.

To have the entire layer or composite be processed, the following command replaces the three commands
above:

solder_bridge_layer@ 0,1

Performs the actual check. This command may be repeated to check as many pairs of layers as necessary.

First parameter is the Layer ID of the mask layer to be checked (layer numbers start at 0)

Second parameter is the Layer ID of the copper layer to be checked against.

Example

set_solderbridgeparms@ 10.0000,1,1
axy@ 460.8000,1494.2000
axy@ 1638.3000,741.6000
solder_bridge@ 6,0
solder_bridge@ 7,3
back@

Analysis > Mask Slivers

sliverdetectmask@

Initializes command.

setsliverparms1@ Size, Slivers, Remove, Fix

Specifies the scan box, etc. to use when searching for mask slivers.

Size: Maximum size of slivers detected (in user units).

Slivers: determines which type of sliver to find. 0 = Copper slivers, 1 = Mask slivers. (should be set to 1)

Pag. 16 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Remove: Remove old sliver flags on layers that are processed.

Fix: determines if command should attempt to repair encountered slivers. 1 = fix all slivers that are found, 0
= do not fix slivers.

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ 16336.7000,12527.7000
axy@ 24443.2000,19409.3000
back@

To have the entire layer or composite be processed, the following command replaces the above axy@
commands:

sliver_layer@

Example

sliverdetectmask@
setsliverparms1@ 8.0000,1,1,1
sliver_layer@
back@

Analysis > Minimum Gaps

mingapdetect@

Initializes command.

setmingapparms@ Size, Noise, Remove, Flags

Specifies the scan box, etc. to use when searching for gap violations.

Size: Maximum size of gap violations detected (in user units).

Noise: Minimum size of gap violations detected (in percent of maximum size).

Remove: Remove old gap violation flags on layers that are processed.

Flags: Straits flag, Gulfs flag, Create layer.

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ 16336.7000,12527.7000
axy@ 24443.2000,19409.3000
back@

To have the entire layer or composite be processed, the following command replaces the above axy@
commands:

mingap_layer@

Example

mingapdetect@
setmingapparms@ 8.0,50,1,11
mingap_layer@

Pag. 17 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
back@

Analysis > Minimum Widths

minwidthdetect@

Initializes command.

setminwidthparms@ Size, Noise, Remove, Flags

Specifies the scan box, etc. to use when searching for width violations.

Size: Maximum size of width violations detected (in user units).

Noise: Minimum size of width violations detected (in percent of maximum size).

Remove: Remove old width violation flags on layers that are processed.

Flags: Necks Flag, Spikes Flag, Create layer

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ 16336.7000,12527.7000
axy@ 24443.2000,19409.3000
back@

To have the entire layer or composite be processed, the following command replaces the above axy@
commands:

minwidth_layer@

Example

minwidthdetect@
setminwidthparms@ 8.0,50,1,11
minwidth_layer@
back@

Analysis > Nets > Apply Nets

util_net_apply@

Initiates the command that applies the net names from the external netlist to the CAM net names that are
present after Netlist Extract in the CAM database..

Analysis > Nets > Compare External Nets

util_net_compare@

Initiates the command that compares the nets in the external netlist to the CAM nets that are present after

Pag. 18 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Netlist Extract in the CAM database.

Analysis > Nets > Net Check

util_net_check@

Initiates the command.

setnetextrparm@ 1

Specifies the type of netcheck to perform: 1 = centerline, 0 = true shape

setnetcheckparm@ 1,0,1

Sets the parameters for the net check being performed:

First #: Nets (1 = all, 0 = single net)


Second #: Check shorts (0 = no short checking, 1 = enable short checking)
Third #: Check antennas (0 = no antenna checking, 1 = enable antenna checking)

If single net check is enabled an axy@ coordinate must follow which selects the net:

axy@ 0.0000,0.0000

Gives a point on the net being checked (single-point net check only).

Example

util_net_check@
setnetextrparm@ 0
setnetcheckparms@ 1,0,1

Analysis > Part to Part Spacing

Add/Delete Part to Part Checks:

analysis_add_part2part_check@ ChkID

Add a new check rule, or reset an existing check to the default values.

ChkID: number of the check rule.

analysis_del_part2part_check@ ChkID

Delete the specified part to part check.

ChkID: number of the check rule.

Set Parameters for Part to Part checks:

Pag. 19 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
This following set of commands must be repeated for each check rule being used:

analysis_set_part2part_fp1@ ChkID,"<name>"

Command sets the component footprint for the first component to be checked against.

ChkID: number of the check rule.


"<name>": first footprint to test; if <name> is omitted then All Footprints are used.

analysis_set_part2part_fp2@ ChkID,"<name>"

Sets the second component footprint to be used in the checks.

Values are set the same as above.

analysis_set_part2part_ang1@ ChkID, Angle

Sets the angle to performs checks at, for the first part.

ChkID: number of the check rule being used.

Angle:
0 = any angle
1 = 0 degrees
2 = 90 degrees
3 = 0 or 90 degrees
4 = 180 degrees
5 = 0 or 180 degrees
6 = 90 or 180 degrees
7 = 0 or 90 or 180 degrees
8 = 270 degrees
9 = 0 or 270 degrees
10 = 90 or 270 degrees
11 = 0 or 90 or 270 degrees
12 = 180 or 270 degrees
13 = 0 or 180 or 270 degrees
14 = 90 or 180 or 270 degrees
15 = 0 or 90 or 180 or 270 degrees

analysis_set_part2part_ang2@ ChkID, Angle

Sets the angle to performs checks at, for the second part.

Values are set same as above.

analysis_set_part2part_clear@ ChkID, Clearance

Sets clearance value to use for checks.

ChkID: number of the check rule


Clearance: clearance value

analysis_set_part2part_type@ ChkID, ChkType

Specify the type of part to part check to run for this check rule.

ChkID: number of the check rule.

ChkType:
0 = Outline to Outline
1= Pad to Pad
2 = Outline to Pad

Pag. 20 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
3 = Pad to Outline

Run Check Rules tests:

checkpart2part@

Invokes the Part to Part Spacing check, with the rules which have been defined using the other commands.
Only needs to be run once for multiple check rules.

Example

'set up check rule #1


analysis_add_part2part_check@ 1
analysis_set_part2part_type@ 1,0
analysis_set_part2part_fp1@ 1,"87C256"
analysis_set_part2part_fp2@ 1,"24-576MHZ"
analysis_set_part2part_ang1@ 1,15
analysis_set_part2part_ang2@ 1,0
analysis_set_part2part_clear@ 1,10.0000
'set up check rule #2
analysis_add_part2part_check@ 2
analysis_set_part2part_type@ 2,1
analysis_set_part2part_fp1@ 2
analysis_set_part2part_fp2@ 2
analysis_set_part2part_ang1@ 2,0
analysis_set_part2part_ang2@ 2,0
analysis_set_part2part_clear@ 2,40.0000
'run checks
checkpart2part@

Analysis > Plane Checks > Isolated Connections

isolated_connection@

Initiates the command.

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ -1255.6000,4848.2000
axy@ -1066.8000,4715.1000
isolated_connections_window@ 25400,10,-1,36,1

Command performs the actual check:

First parameter is the required over etch clearance ( greater than or equal to zero).

Second parameter is the drill layer.

Third specifies which Negative Layers to check (-1 = all negative layers are checked).

Fourth parameter is 1 = remove all previous error flags, 0 = do not remove.

back@

The window coordinates and isolated_connections_window command may be repeated as many times as
desired before the back@ command.

To have the entire layer or composite be processed, the following command replaces the 3 commands listed
above:

Pag. 21 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
isolated_connections_layer@ 25400,10,-1,36,1

First parameter is the required over etch clearance ( greater than or equal to zero).

Second parameter is the drill layer.

Third specifies which Negative Layers to check (-1 = all negative layers are checked).

Fourth parameter is 1 = remove all previous error flags, 0 = do not remove.

Example

isolated_connection@
isolated_connections_layer@ 50,1,0,0,1

Analysis > Plane Checks > Negative Plane Thermal Conflicts

neg_plane_thermal_conflict@

Initiates the running of the check. No parameters required.

Analysis > Plane Checks > Starved Thermals

starved_thermals@

Initiates the command.

To specify the area to be checked, the selection window coordinates must be added at the end:

axy@ -1255.6000,4848.2000
axy@ -1066.8000,4715.1000
starved_thermals_window2@ 50,1,4,0,1

Command performs the actual check:

First parameter is the required spoke width clearance ( from 1 to 100).

Second parameter is 1 = remove all previous error flags, 0 = do not remove

Third parameter specifies the minimum number of clear spokes the thermal must have.

Fourth specifies which Negative Layers to check (1 = all negative layers are checked, 0 = only negative
layers that are active are checked).

Fifth indicates if command should attempt to fix errors (by rotating thermals) (0 = No, 1 = Yes).

back@

The window coordinates and starved_thermals_window command may be repeated as many times as desired
before the back@ command.

To have the entire layer or composite be processed, the following command replaces the 3 commands listed

Pag. 22 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
above:

starved_thermals_layer2@ 50,1,4,0,1

First parameter is the required spoke width clearace ( from 1 to 100).

Second parameter is 1 = remove all previous error flags, 0 = do not remove

Third parameter specifies the minimum number of clear spokes, or ties, the thermal must have.

Fourth specifies which Negative Layers to check (1 = all negative layers are checked, 0 = only negative
layers that are active are checked).

Fifth indicates if command should attempt to fix errors (by rotating thermals) (0 = No, 1 = Yes).

Example

starved_thermals@
starved_thermals_layer2@ 50,1,0,0,1

Analysis > Silk to Solder Spacing

checksilk@ SilkLyrID, SolderLyrID, Clearance, RemoveOldErrors, Dcode

Checks the selected silkscreen layer against the selected solder mask layer:

SilkLyrID: Layer ID of the silkscreen layer.

SolderLyrID: Layer ID of the solder mask layer.

Clearance: acceptable width clearance between the two layers.

Restriction: a silk to solder clearance equal to this value will be flagged as an error.

RemoveOldErrors: (1 = remove previously-flagged silk to solder errors, 0 = do not remove)


Dcode: the Dcode filter to use with the check.

Example

checksilk@ 4,6,50.0000,1,"12"

Analysis > Solder Mask to Trace Spacing

checksold2elec@ SolderLyrID, ElecLyrID, Clearance, RemoveOldErrors, Dcode

Checks the selected solder mask layer against the selected trace layer:

SolderLyrID: Layer ID of the solder mask layer.

ElecLyrID: Layer ID of the electrical layer.

Clearance: acceptable width clearance between the two layers. (Note: a solder to trace clearance equal to

Pag. 23 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
this value will be flagged as an error).

RemoveOldErrors: (1 = remove previously-flagged solder to trace errors, 0 = do not remove)

Dcode: the Dcode filter to use with the check.

Example

checksold2elec@ 0,6,50.0000,1,"23"

Pag. 24 di 24
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
File Menu Macros

Config Import Save & Save As


Create Test Points Merge Setup
Drill Calculation Aid New Test Point Attribs
Exit Open Test Point->Gerber
Export Print

File > Config

Load

bn_readconfig@ "d:\test.job"

Loads an external configuration file.

Save

bn_saveconfig@ "d:\test.job"

Saves an external configuration file.

File > Create Test Points

Creates a series of test points for the database, as defined by the set up command below:

Set Dcode Filter:


testpt_dcodefil@ Test,Side,"Dcode"

Specifies the Dcode filter selections for placing test points. When using dcodes for filtering purposes, one of
these commands must be set for each test point type being used:

Test specifies the Test Point Type:


1=through-hole pin
2=SMT pin
3=plated through-hole
4=surface pad

Side specifies the side(s) being tested:


0=top and bottom
1=top
2=bottom

Dcode is the Dcode number/range to filter by.

Pag. 1 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Set Selection Criteria:
testpt_genfil@ Filter, Use

Sets the usage of each type of selection available under 'Additional Selection Criteria'.

Filter specifies each criteria:


0=use top mask
1=use bottom mask
2=use end points only
3=offset through hole
5=include single point nets
6=test all points, if a net ends with a 0 or 1 test point

Use determines if the criteria will be used:


1=used
0=not used

testpt_genfil_minsize@ Offset

If 'offset through hole' is selected as a criteria, this command must accompany it to specify the offset (in
mils).

Set Side to Probe:

Determines which side of the board will have test points added to it. These commands must be set individually
for each test point type which will be used.

testpt_sidefil@ Test, Filter, Use

Determines which side will have test points added.

Test is the test point type:


1=through-hole pin
2=SMT pin
3=plated through-hole
4=surface pad

Filter selects the side to use:


0=top
1=bottom

Use determines whether top or bottom is used:


0=no1=yes

testpt_minsizefil@ Test, Size

Specifies the minimum size for each test point type. One of these commands must accompany each type
being used.

Test specifies the type:


1=through-hole pin
2=SMT pin
3=plated through-hole
4=surface pad

Size specifies the minimum size (in mils).

Other Commands:
testpt_clear@

If you have previously created test points, this command deletes them before placing test points again.

Pag. 2 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
singlenetextract@

Includes single-point nets

testpt_create@
testpt_startcreatefil@

A necessary "internal" function that gathers the information from the filter that has been set up by the above
commands, and applies it to the test point creation process.

view_settestpt@ 1

0 = do not show test points, 1=show test points

testpt_endcreatefil@

A necessary "internal" function that clears the filter information from memory.

Example

testpt_dcodefil@ 3,1,"" 'Sets Dcode Filter for each test point type:
testpt_dcodefil@ 3,2,""
testpt_dcodefil@ 3,0,"12"
testpt_dcodefil@ 4,1,""
testpt_dcodefil@ 4,2,""
testpt_dcodefil@ 4,0,"14"
testpt_dcodefil@ 1,1,""
testpt_dcodefil@ 1,2,""
testpt_dcodefil@ 1,0,"16"
testpt_dcodefil@ 2,1,""
testpt_dcodefil@ 2,2,""
testpt_dcodefil@ 2,0,"18"
testpt_genfil@ 0,0 'Sets each Selection Criteria on or off
testpt_genfil@ 1,0
testpt_genfil@ 2,1
testpt_genfil@ 3,0
testpt_genfil@ 5,1
testpt_genfil@ 6,1
testpt_genfil_minsize@ 0.0000 'For Offset Through Hole criteria, specify offset value
testpt_sidefil@ 1,0,1 'Sets side to probe, for each type
testpt_sidefil@ 1,1,1
testpt_minsizefil@ 1,30.0000 'Sets the minimum size each type of point can be
testpt_sidefil@ 2,0,1
testpt_sidefil@ 2,1,1
testpt_minsizefil@ 2,40.0000
testpt_sidefil@ 3,0,1
testpt_sidefil@ 3,1,1
testpt_minsizefil@ 3,10.0000
testpt_sidefil@ 4,0,1
testpt_sidefil@ 4,1,1
testpt_minsizefil@ 4,20.0000
testpt_clear@ 'Remaining commands set all other settings and run test point creation
singlenetextract@
testpt_startcreatefil@
testpt_create@
view_settestpt@ 1
testpt_endcreatefil@

File > Drill Calculation Aid

Pag. 3 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
bn_adddrill@ 23.0000

Parameter is the size of the drill being added.

File > Exit

util_camed@

Returns to the main CAM Editor from any other Editor.

There is no macro for the Exit command in the CAM Editor.

File > Export

ACT Neutral

flyprobe_act_init@
flyprobe_export_act@ "d:\act\test.tst"

Parameter is the directory and job name.

ATG

flyprobe_atg_init@
flyprobe_export_atg@ "d:\act\test"

Parameter is the directory and job name.

Aperture Table

save_gapfile@ "d:\temp\aperfile.gap"

Saves the aperture table list to a specified filename.

CAD Data

export_cad_pads@ Version,"Filename"

Exports PADS ASCII file, as defined by the Filename.

Version is the PADS version number * 100. (For example, PowerPCB v2.1 would be 210).

export_cad@ Type,"Filename"

Pag. 4 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Exports CAD system ASCII file, as defined by the filename.

Type is the CAD system format (see table below for supported systems).

Interface Type
PADS PCB (up to v2.0) 1
PADS PowerPCB (2.0) 2
PADS PowerPCB (2.1) 3
PADS PowerPCB (3.0) 4
PADS PowerPCB (4.0) 14
Zuken-Redac Visula 5
Accel TangoPRO 9
AccelEDA 10
GenCAD 11

CAM350 v6.0 Database

export_60_database@ "c:\act_inc\test60.cam"

Exports a database in the previous version of the CAM350 File Format.

CAM350 v7.0 Database

export_70_database@ "c:\act_inc\test70.cam"

Exports a database in the previous version of the CAM350 File Format.

CAM350 v8.0 Database

export_80_database@ "c:\act_inc\test80.cam"

Exports a database in the previous version of the CAM350 File Format.

Circuit-Line

Create File and Directory Settings:


bn_circuitline_init@

Initiates export process.

bn_exportcl_jobname@ "Circuitline"

The .APF and .CL file names.

bn_exportcl_customer@ "Customer"

The customer name (for the .CL file).

Pag. 5 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
bn_exportcl_testedby@ "Tested By"

The Tested By name (for the.CL file).

bn_export_circuitline@ "D:\ACT\Test"

Sets directory to export files to.

Set Up Plate Drill Fomatting:


setup_fmtype@ 1,5

Configures the drill files in the Excellon drill file format used by Circuit Line.

setup_fmtunit@ 1,0

Configures the drill files to use English units.

setup_fmtdigits@ 1,2,4

Exports the drill files in the 2.4 format required by Circuit Line.

setup_fmtmode@ 1,0

Configures the type of drill format as Absolute.

setup_fmtzero@ 1,2

Exports the files with no zero suppression, as required by Circuit Line

Export Plate Drill Layers:


plate_drill_out@ 10,"D:\ACT\Test\UP.MP2"

Exports the Tooling Files. The file extensions are based on the plate name (TOP, BOT, or MP2). One
command must be run for each tooling file being exported.

Set Up Gerber Layer Formatting:


setup_fmtype@ 0,0

Configures the necessary Gerber files in the 274D format.

setup_fmtunit@ 0,0

Sets the Gerber files to use English units.

setup_fmtdigits@ 0,2,3

Sets the Gerber files in 2.3 format.

setup_fmtmode@ 0,0

Configures the type of Gerber format as Absolute.

setup_fmtzero@ 0,0

Sets the files to have leading zero suppression

edit_layer@ Layer#,Drawcolor,Flashcolor,Type,Status,Name$

Creates a temporary layer for use in exporting information for Circuitline.

Layer#: a layer larger than the highest layer in the design (i.e. if design has 8 layers, this should be layer 9).

Pag. 6 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Remember layer numbering begins at 0 = layer 1.

Drawcolor = 0

Flashcolor = 0

Type is 4 (layer type 'Graphic').

Status = 0 (on)

Name is appropriate to Circuitline use: "TFCLOUT_TEMPLYR"

For more detailed information on creating layers, see the Add Layers command.

Export Gerber Layers:


setlayer@ 0

Sets the active layer to 1 (layers start from 0).

exportgbrfile@ 12,-1,"D:\ACT\Test\UP.MAP"

Layer #,Composite ID,name.

Exports the Gerber file. Composite ID of -1 means it is not a composite.

Example

bn_circuitline_init@
bn_exportcl_jobname@ "1345x"
bn_exportcl_customer@ "PSI Inc"
bn_exportcl_testedby@ "John"
bn_export_circuitline@ "C:\TEMP\"
setup_fmtype@ 1,5
setup_fmtunit@ 1,0
setup_fmtdigits@ 1,2,4
setup_fmtmode@ 1,0
setup_fmtzero@ 1,2
plate_drill_out@ 31,"C:\TEMP\DW.TOP"
plate_drill_out@ 32,"C:\TEMP\DW.BOT"
setup_fmtype@ 1,5
setup_fmtunit@ 1,0
setup_fmtdigits@ 1,2,4
setup_fmtmode@ 1,0
setup_fmtzero@ 1,1
setup_fmtype@ 0,0
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,2,3
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
edit_layer@ 33,0,0,4,0,"TFCLOUT_TEMPLYR"
setlayer@ 0
exportgbrfile@ 33,-1,"C:\TEMP\UP.MAP"
edit_layer@ 33,0,0,4,0,"TFCLOUT_TEMPLYR"
setlayer@ 0
exportgbrfile@ 33,-1,"C:\TEMP\DW.MAP"
setup_fmtype@ 0,2
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,3,4
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
setup_fmtype@ 0,0
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,2,3
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
exportgbrfile@ 0,-1,"C:\TEMP\TOPPLOT.GBR"

Pag. 7 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setup_fmtype@ 0,0
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,2,3
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
exportgbrfile@ 3,-1,"C:\TEMP\BOTPLOT.GBR"

Composites

set_compositemirrorstate@ CompID%, Use%

Determines if composite will be mirrored on export.

set_compositenegativestate@ CompID%, Use%

Determines if composite will be exported as negative.

For both commands:

CompID% is the number of the composite (remember numbering begins at 0, Composite #1 = ID 0).
Composite ID of -1 means it is not a composite.

Use% declares if setting is to be used, 1=Yes, 0=No.

exportPCBgbrfile@ Layer#, CompID%, Name$

Layer# is the first layer of the composite.

CompID% is the same as above.

Name$ is the full export path for the filename.

Example

set_compositemirrorstate@ 1, 1
set_compositenegativestate@ 1, 1
exportPCBgbrfile@ 4, 1, "Mixed_Plane"

Drill Data

Define Format Settings:

All settings must be defined prior to running the export command, or the default settings will be used.

setup_fmtype@ 1,5

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

Pag. 8 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setup_fmtunit@ 1,0

Sets the output Unit:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=English
1=Metric

setup_fmtdigits@ 1,2,4

Sets the output Precision:

First #:
0=photoplotter
1=drill machine
2=mill machine
Second # is the integer number

Third # is the fractional number (2,4 = 2.4)

setup_fmtmode@ 1,0

Sets the output Mode:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=Absolute
1=Incremental

setup_fmtzero@ 1,0

Sets the Zero Suppression:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

Export the File, using Settings:


drill_sethdrfile@ File$

Exporting a drill file can also append a drill header. This command appends a header to the file listed by
File$.

nc_exp_drill_Exc_toolingoffset@ #

If the Tooling Offset has been set using the Add > Tooling Offset > Drill Origin command, this command
may be used to specify whether the exported drill file uses a G93 command, or recomputes the drill

Pag. 9 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
coordinates:

1 = use new 0:0 point


0 = use G93 command

nc_exp_drill_Exc_decimals@ #

Excellon files only: command sets the decimal usage. If this command is used, it is unnecessary to use the
setup_fmtdigits@ and setup_fmtzero@ commands listed above.

1 = use decimals in numbers


0 = use implied decimals

drill_out@ 3,"d:\act_inc\drill_4.drl"

First parameter is the drill layer number (remember, layers start from 0) and the second is the exported drill
file name.

Exports one-up drill data from CAM & NC Editors, and panelized, step & repeat data from Panel Editor.

drillPCB_out@ 3,"d:\act_inc\drill_4.drl"

Same as drill_out@ command above for CAM & NC Editors, but exports only one-up drill data from the
Panel Editor.

Example

setup_fmtype@ 1,5
setup_fmtunit@ 1,0
setup_fmtdigits@ 1,2,4
setup_fmtmode@ 1,0
setup_fmtzero@ 1,1
drill_out@ 7,"C:\TEMP\drill_10.drl"

See also File > Setup > Drill Machine.

DXF

export_dxf_initinfo@ "d:\test.dxf"

The name of the file you are exporting.

export_dxf_setlinemode@ 1

Defines whether lines are exported with square ends (0) or as polylines with round ends (1).

export_dxf_setroundasdonut@ 0

Defines whether flashes are output as circles (0) or as filled donuts (1).

export_dxf@

Executes the function.

export_dxf_rollback@

Aborts the process.

Gerber Data

Pag. 10 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Define Format Settings:

All settings must be defined prior to running the export command, or the default settings will be used. Device
settings must be set to 'Photoplotter'.

setup_fmtype@ 0,1

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
0 = 274D
1 = 274X
2 = Fire 9xxx
3 = Barco

setup_fmtunit@ 0,0

Sets the output Unit. Does not apply to Barco files.

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=English
1=Metric

setup_fmtdigits@ 0,2,4

Sets the output Precision. Does not apply to Barco files.

First #:
0=photoplotter
1=drill machine
2=mill machine

Second # is the integer number.

Third # is the fractional number (2,4 = 2.4).

setup_fmtmode@ 0,0

Sets the output Mode. Does not apply to Barco files.

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=Absolute
1=Incremental

setup_fmtzero@ 0,0

Pag. 11 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Sets the Zero Suppression. Does not apply to Barco files.

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

export_swapaxes@ #

Fire 9xxx files only: sets the command to swap the Axes of the data on export.

1 = Yes
0 = No

export_filmsize@ #

Fire 9xxx files only: sets the command to save the Film Size in the file header on export.

1 = Yes
0 = No

set_layermirrorstate@ #,#

Defines which layers to mirror upon export. Must be set for each layer being mirrored. Does not apply to
274D files.

The first number is the layer number. (Remember, layers start with 0). The second number is 1 to mirror on
export, or 0 to not mirror on export.

layer_setimagepolarity@ #,#

Defines each layer's polarity on export. Must be set for each layer being made negative. Does not apply to
274D files.

The first number is the layer number (starting with layer 1 as 0).The second number is 0 for positive, 1 for
negative.

Export, using Settings:


exportgbrfile@ 3,-1,"name"

Layer #,Composite ID,name.

Composite ID of -1 means it is not a composite. In CAM Editor, command will export one-up design; in Panel
Editor it will export all panelized data, including step&repeat designs.

OR

exportPCBgbrfile@ 3,-1,"name"

Same as above command (including parameters), but will only export the one-up design from the Panel
Editor, not the fully panelized data.

save_gapfile@ "d:\temp\name.GAP"

274D format files require the saving of an aperture table, to provide apertures for the exported files.
Parameter is full filepath.

Pag. 12 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Examples:

274D

setup_fmtype@ 0,0
setup_fmtunit@ 0,1
setup_fmtdigits@ 0,2,4
setup_fmtmode@ 0,1
setup_fmtzero@ 0,1
exportPCBgbrfile@ 0,-1,"C:\TEMP\comp.lgr"
exportPCBgbrfile@ 1,-1,"C:\TEMP\solder.lgr"
save_gapfile@ "c:\temp\aperture.gap"

274X

setup_fmtype@ 0,1
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,2,4
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
set_layermirrorstate@ 0,0
layer_setimagepolarity@ 0,0
set_layermirrorstate@ 1,0
layer_setimagepolarity@ 1,0
exportPCBgbrfile@ 0,-1,"C:\TEMP\comp.lgr"
exportPCBgbrfile@ 1,-1,"C:\TEMP\solder.lgr"

Fire 9XXX

setup_fmtype@ 0,2
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,2,4
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
export_swapaxes@ 1
export_filmsize@ 1
set_layermirrorstate@ 0,1
layer_setimagepolarity@ 0,0
set_layermirrorstate@ 1,0
layer_setimagepolarity@ 1,1
exportPCBgbrfile@ 0,-1,"C:\TEMP\comp.lgr"
exportPCBgbrfile@ 1,-1,"C:\TEMP\solder.lgr"

Barco

setup_fmtype@ 0,3
set_layermirrorstate@ 0,1
layer_setimagepolarity@ 0,0
set_layermirrorstate@ 1,0
layer_setimagepolarity@ 1,1
exportPCBgbrfile@ 0,-1,"C:\TEMP\comp.lgr"
exportPCBgbrfile@ 1,-1,"C:\TEMP\solder.lgr"

Integri-test

flyprobe_integritest_init@
flyprobe_export_integritest@ "c:\act\test"

Parameter is the directory and job name.

IPC-D350

Pag. 13 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
exportipcfile@ "c:\temp\test.ipc"

Save the database in IPC Format, to the given filename.

IPC-D356

export_ipc356_testpt@ "D:\ACT\Test\test fixture demoint.net"

Save the database in IPC-D356 Format, to the given filename.

IPC-D356A

export_ipc356A_testpt@ "D:\ACT\Test\demoint.net"

Save the database in IPC-D-356A Format, to the given filename.

Mill Data

Define Format Settings:

All settings must be defined prior to running the export command, or the default settings will be used.

setup_fmtype@ 2,5

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

setup_fmtunit@ 2,0

Sets the output Unit:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=English
1=Metric

setup_fmtdigits@ 2,2,4

Sets the output Precision:

First #:
0=photoplotter
1=drill machine

Pag. 14 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
2=mill machine

Second # is the integer number

Third # is the fractional number (2,4 = 2.4)

setup_fmtmode@ 2,0

Sets the output Mode:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=Absolute
1=Incremental

setup_fmtzero@ 2,0

Sets the Zero Suppression:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

Export the File, using Settings:


mill_sethdrfile@ File$

Exporting a mill file can also append a mill header. This command appends a header to the file listed by
File$.

nc_exp_mill_IncludeDrills@ #

Indicates whether to include drill hits in the mill file. 0 = No, 1 = Yes.

nc_exp_mill_Exc_toolingoffset@ #

If the Tooling Offset has been set using the Add > Tooling Offset > Mill Origin command, this command
may be used to specify whether the exported mill file uses a G93 command, or recomputes the mill
coordinates:

1 = use new 0:0 point


0 = use G93 command

nc_exp_mill_Exc_decimals@ #

Excellon files only: command sets the decimal usage. If this command is used, it is unnecessary to use the
setup_fmtdigits@ and setup_fmtzero@ commands listed above.

1 = use decimals in numbers


0 = use implied decimals

nc_exp_mill_SM_feedrate@ 123.4567

Pag. 15 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
For Sieb and Meyer files, this is the feed rate for each mill path, in distance per second. Can be used to set the
feed rate in the exporting macro, when no feed rate is set in the NC Tool Table.

mill_out@ 4,"c:\temp\mill.rou"

First parameter is the layer number (remember, they start at 0) and second parameter is the name of the
exported mill file.

Exports one-up drill data from CAM & NC Editors, but panelized, step&repeat data from Panel Editor.

OR

millPCB_out@ 4,"c:\temp\mill.rou"

Same as above command, but exports one-up mill data from the Panel Editor.

Examples:

Excellon Format

nc_exp_mill_IncludeDrills@ 0
setup_fmtunit@ 2,1
setup_fmtdigits@ 2,3,3
setup_fmtmode@ 2,1
setup_fmtzero@ 2,0
millPCB_out@ 10,"c:\temp\Layer_11.rou"

Excellon Format, Using Decimals setting

nc_exp_mill_Exc_decimals@ 1
millPCB_out@ 10,"c:\temp\Layer_11.rou"

Sieb&Meyer Format

nc_exp_mill_IncludeDrills@ 1
setup_fmtype@ 2,6
setup_fmtunit@ 2,0
setup_fmtdigits@ 2,2,4
setup_fmtmode@ 2,0
setup_fmtzero@ 2,1
millPCB_out@ 10,"c:\temp\Layer_11.rou"

See also File > Setup > Mill Machine.

Netlist

export_netlist@ RefDes%,Name$

Export a ref/des based netlist.

RefDes:
0 = export CAM350 format using RefDes/Pin # only.
1 = export CAM350 format using RefDes/Pin #, including X,Y coordinates.

Name$ = filename.

export_netlistb@ Coord%,Name$

Export a netlist using coordinates only. Parts are not present so RefDes/pin # will not apply.

Coord%:
0 = netlist is X,Y coordinates for "All Points."

Pag. 16 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
1 = then netlist is X,Y coordinates for "Ends Only."

Name$ = filename.

export_netlist_IPC@ Name$

Exports IPC-D-356 netlist format.

Name$ = filename.

flyprobe_setdefadj@ #

IPC-D-356A export only: sets the adjacency when outputting the netlist to flying probe testers. # is
adjacency value.

export_nl_setparms@ Type, Ends, Unused, Surface, "Dcodes"

Allows setting of the netlist export parameters.

Type:
0 = CAM350 X,Y
1 = CAM350 Refdes/Pin #
2 = IPC-D-356
5 = CAM350 X,Y and Refdes/Pin#
9 = IPC-D-356A

Ends:
0 = All points
1 = Ends only

Unused:
0 = Only exports entities that belong to nets.
Not 0 = All unused entities are exported as single entity nets. It is context sensitive as to what goes out (e.g. RefDes only
puts out unused Pins).

Surface:
0 = Top and bottom
1 = Top only
2 = Bottom only

Dcodes is the Dcode(s) to filter for when exporting the netlist.

export_nl_writeout@ "filename"

Writes the netlist to the defined file name.

Example

IPC-D-356A Format

flyprobe_setdefadj@ 25.0000
export_nl_setparms@ 9,0,0,0,"10"
export_nl_writout@ "d:\temp\demo.net"

ODB++

export_odb_initinfo@ "d:\temp\test.cam"

Sets the name of the file you are exporting.

export_odb@ "d:\temp\test"

Pag. 17 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Executes the export. Parameter is the directory to save uncompressed ODB files to, or will be used as the
filename for compressed ODB files (.tgz extension is assumed).

Plate Drills

Define Format Settings:

All settings must be defined prior to running the export command, or the default settings will be used.

setup_fmtype@ 1,5

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

setup_fmtunit@ 1,0

Sets the output Unit:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=English
1=Metric

setup_fmtdigits@ 1,2,4

Sets the output Precision:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second # is the integer number

Third # is the fractional number (2,4 = 2.4)

setup_fmtmode@ 1,0

Sets the output Mode:

First #:
0=photoplotter
1=drill machine
2=mill machine

Pag. 18 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Second #:
0=Absolute
1=Incremental

setup_fmtzero@ 1,0

Sets the Zero Suppression:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

Export Command
nc_exp_drill_Exc_decimals@ #

Excellon files only: command sets the decimal usage. If this command is used, it is unnecessary to use the
setup_fmtdigits@ and setup_fmtzero@ commands listed above.

1 = use decimals in numbers

0 = use implied decimals

plate_drill_out@ 11,"TFTPLATE_6.drl"

First parameter is the layer number (starts at 0 for layer 1) and second parameter is the exported file's
name.

Example

setup_fmtunit@ 1,1
setup_fmtdigits@ 1,3,3
setup_fmtmode@ 1,1
setup_fmtzero@ 1,0
plate_drill_out@ 31,"c:\temp\TFBPLATE_2.drl"
plate_drill_out@ 32,"c:\temp\TFBPLATE_4.drl"

See also File > Setup > Drill Machine.

Probot

flyprobe_setdefadj@ 3.0000

Sets the default adjacency distance. It resets any specific layer adjacency distance.

flyprobe_setlyradj@ 5.0000,1

The first parameter is the adjacency for a specific layer, and the second parameter is the layer it is being set for (remember,
layer numbers start at 0).

flyprobe_setswapy@ 1

Specifies the movement of the probe while testing the board. (1=From top to bottom, 2=from bottom to top)

flyprobe_setalign@ 0

Pag. 19 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Indicates if you have double sided alignment (1=yes, 0=no)

flyprobe_setraid@ 1

0 = Do not write RAID files

1= Write RAID files

flyprobe_probotout2@ "c:\act_inc\demoint"

Indicates the export path, including the job name (extensions will be added by the system to distinguish files).

Example

flyprobe_setdefadj@ 25.0000
flyprobe_setswapy@ 1
flyprobe_setalign@ 0
flyprobe_setraid@ 1
flyprobe_probotout2@ "C:\TEMP\metprob"

PROBOTECH

flyprobe_probotech_init@

Initializes command.

flyprobe_setdefadj@ 3.0000

Sets the default adjacency distance.

flyprobe_export_probotech@ 3,1,"c:\act\"

First parameter:
1=test for opens
2=test for shorts
3=test for both.

Second parameter:
1=test top
2=test bottom

Third is the export directory.

Example

flyprobe_probotech_init@
flyprobe_setdefadj@ 25.0000
flyprobe_export_probotech@ 3,1,"C:\TEMP\"

TTI

bn_export_tti@ "c:\act\filename.ttu"

Parameter is filename of the TTI File being exported.

Pag. 20 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
File > Import

Aperture Table

To import ECAM .GAP files:


read_gapfile@ 0,"filename.gap"

This command reads the .GAP format and will overwrite the current aperture information.

merge_apfile@ 0,"filename.gap"

Merges a .GAP file into the current aperture table (transcoding will occur, current aperture data will not be
overwritten).

To import all CAD system Aperture Tables:


set_arlfile@ "filename"

Sets the ARL (Aperture Rule) file to use to translate the aperture table (*.arl).

load_aperfile@ "filename"

Loads and converts (as defined by set_arlrfile@ above) the aperture file . This "replaces" the current
aperture information.

merge_aperfile@ "filename"

This converts and merges (defined by set_arlrfile@ above) the aperture file. This is the same as
load_aperfile@ except it does not replace the current aperture information, merely augments it.

Auto

Auto_Import_NCData@ "path"

This automatically imports all the NC Data files (whose format could be determined) in the specified directory path.

AutoImport

auto_import@ "path"

This automatically imports ALL the files whose format could be determined in the specified directory path.

CAD Data

import_cad_pads@ "filename"

Imports PADS ASCII file, as defined by the filename.

import_cad@ Type, Polyextract,"filename"

Imports CAD system ASCII file, using the specified filename.

Type is the CAD format to import (see table below for available CAD systems):

Pag. 21 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Interface Type Polyextract available

PADS PCB (up to v2.0) 1 Yes


PADS PowerPCB (2.0) 2 Yes
PADS PowerPCB (2.1) 3 Yes
PADS PowerPCB (3.0) 4 Yes
Zuken-Redac Visula 5 No
Mentor 6 Yes
Accel TangoPRO 9 Yes
AccelEDA 10 Yes
GenCAD 11 No

Polyextract indicates if polygons should be extracted on import:

0=No
1=Yes

Drill Data

Define Format Settings:

All settings must be defined prior to running the import command, or the default settings will be used.

setup_fmtype@ 1,5

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

setup_fmtunit@ 1,0

Sets the input Unit:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=English
1=Metric

setup_fmtdigits@ 1,2,4

Sets the input Precision:

First #:
0=photoplotter
1=drill machine
2=mill machine

Pag. 22 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Second # is the integer number

Third # is the fractional number (2,4 = 2.4)

setup_fmtmode@ 1,0

Sets the input Mode:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=Absolute
1=Incremental

setup_fmtzero@ 1,0

Sets the Zero Suppression:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

Import Drill File, using Settings


nc_import_drill_pl@ 12,1,"d:\dev\plated.drl"

Imports a plated drill layer. The first parameter is the layer ID (starts at 0).

The second parameter is the ID of the Tool Table to be used (this is the number that appears before the Tool
Table name in the NC Tool Table dialog box). If the Table ID is 0, then the most recently created table will be
used. If no Table exists, a new one will be created.

Last is the drill file name.

nc_import_drill_upl@ 13,1,"d:\dev\unplated.drl"

Imports an unplated drill layer. The first parameter is the layer ID (starts at 0).

The second parameter is the ID of the Tool Table to be used (this is the number that appears before the Tool
Table name in the NC Tool Table dialog box). If the Table ID is 0, then the most recently created table will be
used. If no Table exists, a new one will be created.

Last is the drill file name.

nc_add_table@ 3

Creates a new NC Tool Table. If this precedes the above nc_import_drill commands, this new table will be
considered the most recently created table.

The parameter describes the type of table:


1=Mill & Drill
2=Mill
3=Drill

Pag. 23 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Example

setup_fmtunit@ 1,1
setup_fmtdigits@ 1,3,3
setup_fmtmode@ 1,1
setup_fmtzero@ 1,0
nc_add_table@ 3
nc_import_drill_pl@ 7,1,"c:\temp\drill_10.drl"
nc_import_drill_upl@ 8,1,"c:\temp\drill_10.drl"

See File > Import > Gerber Data for formatting commands.

DXF & Append DXF

import_dxf@ 1,0,"d:\test.dxf"

First parameter:
1=overwrite loaded data (functions like the File > Import > DXF command)
0=do not overwrite (functions like the File > Import > Append DXF command)

Second parameter (When set to 1, the DXF Import dialog box is skipped during the import process, and all
the default parameters are used to load the data):
1=Quick Import
0=no Quick Import (refer to File > Import > Autoimport).

Third parameter is the file name.

import_dxf_importunit@ 2

The import unit


0=mils
1=mm
2=inches

import_dxf_fillclosedpoly@ 0

1=fill closed polylines


0=do not fill.

import_dxf_squarelinetopoly@ 1

1=convert square lines to polygons


0=do not convert.

import_dxf_explodelinetype@ 0

1=explode non-solid linestyles


0=convert non-solid linestyles to solid.

import_dxf_sectbyangle@ 1

For arc settings in polygon borders:


1=use sectorize angle (see import_dxf_sectangle@ below)
0=use deviation distance from true arc (see import_dxf_sectdist@).

import_dxf_compressblk@ 1

1=compress multi-layer block to one layer


0=break block up for each layer.

Pag. 24 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
import_dxf_circlethreshold@ 150.0000

Flash circles less than this value (in mils).

import_dxf_deflinewidth@ 2.0000

Default line width (in mils).

import_dxf_deftextlinewidth@ 2.0000

Default text line width (in mils).

import_dxf_flashthreshold@ 150.0000

Block size threshold (in mils).

import_dxf_sectangle@ 10.00

If import_dxf_sectbyangle@ has a value of 1, this is the sectorization angle used (in percent).

import_dxf_sectdist@ 10.0000

If import_dxf_sectangle@ has a value of 0, this is the deviation distance from the true arc (in mils).

import_dxf_importscale@ 31

The import scale factor. Parameter must always be an integer above 0 (this value is divided by 100 to
provide the scaling factor).

import_dxf_importscale1@ xxx, yyy

Provides the ability to import DXF files with a scale factor value that has a very high precision.

xxx = Integer scale value


yyy = scale value divisor

The two parameters are combined by the command to produce the import scale by dividing the first
parameter by the second (i.e. scale = xxx / yyy).

import_dxf_convert2cam@ "d:\test.dxf"

Completes the import process (data appears in workspace).

import_dxf_rollback@

Cancels the process.

Example

import_dxf@ 1,0,"d:\temp\motorcyc.dxf"
import_dxf_importunit@ 1
import_dxf_fillclosedpoly@ 1
import_dxf_squarelinetopoly@ 1
import_dxf_explodelinetype@ 0
import_dxf_sectbyangle@ 0
import_dxf_compressblk@ 0
import_dxf_circlethreshold@ 150.0000
import_dxf_deflinewidth@ 2.0000
import_dxf_deftextlinewidth@ 2.0000
import_dxf_flashthreshold@ 150.0000
import_dxf_sectangle@ 1000
import_dxf_sectdist@ 10.0000
import_dxf_importscale1@ 1,1

Pag. 25 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
import_dxf_convert2cam@ "d:\temp\motorcyc.dxf"

ECAM dsn

import_ecam@ "name"

Reads in the ECAM DSN defined by name. No layer preparation is required because ECAM DSN replaces all
current information.

ECAM Lib

Ecamlib_in@ "Filename"

This imports an ECAM lib file and converts it to a system CAP library.

Edit Aper Conv

There are no macro commands for this feature.

Gerber Data

Define Format Settings:

All settings must be defined prior to running the import command, or the default settings will be used. For Barco
DPF format, only setup_ftmype@ command needs to be set.

setup_fmtype@ 0,0

Sets the import format type.

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
0 = 274
1 = 274X
2 = Fire 9xxx
3 = Barco DPF
4 = Reserved
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

setup_fmtunit@ 1,0

Sets the Unit:

First #:
0=photoplotter
1=drill machine
2=mill machine
Pag. 26 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Second #:
0=English
1=Metric

setup_fmtdigits@ 1,2,4

Sets the Precision:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second # is the integer number

Third # is the fractional number (2,4 = 2.4)

setup_fmtmode@ 1,0

Sets the Mode:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=Absolute
1=Incremental

setup_fmtzero@ 1,0

Sets the Zero Suppression:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

Import Files, using format settings


read_gapfile@ 0,"filename.gap"

If using a GAP file for aperture information, this command reads the .GAP format and will overwrite the
current aperture information.

merge_apfile@ 0,"name.gap"

If using a GAP file for aperture information: this command merges GAP file into the current aperture table
(transcoding will occur, current aperture data will not be overwritten). See File > Import > Aperture Table for
an explanation of how to handle other aperture table formats.

edit_layer@ Layer#,Drawcolor,Flashcolor,Type,Status,Name$

Creates a new layer in the database.

Parameters are as follows:

Pag. 27 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Layer# sets the layer number. -2=no change (remember layer numbering in macros starts from 0: i.e. layer
1 = 0).

Drawcolor and Flashcolor set the draw & flash colors to display for the layer.

See Layer Color Codes.

Type is the layer type to associate with that layer:

Status determines the appearance of the layer on screen:


0=on
1=off
2=ref
-2=no change

Name$ is the filename of the Gerber file being exported (including the full path). "" =no change (keep old
name)

importgbrfile@ Layer,X,Y,"name"

Import the Gerber file:

Layer is the layer number to save the file to (remember layer numbering begins at 0. i.e 0 = layer 1)

X,Y is the insertion point, which is usually 0,0.

Name is the filename of the Gerber file.

update_layerbar@

Updates the layer bar to reflect the new layers.

update_dcodebar@

Updates the button bar to reflect new dcodes.

Examples:

274D

setup_fmtype@ 0,0
setup_fmtunit@ 0,1
setup_fmtdigits@ 0,2,4
setup_fmtmode@ 0,1
setup_fmtzero@ 0,1
edit_layer@ 11,13,13,4,0,"demobdr.gbr"
importgbrfile@ 11,0.0000,0.0000,"d:\temp\demobdr.gbr"
update_dcodebar@

274X

setup_fmtype@ 0,1
setup_fmtunit@ 0,0
setup_fmtdigits@ 0,2,3
setup_fmtmode@ 0,0
setup_fmtzero@ 0,0
edit_layer@ 12,14,14,4,0,"democomp.gbr"
importgbrfile@ 12,0.0000,0.0000,"d:\temp\democomp.gbr"
update_dcodebar@

Fire 9xxx

setup_fmtype@ 0,2

Pag. 28 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setup_fmtunit@ 0,1
setup_fmtdigits@ 0,2,3
setup_fmtmode@ 0,1
setup_fmtzero@ 0,1
import_polygon_poex@ "1"
import_polygon_poin@ "1"
edit_layer@ 13,15,15,4,0,"demognd.gbr"
importgbrfile@ 13,0.0000,0.0000,"d:\temp\demognd.gbr"
update_dcodebar@

Barco

setup_fmtype@ 0,3
edit_layer@ 14,2,2,4,0,"lstbs.dpf"
importgbrfile@ 14,0.0000,0.0000,"d:\temp\lstbs.dpf"
update_dcodebar@

HPGL & HPGL/2

Importing HPGL and HPGL/2 require several identical statements.

edit_layer@ Layer#,Drawcolor,Flashcolor,Type,Status,Name$

Prepares a layer for import of HPGL data:

(See Import > Gerber Data for more information on this command).

hpgl_in@ Layer#, X#, Y#, Name$

Imports the HPGL file.

Layer# is the layer number (layer numbering in macros begins at 0; i.e. layer 1 = 0)

X# & Y# are the coordinates for the space origin.

Name$ is tge filename of the HPGL file being imported.

update_layerbar@

Updates the layer bar.

update_dcodebar@

Updates the Dcode bar.

Example

edit_layer@ 33,7,7,4,0,"columbia.hpg"
hpgl_in@ 33,0.0000,0.0000,"d:\temp\columbia.hpg"
update_dcodebar@
view_all@

IPC-D350

importipcfile@ "name"

Reads in the defined IPC file. No layer preparation is required because IPC files replace all information and
are not assigned to individual layers.

Pag. 29 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Mill Data

Define Format Settings:

All settings must be defined prior to running the import command, or the default settings will be used.

setup_fmtype@ 2,5

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

setup_fmtunit@ 2,0

Sets the input Unit:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=English
1=Metric

setup_fmtdigits@ 2,2,4

Sets the input Precision:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second # is the integer number

Third # is the fractional number (2,4 = 2.4)

setup_fmtmode@ 2,0

Sets the input Mode:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=Absolute
1=Incremental

Pag. 30 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setup_fmtzero@ 2,0

Sets the Zero Suppression:

First #:
0=photoplotter
1=drill machine
2=mill machine

Second #:
0=leading
1=trailing
2=none

Import Mill Files, using settings:


nc_import_mill@ 14,0,"d:\dev\layer_11.rou"

Imports an NC data file containing mill data. The first parameter is the layer ID (starts at 0).

The second parameter is the ID of the Tool Table to be used (this is the number that appears before the Tool
Table name in the NC Tool Table dialog box). If the Table ID is 0, then the most recently created table will be
used. If no Table exists, a new one will be created.

Last is the mill file name.

nc_add_table@ 2

Creates a new NC Tool Table. If this precedes the above nc_import_mill commands, this new table will be
considered the most recently created table.

The parameter describes the type of table:


1=Mill & Drill
2=Mill
3=Drill

Example

setup_fmtunit@ 2,1
setup_fmtdigits@ 2,3,4
setup_fmtmode@ 2,1
setup_fmtzero@ 2,0
nc_add_table@ 2
nc_import_mill@ 34,3,"c:\temp\25341.rou"

Netlist

import_netlist_tolerance@ 1.0000

Defines the tolerance for matching connectivity points.

import_netlist@ "name"

Reads in a CAM350 refdes/pin# netlist defined by the file path.

import_netlistb@ "name"

Reads in a CAM350 X,Y coordinate netlist defined by the file path.

import_netlistipc356@ "name"

Pag. 31 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Reads in an IPC-D-356 netlist defined by the file path.

Other CAD Netlists:


import_netlist_format@ "format name"

Sets the format for the import of "Other" CAD netlist formats. Current format names accepted are ALLEGRO,
MENTOR, PCAD, PADS, REDAC, and TANGO. This excludes the use of CAM350 and IPC-D-356 formats (which
have separate macro commands).

import_netlist_univ@ "filename"

Imports the specified netlist file, which is assumed to be in the netlist format set by
import_netlist_format@.

Example

import_netlist_format@ "Allegro"
import_netlist_univ@ "d:\temp\demo.net"

ODB++

import_odb@ "filename"

Imports an ODB++ format database job tree or zipped file. Where filename can either be a) the location of
the job tree for an ODB++ database, or b) the name of a compressed ODB++ database.

import_odb_convert2cam@ "filename"

When manually specifying ODB++ format, add this command to convert the file to a flattened, one-up
design.

Example

import_odb@ "D:\temp\testODB"
import_odb_convert2cam@ "D:\temp\testODB"

File > Merge

external_map_layer_start@ "File_Name"

File_Name is the .CAM file that is being merged-in

external_map_layer2layer@ Start,Merge

Merging to existing layers: command specifies the layer mapping for the new database being merged in. A
separate command must be used for each layer in the merged design.

Start is a layer number in the merged-in PCB.

Merge is the layer number in the master PCB that it is being mapped to.

external_map_layer2new@ lyrID,Type,AutoName

Pag. 32 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Merging to new layers: specifies the layer number and type of the new layer being created. (System will
assign new layer number automatically).

lyrID is a layer number in the merged-in PCB

Type is the type of new layer that is being created for it.

AutoName is a flag indicating whether a new layer name should be assigned or the current name should be
used. This is only used internally for Design Compare checking. The default value is zero (0).

axy@ 3845.0000,-1450.0000

Once layer mapping has been specified, axy@ states the coordinates where the new design will be merged
in.

file_merge_refresh@ X,Y,"name"

Merges in a PCB file at location X,Y (x & y are reals): uses same coordinates as the axy@ command. If
another copy of the same PCB file has already merged into the workspace, it will merge in the file again.

file_merge@ X,Y,"name"

Merges in a PCB file at location X,Y (x & y are reals): uses same coordinates as the axy@ command. If the
same PCB file has previously been merged in, it will make a copy of the file already in the workspace. (Works
the same as Edit > Copy.)

external_map_cancel@

This macro command is recorded if the user aborts the merging process after initiating it. All it does is free-
up the memory which was created to store the layer mappings. (This would never be used in writing a
script).

Example

external_map_layer_start@ "d:\test\demoint.cam"
external_map_layer2layer@ 0,0
external_map_layer2new@ 1,2,0
external_map_layer2new@ 2,2,0
external_map_layer2layer@ 3,3
external_map_layer2new@ 4,7,0
external_map_layer2new@ 5,8,0
external_map_layer2new@ 6,6,0
external_map_layer2new@ 7,16,0
external_map_layer2new@ 8,17,0
axy@ -8943.7000,1147.6000
file_merge_refresh@ -8943.7000,1147.6000,"d:\test\demoint.cam"
back@

File > New

setnewfile@

Closes current file (if any) in the CAM or Panel Editor and clears the main window.

newlibitem@

Pag. 33 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
This clears the current custom aperture memory in the CAP Editor, part memory in the Part Editor, or symbol
memory in the Symbol Editor. It does not affect loaded libraries.

testpt_clear@
alignpt_clear@

Deletes all current test information. It does not affect any other data that is loaded.

bn_new@

Deletes all current test information. It does not affect any other data that is loaded.

File > Open

setopenfile@ "filename"

Opens CAM350 database (*.cam) designated by filename.

lib_setextlib@ Type, Id, Merge, "Filename"

Type is the type of library:

1=cap
2=part
3=symbol

Id is the source of the library:


0=system (filename parameter is ignored)
1=external

Merge determines if current library should be replaced:


0=overwrite
1=merge

Filename : Name of external library to load.

set_caplib@ #

Sets the active library (0 = system, 1 = external) in the CAP Editor.

File > Print

See also the Basic commands LPRINT & LPRINT USING.

Pag. 34 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Printer Settings:
print_plot@

Does nothing in macro playback, other than setting the state back to the default command mode.

print_setup@

Does nothing in macro playback, other than setting the state back to the default command mode.

print_SetOutputAllBlack@ "state$"

Sets the option which tells Printer to print all data in black (even to a color printing device).

State$:
"No" for printing in color
"Yes" for printing all in black.

print_SetPlotter@ "plotter name"

This sets the plotter/printer to be "plotter name"; where "plotter name" is one of the printers listed in the
Windows WIN.INI file. The name must be as it appears in the printer name list, either in CAM350, or in the
Control Panel's printer setup.

print_SetOrientation@ #

Sets the printer orientation. It can be set to the following values:


-32768 = Not set (use printer default)
1 = Portrait
2 = Landscape

print_SetPaperSize@ #

Sets the printer paper size. It can be set to the following values:
-32768 = Not set (use default)
1 = Letter 8 1/2 x 11 in
2 = Letter Small 8 1/2 x 11 in
3 = Tabloid 11 x 17 in
4 = Ledger 17 x 11 in
5 = Legal 8 1/2 x 14 in
6 = Statement 5 1/2 x 8 1/2 in
7 = Executive 7 1/4 x 10 1/2 in
8 = A3 297 x 420 mm
9 = A4 210 x 297 mm
10 = A4 Small 210 x 297 mm
11 = A5 148 x 210 mm
12 = B4 250 x 354
13 = B5 182 x 257 mm
14 = Folio 8 1/2 x 13 in
15 = Quarto 215 x 275 mm
16 = 10 x 14 in
17 = 11 x 17 in
18 = Note 8 1/2 x 11 in
19 = Envelope #9 3 7/8 x 8 7/8
20 = Envelope #10 4 1/8 x 9 1/2
21 = Envelope #11 4 1/2 x 10 3/8
22 = Envelope #12 4 1/4 x 11
23 = Envelope #14 1/2 x 11 1/2
24 = C size sheet
25 = D size sheet
26 = E size sheet
27 = Envelope DL 110 x 220 mm
28 = Envelope C5 162 x 229 mm
29 = Envelope C3 324 x 458 mm
30 = Envelope C4 229 x 324 mm
Pag. 35 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
31 = Envelope C6 114 x 162 mm
32 = Envelope C65 114 x 229mm
33 = Envelope B4 250 x 353 mm
34 = Envelope B5 176 x 250 mm
35 = Envelope B6 176 x 125 mm
36 = Envelope 110 x 230 mm
37 = Monarch 3.8 x 7 1/2 in
38 = Envelope 3 5/8 x 6 1/2 in
39 = US Fanfold 14 7/8 x 11 in
40 = German Std 8 1/2 x 12 in
41 = German Legal Fanfold 8 1/2 x 13 in

print_SetPaperBin@ #

Sets the printer paper source. It can be set to the following values:
-32768= Not set (use printer default)
1 = Upper paper bin
2 = Lower paper bin
3 = Middle paper bin
4 = Manual paper feed
5 = Automatic envelope feeder
6 = Manual envelope feed
7 = Automatic bin selection
8 = Tractor feed
9 = Small format
10 = Large format
12 = Large capacity
14 = Cassette loader
256 = Device specific bin

print_SetHeader@ "On" or "Off"

Determines if a header is to be printed.

The following commands "persist" for the current macro run. In other words, they only need to be set once, but
they can be changed at any time prior to printing the next player.

plotLayerRotate@ "on" or "off"

Specifies whether or not the layer should be rotated 90 degrees before plotting.

plotLayerScale@ "#" or "fit"

Sets the plot scale: 1.0 equals 1-to-1, 2.0 equals 2-to-1, and so on. Fit (case not important) tells the plotter
driver to calculate the scale which would "fit" the layer on the page.

plotLayerOffsetXY@ #, #

Specifies the offset in user units (inches or millimeters) of the upper left corner of the layer to the upper left
corner of the page.

plotLayerPens@ Draw#, Flash#

Sets the pens to use when plotting draws and flashes on the paper. Pens may be numbered as defined by the
plotter you are using (usually 1 to 16 or 1 to 8).

plotLayerAlign@ "state$"

Sets the layer alignment for the plot layer.

state$ = "on" if the layer is to be aligned with the other layers, "off" if layer is not to be aligned.

plotLayerOffsetCenter@

Pag. 36 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Specifies that the layer should be centered on the page. This is mutually exclusive with PlotLayerOffsetXY.

plotLayerComposite@ "#" or "ALL"

# is the composite number (0 = 1, 1 = 2, etc.). "All" will plot all composites.

plotTiled@ fillmode

Plots all layers which have been marked for plotting on the same sheet of paper, and "tile" them on the page
such that, from left to right, the first layer is plotted, then the second is plotted next to it, and so on,
wrapping around until all layers are plotted. The scale of the layers is the smallest scale set by the
PlotLayerScale@ command, or a computed scale, if the set scale would result in not all layers being plotted
on the same sheet of paper. The rotation is maintained for all plots.

Fillmode can be: fill, outline or centerline.

plotSeparateSheets@ fillmode

Plots all layers which have been marked for plotting on separate sheets of paper, while maintaining their set
location, scale and rotation.

Fillmode can be: fill, outline or centerline.

plotSameSheet@ fillmode

Plots all layers which have been marked for plotting on the same sheet of paper, while maintaining their set
location, scale and rotation.

Fillmode can be: fill, outline or centerline.

Print Data:

plotLayer@ Lay$

Prints layers based on printer settings above. Unless "All" is entered as the parameter, a new command must
be used for each individual layer being printed.

Lay$ is a string representing the layer to print:

"#" = specific layer number (note macro layer numbering begins at 0; i.e. layer 1 = 0, or in this case "0").

"All" = plot all layers that are turned on

file_print@

Prints all data which displays in the application's workspace. Will print data exactly as it is, including
zooming, etc. Uses default printer settings (not necessary to use setting commands above).

Example

print_setup@
print_plot@
print_SetOutputAllBlack@ "Yes"
print_SetPlotter@ "\\DC_230_ST\DC_230_ST"
print_SetOrientation@ 2
print_SetPaperSize@ -32768
print_SetPaperBin@ -32768
print_SetHeader@ "On"
PlotLayerAlign@ "on"
PlotLayerRotate@ "on"
PlotLayerMirror@ "on"
PlotLayerScale@ "-8.41"
PlotLayerOffsetXY@ -65138.0597,157.4803

Pag. 37 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
PlotLayerPens@ 1,1
PlotLayer@ "0"
PlotLayer@ "1"
PlotSeparateSheets@ "fill"

file_print@

Prints the application's workspace display: prints any CAP that appears in the display (including any zooming,
etc).

print_allcaps@ n

Prints all custom apertures in the currently selected library

0 = internal library
1 = external library

file_print@

Prints the application's workspace display: prints any Part or Symbol that appears in the display (including
any zooming, etc).

print_allparts@ n

Prints all parts or symbols in the currently selected library.

0 = internal library
1 = external library

File > Refresh Symbols

refresh_symbols@

Reads in the Symbol Library, overwriting any symbols in the database which have the same name as library
symbols. (This command takes no parameters).

File > Save & Save As

setsaveasfile@ "name"

Saves a .CAM file of the specified filename.

export_80_database@ "name"

Saves a version 6.0 .CAM file of the specified filename.

export_70_database@ "name"

Pag. 38 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Saves a version 7.0 .CAM file of the specified filename.

export_60_database@ "name"

Saves a version 8.0 .CAM file of the specified filename.

saveaslibitem@ "Filename"

Saves either a CAP, a PART, or a SYMBOL to the current library.

saveaslib@ Mode, LibID, "Filename"

This saves the entire library.

Mode:
1 = part
2 = cap
7 = symbol

LibID:
0 = system (name is ignored)
1 = external

SymSetType@ #

Sets the type for the symbol being saved:


1 = coupon
2 = title block
3 = pinning hole
4 = fiducial

saveaslibitem@ "Filename"

Saves a symbol to the current library.

Example

SymSetType@ 1
saveaslibitem@ "new coupon"
back@

File > Setup

Access Code

There are no macro commands for this feature.

Colors

There are no macro commands for this feature.

Pag. 39 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Drill Machine

Expdrl_ToolFile@ "filename"

Includes the file in the tool definition area.

Expdrl_TrailerFile@ "filename"

Includes the file before closing M02.

Expdrl_generate_Tools@ #

Includes the CAM350 description of the tools. 1 = Yes, 0 = No.

Expdrl_generate_Header@ #

Includes the CAM350 header information.

nc_exp_drill_detect@ #

Sets DETECT,ON directive status:

0=do not include


1=include

nc_exp_drill_atc@ #

Sets ATC,ON directive status:

0=do not include


1=include

nc_exp_drilltool_infeed@ #

Adds tool in-feed rate:

0=do not include


1=include

nc_exp_drilltool_retract@ #

Adds tool retract speed:

0=do not include


1=include

nc_exp_drilltool_RPMs@ #

Adds spindle spin rate:

0=do not include


1=include

nc_exp_drilltool_MaxHits@ #

Adds maximum tool hits:

0=do not include


1=include

Pag. 40 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
nc_exp_drill_version@ #

Adds the VER value (1-8) that tells the machine how to interpret the coordinate base of the file.

nc_exp_drill_t00@ 1

Adds the T00 command at the end of the drill file:

1=append
0=do not append

Import_End_of_Block@ #, # and Export_End_of_Block@ #, #

This sets up the end of block character for the various formats.

The first # is the machine type:


0=photoplotter
1=drill machine
2=mill machine

The second # is the ASCII value for the desired end of block character.

For example, 42=*, 37=$, and 10=carriage return. The default is 42.

Import_XYmodal@ #, # and Export_XYmodal@ #, #

This sets the mode as modal or nonmodal.

The first # is the machine type:


0=photoplotter
1=drill machine
2=mill machine

The second # is modal on/off (0=off, 1=on). The default is ON.

setup_fmtype@ 1,5

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

Example

expdrl_generate_Header@ 0
nc_exp_drill_detect@ 0
nc_exp_drill_atc@ 0
export_XYmodal@ 1,0
nc_exp_drill_t00@ 1
expdrl_generate_Tools@ 0
setup_fmtype@ 1,5

File Extensions

Pag. 41 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

setup_fext@ Format%,Ext$

Sets the default file extension to use for a particular format of file.

Format% is defined as follows (all numeric codes must begin with a 10; i.e. 1000 = Design Files):

00 = Design files
01 = Gerber files
02 = NC Drill files
03 = NC Mill files
04 = DRC report files
05 = Netlist files
06 = Info report files
07 = Error files
08 = Macro files
09 = Plot files
10 = Custom aperture library files
11 = Part library files
12 = IPC files
13 = Aperture files
14 = ECAM design files
15 = Polygon pattern files
16 = ECAM library files
17 = NC Mill tool table files
18 = NC Drill tool table files
19 = Drill and Mill header files
41 = NC Mill tab files
42 = NC Tool Table files (contains mill and/or drill)
43 = Part to Part files

Ext$ is the new extension to use; (i.e. "txt").

file_setup_save@

Saves current Preference settings to the default database (CAM350.CAM or CAM350.CAM).

Example

setup_fext@ 1019, "hdr"


file_setup_save@

Film Box

setfilmbox@ 0.0000,20000.0000,24000.0000,0.0000

Sets the size of the film box in inches. The values are not grid coordinates--they are based on the lower left
X and Y values of the film box, which are always 0.

The first value is the lower left X coordinate (always 0), second value is the upper right Y coordinate, third is
the upper right X coodinate, and fourth is the lower left Y coordinate (always 0).

setfilmboxorigin@ #

Defines which area of the filmbox is located on the origin.

1 = Lower left corner.

2 = Upper left corner.

Pag. 42 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
3 = Center of film box.

4 = Upper right corner.

5 = Lower right corner.

set_filmboxorigin@ 0.0000,0.0000

Sets the origin of the film box in inches. The values are grid coordinates.

Mill Machine

Expmill_ToolFile@ "filename"

Includes the file in the tool definition area.

Expmill_TrailerFile@ "filename"

Includes the file before closing M02.

Expmill_generate_Tools@ #

Includes the CAM350 description of the tools. 1 = Yes, 0 = No.

Expmill_generate_Header@ #

Includes the CAM350 header information. 1 = Yes, 0 = No.

nc_exp_mill_detect@ #

Sets DETECT,ON directive status:

0=do not include


1=include

nc_exp_mill_atc@ #

Sets ATC,ON directive status:

0=do not include


1=include

nc_exp_milltool_infeed@ #

Adds tool in-feed rate:

0=do not include


1=include

nc_exp_milltool_retract@ #

Adds tool retract speed:

0=do not include


1=include

nc_exp_milltool_RPMs@ #

Pag. 43 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Adds spindle spin rate:

0=do not include


1=include

nc_exp_mill_version@ 1

Adds the VER value (1-8) that tells the machine how to interpret the coordinate base of the file.

nc_exp_mill_t00@ 1

Adds the T00 command at the end of the drill file:

1=append
0=do not append

Import_End_of_Block@ #, # and Export_End_of_Block@ #, #

This sets up the end of block character for the various formats.

The first # is the machine type:


0=photoplotter
1=drill machine
2=mill machine

The second # is the ASCII value for the desired end of block character.

For example, 42=*, 37=$, and 10=carriage return. The default is 42.

Import_XYmodal@ #, # and Export_XYmodal@ #, #

This sets the mode as modal or nonmodal.

The first # is the machine type:


0=photoplotter
1=drill machine
2=mill machine

The second # is modal on/off (0=off, 1=on). The default is ON.

setup_fmtype@ 2,5

Sets the output Format:

First #:
0 = photoplotter
1 = drill machine
2 = mill machine

Second #:
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000

Example

expmill_generate_Header@ 0
export_XYmodal@ 2,0
nc_exp_mill_t00@ 1
expmill_generate_Tools@ 0
setup_fmtype@ 2,5

Pag. 44 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Paths

setup_path@ Code#,Path$

Alters the path from which files are opened, imported, or exported.

Code# specifies the file type the path is being changed for, as follows (note the code always begins with a
100 - i.e. 1000 = Aperture Files):

1 = Aperture files
2 = ARL (aperture rule) files
3 = Import from here
4 = Export to here
5 = Macro files
6 = Custom aperture library files
7 = Part library files
8 = Symbol library files
9 = CAD files

Path$ is the name of the directory path

Photoplotter

import_end_of_block@ 0,37
export_end_of_block@ 0,37

These commands set up the end of block character for the various formats.

The first # is the machine type:


0=photoplotter
1=drill machine
2=mill machine

The second # is the ASCII value for the desired end of block character.

For example, 42=*, 37=$, and 10=carriage return. The default is 42.

import_photo_expose@ 0

export_photo_expose@ 0

These commands set the default photo expose mode, if the G55 code does not exist. Default is off.

1 = on
0 = off

import_quadrant_arc@ 1

This sets the assumed interpolated arc type if no G74/G75 is present. This value only has an effect on files
where the arc type is not explicitly defined. Default is Quad.

0=full arcs are assumed


1=quad arcs are assumed

export_include_cr@ 1

This controls whether the exported Gerber file will contain a Carriage Return (CR) at the end of each line.

Pag. 45 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
1 = on (include CR's)
0 = off (no CR's)

import_ignore_same_arc_end@ 0

This determines whether incoming arcs that have the same coordinate for both the start and end points are
read in as a circle or ignored.

0 = off (accept as circle)


1 = on (ignore the arc)

Default is off (considered a circle).

export_include_hdr_comments@ 1

Sets whether database and date comments should appear in the header.

1 = Include
0 = exclude

set_plotsteprepeat@ 1

Determines if step & repeat codes will be exported to photoplotter:

1 = yes
0 = no

import_XYmodal@ 0,1
export_XYmodal@ 0,1

These commands set the mode as modal or nonmodal, for import and export.

The first # is the machine type:


0=photoplotter
1=drill machine
2=mill machine

The second # is modal on/off (0=off, 1=on). The default is ON.

import_default_polarity@ -1

Sets the polarity of the imported plotter files.

0 = clear
1 = dark
-1 = no change

setup_fmtype@ 0,0

First # specifies output device:


0 = photoplotter
1 = drill machine
2 = mill machine

Second # specifies output format:


0 = 274
1 = 274X
2 = Fire 9xxx
3 = Barco DPF
4 = Reserved
5 = Excellon
6 = Sieb & Meyer 1000
7 = Sieb & Meyer 3000
Pag. 46 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Example

import_end_of_block@ 0,97
export_end_of_block@ 0,98
export_photo_expose@ 1
import_photo_expose@ 1
import_quadrant_arc@ 0
export_include_cr@ 0
import_ignore_same_arc_end@ 1
export_include_hdr_comments@ 0
set_plotsteprepeat@ 0
import_XYmodal@ 0,0
export_XYmodal@ 0,0
import_default_polarity@ -1
setup_fmtype@ 0,1

Preferences

set_undostat@ 0

Turns Undo on or off.

0 = off
1 = on

set_ipc_cr@ 0

Adds carriage return linefeeds to exported IPC files.

0 = no CR added
1 = CR is added

set_refreshfonts@ 1

Determines whether a database uses the old font definitions it contains, or loads new font definitions each
time its loaded:

0 = use old fonts


1 = load new fonts

backup_stat@ 1

Specifies if a backup of the current database should be saved automatically.

0 = off
1 = on

backup_intrvl@ #

Sets the time interval to save to backup.

# is in minutes

settexteditor@ "editor"

Sets a different text editor instead of the Windows Notepad. The entire path must be included unless the
path is included in the system path. "Editor" will be called, followed by the file name.

explode_FillCustPoly@ 1

Determines how custom apertures will be exploded using the Edit > Change > Explode > Custom
command:
Pag. 47 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
0 = explode custom to polygons
1 = explode custom to intrinsics

precise_arcs_approximation@ 0

Determines how accurate arcs are approximated by segments in commands such as Add Polygon and Draw
to Raster.

0 = faster performance, less accurate arc approximation


1 = more accurate arc approximation

Save Defaults

file_setup_save@

Saves current Preference settings to the default database (CAM350.CAM or CAM350.CAM).

File > Test Point Attribs

Colors

testpt_setcolor@ 8,9,11

First # is the Top color, second is the bottom color, and third is the through-hole color.

See Layer Color Codes.

Size

testpt_setsize@ #

# is the test point graphic size, in mils.

File > Test Point To Gerber

testpt2gerber@

Creates new graphic layers to graphically represent Top, Bottom and Through-Hole test points.

Pag. 48 di 48
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Edit Menu Macros

Add Vertex Delete Segment Move Vtx


Add Vtx Delete Tab Move Vtx/Seg
Break At Vtx Delete Vertex Redo
Change Delete Vtx Reverse Test Points Staggering
Change Fixture Origin Join Segments Rotate
Convert To Polygons Layers Spin Image
Copy Line Change Trim Using
Delete Mirror Undo
Delete All Move
Delete Seg Move Tab

Edit > Add Vertex

vertex_add@
axy@ 1325.0000,4525.0000
axy@ 1550.0000,4625.0000
back@

Adds a vertex to an existing one. The first coordinate point is the handle, the second point is the target.

Edit > Add Vtx

nc_edit_add_millvtx@
axy@ 503.7293,3445.8564

The existing point on the mill path that is becoming a vertex.

axy@ 475.0000,3225.0000

The new location of the vertex you created

back@

Ends command.

Edit > Change

Anchor

add_anchor@
axy@ X,Y

Pag. 1 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
back@

Moves the part anchor to the indicated coordinate.

Rule: Command remains the same for all three editors, but sets different data anchors. In CAM, sets the one-up
image anchor for Panel Editor; in Part, sets the part anchor or adding parts in CAM Editor; and in Symbol sets
the anchor for symbols being added in Panel Editor.

Attributes

Attribute macro commands consist of 1) a command to set the type of attribute being created, and 2) a series of
commands to edit that attribute.

Types

Use one of the following commands to specify the attribute being set.

edit_attributes_component@

Use for a Component attribute.

edit_attributes_net@

Use for a Net attribute.

edit_panel_attributes@

Use for a Panel attribute.

Editing the Attribute


axy@ 1690.0000,2800.0000

A coordinate within the item who's attribute is being changed.

Requirement: Only used for component and net attributes.

Add_Attribute@ "1`2"

Adds the attribute with the "Category`Key" value.

Delete_Attribute@ "2`3"

Deletes the attribute with the "Category`Key" value.

Edit_Attribute@ "4`5"

Selects the attribute to be changed, by "Category`Key" value.

Change_Attribute_Value@ "3"

The new Value of the attribute

Example

'Component attribute:
edit_attributes_component@
axy@ 1325.0000,1540.3600
Add_Attribute@ "test`1"
Change_Attribute_Value@ "2"
back@

Pag. 2 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

'Net attribute:
edit_attributes_net@
axy@ 1525.0000,1395.0000
Delete_Attribute@ "test`4"
Add_Attribute@ "test`5"
Change_Attribute_Value@ "667"
back@

'Panel attribute:
edit_panel_attributes@
Add_Attribute@ "ch`1"
Change_Attribute_Value@ "djkd"
back@

Compensation

nc_edit_change_compensation@

Initiates command.

axy@ 500.0000,2525.0000

Coordinate on the mill path to change.

nc_change_compensation@ 1,1

First parameter is the compensation direction:


0=none
1=left
2=right.

Second parameter is the compensation index:


0=use tool ID (no index)
1-99=use given index number.

Example

nc_edit_change_compensation@
axy@ 500.0000,2525.0000
nc_change_compensation@ 1,1
back@

Group Selection is also available for this function.

Dcode

change_dcode@
axy@ 2325.0000,4775.0000
back@
edit_chgdcode@ 15
back@

Change_dcode@ starts the command, the point selects the Dcode, the Dcode is then changed.

Group Selection is also available for this function.

Destination Layer

Pag. 3 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

change_layer_destination@

Invokes command.

axy@ x, y

Selects symbol data (draw or flash only) which is to have its destination layer changed. Maybe be used
multiple times to select several datum.

gen_selectall2@

Alternately, this command may be used, instead of the axy@ command, to select all symbol data in the
symbol.

back@

Ends data selection mode.

edit_chgdestlyr@ lyrID

Changes the specified destination layer(s) of the selected data. Uses same designations as Utilities > Draw
to Symbol:

lyrID is the layer destination for the symbol data. The mapping is as follows:
1 = all Non-NC layers
2 = all electric layers
3 = goes on all layers of one type. Symbol will appear on all layers of the type it was originally generated on
(e.g. internal)
4 = appears only on the specified layer the symbol is created on

edit_chgdestlyr_cancel@

Cancels the selections made in the command.

back@

Ends command.

Example

change_layer_destination@
axy@ 125.0000,100.0000
back@
edit_chgdestlyr@ 1
back@

Device Name

change_devname@
axy@ 2075.0000,4075.0000
edit_devname@ "newname"
back@

Change_devname starts the command, a point is selected, the change is made. Note that new Device Name
is a string.

Drill First/Last

Pag. 4 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

nc_set_FirstOrLast@ 1
axy@ 0.0000,-150.0000

Sets the First drill hit at the specified point.

nc_set_FirstOrLast@ 0
axy@ 150.0000,0.0000

Sets the Last drill hit at the specified point.

back@

Drill Hit

nc_edit_change_drill_hit@
axy@ -700.0000,-575.0000

The location of the drill hit to be changed

nc_change_drill_hit@ 1,0

First parameter is the Tool ID number. Second parameter is 0=unplated, 1=plated.

back@

Ends command.

Group Selection is also available for this function.

Drill Order

There are no macro commands for this feature.

Drill Sequence

Each drill sequence has a first and last "anchor" drill in the sequence. These drills may be defined by their
relationship to the smallest or largest tool in the NC Table, by tool number or by tool size. This command allows
you to alter the settings of these drill tools in an existing Drill Sequence .

edit_change_drill_seq@
axy@ 0.0000,0.0000

Selects sequence to be changed at coordinates given.

First drill tool setting

Select one of the following to set the FIRST tool's value:

FirstSymDrlSpecSmallest@ Nth, Set, min/max

Sets the first drill based on the smallest drill in the design. Parameters are:

Nth: sets how far offset from the smallest drill in the table it should be: 0 means smallest, 1 is next to

Pag. 5 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
smallest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the smallest size the first tool in the sequence can be (i.e. 45
indicates a tool largerr than 45 mils must be the first tool in the sequence)

FirstSymDrlSpecLargest@ Nth, Set, min/max

Sets the first drill based on the largest drill in the design. Parameters are:

Nth: sets how far offset from the largest drill in the table it should be: 0 means largest, 1 is one below
largest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the largest size the first tool in the sequence can be (i.e. 100
indicates a tool smaller than 100 mils must be the first tool in the sequence)

FirstSymDrlSpecToolNum@ Tool Number

Sets the first tool in the sequence based on the ID number of the tool.

FirstSymDrlSpecToolSize@ Size

Sets the first tool in the sequence based on the size of the tool (in user units).

Last drill tool setting

Select one of the following to set the LAST tool's value.

LastSymDrlSpecSmallest@ Nth, Set, min/max

Sets the last drill based on the smallest drill in the design. Parameters are:

Nth: sets how far offset from the smallest drill in the table it should be: 0 means smallest, 1 is next to
smallest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the smallest size the first tool in the sequence can be (i.e. 45 indicates a tool
larger than 45 mils must be the first tool in the sequence)

LastSymDrlSpecLargest@ Nth, Set, min/max

Sets the first drill based on the largest drill in the design. Parameters are:

Nth: sets how far offset from the largest drill in the table it should be: 0 means largest, 1 is one below
largest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the largest size the first tool in the sequence can be (i.e. 100 indicates a tool
smaller than 100 mils must be the first tool in the sequence)

LastSymDrlSpecToolNum@ Tool Number

Sets the first tool in the sequence based on the ID number of the tool.

LastSymDrlSpecToolSize@ Size

Pag. 6 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Sets the first tool in the sequence based on the size of the tool (in user units).

SymSetNumHits@ 0

Sets the number of drill hits to use in the sequence.

SymSetDrillType@ 1

Sets the drill type to use in the sequence. 0 = Plated, 1 = Unplated.

DrillSeqEditDo@

Makes the changes to the drill sequence. No parameter.

Example

edit_change_drill_seq@
axy@ -300.0000,200.0000
FirstSymDrlSpecSmallest@ 0,0,0.0000
LastSymDrlSpecLargest@ 0,1,34.0000
SymSetNumHits@ 0
SymSetDrillType@ 1
DrillSeqEditDo@
back@

Endcap

axy@ -56.0000,64.0000
back@

Selects the line to change end cap on.

EdCap_Width@ #
EdCap_Ok@ #

Changes the line width. Both commands must be used to make change.

Width # is in database units.

EdCap_Ok value: 0 = change width.

EdCap_EndCap@ #
EdCap_Ok@ #

EndCap # allows changing the end cap shape (0 = square, 1 = round).

EdCap_Ok value = 1 for change end cap.

EdCap_Polarity@ #
EdCap_Ok@ #

Polarity # allows changing element polarity (0 = negative, 1 = positive).

EdCap_Ok value = 2 for change polarity.

Example

axy@ -20.0000,16.0000
back@
EdCap_EndCap@ 0

Pag. 7 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
EdCap_Ok@ 2
back@

Explode

Explode All:

edit_explode@
axy@ X,Y
explode@
back@

Explodes anything at the selected point.

Group Selection is also available for this function.

Explode Custom Aperture:

explode_custom@
axy@ -492.7000,-50.0000
back@
explode_FillCustPoly@ -1

If you are exploding the custom to a vector-filled polygon, the parameter for explode_FillCustPoly@ is a
Dcode. If it is being converted to a raster polygon, the parameter is always -1.

Group Selection is also available for this function.

Explode Merged Database:

explode_part@
axy@ 1575.0000,3605.0000
explode@

Explodes merged design at coordinate given.

Group Selection is also available for this function.

Explode Net:

explode_net@
axy@ X,Y
explode@
back@

Only requires a single selected point on a net.

Group Selection is also available for this function.

Explode Padstack:

explode_padstack@
axy@ X,Y
explode@
back@

Pag. 8 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Explodes the padstack at the selected point.

Group Selection is also available for this function.

Explode Part:

explode_part@
axy@ X,Y
explode@
back@

Explodes the part at the selected point.

Group Selection is also available for this function.

Explode Text:

explode_text@
axy@ X,Y
explode@
back@

Explodes the text at the selected point.

Group Selection is also available for this function.

Explode Vector Polygon:

explode_vector_polygon@
axy@ X,Y
explode@
back@

Explodes the vector polygon at the selected point.

Group Selection is also available for this function.

Explode Merged PCB NC Data:

nc_change_explode_Merge@

Explodes NC Data from a merged PCB file.

Explode Step And Repeated NC Data:

nc_change_explode_SR@

Explodes step&repeat NC Data in panelized designs.

Explode Symbol:

explode_symbol@

Pag. 9 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ -2350.0000,27525.0000

Explodes symbol at given location.

explode_FillCustPoly@ -1

If you are exploding the symbol to a vector-filled polygon, the parameter for explode_FillCustPoly@ is a
Dcode. If it is being converted to a raster polygon, the parameter is always -1.

Flatten Panel:

explode_flattenpanel@

Explodes entire panel.

back@

Ends command.

Fixture Origin

Both Fixtures

bn_movebothfixture@
axy@ 14.9000,172.3000
back@

Coordinates are the new origin.

Bottom Fixture

bn_movebotfixture@
axy@ -16.1000,467.2000
back@

Coordinates are the new origin.

Top Fixture

bn_movetopfixture@
axy@ -31.6000,327.5000
back@

Coordinates are the new origin.

Fixture Probe

bn_chgtestpin@
axy@ 405.3000,4288.5000
back@

The coordinates of the probe to be changed.

edit_chgtfpindef@ 1

Pag. 10 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Parameter is the ID of the new test probe.

back@

Mill First/Last

nc_set_FirstOrLast@ 1
axy@ 0.0000,-150.0000

Sets the First mill path at the specified point.

nc_set_FirstOrLast@ 0
axy@ 150.0000,0.0000

Sets the Last mill path at the specified point.

back@

Ends selection

Mill Order

There are no macro commands for this topic.

Mill Path

Add Vtx At Intersection


nc_edit_addvtxatintersection@
axy@ 2750.0000,2775.0000
back@

Coordinates are a point on the single mill path that you want to create vertices on.

Group Selection is also available for this function.

Chamfer
nc_edit_chamfer@

Initiates command.

change_backoff@ 90.0000

Sets the Backoff distance

change_minangle@ 60

Sets the minimum angle that can be selected (in degrees).

change_maxangle@ 120

Sets the maximum angle that can be selected (in degrees).

axy@ 3119.3000,4867.2000
back@

Pag. 11 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
The coordinates of the vertex to be chamfered.

Group Selection is also available for this function.

Fillet
nc_edit_fillet@

Initiates command.

change_radius@ 100.0000

Sets the radius of the arc that is created.

change_minangle@ 75

Sets the minimum angle that can be selected (in degrees).

change_maxangle@ 105

Sets the minimum angle that can be selected (in degrees).

axy@ 3119.3000,4858.3000
back@

The coordinates of the vertex to be filleted.

Group Selection is also available for this function.

Plunge/Extract
nc_edit_move_plunge_extract@
axy@ -10.0000,3202.5000
back@

The coordinates denote the new plunge/extraction point.

Segments To Arcs
nc_edit_segments_to_arcs@
axy@ 524.3600,2664.7500
back@

Select any point located on the arc that you are converting.

Mill Tab

nc_edit_change_mill_tab@
axy@ 839.5000,4951.6000

The coordinates of the tab that you wish to change.

nc_change_mill_tab@ 1

This changes the tab. The parameter is the ID of the mill tab in the Mill Tab Table.

back@

Netname

Pag. 12 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
change_netname@
axy@ 1625.0000,4325.0000
edit_netname@ "new netname"
back@

change_netname@ starts the command, coordinates denote a point on the net selected; edit_netname@
makes the change. Note that new netname is a string.

Origin

Change Space Origin


edit_chg_orgn@
axy@ 1343.0000,4251.0000
change_origin@ 1343.0000,4251.0000

Edit_chg_orgn@ starts the command. The new space origin is defined by change_origin@.

Change Panel Space Origin


edit_chg_orgn@
axy@ 1343.0000,4251.0000
change_origin@ 1343.0000,4251.0000

Edit_chg_orgn@ starts the command. The new space origin is defined by change_origin@. Note that the
same macro is used for both the CAM Editor and the Panel Editor. The origin changed depends on the
current editor.

Change Grid Origin


edit_chg_grdorgn@
axy@ 1560.0000,4390.0000
change_gridorg@ 1560.0000,4390.0000

Edit_chg_grdorgn@ starts the command. The new grid origin is defined by change_gridorg@.

Change Datum Coordinate Origin


axy@ 1137.6000,2025.5000

This is the point selected to change.

change_origin@ 1127.6000,2015.5000

This defines the new space origin.

Change Film Box Origin


edit_chg_filmboxorgn@
axy@ 1560.0000,4390.0000
setup_filmboxorigin@ 1560.0000,4390.0000

Edit_chg_filmboxorgn@ starts the command. The new grid origin is defined by setup_filmboxorigin@.

Change NC Origin
edit_chg_ncorgn@
axy@ 1560.0000,4390.0000
change_ncorigin@ 1560.0000,4390.0000

Pag. 13 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Edit_chg_ncorgn@ starts the command. The new grid origin is defined by change_ncorigin@.

Panelization Anchor

see Change > Anchor

Padstack

change_via@
axy@ 3750.0000,1400.0000
back@
edit_chgpadstk@ #

change_via@ starts the command, the point specified selects the padstack; the new number is assigned.

Group Selection is also available for this function.

Path Direction

nc_edit_change_path_dir@

Starts the command.

axy@ -1025.0000,2950.0000

Any point on the desired mill path.

nc_reverse_path_direction@

When selection is completed, this command executes the function and the paths are changed.

back@

Path Properties

nc_change_path_properties@

Initiates command.

axy@ 1110.6000,4938.3000

Any point on the desired path.

nc_set_path_toolref@ 3

Reference number of the tool to be assigned to the path (as defined by the Tool Table assigned to the layer).

nc_set_path_pilottoolref@ 2

Pag. 14 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Applies to milled paths, circles, or slots only. Reference number of the tool to be used for the pilot holes. If 0,
then no pilot holes.

nc_set_path_feedrate@ 33.3333

Applies only to mill paths. The feedrate of the mill tool in user units per second (defined under Settings >
Unit).

nc_set_path_text_direction@ 1

Applies only to drilled text. The text direction is 0=Horizontal, 1=Vertical

nc_set_path_text@ "string"

Applies only to drilled text, "string" is the text to be used.

nc_set_path_msg_text@ "string"

Changes the text displayed for the operator message.

nc_set_path_circle_radius@ 466.9614

Changes the radius of a mill or drill circle.

nc_set_path_compensation@ 2,1

Changes the compensation for mill paths.

First parameter:
0=No Compensation
1=Left Compensation
2=Right Comensation

Second parameter:
0=Use tool ID as Compensation Index
1-99=Use given Compensation Index ID

nc_set_circ_inout@ 1

Applies only to mill circles. Defines the circle as Inside or Outside (0=inside, 1=outside).

nc_set_path_type@ 1

Changes the type of path, when the current path is as specified:

Current Change to (type #)


Mill Circle Mill path (1)
Drill circle (8)
Drill Circle Mill path (1)
Mill circle (7)
Mill Slot Mill path (1)
Drill slot (6)
Drill Slot Mill path (1)
Mill slot (5)
back@

Ends command.

Example

nc_change_path_properties@

Pag. 15 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 1325.0000,2100.0000
nc_set_path_compensation@ 1,0
nc_set_path_feedrate@ 5000.0000
back@

Pilot Holes

nc_edit_change_pilot_holes@
axy@ 3590.3000,4845.0000

Initiates command at any point on the mill path you wish to work with.

nc_change_pilotholes@ 2

0=No pilot holes, 1-99=tool reference ID of the tool to be used.

back@

Ends command.

Group Selection is also available for this function.

Pin Number

edit_pin@

Initiates command.

axy@ 0.0000,0.0000

The coordinate of the pin being renumbered.

set_pinseq@ "1"

Sets the next number in the pin sequence. By default, the system begins with pin 1 and increases the
number each time a coordinate is selected.

Example

edit_pin@
axy@ -175.0000,110.0000
set_pinseq@ "1"
axy@ -72.4000,109.4000 'Each new axy@ changes pin number to next in sequence: "2", "3", etc.
axy@ -26.0000,112.2000
axy@ 26.5000,110.8000
back@

Polarity

setpolarity@ Value

Sets the draw polarity inside the CAP Editor.

Value : 0=positive, 1=negative.

Pag. 16 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
RefDes

change_refdes@
axy@ 2225.0000,4050.0000
edit_refdes@ "newrefdes"
back@

change_refdes@ starts the command, coordinates denote a point on the ref/des selected; edit_refdes@
makes the change. Note that new RefDes is a string.

Sectorize

change_sector@
axy@ 1625.0000,4400.0000

Selects the arc/circle to sectorize.

setsectorize@ 1,4500

Sets the sectorization angle. First parameter is fixed. Second is the angle of the sectorization out to two
decimal places ( i.e. 4500 = 45 degrees)

edit_sectorize@

Performs the actual change.

Example

change_sector@
axy@ 2423.8000,1729.8000
setsectorize@ 1,1550
edit_sectorize@
back@

Group Selection is also available for this function.

Stiffener

bn_chgstiffener@
axy@ -7.6000,4685.4000
back@

Selects stiffener to change.

edit_chgstiffenerdef@ 1

The parameter is the new ID number of the stiffener.

Example

bn_chgstiffener@
axy@ 632.0000,3389.6000
back@
edit_chgstiffenerdef@ 2
back@

Pag. 17 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Symbol Drill

edit_change_symbol_drill@
axy@ -200.0000,50.0000

Changes the drill located in the symbol at the given location.

Select one of the following to set the tool value for the drill:

SymDrlSpecSmallest@ Nth, Set, min/max

Sets the first drill based on the smallest drill in the design. Parameters are:

Nth: sets how far offset from the smallest drill in the table it should be: 0 means smallest, 1 is next to
smallest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the smallest size the first tool in the sequence can be (i.e. 45 indicates a tool
larger than 45 mils must be the first tool in the sequence)

SymDrlSpecLargest@ Nth, Set, min/max

Sets the first drill based on the largest drill in the design. Parameters are:

Nth: sets how far offset from the largest drill in the table it should be: 0 means largest, 1 is one below
largest, etc.

Set indicates whether min/max setting is to be used. 0 = no, 1 = yes.

min/max: sets a value for the largest size the first tool in the sequence can be (i.e. 100 indicates a tool no
larger than 100 mils must be the first tool in the sequence)

SymDrlSpecToolNum@ Tool Number

Sets the first tool in the sequence based on the ID number of the tool.

SymDrlSpecSizet@ Size

Sets the first tool in the sequence based on the ID number of the tool.

SymSetDrillType@ 1

Sets the drill type to use in the sequence. 0 = Plated, 1 = Unplated.

SymDrillEditDo@

Makes the change to the drill.

Example

edit_change_symbol_drill@
axy@ -375.0000,-100.0000
SymDrlSpecSmallest@ 0,1,56.0000
SymSetDrillType@ 1
SymDrillEditDo@
back@

Text

Pag. 18 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Changing the Content:

There are no macro commands for this function at this time.

Changing the Font:


change_text_font@
axy@ 1285.0000,4745.0000

Selects text whose font is to be changed.

change_font@ 2,0,"Arial"

First number is the type of font:


1 = EFN (DownStream Technologies' Simple font)
2 = True Type
4 = Autocad SHP
8 = Autocad SHX

Second number is the Dcode number. This is always 0 for True Type fonts (True Type fonts are raster
polygons).

The last parameter is the face name of the font. If the font type is 1 (EFN), then it can be the filename of the
font.

Group Selection is also available for this function.

Changing the Style:


change_text_style@
axy@ 1800.0000,4525.0000

Selects text whose style is to be changed.

Font Settings:

Specifies the font to use for the text. May be set prior to or after text settings in the Text Settings section
below.

textfont@ "SIMPLE.EFN"

This is used if an EFN font is used. Otherwise, the following command is used:

textfontface@ 2, "Arial"

Specifies a non-EFN font to use. This is the font face name, not a filename.

First number is the type of font:


2=True Type
4=Autocad SHP
8=Autocad SHX

The second parameter is the face name of the font.

Text Settings:

Once the text and font to be changed have been selected, any of the following commands can be issued (in
any order) to change the text attributes:

textfullheight@ 100.0000

Sets the full text height, in user units, taking into account characters with descenders (as well as a little
additional font-dependent spacing so that lines will not overlap). The old command textheight@, used with
version 2.X and earlier, will still function with this macro.
Pag. 19 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
textcapheight@ 50

Specifies the exact height for the font's capital letters, in user units. All other characters are based relative to
this set height.

Exception: the two macro commands above are mutually exclusive. When used in a macro, each overrides
the previous one's settings for any new text being added.

textangle@ 4500

Angle of the text, times 100 (i.e. 4500 = 45 degrees)

textmirror@ 1

Sets text mirroring state. 0=not mirrored or 1=mirrored

textjust@ 4

Sets the text justification, as follows:

33 = Left Baseline
36 = Center Baseline
34 = Right Baseline
17 = Left Bottom
20 = Center Bottom
18 = Right Bottom
5 = Left Center
4 = Center Center
6 = Right Center
9 = Left Top
12 = Center Top
10 = Right Top

textfitting@ 1

Sets the text as fitted or not. 0=no fit or 1=fit

textcspace@ 20.0000

Sets the character spacing, in user units.

textlspace@ 100.0000

Sets the line spacing, in user units.

textslant@ 0

Text slant is set in degrees times 100. Positive values slant the font to the right, negative values slant it to
the left. You can italicize a non-italics font face by specifying a slant angle. (Typical italic font faces are
slanted about 10 to 15 degrees.)

textxscale@ 500

Sets a text scale value (times 100). This applies to the width of individual characters. For example,
textxscale@ 200 would make each character twice a wide as initially defined, while textxscale@ 50 would
make the characters half as wide as initially defined.

textvertical@ 1

Determines if text is displayed vertically. 1=yes or 0=no

edit_chgtext_style@

Pag. 20 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Finalizes the changes made to the text style.

back@

Ends command.

Example

change_text_style@
axy@ -106.1360,571.5170
textfont@ "SIMPLE.EFN"
textfullheight@ 30.0000
textangle@ 1500
textvertical@ 0
edit_chgtext_style@
back@

Group Selection is also available for this function.

Changing the Text Style and Contents:

In addition to the commands listed in Changing the Text Style above, the following command allows you to
change the text string itself:

edit_chgtext@ "This is new text"

Inserts a new text string, as designated by the parameter, replacing the old one. Finalizes the text style and
content changes.

back@

Ends command.

Example

change_text@
axy@ -80.5600,569.2930
textfontface@ 2,"Arial"
textangle@ 0
textjust@ 4
edit_chgtext@ "This is a test"
back@

Tool

nc_edit_change_tool@
axy@ 1612.8000,5373.8000

Any point on the drill or mill that you wish to change the tool for.

nc_change_tool@ 3

The new tool reference ID (as defined in the NC Tool Table).

back@

Ends command.

Group Selection is also available for this function.

Update Part Pins


Pag. 21 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

change_partpins@

Command invokes the Update Part Pins feature.

axy@ 1612.8000,5373.8000

Indicates the coordinates for the selected part.

edit_chgpartpins@ 0

Performs the update itself:


0 = use the selected component's pin sequence as the template to update the other parts of the same type
1 = use the pin sequence from the part library version of the component to update the other parts

Example

change_partpins@
axy@ 2015.5000,4311.1000
edit_chgpartpins@ 1
back@

Variable Text

Similar to the Change > Text Style & Contents command, but only functions on Variable Text and uses a
new command to invoke the changes:

change_variable_text@
axy@ 1800.0000,4525.0000

Initiates command and selects text to change.

Font Settings:

Specifies the font to use for the text. May be set prior to or after text settings in the Text Settings section
below.

textfont@ "SIMPLE.EFN"

This is used if an EFN font is used. Otherwise, the following command is used:

textfontface@ 2, "Arial"

Specifies a non-EFN font to use. This is the font face name, not a filename.

First number is the type of font:


2=True Type
4=Autocad SHP
8=Autocad SHX

The second parameter is the face name of the font.

Text Settings:

Once the text and font to be changed have been selected, any of the following commands can be issued (in
any order) to change the text attributes:

textfullheight@ 100.0000

Pag. 22 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Sets the full text height, in user units, taking into account characters with descenders (as well as a little
additional font-dependent spacing so that lines will not overlap). The old command textheight@, used with
version 2.X and earlier, will still function with this macro.

textcapheight@ 50

Specifies the exact height for the font's capital letters, in user units. All other characters are based relative to
this set height.

Exception: the two macro commands above are mutually exclusive. When used in a macro, each overrides the
previous one's settings for any new text being added.

textangle@ 4500

Angle of the text, times 100 (i.e. 4500 = 45 degrees)

textmirror@ 1

Sets text mirroring state. 0=not mirrored or 1=mirrored

textjust@ 4

Sets the text justification, as follows:

33 = Left Baseline
36 = Center Baseline
34 = Right Baseline
17 = Left Bottom
20 = Center Bottom
18 = Right Bottom
5 = Left Center
4 = Center Center
6 = Right Center
9 = Left Top
12 = Center Top
10 = Right Top

textfitting@ 1

Sets the text as fitted or not. 0=no fit or 1=fit

textcspace@ 20.0000

Sets the character spacing, in user units.

textlspace@ 100.0000

Sets the line spacing, in user units.

textslant@ 0

Text slant is set in degrees times 100. Positive values slant the font to the right, negative values slant it to
the left. You can italicize a non-italics font face by specifying a slant angle. (Typical italic font faces are
slanted about 10 to 15 degrees.)

textxscale@ 500

Sets a text scale value (times 100). This applies to the width of individual characters. For example,
textxscale@ 200 would make each character twice a wide as initially defined, while textxscale@ 50 would
make the characters half as wide as initially defined.

textvertical@ 1

Pag. 23 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Determines if text is displayed vertically. 1=yes or 0=no

edit_chgtext_contents@ "This is new text"

Inserts a new text string, as designated by the parameter, replacing the old one.

Example

change_variable_text@
axy@ 25.0000,25.0000
textfont@ "SIMPLE.EFN"
textfullheight@ 150.0000
textjust@ 4
edit_chgtext_contents@ "variable test"
back@

Group Selection is also available for this function.

Width

setwidth@ Width

Sets the drawing width in either mils or mm.

Group Selection is also available for this function.

Edit > Convert To Polygons

edit_cap_convert_to_polygons@

Converts the current custom aperture into polygons. No parameter.

Edit > Copy

edit_copy@
axy@ -150.0000,375.0000
axy@ 50.0000,275.0000
back@

First coordinate is the "copy from" point and the next coordinate is the "copy to" point.

Group Selection is also available for this function.


Check Box & Filter data selection options are available for this function.

Copy Options:
setcoplayer@ #,#

The first number is the layer # and the second number is either a 0 (do not copy to this layer) or a 1 (copy

Pag. 24 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
to this layer).

copy_to_layer@

This must follow the setcoplayer@ command and actually does the copy.

setcopies@ 3

This specifies how many copies to make. The angle and distance are calculated from the first and second
copy points.

Example

edit_copy@
setcopies@ 3
edit_selectall2@
setcoplayer@ 3,1
copy_to_layer@
back@

Edit > Delete

Main Delete command. Deletes all selected data.

edit_delete@
axy@ 175.0000,400.0000

Deletes item at specified coordinate.

back@

Required to end the individual or window selection process.

delete_edits@ 4, 1

This comes at the end of the code and performs the actual deletion. The first parameter is 4 to delete
everything selected, or 11 to delete just the vertices (as if you were in the Edit > Delete Vertex
command). The second parameter is 0 to cancel the operation, or 1 to execute the operation.

Group Selection is also available for this function.


Check Box & Filter data selection options are available for this function.

Example

edit_delete@
edit_group@
axy@ 795.2000,3716.4000
axy@ 3103.8000,1631.8000
seteditvia@ 1
back@
delete_edits@ 4,1
back@

Fixture Probe

Pag. 25 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
edit_deltfpin@
axy@ 1090.1000,4291.5000
back@

Deletes the selected fixture probe.

Stiffener

edit_delstiffener@
axy@ -67.5000,4692.4000
back@

Deletes the selected stiffener.

Test Point

edit_deltestpt@
axy@ 440.9000,4279.5000
back@

Deletes the selected test point.

Edit > Delete All

Alignment Pins

alignpt_clear@

Removes all alignment pins in database.

Fixture Probes

On Top Fixture:
bn_delalltoppins@

Removes all fixture probes on top side fixture.

On Bottom Fixture:
bn_delallbotpins@

Removes all fixture probes on bottom side fixture.

Stiffeners

On Top Fixture:

Pag. 26 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
bn_delalltoptools@

Removes all stiffeners on top side fixture.

On Bottom Fixture:
bn_delallbottools@

Removes all stiffeners on bottom side fixture.

Test Points

testpt_clear@

Removes all test points in database.

Edit > Delete Seg

nc_edit_delete_millseg@
axy@ 3110.4000,3182.9000

The mill path segment defined by the point will be deleted.

back@

Ends command.

Edit > Delete Segment

segment_delete@
axy@ 1400.0000,4625.0000

The segment defined by the point will be deleted.

back@

Ends command.

Edit > Delete Tab

nc_edit_delete_mill_tab@
axy@ 435.6000,3404.9000

The mill tab defined by the point will be deleted.

Pag. 27 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
back@

Ends command.

Group Selection is also available for this function.

Edit > Delete Vertex

vertex_delete@
axy@ 1450.0000,4150.0000

The vertex defined by the point will be deleted.

Group Selection is also available for this function.

Edit > Delete Vtx

nc_edit_delete_millvtx@
axy@ 1857.2000,3258.5000

The mill vertex defined by the point will be deleted.

back@

Ends command.

Edit > Layers

Add Layers

edit_layer@ Layer#,Drawcolor,Flashcolor,Type,Status,Name$

Creates a new layer in the database.

Parameters are as follows:

Layer# sets the layer number. -2=no change (remember layer numbering in macros starts from 0: i.e. layer
1 = 0).

Drawcolor and Flashcolor set the draw & flash colors to display for the layer:

See Layer Color Codes

Type is the layer type to associate with that layer:

Pag. 28 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
See Layer Type codes

Status determines the appearance of the layer on screen:


0=on
1=off
2=ref
-2=no change

Name$ is the filename of the Gerber file being exported (including the full path). "" =no change (keep old
name)

nc_assign_tool_table_to_layer@ LyrID,TableID

When adding an NC layer, you may assign an NC Tool Table assigned to the layer with this command. If the
command is not set, the first table in the database (if any exists) is used for the layer.

LyrID: ID of NC Data layer the table is to be assigned to.


TableID: Table ID of the NC Tool Table to be assigned to the layer.

See also Tables > Assign > Tool_Table_To_Layer.

nc_set_layer_rank@ LayerId, Rank

Sets the new layer as an NC data layer.

LayerID is the layer number (0 based).

Rank: type of NC layer. 0 = NC Primary, 1 = NC Secondary.

Example

edit_layer@ 8,14,14,2,0,"Layer_9" 'creates a negative layer named Layer_9

Add NC Data Layers

nc_add_table@ 1

Adds an NC Tool Table; parameter is the Table ID number. Only necessary if you need to create a new tool
table for the layers you are adding.

edit_layer@ Layer#,Drawcolor,Flashcolor,Type,Status,Name$

Creates a new NC layer in the database.

Parameters are as follows:

Layer# sets the layer number. -2=no change (remember layer numbering in macros starts from 0: i.e. layer
1 = 0).

Drawcolor and Flashcolor set the draw & flash colors to display for the layer.

See Layer Color Codes

Type is the layer type to associate with that layer:

See Layer Type codes

Status determines the appearance of the layer on screen:

Pag. 29 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
0=on
1=off
2=ref
-2=no change

Name$ is the filename of the Gerber file being exported (including the full path). "" =no change (keep old
name)

nc_assign_tool_table_to_layer@ LyrID,TableID

Assigns the specified NC Tool Table to the specified layer. Note that no checking is done for the existance of
the NC Tool Table or that any NC data on the layer will have a valid tool within the newly assigned tool table.

LyrID = ID of NC Data layer the table is to be assigned to.

TableID = Table ID of the NC Tool Table to be assigned to the layer.

nc_set_layer_rank@ LayerId, Rank

Sets the new layer as an NC data layer.

LayerID is the layer number (0 based).

Rank: type of NC layer. 0 = NC Primary, 1 = NC Secondary.

Example

edit_layer@ 11,2,2,21,0,"Layer_12" 'creates an NC Data named Layer_12


nc_assign_tool_table_to_layer@ 12,1 'Assign tool table 1 to layer 12
nc_set_layer_rank@ 12,1 'assign NC Secondary rank

Align

Aligns one layer to another layer. Select an initial point on the target layer, and then a corresponding point
on the layer to align to it. It is recommended the alignment point be an object (pad, etc).

It is a good idea to use the Snap command (Z Hot Key) to assure the objects being aligned are selected
properly.

layer_align@
axy@ 172.1000,3287.7000
back@

Selects alignment point on target layer.

axy@ 178.5000,1066.6000

Selects point/object on the layer to align.

back@

Ends coordinate selection.

layer_alignok@

Records if user OK's the Align Layer confirmation. (Not required for macro to run).

layer_aligncancel@

Records if user cancels the Align Layer confirmation. (Not required for macro to run).

Pag. 30 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
end@

Ends command.

Example

layer_align@
setsnap@ 1
axy@ 225.0000,525.0000
back@
axy@ 1375.0000,1400.0000
back@
back@
layer_alignok@
end@
setsnap@ 0
back@

Remove

edit_removelyr@ #

Removes layer designated by #. (remember layer numbering begins at 0. i.e. 0 = layer 1).

Reorder

layer_renumber@

Takes all layers, renumbers them sequentially (1, 2, 3, etc.), and compresses spaces in the layers.

Reorder sequence:

Reorders layers using a specific order.

init_layer_reorder@

Initializes the reordering of layers (must be first command in sequence).

change_layer_position@ pos%,oldid%,newid%

Pos% is the new position for the layer being reordered (same numbering sequence as the interactive table: 1
to n).

OldID% is the layer number of the layer being reordered.

NewID% is the new number to be assigned to the old layer.

apply_layer_order@

Applies the changes made through change_layer_position@.

Example

init_layer_reorder@
change_layer_position@ 0,0,0
change_layer_position@ 1,8,1
change_layer_position@ 2,2,2
change_layer_position@ 3,4,3

Pag. 31 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
change_layer_position@ 4,5,4
change_layer_position@ 5,3,5
change_layer_position@ 6,6,6
change_layer_position@ 7,7,7
change_layer_position@ 8,1,8
apply_layer_order@

Scale

edit_scale@ lyrID, Target, X#, Y#

Scales a layer by the given X & Y scaling factors.

lyrID is the number of the layer being scaled.

Target is the new layer to add the scaled data to.

X# & Y# are the X,Y scaling factors (displayed as the scaling percentage, times 1000 squared: i.e 50% =
50000000).

Example

edit_scale@ 0,11,80000000,80000000

Snap Drill To Pad

edit_padsnap@ Master,Slave,Snap

Snaps an offset drill to its corresponding pad.

Master is the ID of the Master Lyer (starts at 0 for layer 1)

Slave is the ID of Slave Layer (starts at 0 for layer 1)

Snap is the Snap Distance (maximum distance a drill on the slave layer can be from a pad on the master
layer, and be moved)

If you are aligning more than one Slave Layer to the Master Layer, repeat this command for each Slave Layer.

Example

edit_padsnap@ 0,1,2.0000
edit_padsnap@ 0,3,2.0000

Snap Pad To Drill

edit_padsnap@ Master,Slave,Snap

Snaps offset pad to its corresponding drill.

Master is the ID of the Master Lyer (starts at 0 for layer 1)

Slave is the ID of Slave Layer (starts at 0 for layer 1)

Snap is the Snap Distance (maximum distance a pad on the slave layer can be from a drill on the master
Pag. 32 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
layer, and be moved)

If you are aligning more than one Slave Layer to the Master Layer, repeat this command for each Slave Layer.

Example

edit_padsnap@ 0,1,2.0000
edit_padsnap@ 0,3,2.0000

Snap Pad To Pad

edit_padsnap@ Master,Slave,Snap

Snaps a pad on one layer to a corresponding pad on one or more other layers.

Master is the ID of the Master Lyer (starts at 0 for layer 1)

Slave is the ID of Slave Layer (starts at 0 for layer 1)

Snap is the Snap Distance (maximum distance a pad on the slave layer can be from a pad on the master
layer, and be moved)

Tip: If you are aligning more than one Slave Layer to the Master Layer, repeat this command for each Slave
Layer.

Example

edit_padsnap@ 0,1,2.0000
edit_padsnap@ 0,3,2.0000

Edit > Line Change

Break At Vtx

break_vertex@
axy@ 1200.0000,6635.0000

Breaks a vertex at the selected point. The first command starts the process, followed by the coordinates of
the vertex that is the breaking point.

Chamfer

Chamfers selected vertex or vertices.

edit_chamfer@

Initiates command.

change_backoff@ 90.0000

Sets the Backoff distance.

Pag. 33 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
change_minangle@ 60

Sets the minimum angle that can be selected (in degrees).

change_maxangle@ 120

Sets the maximum angle that can be selected (in degrees).

axy@ -4100.0000,7025.0000

The coordinates of the vertex to be chamfered.

back@

End command.

Group Selection is also available for this function.

Fillet

Fillets selected vertex or vertices.

edit_fillet@

Initiates command.

change_radius@ 100.0000

Sets the radius of the arc that is created.

change_minangle@ 75

Sets the minimum angle that can be selected (in degrees).

change_maxangle@ 105

Sets the minimum angle that can be selected (in degrees).

axy@ 3119.3000,4858.3000

The coordinates of the vertex to be filleted.

back@

End command.

Group Selection is also available for this function.

Join Segments

Joins multiple segments into a continuous line.

join_segs@

Starts the process

axy@ -4519.7000,3158.3000
Pag. 34 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ -2980.2000,3793.4000

The coordinates are a point on one of the segments that you are joining. More than one set of coordinates is
needed only if more than one set of lines are being joined.

back@
join_ok@

Joins together the selected lines.

join_cancel@

Unselects all the selected lines.

join_reject@

Unselects the most recently selected set of lines.

back@

Ends the process.

Example

join_segs@
axy@ -2575.0000,875.0000
back@
join_ok@
back@

Segments To Arcs

Converts segmented acrs to true arcs.

segments_to_arcs@
axy@ -983.6000,6307.1000

Initializes command. Coordinates are a point on the chosen arc.

edit_segments_to_arcs@ 0

Executes the command. The parameter sets the type of arc created from the data:

0=Circumscribed
1=Inscribed
2=Closest

back@

Ends the function.

Group Selection is also available for this function.

Edit > Mirror

Pag. 35 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Mirrors data at a given location.

edit_mirv@

Initiates command.

axy@ -125.0000,400.0000
axy@ -50.0000,375.0000

First coordinate is selection point of data to mirror. Second is the mirror axis placement.

setmirroraxis@ 2

Changes the mirror axis. 1 = vertical, 2 = horizontal

Group Selection is also available for this function.

Example

edit_mirv@
setmirroraxis@ 1
axy@ 2425.0000,2325.0000
axy@ 2425.0000,2325.0000
back@

Edit > Move

Move

Primary command. Moves all selected data.

edit_move@

Moves selected data by given coordinates:

axy@ 0.0000,650.0000
axy@ -300.0000,650.0000
back@

First coordinate is the "move from" point and the next coordinate is the "move to" point.

Group Selection is also available for this function.


Check Box & Filter data selection options are available for this function.

Move Option:

movetolayer@ #

Move to layer function where # is the target layer.

Example

edit_move@
axy@ 1850.0000,2325.0000
axy@ 2700.0000,2325.0000
movetolayer@ 0
back@

Pag. 36 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Fixture Probe

edit_movetfpin@
axy@ 893.1000,2953.0000
axy@ 927.1000,3066.3000
back@

Moves fixture probe. First coordinate is the "move from" point and the next coordinate is the "move to"
point.

Test Point

edit_movetestpt@
axy@ 1086.7000,4280.5000
axy@ 841.1000,4017.3000
back@

Move test point. First coordinate is the "move from" point and the next coordinate is the "move to" point.

Edit > Move Tab

nc_edit_move_milltab@

Initiates move of mill tab.

axy@ 1150.8853,3149.6813

The existing location of the mill tab.

axy@ 747.8541,2865.9871

The new location of the mill tab (must be on a mill path).

back@

Confirms placement of the first tab. Other tabs may be moved by adding their existing X,Y coordinates and
new coordinates.

back@

Ends the command.

Edit > Move Vtx

nc_edit_move_millvtx@

Pag. 37 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Initiates move of mill vertex.

axy@ 1875.0000,3250.0000

The existing location of the vertex.

axy@ 1849.5000,3055.0000

The new location of the vertex.

back@

Confirms placement of the first vertex. Other vertices may be moved by adding their existing X,Y coordinates
and new coordinates.

back@

Ends the command.

Edit > Move Vtx\Seg

vertex_move@
axy@ 1550.0000,4350.0000
axy@ 1400.0000,4225.0000
back@

Moves a vertex. The first point is the selection handle of the vertex, the second point is the target
coordinate.

Group Selection is also available for this function.

Edit > Redo

redo@

Restores the previous action removed by the Undo command. May be done several times.

Edit > Reverse Test Points Staggering

bn_stagger@
axy@ 3157.0000,2733.9000
back@

Reverse the test point staggering. Coordinate is any single test point in the group of staggered test points.

Pag. 38 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Edit > Rotate

edit_rotate@

Initiates rotation.

setrot100angle@ 4500

Sets the angle to rotate the item (in 100ths of a degree).

axy@ 245.0000,3338.8000
axy@ 265.0000,3314.8000
back@

Each coordinate is a mouse pick that causes an additional rotation of the specified amount.

Group Selection is also available for this function.


Check Box & Filter data selection options are available for this function.

Rotate Options:

set_derived_dcode@ 42,6,14.2,16,1530,"mycap"

This macro is used to automatically build a custom from an intrinsic aperture that is rotated. The values refer
to the original aperture from which the Dcode was derived: Dcode #, shape, xsize, ysize, angle rotated in
100ths of a degree, name of custom aperture. (see Tables Apertures)

Shapes:
0 = None
1 = Round
2 = Square
3 = Rectangle
4 = Target
5 = Thermal
6 = Custom
7 = Donut
8 = Octagon
9 = Oblong

panel_rotate@ 90,1

The first number sets the degree to which the panel is to be rotated, counter-clockwise.

The second number is 0 = no, 1 = yes. If yes, the dimensions of the film box will be "swapped" (X becomes
the Y value, and Y becomes the X value).

Edit > Spin Image

edit_spin_image@

Rotate a single step & repeat image in a panel 90 degrees.

Pag. 39 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 0.0000,0.0000

Any point in the step image being rotated. May be repeated to rotate image multiple times.

back@

Ends command.

Example

edit_spin_image@
axy@ 75.0000,4500.0000
axy@ -225.0000,4575.0000
axy@ -300.0000,4300.0000
back@

Edit > Trim Using

Arc - 2-Points

edit_trimarc2pt@

Trims data using a 2 point-arc, as defined by coordinates given below:

axy@ 1016.7000,1855.4000

One end point of the arc used to trim the line segment.

axy@ 1190.9000,1629.2000

The other end point of the arc. The system selects the curve automatically.

axy@ 1018.7000,1699.3000

This is a coordinate on the part of the line segment you are deleting.

back@

Brings you back to the initial edit_trimarc2pt@ command, allowing you to trim another line.

back@

This second back@ command ends the function.

Arc - 3-Points

edit_trimarc3pt@

Trims data using a 3 point-arc, as defined by coordinates given below:

axy@ 948.7000,1821.4000

One end point of the arc used to trim the line segment.

Pag. 40 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 1088.8000,1657.2000

The other end point of the arc.

axy@ 986.7000,1667.3000

The third point that defines the curve of the arc.

axy@ 870.6000,1699.3000

This is a coordinate on the part of the line segment you are deleting.

back@

Brings you back to the initial edit_trimarc3pt@ command, allowing you to trim another line.

back@

This second back@ command ends the function.

Arc - Center-Angle

edit_trimarc@

Trims data using a center/angle-arc, as defined by coordinates given below:

axy@ 646.4000,1803.4000

This is the center-point of the circle used to create the arc.

axy@ 654.4000,1615.2000

Sets the radius of the circle and the clockwise-most end point of the arc

axy@ 778.5000,1855.4000

The other end point of the arc.

axy@ 660.4000,1705.3000

This is a coordinate on the part of the line segment you are deleting.

back@

Brings you back to the initial edit_trimarc@ command, allowing you to trim another line.

back@

This second back@ command ends the function.

Border

There are no macro commands for this feature.

Circle

Pag. 41 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
edit_trimcircle@

Trims data using a circle, as defined by coordinates given below:

axy@ 778.5000,1945.5000

The center point of the circle that is used to trim.

axy@ 968.7000,2015.6000

A point that sets the radius of the circle.

axy@ 902.6000,1983.5000

This is a coordinate on the part of the line segment you are deleting.

back@

Brings you back to the initial edit_trimcircle@ command, allowing you to trim another line.

back@

This second back@ command ends the function.

Line

edit_trimline@

Trims data using a line, as defined by coordinates given below:

axy@ 492.3000,1791.4000
axy@ 624.4000,1795.4000
back@

These are the two end coordinates of the line segment that is used to trim.

axy@ 550.3000,1819.4000

This is a coordinate on the part of the line segment you are deleting.

back@

Brings you back to the initial edit_trimline@ command, allowing you to trim another line.

back@

This second back@ command ends the function.

Edit > Undo

undo@

Reverses the previous action or command. May be done several times. (Not available for all commands,

Pag. 42 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
however - exceptions are usually noted with a warning message).

Pag. 43 di 43
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Info Menu Macros
Find Query Status
Measure Report
Notes Show

Info > Find

Acid Traps

There are no macro commands for this feature.

Bridges

There are no macro commands for this feature.

Dcode

setdcode@ 15
update_dcodebar@

Sets Dcode to search for. (same as selecting Dcode in the Tool Bar).

find_dcode@

Finds the currently active Dcode.

back@

Ends command.

Example

setdcode@ 19
update_dcodebar@
find_dcode@
back@

DRC

find_drc@

Starts the Find DRC command.

find_drctype@ DrcType

Sets the currently defined DRC type, for display in Find DRC.

DrcType is the type of DRC error:


0 = All DRC types
1 = Pad to Pad

Pag. 1 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
2 = Track to Pad
3 = Track to Track
4 = Outline clearance
5 = Minimum Track Width
6 = Minimum Pad Width
7 = Redundant Pads
8 = Annular Ring Pad to Mask
9 = Annular Ring Drill to Mask
10 = Annular Ring Drill to Pad
11 = Drills without Pads
12 = Pads without Drills

Other Find DRC Commands:


find_drcfirst@

Highlight the First DRC error, based on the current DrcType and visible layers.

find_drcnext@

Highlight the Next DRC error, based on the current DrcType and visible layers.

find_drcprev@

Highlight the Previous DRC, error based on the current DrcType and visible layers.

find_drczoom@

Zoom to and center the currently-highlighted DRC error on the main screen.

find_drcdelete@

Delete the currently-highlighted DRC error flag from the system. The system will automatically highlight the
Next DRC error after deleting the current one.

find_drcdeleteall@

Deletes all the DRC error flags which fit the current DrcType, and are on the currently visible layers.

find_drcmakelayer@ LayerNameStr

Creates a graphical data layer which represents the DRC errors of the current DrcType (and on the visible
layers). The Layer name is defined by LayerNameStr (string type containing name of new layer) and will be
created on the first new available layer in the layer table.

Drill Errors

There are no macro commands for this feature.

Isolated Connections

There are no macro commands for this feature.

Layer Compare Errors

There are no macro commands for this feature.


Pag. 2 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Mill Errors

There are no macro commands for this feature.

Minimum Gaps

There are no macro commands for this feature.

Minimum Widths

There are no macro commands for this feature.

Net

find_net@
findnet@ "NetName"
end@

Finds a net by name. NetName is a string representing the net's name.

Padstack

find_via@

Initiates command.

setpadstack@ #

Selects padstack to look for. (remember, like layers, padstack numbering begins at 0. i.e. padstack 17 =
#16)

findcpin@

Executes actual search for padstack.

The above two commands may be entered multiple times to find new padstacks.

end@

Ends command.

Example

find_via@
setpadstack@ 2
findcpin@
setpadstack@ 4
findcpin@
end@

Pag. 3 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Part

find_part@

Initializes command.

findpart@ #,"name"

Finds part using given parameters:

# specifies search format : 1 = refdes, 0 = device name

"name" is the ref/des or device name

end@

Closes command.

Part to Part

There are no macro commands for this feature.

Pin

find_pin@
findfpin@ "#"

# is the pin number.

end@

Finds a pin number in a part, as designated by the findfpin@ parameter.

Silk to Solder

There are no macro commands for this feature.

Slivers

There are no macro commands for this feature.

Solder to Trace

There are no macro commands for this feature.

Starved Thermals

Pag. 4 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

There are no macro commands for this feature.

Step Image

find_stepimage@

Initializes the command.

change_stepImageId@ #

Selects the image to find, # being the image ID of the step image.

back@

Closes command.

Symbol

There are no macro commands for this feature.

Tabs

There are no macro commands for this feature.

Tool

There are no macro commands for this feature.

Unprobed Test Points

There are no macro commands for this feature.

Info > Measure

Object to Object

info_measure_obj@
axy@ 1953.0000,3595.0000
axy@ 2199.0000,3908.0000
back@

Measures the distance between two objects. Coordinates specify the first and second object (points may be
Pag. 5 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
anywhere within the objects being measured).

Note: To query the results of any Measure command, get the strings from the Measure dialog in one comma
delimited string using the miscellaneous macro, querystring!.

Point to Point

info_measure_pt@
axy@ 1849.0000,3703.0000
axy@ 2361.0000,4350.0000
back@

Measures the distance between two points, as defined by the axy@ commands.

Net to Net

info_net_pt@
axy@ 1849.0000,3703.0000
axy@ 2361.0000,4350.0000
back@

Measures the distance between two nets, as defined by the axy@ commands.

Info > Notes

Adding a new note:


startnote@ "notename"

Adds a note of the given name.

addnoteline@ "text"

Adds associated text to the note.

Deleting a note:
deletenote@ "notename"

Deletes the note name and its associated text from the design.

Editing a note:
clearnote@ "notename"

Empties the contents of the named note without deleting the note itself.

addnoteline@ "text"

Adds the new text to the note.

Renaming a note:
startnote@ "new notename"

Pag. 6 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Creates a note with the new name to be used.

copynote@ "old notename"

Copies information from old note to new note.

deletenote@ "old notename"

Removes the old note.

Printing notes:
printnote@ "notename"

Prints a note of the given name.

printallnotes@

Prints all notes for the current design.

Importing notes:
addnotefile@ "filename"

Adds a note that was created with an outside text editor to the note list. The file name is used as the note
name.

Exporting notes:

There are no macro commands for this feature.

Info > Query

All

query_all@
axy@ 1830.0000,4166.0000
back@

Queries any data element at the location given by axy@.

Note: To query the results of any Query command, get the results from the Query dialog in a comma
delimited string using the miscellaneous macro, querystring!.

Dcode

query_dcode@
axy@ 1958.0000,3686.0000
back@

Queries any Dcode at the location given by axy@.

DRC

Pag. 7 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

There are no macro commands for this feature.

Drill

query_symbol_drill@
axy@ 200.0000,100.0000
back@

Queries any drill located in a Symbol, at the location given by axy@.

Drill Paths

There are no macro commands for this feature.

Drill Sequence

query_drill_seq@
axy@ 25.0000,50.0000
back@

Queries any Drill Sequence located in a Symbol, at the location given by axy@.

Fixture Probe

query_tfpin@
axy@ 930.1000,2956.9000
back@

Queries any Probe in a Fixture, at the location given by axy@.

Mill Paths

There are no macro commands for this feature.

NC Data

There are no macro commands for this feature.

Net

query_net@
axy@ 1963.0000,3653.0000

Pag. 8 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
back@

Queries any net at the location given by axy@.

Padstack

query_via@
axy@ 2004.0000,4196.0000
back@

Queries any padstack at the location given by axy@.

Part

query_part@
axy@ 1832.0000,4171.0000
back@

Queries any Part at the location given by axy@.

Pin

query_pin@
axy@ 0.0000,300.0000
axy@ 100.0000,300.0000
back@

Queries any Pin in a Part, at the location given by axy@.

Step Image

query_step_image@
axy@ #,#
back@

Queries a step image at the location given by axy@.

Stiffener

query_stiffener@
axy@ 47.7000,4879.2000
back@

Queries any Stiffener at the location given by axy@.

Symbol

Pag. 9 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
query_symbol@
axy@ 1832.0000,4171.0000
back@

Queries any Symbol found at coordinate given by axy@ command.

Tabs

There are no macro commands for this feature.

Test Point

query_testpt@

Initiates command.

view_settestpt@ 1

Enables viewing of found test points. 1=enable visibility of test points, 0=disable visibility of test points

axy@ 500.0000,2600.0000
back@

Queries any Test Point, at the location given by axy@.

Note: To query the results of any Query command, get the results from the Query dialog in a comma
delimited string using the miscellaneous macro, querystring!.

Info > Report

Acid Traps

report_acidtraps@
report_acidtraps_save@ 0,0,"d:\dev\testdata\test.rpt"

Saves report to designated file path.

report_acidtraps_print@ 0,0

Prints report.

For the save and print functions, the First parameter specifies the type of report:
0=All acid trap data (second parameter is ignored)
1=Acid trap data for all layers (second parameter is ignored)
2=Acid trap data for all layers that are ON (second parameter is ignored)
3=Acid trap data for all composites (second parameter is ignored)
4=Acid trap data for one layer (the second parameter is the layer number--starts at 0)
5=Acid trap data for one composite (second parameter is the composite ID--starts at 0)

Second parameter identifies the layer or composite to be printed or saved (if first parameter is set to 4 or 5):
number is layer number or composite ID number.

Pag. 10 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
BOM

report_bom@
report_bom_save@ "d:\dev\testdata\test.rpt"
report_bom_print@

Lists the current bill of materials (or parts list) in the design. Save command saves the report to the filename
designated.

Bridges

report_solderbridges@
report_solder_bridges_save@ 0,0,"d:\dev\testdata\test.rpt"
report_solder_bridges_print@ 0,0

For the save and print functions, the first parameter specifies the type of report:
0=All bridge data (second parameter is ignored)
1=Bridge data for all layers (second parameter is ignored)
2=Bridge data for all layers that are ON (second parameter is ignored)
3=Bridge data for all composites (second parameter is ignored)
4=Bridge data for one layer (the second parameter is the layer number--starts at 0)
5=Bridge data for one composite (second parameter is the composite ID--starts at 0)

Second parameter identifies the layer or composite to be printed or saved (if first parameter is set to 4 or 5):
number is layer number or composite ID number.

Centroid

report_place@

Initiates command.

create_centroid_layer@ #

Creates a new graphic layer, displaying all part centroid locations (layer is automatically assigned to next
new layer in table).

report_place_save@ #,"d:\dev\testdata\test.rpt"

Saves report to given filename.

report_place_print@ #

Prints report.

For the Create, Save, and Print functions, the following parameter # applies:
0=do not report step and repeated component centroids
1=report step and repeated component centroids

Dcode

Pag. 11 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
report_dcode@
report_dcode_save@ 1,0,0,"d:\dev\testdata\test.rpt"
report_dcode_print@ 1,0,0

For both Save and Print functions:

First parameter is the layer ID (starts at 0)

For the second parameter, 0=All Layers, 1=Only ON Layers

For the third parameter, 0=All Dcodes, 1=Only Undefined Dcodes

For the fourth parameter (save only) this is the filename you want the report saved under.

DRC

report_drc_print@ DRC Check, Layer Control, Layer Id

Prints only the errors for the DRC Check specified in the command (see parameters below).

report_drc_save@ DRC Check, Layer Control, Layer Id, File Name

Saves only the errors for the DRC Check specified by the command (see parameters below).

report_drc_print_all@ Layer Control, Layer Id

Prints ALL DRC errors in the design. (see parameters below)

report_drc_save_all@ Layer Control, Layer Id, File Name

Saves ALL DRC errors in the design. (see parameters below)

Parameters for these commands are as follows:

DRC Check is the specific check to generate the report for:


0=Track to Track
1=Track to Pad
2=Pad to Pad
3=Outline
4=Minimum Track
5=Minimum Pad
6=Redundant Pad
7=Pad to Mask Annular Ring Check
8=Drill to Mask Annular Ring Check
9=Drill to Pad Annular Ring Check
10=Drills without Pads
11=Pads without Drills
12=Drill to Track

Layer Control specifies the layers for which errors will appear in the saved or printed report:
0=All layers
1=All ON Layers
2=Specific Layer

Layer Id is the specific layer to save/print errors for (only relevant when Layer Control is 2).

File Name is the name of file to save report to.

Drill Errors

Pag. 12 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

report_drill_errors@
report_drill_errors_save@ 0,0,"d:\dev\blindbur.rpt"

Saves report to designated file path. (See Below.)

report_drill_errors_print@ 0,0

Prints report.

For the save and print functions, the First parameter specifies the type of report:
0 & 1=All data in drill error list (second parameter is ignored)
2=Drill errors for all NC layers that are ON (second parameter is ignored)
4=Data for the NC layer (specified by the second parameter)

Second parameter is the Layer ID (used only when report type is 4)

Layer Compare

report_layercompare@
report_layer_compare_save@ 0,0,"c:\help\act_dev\dev\test.rpt"

Saves report to designated file path. (See Below.)

report_layer_compare_print@ 0,0

Prints report.

For the save and print functions, the first parameter specifies the type of report:
0=All layer compare data (second parameter is ignored)
1=Layer compare data for all layers (second parameter is ignored)
2=Layer compare for all layers that are ON (second parameter is ignored)
4=Layer compare data for one layer (the second parameter is the layer number--starts at 0)

Second parameter is the Layer ID (used only when report type is 4)

Third parameter in the save function is the report file name.

Mill Errors

report_mill_errors@
report_mill_errors_save@ 0,0,"d:\dev\blindbur.rpt"

Saves report to designated file path. (See Below.)

report_mill_errors_print@ 0,0

Prints report.

For the save and print functions, the first parameter is the type of report:
0 & 1=All data in mill error list (second parameter is ignored)
2=Mill errors for all NC layers that are ON (second parameter is ignored)
4=Data for the NC layer (specified by the second parameter)

Pag. 13 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Second parameter is the Layer ID (used only when report type is 4)

Minimum Gaps

report_mingaps@

Initiates command.

report_mingaps_save@ 0,0,"d:\dev\testdata\test.rpt"

Saves report to given filename. (See below.)

report_mingaps_print@ 0,0

Prints report.

For the save and print functions, the first parameter specifies the type of report:
0=All sliver data (second parameter is ignored)
1=Minimum Gap data for all layers (second parameter is ignored)
2=Minimum Gap data for all layers that are ON (second parameter is ignored)
3=Minimum Gap data for all composites (second parameter is ignored)
4=Minimum Gap data for one layer (the second parameter is the layer number--starts at 0)
5=Minimum Gap data for one composite (second parameter is the composite ID--starts at 0)

Second parameter is the layer or composite ID number (if first parameter is set to 4 or 5)

Minimum Widths

report_minwidths@

Initiates command.

report_minwidths_save@ 0,0,"d:\dev\testdata\test.rpt"

Saves report to given filename. (See below.)

report_minwidths_print@ 0,0

Prints report.

For the save and print functions, the first parameter specifies the type of report:
0=All sliver data (second parameter is ignored)
1=Minimum Widths data for all layers (second parameter is ignored)
2=Minimum Widths data for all layers that are ON (second parameter is ignored)
3=Minimum Widths data for all composites (second parameter is ignored)
4=Minimum Widths data for one layer (the second parameter is the layer number--starts at 0)
5=Minimum Widths data for one composite (second parameter is the composite ID--starts at 0)

Second parameter is the layer or composite ID number (if first parameter is set to 4 or 5)

NC Tool

Pag. 14 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
report_nctool@

Initiates the command.

nc_sort_table@ tblID, sort_field, sort_direction

Sorts the tool table by the value selected.

tblID is the ID Number of the NC Tool Table that is to be sorted.

sort_field is the tool value to base the sort on. There are three options:
0 = Tool Number
1 = Tool Size
2 = Tool Export Order

sort_direction determines the method of sorting the values selected in sort_field (either increasing or
decreasing):
0 = Decreasing (n .. 1)
1 = Increasing (1 .. n)

report_nc_tool_print@ lyrID,tblID

Prints the report.

lyrID sets the drill layer number (starts at 0). -1=All layers using the specified Tool Table.

tblID sets the table ID number to use. 0=All tables

report_nctool_save@ lyrID,tblID,Filename$

Saves the NC Tool report.

lyrID sets the drill layer number (starts at 0). -1=All layers using the specified Tool Table.

tblID sets the table ID number to use. 0=All tables

Filename$ specifies the name and path the report is to be saved under.

Example:

report_nctool@
nc_sort_table@ 1,1,1
nc_sort_table@ 1,1,0
report_nctool_print@ 30,1
report_nctool_save@ 30,1,"d:\temp\test.rpt"

Netlist

report_net@
report_net_save@ 1, Filename
report_net_print@ 1

The first parameter for the save and print function sets the netlist type: 1 = report the RefDes/Pin#, or 2 =
report Coordinates.

Filename is the name of the report you wish to save, including full path.

Part to Part

Pag. 15 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

report_part2part@
report_part2part_errors_print@ Type, LyrID

Prints report. (See Below)

report_part2part_errors_save@ Type, LyrID, Filename

Saves report.

For the save and print functions, the Type parameter specifies the type of report:
0=All Part to Part data (LyrID parameter is ignored)
1=Part to Part data for all layers (LyrID parameter is ignored)
2=Part to Part data for all ON layers only (LyrID parameter is ignored)
4=Part to Part data for Top or Bottom side parts (must specify layer number of either the Top or Bottom
layer)

LyrID parameter is the layer number errors occur on (used only when report type is 2 & 4)

Filename parameter in the save function is the report file name (save only).

Panel

report_panel@

Initiates command.

panelcopper@ Resolution, Scan Box, Drill, Board

Calculates copper area of the panel to display in the final report, given these parameters:

Resolution is the smallest resolution level to check copper.

Scan Box is the size of the scanning area used, smaller settings is more accurate, but takes longer to
process.

Drill specifies if plated copper in drilled thru holes should be calculated (1=yes,0=no)

Board is thickness of board (used to calculate plated thru hole copper).

(functions similar to Analysis > Copper Area)

report_panel_print@

Prints report.

report_panel_save@ Filename

Saves report. Filename is the name of the report you wish to save, including full path.

Pin Holes

report_pinholes@

Initiates command.

Pag. 16 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
report_pinhole_errors_save@ 0,0,Filename

Saves report. (See Below.)

report_pinhole_errors_print@ 0,0

Prints report.

For the save and print functions, the first parameter specifies the type of report:
0=All Pin Hole data (second parameter is ignored)
1=Pin Hole data for all layers (second parameter is ignored)
2=Pin Hole data for all layers that are ON (second parameter is ignored)
4=Pin Hole data for one layer (the second parameter is the layer number--starts at 0)
5=Pin Holedata for one composite (second parameter is the composite ID--starts at 0)

Second parameter is the Layer ID (used only when report type is 4)

Third parameter in the save function is the report file name.

Silk to Solder

report_silkerrs@

Initiates command.

report_silk_errors_save@ Type, LyrID

Saves report. (See Below.)

report_silk_errors_print@ Type, LyrID, Filename

Prints report.

For the save and print functions, the Type parameter specifies the type of report:
0=All Silk to Solder data (LyrID parameter is ignored)
1=Silk to Solder data for all layers (LyrID parameter is ignored)
2=Silk to Solder data for all ON layers only (LyrID parameter is ignored)
4=Silk to Solder data for a specific solder mask layer (must specify layer number)
LyrID parameter is the layer number errors occur on (used only when report type is 2 or 4)
Filename parameter in the save function is the report file name (save only).

Slivers

report_slivers@

Initiates command.

report_slivers_save@ 0,0,"d:\dev\testdata\test.rpt"

Saves report to given filename. (See below.)

report_slivers_print@ 0,0

Prints report.

For the save and print functions, the first parameter specifies the type of report:
0=All sliver data (second parameter is ignored)

Pag. 17 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
1=Sliver data for all layers (second parameter is ignored)
2=Sliver data for all layers that are ON (second parameter is ignored)
3=Sliver data for all composites (second parameter is ignored)
4=Sliver data for one layer (the second parameter is the layer number--starts at 0)
5=Sliver data for one composite (second parameter is the composite ID--starts at 0)

Second parameter is the layer or composite ID number (if first parameter is set to 4 or 5)

Solder to Trace

report_solderrs@

Initiates command.

report_sold_errors_save@ Type,LyrID,Filename

Saves report. (See below.)

report_sold_errors_print@ Type,LyrID

Prints report.

For the save and print functions, the Type parameter specifies the type of report:
0=All Solder to Trace data (LyrID parameter is ignored)
1=Solder to Trace data for all layers (LyrID parameter is ignored)
2=Solder to Trace data for all ON layers only (LyrID parameter is ignored)
4=Solder to Trace data for a specific solder mask layer (must specify layer number)

LyrID parameter is the layer number errors occur on (used only when report type is 2 or 4)

Filename parameter in the save function is the report file name (save only).

Starved Thermals

report_starved_thermals@
report_starved_thermals_save@ 0,0,"d:\dev\testdata\test.rpt"

Saves report to designated file path. (See below.)

report_starved_thermals_print@ 0,0

Prints report.

For the save and print functions, the first parameter specifies the type of report:
0=All starved thermal data (second parameter is ignored)
1=Starved thermal data for all layers (second parameter is ignored)
2=Starved thermal data for all layers that are ON (second parameter is ignored)
3=Starved thermal data for all composites (second parameter is ignored)
4=Starved thermal data for one layer (the second parameter is the layer number--starts at 0)
5=Starved thermal data for one composite (second parameter is the composite ID--starts at 0)

Second parameter is the layer or composite ID number (if first parameter is set to 4 or 5)

Symbol

Pag. 18 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

report_symbol@

Initiates command.

report_symbol_save@ Filename

Saves report. Filename is the name of the report you wish to save, including full path.

report_symbol_print@

Prints reports.

Test Point

report_testpt@

Initiates command.

report_testpt_save@ "d:\act_inc\testdata\test.rpt"

Saves report. Filename is the name of the report you wish to save, including full path.

report_testpt_print@

Prints reports.

Info > Show

Drill Machine Moves

There are no macro commands for this feature.

Mill Machine Moves

There are no macro commands for this feature.

Set Park Locations

Drill Machine:
nc_set_drill_start@ 500.0000,600.0000
nc_set_drill_end@ 700.0000,800.0000

Mill Machine:
nc_set_mill_start@ 900.0000,100.0000
nc_set_mill_end@ 110.0000,120.0000

Sets park location of NC machines. Parameters for either set of commands are the distances in the X and Y

Pag. 19 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
direction. Measurement is in User Units (defined under Settings > Unit). If English value is in mils, if Metric in
mm.

Info > Status

There are no macro commands for this feature.

Pag. 20 di 20
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Macro Menu Macros

Absolute Edit Record Settings


Assign Play Relative
Clear Markers Record Setup Printer
Debug Record Comment Stop

Macro > Absolute

There are no macro commands for this feature.

Macro > Assign

Function Keys

There are no macro commands for this feature.

Menu Items

There are no macro commands for this feature.

Macro > Clear Markers

clearmarkers@

Removes all visible markers from the display.

Macro > Debug

See BASIC Debugging Commands

Macro > Edit

Pag. 1 di 3
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

There are no macro commands for this feature.

Macro > Play

There are no macro commands for this feature.

Macro > Record

There are no macro commands for this feature.

Macro > Record Comment

There are no macro commands for this feature.

Macro > Record Settings

There are no macro commands for this feature.

Macro > Relative

There are no macro commands for this feature.

Pag. 2 di 3
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Macro > Setup Printer

There are no macro commands for this feature.

Macro > Stop

There are no macro commands for this feature.

Pag. 3 di 3
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Panelization Menu Macros

Setup Venting
Create Panel Border To Layer

Panelization > Setup

SETUP / SIZE TAB

set_panel_dimensions@ <Panel Dimension X>, <Panel Dimension Y>


set_panel_dimensions@ 12000.0,10000.0

Maximum X and Y dimension of the panel.

set_panel_border_spacing@ <Left>, <Top>, <Right>, <Bottom>


set_panel_border_spacing@ 1000.0,1000.0,1000.0,1000.0

Panel border to Image spacing for each side of the panel border.

set_minimum_image_spacing@ <x>, <y>


set_minimum_image_spacing@ 500.0,500.0

Minimum X and Y spacing between panel Images.

SETUP COUPON / TITLE / PINNING HOLE / FIDUCIAL TABS

add_panel_symbol@ <assigned id (set to zero for default)>,<symbol name>


add_panel_symbol@ 1,"DF1"

Add a panel symbol instance based on symbol name and makes it available for placement in the panel. The
symbol ID is assigned for symbol instance reference. The symbol ID is used to make a symbol instance active
for operation by associated macros that work with symbol instances.

alternate commands for add_panel_symbol@:

add_symbol@

openlibitem@ <assigned id (set to zero for default)>,<symbol name>


openlibitem@ 3,"Title1"

del_panel_symbol@ <assigned id>


del_panel_symbol@ 1

Deletes a symbol instance from a panel by symbol ID.

del_all_panel_symbols@

Deletes all symbol instances for a panel.

edit_panel_symbol@ <assigned id>


edit_panel_symbol@ 1

Make a symbol instance active for successive operation.

Pag. 1 di 6
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
set_panel_symbol_loc@ <x>, <y>,
<Horizontal Offset (0=Left,1=Center,2=Right)>,
<Vertical Offset (0=Bottom, 1=Center, 2=Top)>

set_panel_symbol_loc@ 0.0,0.0,2,0

For the active symbol instance, set a symbol instance placement and justification with respect to the panel
border.

set_panel_coupoon_angle@ <angle (degree * 100)>


set_panel_coupoon_angle@ 0

For the active symbol instance, set a symbol instance rotation. This can only be multiples of 90 degrees.

set_panel_symbol_ncrank@ <NC rank (0=NC_PRIMARY, 1=NC_SECONDARY)>


set_panel_symbol_ncrank@ 0

For the active symbol instance, set the associated NC ranking (drill layer association).

Panelization > Create

CREATE AUTOCALC DIALOG

set_panel_image_rotation@ <rotation code for active image (0,1,2,3: 0,90,180,270)>


set_panel_image_rotation@ 1

For the Create dialog in auto-calculation mode, set the rotation code for all Images on the panel.

set_panel_image_spacing@ <x>, <y>


set_panel_image_spacing@ 500.0,500.0

For the Create dialog in auto-calculation mode, set the minimum x and y Image spacing for the panel.

set_panel_image_copies@ <number of x steps> <number of y steps>

For the Create dialog in auto-calculation mode, set the number of x Image steps and the number of y Image
steps for the panel.

set_panel_use_spacebetween@ <image spacing: 0=between images,1=origin offsets>


set_panel_use_spacebetween@ 1

For the Create dialog in auto-calculation mode, set the auto calculation spacing mode: “0” means that the
spacing is the distance between Images, and “1” means that the spacing is the difference in the Image offsets.

set_panel_compute_copies@ <compute x and y steps, 0=manual only, 1=automatic>


set_panel_compute_copies@ 1

For the Create dialog in auto-calculation mode, set the auto calculation mode for copies (x steps and y steps):
“0” means that the number of copies is manually specified, and “1” means that the copies are automatically
calculated.

set_panel_use_autocalc@ <creation mode: 0=spreadsheet,1=autocalc mode>


set_panel_use_autocalc@ 1

For the Create dialog, set the auto calculation mode for panel creation: “0” means that the spreadsheet dialog
settings are used, and “1” means that the auto-calculation dialog settings are used.

Pag. 2 di 6
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
do_panel_autocalc@

Performs panel creation based on auto-calculation or spreadsheet settings.

CREATE SPREADSHEET DIALOG

place_panel_symbols@

Refreshes placement in panel of all symbol instances based on current symbol placement information.

add_panel_image@ <assigned id>, <x>, <y>,<angle (degree * 100)>


add_panel_image@ 1,4000.0,800.0,9000

Adds an Image to the panel with the specified placement and assigned ID. The ID is used to identify the Image
instance in future Image operations.

del_panel_image@ <assigned id>


del_panel_image@ 1

Deletes an Image from the panel based on Image ID.

del_all_panel_images@

Deletes all Images on the panel.

edit_panel_image@ <assigned id>, <x>, <y>,<angle (degree * 100)>


edit_panel_image@ 1,2000.0,800.0,9000

Sets the placement location and rotation for an Image based on Image ID.

Panelization > Venting

VENTING DIALOG

add_panel_vent@ <name string>


add_panel_vent@ "Vent_001"

Adds a venting definition by name.

del_panel_vent@ <name string>


del_panel_vent@ "Vent_001"

Deletes a venting definition by name.

del_all_panel_vents@

Deletes all venting definitions for the panel.

edit_panel_vent@ <name string>


edit_panel_vent@ "Vent_001"

Sets the active venting definition by name.

add_panel_vent_layer@ <layer id>


add_panel_vent_layer@ 1

Adds a layer to the active venting definition. The layer ID is the layer number minus one.

Pag. 3 di 6
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
del_panel_vent_layer@ <layer id>
del_panel_vent_layer@ 1

Deletes a layer from the active venting definition. The layer ID is the layer number minus one.

del_all_panel_vent_layers@

Deletes all layers from the active venting definition.

set_panel_vent_offsetfromedge@ <offset>
set_panel_vent_offsetfromedge@ 200.0

Sets the venting clearance from the panel border for the active venting definition.

set_panel_vent_offsetfromimages@ <offset>
set_panel_vent_offsetfromimages@ 200.0

Sets the venting clearance from the Images for the active venting definition.

set_panel_vent_offsetfromsymbols@ <offset>
set_panel_vent_offsetfromsymbols@ 200.0

Sets the venting clearance from the symbols for the active venting definition.

set_panel_vent_galvanicwidth@ <width>
set_panel_vent_galvanicwidth@ 0.0

For solid venting patterns only, sets the robber bar (galvanic) width which is drawn around all the Images for
the active venting definition.

set_panel_vent_patternoffsets@ <x> <y>


set_panel_vent_patternoffsets@ 0.0,0.0

Set the placement offset from the panel origin for the active venting definition.

set_panel_vent_galvanic@ <robber bar mode, 0=Disabled, 1=Enabled>


set_panel_vent_galvanic@ 0

For solid venting patterns only, sets the robber bar (galvanic) mode for the active venting definition. If enabled,
the robber bar will be drawn

set_panel_vent_offsetpattern@ <pattern offset mode, 0=Disabled, 1=Enabled>


set_panel_vent_offsetpattern@ 0

Sets the placement offset mode for the active venting definition.

set_panel_vent_outline@ <hatch outline mode, 0=Disabled, 1=Enabled>


set_panel_vent_outline@ 0

For hatch venting patterns only, sets the hatch outline mode for the active venting definition. If enabled, an
outline is drawn for the outer edges and voids for the hatched venting pattern.

set_panel_vent_nopartials@ <dot pattern partials mode, 0=Partials allows,1=No Partials>


set_panel_vent_nopartials@ 0

For dot venting patterns only, sets the partial pattern mode for the active venting definition. If enabled, partial
patterns will be rendered.

set_panel_vent_polarity@ <dot/hatch polarity, 0=Positive, 1=Negative>


set_panel_vent_polarity@ 0

For dot and hatch venting patterns only, sets the polarity for the rendering of the active venting definition.
Pag. 4 di 6
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
set_panel_vent_pattern@ <pattern code, 0=Solid, 1=Dot, 2=Hatch>
set_panel_vent_pattern@ 0

Set the pattern style for the active venting definition.

set_panel_dotpatternline@ <line index,0 or 1>,<shape,1=Round,2=Square> <width>


<X Step> <X Offset>
set_panel_dotpatternline@ 0,1,60.0,120.0,0.0

For dot venting patterns only, set the line shape for the first or second lines of the dot pattern definition for the
active venting definition.

set_panel_dotpatternlineenable@ <line index,0 or 1>,


<line enable mode, 0=Disabled, 1=Enabled>
set_panel_dotpatternlineenable@ 0,1

For dot venting patterns only, set the enabled status for the first and second lines of the dot pattern definition
for the active venting definition.

set_panel_dotpatternystep@ <y step for dot lines>


set_panel_dotpatternystep@ 120.0

For dot venting patterns only, set the y step distance for the delta in dots between the first and second lines of
the dot pattern for the active venting definition.

set_panel_hatchpatternline@ <line index,0,1 or 2>,


<line enable mode, 0=Disabled, 1=Enabled>,<line width>, <step size>,
<hatch angle,0,45,90,135>
set_panel_hatchpatternline@ 1,1,10.0,100.0,4500

For hatch venting patterns only, set the line characteristics for the three lines used to define the hatch. The line
index uniquely identifies each line in the hatch pattern. The enable status indicates whether that line is
rendered. The line width defines the width used for the line rendering. The step size defines the delta between
the hatch patterns. The angle determine the angle at which the line is rendered.

do_panel_rendervents@

Refreshes all venting graphics based on current venting definition settings.

Panelization > Panel Border To Layer

Border2LayerPanel_Set_Data@ Dcode#, Layer#, <0=Don't include One-Up Borders, 1=Include One-


Up Borders>

Specifies the Panel Border settings to run on the border data and initiates the command:

Dcode#: Dcode to use for rendering the converted panel border graphics.

Layer#: layer to which the border data is converted. May be existing layer, or new layer. Specify 35000 if
new layer.

Boolean: determines whether One-Up Borders for Stepped Images are included in the conversion.

Example

Pag. 5 di 6
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
For new layer without One-Up Borders

Border2LayerPanel_Set_Data@ 1,35000,0

For existing layer with One-Up Borders

Border2LayerPanel_Set_Data@ 1,12,1

Pag. 6 di 6
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Settings Menu Macros

Arc/Circle Text
Line Unit
Snap View Options

Settings > Arc/Circle

setsectorize@ 1,4500

Determines if arcs & circles are to be created as true arcs or sectorized data.

First parameter sets type: 0 = Circular interpolation, 1 = Sectorize

If sectorized, the second number is the sector degrees.

set_polygon_sectorize_angle@ #

Sets the sectorization angle for pouring polygons around circular pads.

# is the sectorization angle times 100 (10 degrees would be 1000)

Settings > Line

setwidth@ 10.0000

Sets the width of the line being added (in user units).

setpolarity@ #

Sets the polarity of the data being added: 0=Positive, 2=Negative

setendcap@ #

Sets the endcap style to use when adding lines in the editor: 128=Round, 0=Not Round

Settings > Snap

setsnapdist@ #

Sets the size of the snap box around the cursor. #=Snap Size (an integer from 5 to 100).

Pag. 1 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setsnap@ #

Determines if snap will snap to objects: 1=Snap Object, 0=Do Not Snap Object

Settings > Text

Font Settings:

Specifies the font to use for text. May be set prior to or after text settings in the Text Settings section below.

textfont@ "SIMPLE.EFN"

This is used if an EFN font is used. Otherwise, the following command is used:

textfontface@ 2, "Arial"

Specifies a non-EFN font to use. This is the font face name, not a filename.

First number is the type of font:


2=True Type
4=Autocad SHP
8=Autocad SHX

The second parameter is the face name of the font.

Text Settings:

Once the text and font to be changed have been selected, any of the following commands can be issued (in any
order) to change the text attributes:

textfullheight@ 100.0000

Sets the full text height, in user units, taking into account characters with descenders (as well as a little
additional font-dependent spacing so that lines will not overlap). The old command textheight@, used with
version 2.X and earlier, will still function with this macro.

textcapheight@ 50

Specifies the exact height for the font's capital letters, in user units. All other characters are based relative to
this set height.

Note: The above two macro commands are mutually exclusive. When used in a macro, each overrides the
previous one's settings for any new text being added.

textangle@ 4500

Angle of the text, times 100 (i.e. 4500 = 45 degrees)

textmirror@ 1

Sets text mirroring state. 0=not mirrored or 1=mirrored

textjust@ 4

Sets the text justification, as follows:

Pag. 2 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
33 = Left Baseline
36 = Center Baseline
34 = Right Baseline
17 = Left Bottom
20 = Center Bottom
18 = Right Bottom
5 = Left Center
4 = Center Center
6 = Right Center
9 = Left Top
12 = Center Top
10 = Right Top

textfitting@ 1

Sets the text as fitted or not. 0=no fit or 1=fit

textcspace@ 20.0000

Sets the character spacing, in user units.

textlspace@ 100.0000

Sets the line spacing, in user units.

textslant@ 0

Text slant is set in degrees times 100. Positive values slant the font to the right, negative values slant it to
the left. You can italicize a non-italics font face by specifying a slant angle. (Typical italic font faces are
slanted about 10 to 15 degrees.)

textxscale@ 500

Sets a text scale value (times 100). This applies to the width of individual characters. For example,
textxscale@ 200 would make each character twice a wide as initially defined, while textxscale@ 50 would
make the characters half as wide as initially defined.

textvertical@ 1

Determines if text is displayed vertically. 1=yes or 0=no

Example

textfullheight@ 50.0000
textangle@ 0
textmirror@ 0
textjust@ 33
textfitting@ 0
textcspace@ 0.0000
textlspace@ 50.0000
textslant@ 0
textxscale@ 100
textvertical@ 0
textfontface@ 2,"Algerian"

Settings > Unit

Pag. 3 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
setunit@ 1

Sets user units (0=English, 1=Metric)

setresolution@ 100

Sets the resolution for the current units.

Example

setunit@ 0
update_dcodebar@
update_buttonbars@
setresolution@ 100
update_dcodebar@

Settings > View Options

view_minrepaint@ #

Display graphics as changes are made: 0 = minimize repaint, 1 = show repaint.

view_nc_annotate_mill@ Annotate
view_nc_annotate_drill@ Annotate

These commands determine whether user can see mill or drill paths. May be set in any Editor, but will only
appear in the NC Editor.

Annotate parameter indicates whether or not the NC path annotation should be drawn: 0 = Annotation OFF,
1 = Annotation ON

view_panel@ #

View panel circuit images, rather than step image outlines, when in the Panel Editor: 0 = do not show all
panel images, 1 = show panel images.

view_setpartcentroid@ #

View part centroids: 0 = do not show part centroids, 1 = show part centroids.

view_setmrgedb@ #

View any merged databases in the design: 0 = do not show all merged PCB graphics, 1 = show merged PCB
graphics.

view_setpstkmarker@ #

Display padstack markers ('+' symbol over each padstack): 0 = do not show the padstack markers, 1 =
show padstack markers.

view_setpartoutlinetop@ #

Defines how part outlines for components on the top of the board are displayed (shown as solid lines):

0 = Do not display top part outlines.


1 = Display top part outlines before graphical data (outlines are drawn first, so they appear beneath layers)
Pag. 4 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
2 = Display top part outlines after graphical data (outlines are drawn last, so they appear on top of layers)

view_setpartoutlinebottom@ #

Defines how part outlines for components on the bottom of the board are displayed (shown as dashed lines):

0 = Do not display bottom part outlines.


1 = Display bottom part outlines before graphical data (outlines are drawn first, so they appear beneath
layers)
2 = Display bottom part outlines after graphical data (outlines are drawn last, so they appear on top of
layers)

view_setpartoutline@ #

Invokes both the view_setpartoutlinetop@ and view_setpartoutlinebottom commands.

0 = Do not show any part outlines.


1 = Display all part outlines before graphical data (outlines are drawn first, so they appear beneath layers)
2 = Display all part outlines after graphical data (outlines are drawn first, so they appear beneath layers)

view_settoptestpt@ 1

Display test points for the top layer on the design: 0 = do not show, 1=show.

view_setbottestpt@ 1

Display test points for the bottom layer on the design: 0 = do not show, 1=show.

view_setthrutestpt@ 1

Display through hole test points: 0 = do not show , 1=show.

When setting the View Options selection "Apply Settings to All Editors" you must switch on each option
individually, using the commands listed below. They function the same as their corresponding commands above
(which do not include the _all ), but set the view options for all Editors for which they are available. Once set,
these options do not need to be set for each individual editor.

Note: The NC Data Annotation commands do not have a corresponding _all command (as they only apply to
the NC Editor), and should be set as shown above.

view_minrepaint_all@
view_setpartcentroid_all@
view_setmrgedb_all@
view_panel_all@
view_setpstkmarker_all@
view_settoptestpt_all@
view_setbottestpt_all@
view_setthrutestpt_all@
view_setpartoutlinetop_all@
view_setpartoutlinebottom_all@

Pag. 5 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Tables Menu Macros

Apertures Fixture Drills NC Tool Tables


Assign Tool Table To Layer Footprint Attributes New NC Tool Table
Board Attributes GenCAD Devices Padstacks
Composites Layer Sets Variable Text
Define Mill Tabs Layers
Delete NC Tool Table Layers Mapping

Tables > Apertures

Note: Due to the inclusion of new intrinsic apertures, new macro commands were added to support the
expanded parameters which these apertures can contain. The edit_aperture@ command has been maintained
for compatibility with older scripts, but all new scripts should utilize the new set_aperture@ and del_aperture@
macro commands, as outlined below.

Old Macro
edit_aperture@ 71,1,100.0000,100.0000,71,""

Dcode #, Shape, Size, Swap, Custom name (if its a custom).

Shapes:
0 = None
1 = Round
2 = Square
3 = Rectangle
4 = Target
5 = Thermal
6 = Custom
7 = Donut
8 = Octagon
9 = Oblong

New Macros
lib_setextlib@ Type, Id, Merge, "Filename"

Sets the external library to select Custom apertures. Only required when adding custom apertures from an
external library.

Type is the type of library: 1=cap, 2=part, 3=symbol.

Id is the source of the library: 0=system (filename parameter is ignored), 1=external.

Merge determines if current library should be replaced: 0=overwrite, 1=merge.

Filename : Name of external library to load.

set_aperture@ Dcode#, "Type <Subtype> Key:nnn..."

Actual command to Create or Modify an aperture. This command utilizes a string field to specify the
parameters for each aperture:

Dcode#: defines the number of the aperture.

Pag. 1 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Type: specifies the main aperture shape to use. See the Aperture Chart for a list.

<Subtype>: defines the sub-shape for those apertures with multiple formats.

Key: describes each parameter which is required for the aperture shape, followed by a colon

n: a real number describing the value associated with that parameter.

Each type and subtype of aperture may have multiple parameters. For this reason it is advisable to refer to the
Aperture Chart for the parameters associated with each, before attempting to use them in a script. (Parameter
code letters are highlighted in maroon). Generally the first parameter for each shape is a required field - other
parameters definitions will use a default value - except in the cases where the shape has multiple dimension
parameters (ex: w width is a required parameter for a Round, but h height or w width may serve as the required
parameter for a Diamond). The only exception to this is the Moire shape, which requires parameter le (line
length)Multiple parameters can be entered in one aperture definition string. Each parameter must be separated
from the others by a space.

Example:

set_aperture@ 100,"Butterfly Sq s:100.0 a:34.000000"

del_aperture@ Dcode#

Deletes the specified aperture.

Dcode #: the number of the aperture to be deleted.

update_dcodebar@

Required to update the tool bar after adding/deleting dcodes.

aptable_compress@

Pushes all of the aperture definitions (as opposed to the ones which are unused, indicated by [None]) to the
top of the aperture table. All Dcode references in the database will be replaced to reflect these changes. This
will not function if there are any undefined Dcodes.

aptable_remunused@

Changes all Dcodes which are defined but not used to shape "None."

Example

'adding an intrinsic aperture


set_aperture@ 1007,"Butterfly Sq s:60.0 a:45.000000"
aptable_compress@
update_dcodebar@

'adding a custom aperture


lib_setextlib@ 1,1,0,"d:\CAM350\product\t-bird dev\demo.clb"
set_aperture@ 48,"Custom nm:DRILL4 a:0.000000"
update_dcodebar@

Tables > Assign Tool Table To Layer

nc_assign_tool_table_to_layer@ LyrID,TableID

Pag. 2 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Assigns the specified NC Tool Table to the specified layer. Note that no checking is done for the existance of
the NC Tool Table or that any NC data on the layer will have a valid tool within the newly assigned tool table.

LyrID: ID of NC Data layer the table is to be assigned to.

TableID: Table ID of the NC Tool Table to be assigned to the layer.

Tables > Board Attributes

table_board_attributes@

Initiates the command.

Add_Attribute@ "3`4"

Adds an attribute with the Category'Key

Change_Attribute_Value@ "5"

Changes (or adds) the value to the one specified in the parameter.

Delete_Attribute@ "1`2"

Deletes the attribute with the Category'Key.

Example

table_board_attributes@
Add_Attribute@ "New Database`Cam350_Database"
Change_Attribute_Value@ "12/18/00"
Delete_Attribute@ "PADS`PowerPCB_CAM350_Lock1"

Tables > Composites

Creating and Editing a Composite:


edit_compo@ Comp#,Pos#,Layer#,Polarity,CompName$

Command serves a dual-purpose: 1) creates a composite or 2) sets the values for a layer being used in the
composite. When setting the layers, a new command must be used for each layer in the composite.

1. When creating a new composite, only the Comp# and CompName$ parameters are required. Other
parameters should be set to -2 (no change).

2. When modifying layer settings, all parameters, except CompName$, are required. (CompName$ should
be left out).

Comp# is the composite ID number. The Composite Numbering sequence in macros begins with a 0 (i.e.
Composite_1 = Comp# 0)

Pag. 3 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Pos# gives the order of the layer in the composite.

Layer# is the number of the layer being added to composite.

Polarity:
-1=clear
1=dark

CompName$ is the composite name

edit_compo_bkg@ Comp#,Polarity

Sets the background polarity of the composite.

Comp# is the ID number of the composite. The Composite Numbering sequence in macros begins with a 0
(i.e. Composite_1 = Comp# 0)

Polarity:
-1=clear
1=dark

Deleting a Composite:
reset_composite@ Comp#

Deletes any composite in the table. Comp# is the composite ID number. Must be repeated for each
composite being deleted. The Composite Numbering sequence in macros begins with a 0 (i.e. Composite_1 =
Comp# 0)

Manipulating Composites:
setcompo@ Comp#

Sets the active composite being viewed/edited. Comp# is the composite ID number. The Composite
Numbering sequence in macros begins with a 0 (i.e. Composite_1 = Comp# 0)

view_redraw@

Can be used to view the composite currently being created/edited. (Same as Redraw button on Table dialog).

Example

'use edit_compo@ to create a composite


edit_compo@ 0,-2,-2,-2,"Composite_1"
edit_compo_bkg@ 0,1
'use edit_compo@ to set the layers in the composite you just created
edit_compo@ 0,0,0,-1
edit_compo@ 0,1,1,1
view_redraw@
'delete a composite
reset_composite@ 0

Tables > Define Mill Tabs

set_tab@ TabID,Size,ToolSize,Side,"TabName"

Changes the settings for the specified tab, where:

Pag. 4 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
TabID: ID number of tab being changed.

Size: size of the tab, note that if perforations are set the size of the tab is controlled by the perforation
specifications

ToolSize: size of the tool that tab is defined for. This is relevant when tab is perforated, because the size of
the tab will vary depending on the relationship of the path to the perforations used to determine if the
perforation placement must be recalculated.

Side: side of the tab (relative to the direction the mill toll is cutting), used for locating perforations and
angled exit/entry legs (see below). 0 = left, 1 = right.

TabName: name of tab

set_tab_angle@ "TabID",OnOff,Angle,Length

Changes the angled exit/entry leg settings for the specified tab, where:

TabID: ID number of tab being changed.

OnOff : turns angled exit/entry legs on or off, 1 = on, 0 = off.

Angle: angle of exit/entry legs in degrees. Valid angle range is -90 to +180 degrees.

Length: the length of the exit/entry legs, from the center of the tool to the center of the tool. The actual
length of leg is Length + tool radius of the tool assigned to the path the tab is on.

set_tab_perforation1@ "TabID",OnOff,Num,PerfSize

Changes the perforation settings for the specified tab (see also set_tab_perforation2@) where:

TabID: ID number of tab being changed.

OnOff: turns perforations on or off, 1 = on, 0 = off.

Num: number of perforation holes to be made.

PerfSize: size of tool to be used to create perforation holes

set_tab_perforation2@ "TabID", OnOff, Spacing, Offset

Changes the perforation settings for the specified tab (see also set_tab_perforation1@) where:

TabId: ID number of tab being changed.

OnOff: turns perforations on or off, 1 = on, 0 = off.

Spacing: distance between 1) perforation holes and 2) between perforation holes and mill path.

Offset: distance the edge of the perforation hole is offset from the edge of the board, based on the
"side" (see set_tab@) setting for the tab.

delete_tab@ TabID

Deletes mill tab TabID from the defined Mill Tab Table.

save_tab@ "FileName"

Saves the currently-defined mill tabs in the specified file.

Example

Pag. 5 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
'create tab
set_tab@ 1,200.0000,100.0000,0,"TAB_1"
set_tab_perforation1@ 1,0,3,25.0000
set_tab_perforation2@ 1,0,25.0000,5.0000
set_tab_angle@ 1,0,125,100.0000
'save tab file
save_tab@ "d:\temp\new tabs.tab"
'delete tab
delete_tab@ 1

Tables > Delete NC Tool Table

nc_delete_table@ 2

Deletes the NC Tool Table with the specified tool table ID.

Tables > Fixture Drills

See Tables > NC Tool Table.

Tables > Footprint Attributes

table_footprint_attributes@

Start command.

Add_Attribute@ "3`4"

Adds an attribute with the Category'Key

Change_Attribute_Value@ "5"

Changes (or adds) the value to the one specified in the parameter.

Delete_Attribute@ "1`2"

Deletes the attribute with the Category'Key.

Tables > GenCAD Devices


Pag. 6 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

table_devices@

Initiates command.

Add_Device@ "device name"

Adds a new Device of the given name.

Delete_Device@ "device name"

Deletes a Device of the given name.

Edit_Device@ "device name"

Sets the active Device, in order to modify its values.

Change_Device_PartName@ "new part name"

Adds/modifies a Device's part name.

Change_Device_Type@ "new Type"

Adds/modifies a Device's type.

Change_Device_Style@ "new Style"

Adds/modifies a Device's style.

Change_Device_Package@ "new Package"

Adds/modifies a Device's package.

Change_Device_Value@ "new Value"

Adds/modifies a Device's value.

Change_Device_Tol@ "new Tolerance"

Adds/modifies a Device's tolerance.

Change_Device_NTol@ "new Negative Tolerance"

Adds/modifies a Device's negative tolerance.

Change_Device_PTol@ "new Positive Tolerance"

Adds/modifies a Device's positive tolerance.

Change_Device_Volts@ "new Volts"

Adds/modifies a Device's voltage value.

Change_Device_Desc@ "new Description"

Adds/modifies a Device's description.

Pin information:
Add_Device_Pin@ "new Pin Name"

Pag. 7 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Creates a new pin for the active Device.

Edit_Device_Pin@ "edit pin Name"

Sets the active pin for the active Device, to allow for modification.

Change_Device_Pin_Desc@ "new pin Description"

Adds/modifies pin description for active pin.

Change_Device_Pin_Func@ "new pin Function"

Adds/modifies pin function for active pin.

Delete_Device_Pin@ "deleted pin Name"

Deletes pin of specified name.

Device attributes:

Add_Device_Attr@ "new Category`new Key"

Adds a Device attribute with the given Category'Key value.

Change_Device_Attr_Value@ "new Value"

Changes (or adds) the value to the one specified in the parameter.

Delete_Device_Attr@ "delete Category`delete Key"

Deletes the attribute with the Category'Key.

Edit_Device_Attr@ "edit Category`edit Key"

Sets the active device attribute.

Example

table_devices@
'add new device
Add_Device@ "Device_2"
Change_Device_PartName@ "rollins"
Change_Device_Type@ "SMT"
Change_Device_Style@ "lateral"
Change_Device_Package@ "34"
Change_Device_Value@ "56"
Change_Device_Tol@ "12"
Change_Device_NTol@ "5"
Change_Device_PTol@ "5"
Change_Device_Volts@ "3"
Change_Device_Desc@ "This is a surface mount"
'add pin to device
Add_Device_Pin@ "Test1"
Change_Device_Pin_Desc@ "First pin"
Change_Device_Pin_Func@ "Checks tolerance"
'delete device
Delete_Device@ "Device_3"
'Add device attributes
Add_Device_Attr@ "test`34"
Change_Device_Attr_Value@ "22"
Delete_Device_Attr@ "test`34"
Add_Device_Attr@ "test`35"
Change_Device_Attr_Value@ "56"

Pag. 8 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Tables > Layer Sets

Blind and Buried

Note: Blind & Buried layer sets cannot be created if you have pre-existing MCM Layersets.

layerset_add@ 3,1,"Layer_Set_Name"

Adds a layer set. If a layer set for this ID already exists, it will be deleted and this one added in its place.

First parameter is the ID number/hot key that the layer set is assigned to. (remember, only 10 layer sets can
be assigned to hot keys, though more than 10 layer sets can be created).

Second parameter will always be 1 (identifies it as a blind and buried layer set).

Third is the layer set name.

layerset_setname@ 1,"Layer_Set_Name"

Sets the name of an existing layer set.

First parameter is the ID number assigned to the layer set.

Second parameter is the new name of the layer set.

layerset_setlyr@ 3,1,2

Adds a layer to a layer set. Command must be repeated for each subsequent layer being added to the set.

First parameter is the ID number for this layer set.

Second parameter is the position of the layer being set (equivalent to the number buttons in the User Layer
Sets For Blind And Buried Vias dialog box).

Third parameter is the number of the layer being added (starting at 0).

layerset_delete@ 2

Deletes the layer set for the specified ID number.

layerset_view@ 3

Turns ON the layer set assigned to the specified ID number (any others are turned OFF). The first layer of
the layer set is made active. This command should be followed by view_redraw@ if you want only the
layers in the set you turned ON made visible.

layerset_setdrill@ 3,-1

Sets the drill layer for an existing layer set.

First parameter is the ID number.

Second parameter is the layer number (layers start at 0). -1 means that there is no drill layer.

layerset_setThruDrill@ 8

Sets the drill layer to be used for the through-hole drill. The parameter is the drill layer ID (layers start at 0).

Pag. 9 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Example

layerset_add@ 1,1,"LyrSet_1"
layerset_setname@ 2,"New_Layer_Set"
layerset_setdrill@ 1,4
layerset_setlyr@ 1,1,0
layerset_setlyr@ 1,2,2
layerset_add@ 2,1,"LyrSet_2"
layerset_setdrill@ 2,-1
layerset_setlyr@ 2,1,1
layerset_setlyr@ 2,2,2
layerset_delete@ 1

Layer Stackup

Only one Layer Stackup set may be in effect at one time. However, this stackup must fall in sequence with other
layersets (if any) in the design. In other words, if 3 other layersets (User, Blind & Buried or MCM) exist, the
Layer Stackup set will be layerset 4, and this ID number will control the additions made to the set below:

layerset_add@ 3,3,"Layer_Set_Name"

Adds a new Layer Stackup layer set. If a layer set for this ID already exists, it will be deleted and this one
added in its place.

First parameter is the ID number/hot key that the layer set is assigned to. (remember, only 10 layer sets can
be assigned to hot keys, though more than 10 layer sets can be created).

Second parameter will always be 3 (identifies it as a Layer Stackup layer set).

Third is the layer set name.

layerset_setlyr@ 3,1,2

Adds a layer to the Layer Stackup.

First parameter is the ID number for this layer set.

Second parameter is the position of the layer being set (equivalent to the number buttons in the Layer
Stackup dialog box).

Third parameter is the number of the layer being added (starting at 0).

layerset_setname@ 1,"Layer_Set_Name"

Changes the name of the existing Layer Stackup.

First parameter is the ID number assigned to the layer set.

Second parameter is the new name of the layer set.

layerset_setdrill@ 3,-1

Sets a drill layer for the Layer Stackup layer set.

First parameter is the ID number of the layerset.

Second parameter is the layer number of the drill layer (layers start at 0). -1 means that there is no drill
layer.

Pag. 10 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
set_layer_ords@

Identifies the layers in the design with their types, in relation to the symbol layer types, for the purpose of
mapping the symbol layers to the appropriate panel layers.

Example

layerset_add@ 4,3,"Stackup"
layerset_setdrill@ 4,-1
layerset_setlyr@ 4,1,0
layerset_setlyr@ 4,2,1
layerset_setlyr@ 4,3,2
layerset_setlyr@ 4,4,3
layerset_setlyr@ 4,5,4
layerset_setlyr@ 4,6,10
set_layer_ords@

MCM Technology

Note: MCM layersets cannot be created if you have pre-existing Blind & Buried Layersets.

layerset_add@ 3,0,"Layer_Set_Name"

Adds a new layer set. If a layer set for this ID already exists, it will be deleted and this one added in its
place.

First parameter is the ID number/hot key that the layer set is assigned to. (remember, only 10 layer sets can
be assigned to hot keys, though more than 10 layer sets can be created).

Second parameter will always be 0 (identifies it as a MCM technology layer set).

Third is the layer set name.

layerset_setlyr@ 3,1,2

Adds a layer to a layer set.

First parameter is the ID number for this layer set.

Second parameter is the position of the layer being set (equivalent to the number buttons in the Layer Set
For MCM Technology dialog box).

Third parameter is the number of the layer being added (starting at 0).

layerset_setname@ 1,"Layer_Set_Name"

Sets the name of an existing layer set.

First parameter is the ID number assigned to the layer set.

Second parameter is the new name of the layer set.

layerset_setdrill@ 3,-1

Sets the drill layer for an existing layer set.

First parameter is the ID number of the layerset.

Second parameter is the layer number of the drill layer (layers start at 0). A -1 means that there is no drill
layer.

Pag. 11 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
layerset_delete@ 2

Deletes the layer set for the specified ID number.

layerset_view@ 3

Turns ON the layer set assigned to the specified ID number (any others are turned OFF). The first layer of
the layer set is made active. This command should be followed by view_redraw@ if you want only the
layers in the set you turned ON made visible.

Example

layerset_add@ 1,0,"LyrSet_1"
layerset_setdrill@ 1,-1
layerset_setlyr@ 1,1,0
layerset_setlyr@ 1,2,2
layerset_setlyr@ 1,3,3
layerset_delete@ 1

User

layerset_add@ 3,2,"Layer_Set_Name"

Adds a new layer set. If a layer set for this ID already exists, it will be deleted and this one added in its
place.

First parameter is the ID/hot key that the layer set is assigned to (remember, only 10 layer sets can be
assigned to hot keys, though more than 10 layer sets can be created).

Second parameter will always be 2 (identifies it as a user layer set).

Third is the layer set name.

layerset_setname@ 1,"Layer_Set_Name"

Sets the name of an existing layer set.

First parameter is the ID assigned to the layer set.

Second parameter is the new name of the layer set.

layerset_setlyr@ 3,1,2

Adds a layer to a layer set.

First parameter is the ID for this layer set.

Second parameter is the position of the layer being set (equivalent to the number buttons in the User Layer
Sets dialog box).

Third parameter is the number of the layer being added (starting at 0).

layerset_delete@ 2

Deletes the layer set for the specified layerset ID.

layerset_setdrill@ 3,-1

Sets the drill layer for an existing layer set.

Pag. 12 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
First parameter is the ID number of the layerset.

Second parameter is the layer number of the drill layer (layers start at 0). -1 means that there is no drill
layer.

layerset_view@ 3

Turns ON the layer set assigned to the specified ID (any others are turned OFF). The first layer of the layer
set is made active. This command should be followed by view_redraw@ if you want only the layers in the set
you turned ON made visible.

Example

layerset_add@ 2,2,"New_Set"
layerset_setdrill@ 2,-1
layerset_setlyr@ 2,1,0
layerset_setlyr@ 2,2,1
layerset_setlyr@ 2,3,3
layerset_setlyr@ 2,4,10
layerset_delete@ 2

Tables > Layers

setlayer@ 7

Sets the active layer, by the layer ID number. Layer numbering in macros begins at 0 (i.e. layer 1 in
the program equates to layer ID 0 when used in a macro).

settoplayer@ 6

Brings this layer to top.

view_LayerFlash@ #,#

Turns the flashes ON or OFF on the specified layer. First number is the layer number, second number is
1=on, 0=off.

view_LayerDraw@ #,#

Turns the drawn data ON or OFF on the specified layer. First number is the layer number, second number is
1=on, 0=off.

edit_layer@ Layer#,Drawcolor,Flashcolor,Type,Status,Name$

Creates a new layer in the database, or modifies the settings of an existing one.

Layer# sets the layer number. -2=no change (remember layer numbering in macros starts from 0: i.e. layer
1 = 0).

Drawcolor and Flashcolor set the draw & flash colors to display for the layer.

See Layer Color Codes.

Type is the layer type to associate with that layer.

See Layer Type Codes.

Status determines the appearance of the layer on screen:

Pag. 13 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
0=on
1=off
2=ref
-2=no change

Name$ is the filename of the Gerber file being exported (including the full path). "" =no change (keep old
name)

nc_assign_tool_table_to_layer@ LyrID,TableID

When adding an NC layer, you may set the specific NC Tool Table assigned to the layer with this command. If
the command is not set, the first table in the database (if any exists) is used for the layer.

LyrID: ID of NC Data layer the table is to be assigned to.

TableID: Table ID of the NC Tool Table to be assigned to the layer.

See also Tables > Assign > Tool Table To Layer.

nc_set_layer_rank@ LayerId, Rank

Sets the new layer as an NC data layer.

LayerID is the layer number (0 based).

Rank: type of NC layer. 0 = NC Primary, 1 = NC Secondary.

update_layerbar@

Required to update the layer bar after any change to a layer.

edit_lmapdefaults@

Confirms the changes you made and sets layer mapping to the default mapping for all layers.

layerset_view@ 3

Turns ON the layer set assigned to the specified layer set ID number (any others are turned OFF) (see
Tables > Layersets). The first layer of the layer set is made active.

Example

Non-NC Layer:

edit_layer@ 12,14,14,4,0,"Layer_13"
setlayer@ 12
settoplayer@ 12
edit_layer@ 12,0,0,-2,-2 'change colors to red for draw/flash
edit_layer@ 12,0,0,1,0,"Internal" 'change name to 'Internal'
edit_lmapdefaults@

NC Layer:

edit_layer@ 14,2,2,21,0,"Layer_15"
nc_assign_tool_table_to_layer@ 14,1
nc_set_layer_rank@ 14,1
edit_lmapdefaults@

Pag. 14 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
The Symbol Editor layer table uses most of the same commands listed above, with the exception of the
layerset_view@ command, which is not available in the Symbol Editor. In addition, the editor uses the
following two commands.

edit_sym_layer@ Layer#,Type,Ordinal#

Sets the virtual layer status of each layer added to the layer table. Must be set after the edit_layer@
command.

Layer#: the layer number (remember macro layer numbering begins with 0)

Type: the layer type to associate with that layer:

Ordinal#: sets the virtual layer numbering for the layer, if Type is a layertype already used in the table. For
example, if a negative layer already exists in the table, it is assigned ordinal 0 (first negative layer). Adding a
second negative layer, you would set the ordinal to 1, a third would be 2, etc.

set_layer_ords@

As an option to individual Ordinal settings, this command sets the layer type Ordinals for the layers in the
table based upon the Layer Stackup layer set. (see Tables > Layer Sets > Layer Stackup).

Example

edit_layer@ 15,8,8,2,0,"NegPlane(3rd)"
edit_sym_layer@ 15,2,2
edit_lmapdefaults@

Tables > Layers Mapping

edit_lmap@ 0,2

Map first layer # to the second layer #.

edit_lmapReset@

Resets the layers to all map to themselves.

Tables > NC Tool Tables

General Tool Table Settings:


nc_set_table_type@ 1,2

Sets the NC Tool Table type for the table with the given Table ID (first parameter).

Valid table types (second parameter):


1=Table can contain both mill and drill tools.
2=Table contain only mill tools.
3=Table contains only drill tools.

Pag. 15 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
nc_set_table_name@ 1,"Drill Tool"

Sets the NC Tool Table name. First parameter is the Table ID, second is the desired name.

set_nc_table@ 1

Activates an NC tool table to allow querying of its tools. Parameter is Table ID. See Drill & Mill Queries

Set Tool Information for Individual Tools:


nc_add_tool@ 1,3

Adds an NC Tool with the Tool ID (second parameter) to the table specified by the Table ID (first parameter).
It is followed by several macros that set the parameters of the tool.

nc_delete_tool@ 2,1

Deletes the NC Tool.

First parameter is the tool table ID.

Second parameter is the Tool Reference number.

nc_set_tool_id@ 1,2,3

Sets the tool number assigned to the tool.

First parameter is the Table ID.

Second is the Tool Reference

Third is the tool number to assign to the tool.

nc_set_tool_type@ 1,1,2

Sets the type of tool.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the tool type:


1=tool can be used for both drilling and milling.
2=tool can only be used for milling.
3=tool can only be used for drilling.

nc_set_tool_size@ 1,1,32.0000

Sets the physical size of the tool.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the size of the tool (units of measure depends upon the NC Tool Table Dialog Units).

nc_set_tool_display_color@ 1,3,5

Sets the color assigned to the tool.

Table ID is the first parameter.

Pag. 16 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Tool Reference is the second parameter

Third is the color.

See Layer Color Codes.


nc_set_tool_shape@ 1,3,1

Sets the shape of the drill hit display.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the Shape:


1=Round
4=Target
6=Custom. If set to custom, the following macro must also be used:

nc_set_tool_cap@ 1,3,"CapName"

Sets the custom aperture assigned to the tool (Table ID is the first parameter, Tool Reference is the second
parameter) to CapName. The CAP will be used to display any drill hits assigned this tool.

nc_set_tool_usesize@ 1,2,0

Sets whether to use the actual tool size as the size of the drill hits displayed.

0=use the nc_set_tool_display_size@ value (below)


1=use the physical size of the tool (nc_set_tool_size@)

nc_set_tool_display_size@ 1,2,13.0000

This macro is used if you choose to set the drill tool display size (when it is displayed as a round or target) as
something other than the actual tool size.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the Tool Display Size.

nc_set_tool_infeed@ 1,2,1500.0000

Sets the tool's plunge rate.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the plunge rate in user units/second.

nc_set_tool_outfeed@ 1,2,1500.0000

Sets the tool's retract rate.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the retract rate in user units/second.

Pag. 17 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
nc_set_tool_feedrate@ 1,2,16.6666

Sets the feed rate for a mill tool.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the feed rate (in user units/second, user units being defined under Settings > Unit).

nc_set_tool_rpms@ 1,2,60000

Set the Rotations Per Minute for the tool.

First parameter is the Table ID.

Second the Tool Reference.

Third the RPMs.

nc_set_tool_maxhits@ 1,2,2000

Sets the maximum number of drill hits that this tool can make.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the number of hits.

nc_set_tool_linktool@ 1,2,3

Sets the tool that will be used if the maximum number of hits is reached.

First parameter is the Table ID.

Second is the Tool Reference of the tool being used.

Third is the Tool Reference of the tool that is being used as the Link Tool.

nc_set_tool_plate@ tblID, toolref, plate

Sets the plated or unplated status of an NC tool.

tblID is the Table ID of the NC Tool Table that contains the tool being changed

toolref is the tool reference of the tool to be modified

plate is the plating characteristic to be assigned to the tool:


0 = Plated & Unplated
1 = Plated
2 = Unplated

set_current_toolref@ 1

Sets the active tool on an NC Data layer to allow querying of the tool's values. Parameter is Tool Reference.
See Drill & Mill Queries

set_nc_toolref@ 1

Similar to above, but sets the active tool in an NC Table to allow querying of the tool's values. Parameter is

Pag. 18 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Tool Reference. See Drill & Mill Queries

Tool Table Functions:

Set Export Order

nc_exp_tool_order_by_toolnum@ #

Sets the export order to match the ascending tool number order. Parameter is the Table ID.

nc_exp_tool_order_by_toolsize@ #

Sets the export order to match the ascending tool size order. Parameter is the Table ID.

nc_exp_tool_reverse_order@ #

Sets the export order to match the ascending tool number order. Parameter is the Table ID.

nc_set_tool_exportorder@ 1,1,2

Unlike the above commands, this command sets the order on a tool by tool basis: a separate command must
be used for each specific tool to be exported. Note that drill usages are always exported before mill usages.

First parameter is the Table ID.

Second is the Tool Reference.

Third is the export order.

Set Compensation Index

nc_use_compensation_tbl@ 1,1

Used to enable/disable the use of the Compensation Index Table.

First parameter is the Table ID.

Second parameter determines if the Compensation Index Table is used:


0=do not use Compensation Index Table (use tool radius for compensation)
1=use the Compensation Index Table.

nc_set_comp_val@ 1,1,7.0000

First parameter is the Table ID

Second is the Tool Reference.

Third is the Compensation Value.

Delete & Save Table

nc_delete_table@ 2

Deletes the NC Tool Table specified by the table ID.

nc_save_table@ 1,"d:\act\test.nct"

Saves the table with the Table ID specifed in the first parameter to the file name in the second parameter.

Load Table

Pag. 19 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
These commands are not recorded when you do a Macro > Record. You must add them manually to your
macro program in order to run them.

nc_load_table_append@ 2,"d:\act\test.nct"

Appends the tool table from a file to a "master" tool table that is already loaded. First parameter is the ID of
the master table. Second parameter is the name of the file to append. Any tools from the file will be added
after the last tool in the master table.

nc_load_table_ignore@ 2,"d:\act\test.nct"

Loads the tool table from the file (second parameter) into the table with the table ID (first parameter). If
tools have the same Tool Reference number, the tool from the existing table is kept (data from the
incoming .NCT file is ignored).

nc_load_table_overwrite@ 2,"d:\act\test.nct"

Loads the tool table from the file specified (second parameter) into the table with the table ID (first
parameter). If tools have the same Tool Reference number, the tool from the incoming .NCT file is used
(overwrites the existing tool in the table).

nc_load_table_new@ "d:\act\test.nct"

Loads the tool table from a file. If a table ID exists in the .NCT file data, it will be used for the table created.
If a table with that ID already exists, the existing tabe will be assigned a new ID. If the table is from an older
version of the application (pre-6.0), a new table ID and name will be assigned.

nc_load_table_replace@ 2,"d:\act\test.nct"

Loads the tool data from the file name specified (second parameter) into the table with the table ID specified
(first parameter). If a table already exists with the given table ID, all tools within that table will be deleted
and the tool information from the .NCT file read in.

Sort Table

nc_sort_table@ tblID, sort_field, sort_direction

Sorts the tool table by the value the user selects.

tblID is the ID Number of the NC Tool Table that is to be sorted

sort_field is the tool value to base the sort on. There are three options:
0 = Tool Number
1 = Tool Size
2 = Tool Export Order

sort_direction determines the method of sorting the values selected in sort_field (either increasing or
decreasing):
0 = Decreasing (n .. 1)
1 = Increasing (1 .. n)

Tables>New NC Tool Table

See Tables > NC Tool Table.

Pag. 20 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Tables > Padstacks

edit_padstack@ 2,2,3

Padstack #, Layer #, Aperture ID. Assigns an aperture to the padstack at the designated layer.

edit_padstack_dcode@ 2,2,10

Padstack #, Layer #, Dcode. Assigns a Dcode to the padstack at the designated layer.

padstack_remunused@

Removes all unused padstacks from the current database.

Tables > Variable Text

edit_variabletext_tab@ "Symbol"

Specifies the Variable Text being defined in the table.

change_variabletext_tab@ "This is a coupon"

Assigns the text string value for the Variable Text specified above. All symbols in the current panel that use
the Variable Text will be updated to display the new string.

Example

edit_variabletext_tab@ "test"
change_variabletext_tab@ "this is a title block"

Pag. 21 di 21
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Tools Menu Macros

Bed-of-Nails Editor Flying Probe Editor Part Editor


CAM Editor NC Editor Symbol Editor
CAP Editor Panel Editor

Tools > Bed-of-Nails Editor

util_bned@

Opens Bed-of-Nails Editor.

Tools > CAM Editor

util_camed@

Opens CAM Editor.

Tools > CAP Editor

util_caped@

Opens CAP Editor.

Tools > Flying Probe Editor

util_fped@

Opens Flying Probe Editor.

Tools > NC Editor

util_nced@

Opens NC Editor.

Pag. 1 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Tools > Panel Editor

util_paneled@

Opens Panel Editor.

Tools > Part Editor

util_parted@

Opens Part Editor.

Tools > Symbol Editor

util_symboled@

Opens Symbol Editor.

Pag. 2 di 2
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Utilities Menu Macros

Assign Endpoints Draw To One-Up Border Pads To Padstack


Assign Single Pt Nets Draw To Symbol Panelization
Build Part Draws To Flash Polygon Conversion
Camtek Gerber To Drill Quick Part
Clear Silkscreen Gerber To Mill Sort Drill Hits
Composite To Layer NC Data To Gerber Sort Mill Paths
Convert Composite Netlist Extract Step and Repeat Image Order
Create Drill Offset Mill Path Teardrop
Data Optimization One-Up Border To Layer
Draw To Custom Over/Under Size

Utilities > Assign Endpoints

assignendpoints@

Assigns endpoint status to pins, pads, or vias. Command has no parameters.

Utilities > Assign Single Pt Nets

singlenetextract@

Assigns nets to single-point pins, pads, or vias. Command has no parameters.

Utilities > Build Part

util_bpart_create@

Initiates command.

Part Text Setup

The Reference Designator and Device Name special text can be manipulated much the same as normal text
being added to a design. The following commands determine the formatting for the Reference Designator and/or
Device Name being added to the part:

setturn100angle@ #

Sets the rotation angle for placing the elements. # is 100 times the angle (650=6.5 degrees)

Pag. 1 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
partname_Turn@

Turns the text attached to the cursor by the angle defined in setturn100angle@.

partname_Mirror@ #

Mirrors the text attached to the cursor. 1=Mirror, 0=Don't Mirror

textcapheight@ 70.0000

Controls the text height.

Note: You may change these settings at any time before the placement of either type of special part text.

Adding the Elements of a Part

Each part element (Reference Designator, Outline, etc) must be entered by first activating the part_modify@
command for that element, then adding the required number of coordinates for the elements. The Build Part
command adds these parts in a proscribed sequence; it is best to mimic this in your macro.

part_modify@ 1

This command controls what Build Part action you are doing.

0=Device Name (requires one coordinate)


1=RefDes Name (requires one coordinate)
2=Outline (requires 2 coordinate points for two corners of the selection box - similar to Add > Rectangle
command)
3=Pin Sequence (variable number of coordinates. You can use individual pin coordinates, or inline pins - see
set_pininline@ below)
4=Anchor (requires one coordinate)

Example

Sets one coordinate (Device Name, RefDes & Anchor)

part_modify@ 0
axy@ 1765.0000,844.9000

Sets two coordinates (Outline)

part_modify@ 2
axy@ 1765.0000,844.9000
axy@ -1765.0000,-844.9000

Sets pin sequence

Individual Pins

part_modify@ 3
set_pininline@ 'Turns off inline pin recognition
axy@ 3386.8000,2990.3000
axy@ 3391.3000,2949.6000
axy@ 3386.8000,2906.7000
axy@ 3391.3000,2861.5000
axy@ 3391.3000,2798.3000
axy@ 3389.1000,2748.6000
axy@ 3391.3000,2692.1000
axy@ 3142.9000,2692.1000
axy@ 3142.9000,2753.1000
axy@ 3142.9000,2796.0000
axy@ 3140.6000,2850.2000
axy@ 3142.9000,2888.6000
axy@ 3142.9000,2947.4000

Pag. 2 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 3147.4000,3001.6000

Inline Pins - you need only select the "key" pins in the sequence - first, end of first row, beginning of second
row, and last. The program will select the pins lying inbetween them.

part_modify@ 3
axy@ 2815.3000,3001.6000
axy@ 2817.6000,2678.5000
axy@ 2815.3000,2694.4000
axy@ 2560.1000,2698.9000

set_pininline@

Acts as a toggle to turn inline pin recognition on and off. Note: the program assumes inline pins to be ON. It
is only necessary to use this command when selecting individual pins for the part.

axy@ 1765.0000,844.9000

Coordinates control where the text names are placed, the window around the part outline, the pin sequence,
or the anchor, depending on the part_modify@ variable selected.

Finishing the Build Part Process

After all elements of the part are added, the part is given a name and saved to the local part library for the
design. This part library may be saved external to the design using File > Save Lib As.

part_name@ "Part Name"

Assigns a user-specified name to the part.

part_build@

Confirms the creation of the part, saves to local library, and ends command.

Example

util_bpart_create@
'Settings for text addition
textcapheight@ 50.0000
setturn100angle@ 18000
'Add Reference Designator
part_modify@ 1
partname_Turn@ 'turn and mirror refdes
partname_Mirror@
axy@ 2695.6000,3103.2000
'Add Outline
part_modify@ 2
axy@ 2621.0000,3069.3000
axy@ 2770.1000,2626.6000
'Add Pin Sequence (inline)
part_modify@ 3
axy@ 2815.3000,3001.6000
axy@ 2817.6000,2678.5000
axy@ 2815.3000,2694.4000
axy@ 2560.1000,2698.9000
'Add Device Name
part_modify@ 0
setturn100angle@ 9000 'set new turn angle
partname_Turn@ 'turn device name
axy@ 2566.8000,3006.1000
'Add Anchor
part_modify@ 4
axy@ 2645.0000,2650.0000
'Finish Building part
part_name@ "test3"
part_build@

Pag. 3 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Utilities > Camtek

Network

There are no macro commands for this feature.

New Job

There are no macro commands for this feature.

Old Job

There are no macro commands for this feature.

Utilities > Clear Silkscreen

util_silk@

Initializes command.

clearsilk1@ 2,0,20.0000,5.0000,""

Performs the clearing.

First #: the silkscreen layer number.

Second #: the mask layer number.

Third #: the clearance.

Fourth #: the minimum stub length.

Fifth #: the Dcode filter (Dcodes not used). If left blank, all Dcodes are used

back@

Ends command.

Utilities > Composite To Layer


Pag. 4 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

conv_composite2layer@ 0,-1

Converts a composite to a single layer, while maintaining as much intelligent data (pads, traces, etc). as
possible.

First number is the Composite ID (like layer-numbering, this 0 based). In the above example, 0 = C1

Second number is the Layer ID of the target layer (where the polygon data will be placed). If -1, then a new
layer is created.

Utilities > Convert Composite

composite2layer@ 0,-1,1.0000,2

Converts ALL data in a composite to raster polygons, on a single layer, including all pads and traces.
Optionally algorithm is optimized with settings for fast layer combining, maintaining pads and traces, and
creating customs for shaved pads.

First number is the Composite ID (like layer-numbering, this 0 based). In the above example, 0 = C1

Second number is the Layer ID of the target layer (where the polygon data will be placed). If -1, then a new
layer is created.

Third number is the Resolution of the conversion process (in user-units). To replicate the command itself, the
value should be 1, 2, or 4, where 1 is the most accurate. However, any value will be accepted by the macro
command (bear in mind the smaller the resolution, the longer the processing time will be).

Fourth number is the setting for conversion optimization


0 - Fast layer combining
1 - Merge data into raster polygons
2 - Fast layer combining; maintain draws and flashes
6 - Fast layer combining; maintain draws and flashes; create customs for shaved pads

Utilities > Create Drill

The Create Drill macro command creates a new drill file for a databse where none existed. As such it presumes
you have created a new NC Drill Table from which to assign tools to the new drill file. To create the table, use
Tables > NC Tools.

util_drill_create@

Initiates command.

Assign Drills to Padstacks

Each padstack in the design must have a drill tool assigned to it. The following commands may be used multiple

Pag. 5 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
times in the macro to do so:

drill_assign@ 0,7,3

Assigns a Plated drill tool to a padstack.

First parameter: Padstack # (remember padstack numbering, like layers, begins with 0 in macros)

Second parameter: Tool Reference #

Third parameter: Pass (0 = first, 1 = second)

drill_assign_upl@ 10,5,0

Assigns an Unplated drill tool to a padstack.

Parameters for both commands are:

First parameter: Padstack # (remember padstack numbering, like layers, begins with 0 in macros)

Second parameter: Tool Reference #

Third parameter: Pass (0 = first, 1 = second)

Create New Drill Layers & Reports


drill_new_report@

Starts a new drill report file, using the .cam file name with a .rpt extension. If one already exists, it deletes
the report information contained in the file. Without this command, the following two commands would
append the information to an existing file, and previous information would not be deleted.

drill_create_plated@ 10,"plated.drl"

Creates an NC Data layer for plated drills and appends the information to an existing plated drill report, or
creates a new report if one doesn't already exist. Parameters are Layer # and layer name.

drill_create_unplated@ 14,"L15:drill_15.dr"

Creates an NC Data layer for unplated drills and appends the information to an existing unplated drill report,
or creates a new report if one doesn't already exist. Parameters are Layer # and layer name.

Example
util_drill_create@
drill_assign@ 0,1,0 'assigns plated tool #1 to padstacks 1-2
drill_assign@ 1,1,0
drill_assign@ 2,1,0
drill_assign_upl@ 3,2,0 'assigns unplated tool #2 to padstacks 4-6
drill_assign_upl@ 4,2,0
drill_assign_upl@ 5,2,0
drill_assign@ 6,1,0 'resumes assigning tool #1 to padstacks
drill_assign@ 7,1,0
drill_assign@ 8,1,0
drill_assign@ 9,3,0 'switches to plated tool #3 for remaining padstacks
drill_assign@ 10,3,0
drill_assign@ 11,3,0
drill_assign@ 12,3,0
drill_assign@ 13,3,0
drill_new_report@
drill_create_plated@ 7,"drill_8.drl"
drill_create_unplated@ 8,"drill_9.drl"

Pag. 6 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Utilities > Data Optimization

Remove Covered Data

util_remove_covered_data@

Removes covered data, using the commands below:

To process the entire layer (for all layers that are ON):

remove_covered_data_layer@ 0.1000,1,1,0

First parameter is the tolerance.

Second parameter is whether to remove pads covered by graphics (1=yes, 0=no).

Third parameter is whether to remove graphics covered by pads (1=yes, 0=no).

Fourth parameter is whether to delete the covered data or move it to a new layer. 1=move to a new layer,
0=delete.

To process a portion of the layer (for all layers that are ON):

axy@ -250.2000,4906.2000
axy@ 3553.9000,1609.3000

You must specify coordinates that define two corners of the rectangle containing the data to be processed.

remove_covered_data_window@ 0.1000,1,1,0

First parameter is the tolerance.

Second parameter is whether to remove pads covered by graphics (1=yes, 0=no).

Third parameter is whether to remove graphics covered by pads (1=yes, 0=no).

Fourth parameter is whether to delete the covered data or move it to a new layer. 1=move to a new layer,
0=delete.

The coordinates and subsequent command may be repeated as often as necessary before the final back@
command.

back@

Ends command.

Example

util_remove_covered_data@
axy@ 2491.3000,5431.7000
axy@ 5506.6000,3297.5000
remove_covered_data_window@ 0.1000,1,1,1
back@

Remove Isolated Pads

Pag. 7 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

util_padremoval@

Initiates command.

axy@ 1375.0000,2725.0000
axy@ 3225.0000,1425.0000

Coordinates define the window to be processed.

setbydcode@ "17"

Sets the Dcode of the pads being removed. Setbydcode is only required if a Dcode filter is used.

back@

Stops selection process.

padremoval@

Performs the actual removal.

Example

util_padremoval@
axy@ 2251.0000,5569.1000
axy@ 5689.7000,3114.4000
setbydcode@ "10"
back@
padremoval@

Remove Redundant Pads

util_removeredun@
padrem_redund2@ #,"Dcode number"

Deletes the extra pads (the same Dcode at the same location on the same layer) for all the ON layers.

# is the tolerance (in mils). The maximum tolerance is 10 mils.

You may specify a Dcode number (as a string) to limit pad removal to selected Dcode, or leave blank to
process all Dcodes.

Utilities > Draw To Custom

begin_draw2custom@

Initiates command.

axy@ -50.0000,2775.0000
axy@ 375.0000,2375.0000

Pag. 8 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Coordinates define the corners of rectangular selection window around the drawn pad.

back@

Ends custom selection.

add_draw2custom1@ make_polygons, "custom_name"

Defines settings for the custom being created.

First parameter specifies if the custom aperture is constructed solely of polygons (0 = no, 1 = yes).

Second parameter is the name of the custom aperture you are creating

edit_aperture_ex@ 12,6,0.0000,0.0000,0,"custom_name"

Adds the custom aperture to the Aperture Table.

Parameters are: Dcode #, Shape, Size, Swap, Custom name. (see Tables > Apertures for more
information)

Shape should be set to 6 (for custom aperture).

Example

begin_draw2custom@
axy@ 2737.4000,5835.1000
axy@ 3016.3000,5584.7000
back@
add_draw2custom1@ 1,"acap0001"
edit_aperture_ex@ 137,6,0.0000,0.0000,0,"acap0001"
back@

Utilities > Draw To One-Up Border

util_draw2border@

Start draw to border command.

axy@ 0.0000,0.0000

Selects the drawn data to be converted. One or more axy@ commands may be used to select multiple line
data (such as contiguous, but not joined, lines).

back@

Ends selection of data to include in the border.

draw2border_set_border@ 50.0000

Specifies an offset (in user units) for one-up border from the drawn data being used. Useful for creating one-
up borders which clearance around a drawn design border, for instance.

Example

util_draw2border@
Pag. 9 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
axy@ 3175.0000,-2575.0000
back@
draw2border_set_border@ 0.0000 'set for no clearance

Utilities > Draw To Symbol

util_draw2sym@

Initializes command.

Draw2SymDo@ LyrID,Spacing#,Type,Name$

Changes drawn data to a symbol; assigns Symbol Border automatically.

LyrID: the layer destination for the resulting symbol data. The mapping is as follows:
1 = all Non-NC layers
2 = all electric layers
3 = goes on all layers of one type. Symbol will appear on all layers of the type it was originally generated on
(e.g. internal)
4 = appears only on the specified layer the symbol is created on

Spacing#: the minimum distance from the data that the symbol border will be created, in user units.

Type: the symbol type being created:


1 = Coupon
2 = Title Block
3 = Fiducial
4 = Pinning Hole

Name$: the symbol's name. if a symbol already exists with symbol name, it will be replaced with results of
Draw2Symb

axy@ x#,y#

Specifies coordinates for the drawn data to be converted.

Example

util_draw2sym@
axy@ -466.7000,4512.2000
Draw2SymDo@ 1,50.0000,1,"Coupon1"

Utilities > Draws To Flash

Automatic

util_autodraw2flash@

Converts draws to apertures, as defined by the settings and area below.

Pag. 10 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Settings

Define the parameters to use when searching for apertures to convert.

set_draw2flashautoparm1@ 0,1,1,1

Controls the type of conversion, elements to exclude, and view state:

First # is the type of conversion:


0=Fully Automatic
1=User Check Rejected
2=User Check All

Second # controls flashes:


0=Existing flashes can be included in groups of draws
1=Ignore existing flashes

Third # controls single stroked lines:


0=Do not reject single stroked lines
1=Always reject single stroked lines

Fourth # controls the view


0=Maintain current view
1=View all graphics

set_draw2flashautoparm2@ 200.0000,200.0000,13.0000,2.0000,"Dcode String"

Specifies which draws to consider including in conversion.

First #: Maximum width of a group of draws to be considered for conversion to a flash

Second #: Maximum height of a group of draws to be considered for conversion to a flash

Third #: Minimum width of a group of draws to be considered for conversion to a flash

Fourth #: Tolerance used in determining if adjacent draws are part of the same group

Fifth #: Dcode filter string.

set_draw2flashautoparm3@ UseMaskTop, UseMaskBot, UseDrill

Sets elements to control the search for apertures to convert.

UseMaskTop:
1 = if a top layer is processed, then use the mask top (if it exists) to control the search
0 = do not use mask top layer to control search

UseMaskBot:
1 = if a bottom layer is processed, then use the mask bottom (if it exists) to control the search
0 = do not use mask bottom layer to control search

UseDrill:
1 = if an internal layer is processed, then use the drill layer (if it exists) to control the search
0 = do not use drill layer to control search

Area Selection

axy@ -358.2000,5089.8000
axy@ 5242.9000,-64.0000

The two axy@ commands define the pattern search area (does not limit the area where matching patterns
will be converted).

Pag. 11 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
draw2flashautoentirelayer@

An alternative to the axy@ commands, selects all data on the layer.

Example

util_autodraw2flash@
set_draw2flashautoparm1@ 0,1,0,0
set_draw2flashautoparm2@ 200.0000,200.0000,5.0000,2.0000,"10"
set_draw2flashautoparm3@ 1,1,1
axy@ 2331.1000,5506.1000
axy@ 5638.2000,3200.3000

Interactive

util_draw2flash1@

Converts selected draws to an aperture, using the commands below.

setd2foptparm1@ 2.0000,1,1,"dcode string"

Locates the drawn data to convert to an aperture, using these parameters:

First #: Tolerance

Second #: Find rotations (1=yes 0=no)

Third #: View of data onscreen (0=leave view unchanged, 1=View All)

Last variable: Dcode filter string.

axy@ 9495.0000,11326.0000
axy@ 9608.0000,11275.0000

Coordinates define the selection window around the drawn pad.

setd2fparm@ 1,90.0000,24.0000,0,11

Command replaces the drawn data with a new aperture and adds aperture to Aperture Table. Parameters set
the values for the new aperture.

Replacement type:
1=compute size
0=select specific replacement Dcode)

Computed size X value

Computed size Y value

Replacement shape:
0=rectangle
1=round
2=oblong

Replacement Dcode number (if first parameter was 0)

Note: the coordinates and setd2fparm@ command may be repeated multiple times to select many drawn
pads. There is no need to rerun the setdr2foptparm1@ command.

Pag. 12 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Set_D2fCont@ 1

Begins and ends pad selection.


1 = continue selecting pads
0 = Stop selecting pads and start the conversion process.

Example

util_draw2flash1@
setd2foptparm1@ 5.0000,1,0,""
axy@ 3229.4000,5759.3000
axy@ 3434.0000,5457.4000
setd2fparm@ 1,91.2000,158.4000,2,323 'converts first selected pad to an oblong
axy@ 3448.3000,5742.1000
axy@ 3665.7000,5496.1000
setd2fparm@ 1,131.2000,147.1000,0,323 'converts need drawn pad to rectangle
axy@ 3695.7000,5732.1000
axy@ 3937.5000,5529.0000
setd2fparm@ 1,128.4000,128.4000,1,323 'converts last pad to round

Utilities > Gerber To Drill

nc_gerber_to_drill@ 6,-1,0,1,1,""

Converts Gerber pad data to NC drill data, using the following parameters:

First parameter is the Source layer number (remember macro layer numbering starts at 0).

Second parameter is the Target layer number. If -1, a new layer is created.

Third parameter is the Tool Table ID (only relevant if you are creating a new target layer). If 0, a new tool
table is created.

Fourth is whether the hits will be plated (1) or unplated (0).

Fifth is whether to remove redundant data during the conversion (1=yes, 0=no).

Last is the Dcode filter string (used by setbydcode) to limit the Gerber Data to be converted. Leave blank ("")
and no Dcode filter is used.

Utilities > Gerber To Mill

gerber2mill_set_fix_errors@ #

Sets a flag to attempt to repair mill path compensation issues on converted Gerber data. Has no effect if
compensation of mill paths is not specified (using Edit > Change > Compensation).

1 = system will attempt to fix compensated mill paths


0 = compensated mill paths will not be fixed.

Pag. 13 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
nc_gerber_to_mill@ 6,-1,0,1,1,""

Converts Gerber draws on layer to NC Mill paths, using these parameters:

First parameter is the Source layer number (remember macro layer numbering starts at 0).

Second parameter is the Target layer number. If -1, a new layer is created.

Third parameter is the Tool Table ID (only relevant if you are creating a new target layer). If 0, a new tool
table is created.

Fourth is whether to remove redundant data during the conversion (1=yes, 0=no).

Fifth is whether to convert segmented arcs to true arcs during the process (1-yes, 0=no).

Last is the Dcode filter string (used by setbydcode) to limit the Gerber Data to be converted. Leave blank ("")
and no Dcode filter is used.

Utilities > NC Data To Gerber

nc_ncdata_to_gerber@ 8,-1

Converts NC Data to Gerber data. First parameter is the source NC Data layer. Second parameter is the
Target layer (-1 if it creates a new layer).

Utilities > Netlist Extract

layerset_setThruDrill@ lyrID

Sets the NC drill layer to use when extracting the netlist. (Must be specified).

netextract4@ Type,Pads,Point,Exist,Neg

Performs the netlist extraction, using the NC drill layer from the command above:

Type is the extraction type (0=true shape, 1=centerline)

Pads defines whether to allow nets without pads (1=allow nets without pads, 0=don't allow nets without
pads).

Point defines whether to extract single point nets (1=yes, 0=no).

Exist is the treatment of existing nets (0 = augment nets, 1 = explode nets (preserve negative planes) and
extract, 2 = explode nets and extract.

Neg is whether or not the negative planes are split (0=they are split. 1=they are not split). Turning this
option off can significantly increase extraction speeds on non-split planes.

Example

layerset_setThruDrill@ 7
netextract4@ 0,0,0,2,0

Pag. 14 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

Utilities > Offset Mill Path

Offset All Paths


nc_utils_offset_mill_path@

Starts command sequence.

nc_offset_all_mill_paths@ 1,0

Offsets all mill paths for the active layer.

First parameter:
0=offset the paths by half the tool diameter
1=use the current compensation value assigned to the mill tool in the NC Tool Table

Second parameter:
0=offset the path in the direction of the compensation value assigned to the mill tool in the NC Tool Table
1=offset to the left
2=offset to the right

Offset Individual Paths

Following is the macro sequence for individual path selection, with unique offset parameters for each path.

nc_utils_offset_mill_path@

Starts command sequence.

nc_offset_mill_path_parms@ 0,1,0

Sets the offset parameter to use for the path.

First parameter value of 0 designates that no compensation information from the NC Tool Table will be used
(offset information is used from the nc_offset_mill_path_data@ command below instead).

Second and Third parameters are ignored.

nc_offset_mill_path_data@ 48.0000,1

Specifies compensation settings for the mill path:

First parameter is the distance to offset the mill paths.

Second parameter: 0=offset to the right, 1=offset to the left.

axy@ 1675.0000,2000.0000

Coordinates of mill path selected.

back@

Ends command.

Following is the macro sequence for individual path selection, with universal offset parameters for all.

Pag. 15 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
nc_utils_offset_mill_path@
nc_offset_mill_path_parms@ 1,1,0

Sets the offset parameter to use for the path.:

First parameter: 1=use the offset parameters as designated by the remaining two parameters.

Second parameter:
0=offset the path by the tool radius
1=use the Compensation Index as defined in the NC Tool Table

Third parameter:
0=offset the path in the direction specified by the Compensation Index
1=offset to the left
2=offset to the right

axy@ 1825.0000,1900.0000

Coordinates of mill path selected.

back@

Example

Offset All Paths

nc_utils_offset_mill_path@
nc_offset_all_mill_paths@ 0,1

Offset Individual Paths

Unique Offset

nc_utils_offset_mill_path@
nc_offset_mill_path_parms@ 0,0,1
nc_offset_mill_path_data@ 100.0000,2
axy@ 3412.4000,7892.0000
back@

Universal Offset

nc_utils_offset_mill_path@
nc_offset_mill_path_parms@ 1,1,0
setsnap@ 1
axy@ 3275.1000,8098.0000
back@

Utilities > Over/Under Size

util_over_under@

Initiates the command.

set_over_under@ Template#, Target#, Amount, Over/Under

Pag. 16 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Specifies the over/under settings to run on the selected data:

Template#: layer being over/undersized

Target#: layer over/undersized data is created on. May be existing layer, or new layer. Specify layer number
if new layer.

Amount: specifies amount to over/undersize data (in user units)

Over/Under: sets flag to over or undersize data. 0=oversize, 1=undersize.

set_over_under_percent1@ Template#, Target#, Percent, Over/Under

Same as the above command, but allows for percentage changes of the data being over/undersized:

Template#: layer being over/undersized

Target#: layer over/undersized data is created on. May be existing layer, or new layer. Specify layer number
if new layer.

Percent: specifies percent to over/undersize data. Expressed as the percent * 100, up to two decimal places
(i.e. 101.5 percent is 10150)

Over/Under: sets flag to over or undersize data. 0=oversize, 1=undersize.

set_SMTOnly@ 1

Specifies if SMT pads are to be over/undersized. This is a macro-only command. It does not record.

0 = all pads may be selected


1 = only pads which do not belong to a padstack are selected

Note: If used, this command turns off the selectability of draws, so if you wish for draws to also be selected,
this command would have to be followed by seteditdraw@ 1.

axy@ -236.5000,5370.2000
axy@ 5310.3000,-196.6000

Coordinates define the window to be processed.

Example

By Amount

util_over_under@
set_over_under@ 0,21,5.0000,0,0
set_SMTOnly@ 1
axy@ 2268.1000,5437.4000
axy@ 3200.7000,3240.3000

By Percent

util_over_under@
set_over_under_percent1@ 0,21,12300,0,0
set_SMTOnly@ 1
axy@ 2268.1000,5437.4000
axy@ 3200.7000,3240.3000

Pag. 17 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Utilities > One-Up Border To Layer

util_border2layer@

Initiates the command.

Border2Layer_Set_Data@ Dcode#, Layer#

Specifies the One-Up Border settings to run on the border data:

Dcode#: Dcode to use for rendering the converted border graphics.

Layer#: layer to which the border data is converted. May be existing layer, or new layer. Specify 35000 if
new layer.

Example

For new layer

util_border2layer@
Border2Layer_Set_Data@ 1,35000

For existing layer

util_border2layer@
Border2Layer_Set_Data@ 1,11

Utilities > Pads To Padstack

util_pads2via@

This does the pads to padstack conversion. No parameters required.

Utilities > Panelization

AutoFilm

panel_spread@ 0,3

Spread (0 =OFF, 1 = ON), Panelize to layer #.

panel_spacing@ bx, by, sx, sy, 0

Border X spacing, Border Y spacing, Image spacing X, Image spacing Y, Spacing type (0=space between,
1=spacing offset). If you turn ON panel_centerimg@ below, the Image spacing and Spacing type parameters
are ignored (but a value must still be specified for the macro to play properly)

Pag. 18 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
panel_dimension@ 24000.0000,20000.0000

Maximum X and Y

panel_outline@ 0,10,15,15.0000

Generate border (0=no, 1=yes), generate Dcode, target layer, step off distance. The step off distance is only
used if generate border is set to 1.

panel_centerimg@ 1

1 = center images in their quadrant area, 0=do not center images (use layout specified in panel_spacing@)

setfilmbox@ 0.0000,20000.0000,24000.0000,0.0000

The size of the Film Box. Lower left X coordinate, upper right X coordinate, upper right Y coordinate, lower
left Y coordinate.

panelization@

Generates the panel.

Example

panel_spread@ 1,11
panel_spacing@ 1000.0000,1000.0000,500.0000,500.0000,0
panel_dimension@ 12000.0000,12000.0000
panel_outline@ 0,10,0,0.0000
panel_centerimg@ 1
setfilmbox@ 0.0000,12000.0000,12000.0000,0.0000
panelization@

Panel Editor

util_paneled@

Switches to Panel Editor, where Panelization Menu commands may be used to panelize a database.

Utilities > Polygon Conversion

Draw To Raster Poly

util_draw2raster@

Starts the process.

Selecting Polygons
axy@ -330.0000,5199.9000

Selects polygon to convert. Coordinates may be anywhere within the polygon. Subsequent coordinates may
be selected to convert multiple polygons.

Pag. 19 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
back@

Ends selection of polygons.

Alternately, the following command may be used to select all vector-drawn polygons on the active layer(s):

gen_selectall2@

Filtering Apertures

This utility may use filter selections to limit the apertures in the polygons which should be converted:

setbydcode@ "10"

Specifies the Dcode to convert (excludes all other Dcodes).

Convert Polygons
draw2raster_ok@
draw2raster_ok2@ 1

Performs the conversion, where "0" means show prompts for excessive polygon vertices and "1" means hide
prompts for excessive polygon vertices.

draw2raster_cancel@

Cancels the operation on the selected data. The application reverts back to the start of the process (waiting
for a polygon to be picked). This command is normally only seen when recording a macro script (and is
unlikely to be used when writing a script).

Example

util_draw2raster@
axy@ 6433.5000,4939.7000
setbydcode@ "38"
back@
draw2raster_ok@

Raster Poly To Vector Poly

util_raster2vect@

Starts the process.

axy@ -338.2000,5183.6000

Any point within the polygon you wish to convert. Subsequent coordinates may be selected to convert
multiple polygons.

back@

Ends selection of polygons to convert.

raster2vect_dcode@ 10

Sets the Dcode to be used to fill in the vector polygon. It also triggers the actual conversion.

back@

Ends the command.

Pag. 20 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
raster2vect_cancel@

Cancels the pick of a raster polygon at the stage of choosing a Dcode to fill the raster polygon. The
application reverts back to the start of the process (waiting for a polygon to be picked). This command is
normally only seen when recording a macro script (and is unlikely to be used when writing a script).

Example

util_raster2vect@
axy@ 6497.6000,5051.9000
back@
raster2vect_dcode@ 136
back@

Utilities > Quick Part

util_quickpart@

Initiates command.

Pin Selection

Pins may be selected as inline sequences or as individual pins.

quickpart_SetPinInline@ #

Determines inline pin recognition. Inline recognition is the default for Quick Part pin selection. Use this
command only if you want greater control over the individual pins being selected.

1 = Selects Inline Pin Recognition


0 = Deselects Inline Pin Recognition.

quickpart_SetPinName@ "pin_number"

Specifies the current "pin number." Pin numbering is normally done in an automatic numeric sequence, but
you may use this command to assign specific pin numbers to pins. Should appear before the axy@ selecting
the next pin.

Parameter is a string of the new number to use. Up to 5 characters allowed.

axy@ 0.0000,0.0000

Used to select the beginning and end pins of an inline pin sequence, or only individual pins in a part (see
quickpart_setpininline@)

back@

Ends pin selection.

Part Pattern Settings and Selection


quickpart_NewPattern@ "pattern_name"

Creates a part pattern using all the pins that have been previously assigned.

quickpart_SetPatternName@ "pattern_name"

Pag. 21 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Select the "pattern name" as the current part to be used for pattern-matching. This can be the most recently
created part, or any part in the project library. (Must be a pattern that already exists.)

quickpart_ChangePatternName@ "new_pattern_name"

Changes the pattern name of the currently selected part to be the "new pattern name."

Part Pattern Matching/Placement


quickpart_SetRefDes@ "new_refdes_name"

Changes the reference designator that is currently displayed in the toolbar to "new refdes name." Normally
Ref/des number is automatically incremented when matching part patterns, but this command can be used if
you wish to have complete control over the ref/des being assigned. Command must appear before the
quickpart_MatchPattern@ command:

setturn100angle@ 4500

Sets turn angle for part pattern. Angle is times 100 (45 degress = 4500).

quickpart_Turn@

Turns part pattern by the angle set in setturn100angle@.

quickpart_Mirror@

Mirrors part pattern on its axis.

quickpart_MatchPattern@ X,Y, angle, mirrored, "refdes_name"

Used to match a selected pattern to a potential part. Performs the actual part placement. May be run
multiple times to place additional part instances.

X,Y = Coordinates of the first pin, for matching current pattern. Coordinates contain no decimals (multiply by
10000)

Angle = Degrees that the pattern is to be rotated around the pattern's first pin.

Mirrored = Indicates whether the pattern is mirrored or not (0 = No, 1 = Yes).

"refdes_name" = Reference designator to be assigned to the part. ("" = let system assign ref/des number).

back@

Closes command.

Example

util_quickpart@
axy@ 2225.0000,1550.0000 'Select inline pin sequence
axy@ 1875.0000,1550.0000
quickpart_SetPinInLine@ 0 'switch to individual pin selection for next sequence
axy@ 1875.0000,1350.0000
axy@ 1925.0000,1325.0000
axy@ 1975.0000,1350.0000
axy@ 2225.0000,1325.0000
back@
quickpart_NewPattern@ "18smt.1" 'name part pattern
quickpart_SetPatternName@ "18smt.1" 'select pattern to use
quickpart_MatchPattern@ 28257500,19812000,0,0,"U1" 'place first part
quickpart_MatchPattern@ 28257500,11430000,0,0,"U2"
quickpart_MatchPattern@ 11430000,21590000,0,0,"U3"
quickpart_SetRefDes@ "U4" 'Sets next ref/des to use
setturn100angle@ 4500 'turn and mirror part

Pag. 22 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
quickpart_Turn@
quickpart_Mirror@
quickpart_MatchPattern@ 11430000,21590000,90,1,"U4"
back@

Utilities > Segregate Drills

nc_segregate_drills@ SrcLyrId, SrcToolRef, TgtLyrId, TgtToolRef, Which

Separates drill hits to another layer, based on the tool reference.

SrcLyrId = Source NC Layer number (0 based)

SrcToolRef = Tool Reference of drill hits to move

TgtLyrId = Target NC Layer number (0 based)

TgtToolRef = Tool Reference to be assigned to the hits when moved to the target layer

Which = which drill hits to move:


0 = All drill hits made by SrcToolRef
1 = All plated drill hits made by SrcToolRef
2 = All unplated drill hits made by SrcToolRef

Utilities > Sort Drill Hits

drill_firstlast@ 1

Specifies if user will set the first/last drill hits in the path. 1 = yes, 0 = no.

drill_sort_set@ 0,0,50.0000,15

Specifies the search settings to use when sorting the drill hits.

First parameter is Scan Type (0 = scanx, 1 = scany, 2 = closest)

Second parameter is the Drill path Dcode (in v5.0 and earlier. Use a 0 value as a placeholder in v6.0 and
later).

Third parameter is the Scan Width, in user-units

Last is the NC data layer ID (remember macro layer numbering begins at 0)

axy@ 1200.0000,1875.0000
axy@ 800.0000,2700.0000

If recording the function, these are the coordinates selected for the first and last drill hits. They are not
necessary when playing the macro (the coordinates are taken care of in the following command).

Pag. 23 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
drill_sort@ 1222.2183,1877.7817,907.4061,2737.0305

Performs the sorting. These are the actual coordinates where the first and last drill hits will be (functions like
snapping to an object).

end@

Ends command.

Example

drill_firstlast@ 1
drill_sort_set@ 1,0,60.0000,9
drill_sort@ 1224.5000,3031.0000,4626.5000,1473.0000
end@

Utilities > Sort Mill Paths

nc_sort_mill_paths@

Sorts all mill paths on the active layer(s). No parameters.

Utilities > Step and Repeat Image Order

nc_exp_nc_SR_order@ SROrderSequence

Specifies the NC output pattern order for Panelized stepped images.

Values for SROrderSequence:

0 - left to right, then top to bottom


1 - left to right, then bottom to top
2 - right to left, then top to bottom
3 - right to left, then bottom to top
4 - top to bottom, then left to right
5 - top to bottom, then right to left
6 - bottom to top, then left to right
7 - bottom to top, then right to left

nc_exp_nc_use_SR@ 1

Specifies NC output format will include step and repeat instructions for Excellon and Seib&Meyer formats. 1
= yes, 0 = no.

Pag. 24 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Utilities > Teardrop

util_teardrp1@

Starts the teardrop command.

teardrop_set@ #,#,#

Specifies the teardrop settings to use:

The first # is the function to use:


0= delete teardrops
1= use pad teardrops
2= use line teardrops

The second # is the percent to multiply the radius for line teardrops (not used for pads teardrops). Maximum
value is 400 (400%).

The third # controls the DRC (0=don't do DRC, 1=do DRC).

axy@ X,Y
axy@ X,Y

Defines the rectangular selection window to process. (Coordinates of two opposite corners of the rectangle)

Pag. 25 di 25
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
View Menu Macros

All Layer Bar Status Bar


Back Side Out Tool Bar
Composite Pan Tool Bar Help
Film Box Panoramic Window
Fixture Extent Redraw With Compensation
In Rotate

View > All

view_all@

Zooms out to view extents of design.

View > Back Side

view_backside@ #

Useful for viewing solder side of design.


1 = view back side of data
0 = normal view

View > Composite

view_composite@

This is a toggle, meaning that each time the command is executed it changes the state from normal to
composite view. You may change the composite being viewed using setcompo@ command.

View > Film Box

view_filmbox@

Views the extents of the filmbox on screen (shows placement of data within box). This is a toggle, meaning

Pag. 1 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
that each time the command is executed it changes the state from filmbox on/off.

View > Fixture Extent

view_window@
axy@ -3000.0000,-3000.0000
axy@ 8000.0000,8000.0000
back@

Views a test fixture on screen. Coordinates are the opposite corners of a window drawn around the test
fixture, so that the entire fixture appears in the workspace, zoomed-in as closely as possible.

These coordinates may be obtained in this manner: use the height and width value assigned to the test
fixture by your macro by the bn_fixture_width@ & bn_fixture_height@ commands, determine the
centerpoint of the database by using the database extent queries, and add or subtract 1/2 of the
width/height value from this centerpoint to obtain the end coordinates:

Example

bn_fixture_width@ is 20 inches (20000 mils)


bn_fixture_height@ is 22 inches (22000 mils)

visminx! & viminy! are 0, 0 and vismaxx! & vismaxy! are 10,10 inches (1000,1000 mils) - giving a center
point of 5,5 inches (500,500 mils)

To determine the lower-left corner of the view window: subtract half the width (10 inches) from 5X and half
the height (11 inches) from 5Y, which yields a lower left point of -5,-6 inches.

Repeating same process for upper corner results in an upper coordinate of 15, 16 inches.

Finished view_window@ would look like this:

view_window@
axy@ -5000.0000,-6000.0000
axy@ 15000.0000,16000.0000
back@

View > In

view_zoomin@
axy@ 1875.0000,4050.0000
end@

Zooms database view in one level, at given coordinates. Commands may be repeated to zoom further levels.

Pag. 2 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
View > Layer Bar

view_lyrbar@

Turns layer bar off /on. This is a toggle, meaning that each time the command is executed it changes the
state.

View > Out

view_zoomout@
axy@ 2525.0000,3950.0000
end@

Zooms database view out one level, at given coordinates. Commands may be repeated to zoom further
levels. (opposite of View > In command).

View > Pan

view_pan@
axy@ 4700.0000,3475.0000
back@

View > Panoramic

view_panoramic@

Opens a view window showing the database in relation to the workspace. This is a toggle, meaning that each
time the command is executed it changes the state.

View > Redraw

view_redraw@

Pag. 3 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...
Refreshes all data on screen.

View > Rotate

view_rotate@ #

Will show the view of your data rotated counterclockwise by the # of degrees specified: 0, 90, 180, 270. (0
sets it to the normal view.)

View > Status Bar

view_statbar@

Turns the Status bar on or off. This is a toggle, meaning that each time the command is executed it changes
the state.

View > Tool Bar

view_toolbar@

Turns the toolbar on or off. This is a toggle, meaning that each time the command is executed it changes the
state.

View > Tool Bar Help

view_toolbarhelp@

Turns tool bar help display on and off. This is a toggle, meaning that each time the command is executed it
changes the state.

View > Window

Pag. 4 di 5
mk:@MSITStore:c:\programmi\downstream%20technologies\cam350%2010.1\camnt95.chm::/Macro_Menu/FabFa...

view_window@
axy@ 1375.0000,5350.0000
axy@ 3300.0000,3175.0000
back@

Zooms workspace to a designated rectangular area of the database. The coordinates given represent the two
opposite corners of the rectangle being viewed.

View > With Compensation

There are no macro commands for this feature.

Pag. 5 di 5
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/M...
Sample Macros Provided with the CAM350 Software

To show the versatility of the macro language, as well as to help our customers increase their productivity,
several macros (.SCR files) are provided with the application. Following is a brief description of each file. We
recommend you open any macro you wish to use in a text editor to view any comments that appear in them.
These comments contain instructions and descriptions of sections in the macros.

Apersort-V7.scr Script sorts all apertures in the database, as well as compressing the aperture table to
remove unused apertures.

Autodim.scr This script allows the user to add mechanical dimensions to a database using either linear or
datum techniques.

ColorControl.scr This script allows the user to set the layer colors automatically by layer type.

Drl_lgnd.scr Creates a drill "legend" table of all the used drill tools in the NC Tool Table.

Layerord.scr This macro scans the layer tags and builds the proper stack up.

Pads_drill.scr PADS outputs a separate drill table from their drill file. This script reads in the table file
(*.rep) and sets the NC Tool Table based on that information.

ShowEachLayer.scr Allows the user to examine the individual layers in a design by toggling through
them, displaying only the active layer.

Simple1.scr An example of a record/play back macro.

Simple2.scr A simple macro that asks the user questions.

Simple3.scr A macro demonstrating the capabilities of macro Forms.

Textins.scr This Macro will read any ASCII text file and insert the text into a database at a location chosen
by the user.

Pag. 1 di 1
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/O...
Obsolete Macros and Their New Equivalents

As the CAM350 software has evolved, it has been necessary to replace old macro commands and database
queries with new ones. In order to assist users who are using scripts that contain those macros, following is a
list of obsolete macros & database queries, and their new equivalent command(s). The hyperlinks will take you
to the Macro Language Guide topic where the alternative macro command is discussed.

ALL Editors

Obsolete Macro Alternative


l Composite layer type (macro None
layer type 5)
l Plated Drill layer type (macro Replaced by NC Data layer (21)
layer type 9)
l Mill layer type (macro layer type Replaced by NC Data layer (21)
10)
l Unplated Drill layer type (macro Replaced by NC Data layer (21)
layer type 15)
l edit_selectall@ edit_selectall2@

CAM Editor

Obsolete Macro Alternative


l setacidtrapparms@ setacidtrapparms1@
l setacidtrapfix@
l setsliverparms@ setsliverparms1@
l setsliverfix@
l set_layercompareparms@ set_layercompareparms1@

l drc_trktrk@ drc_Set_Trk2Trk_Test@
drc_Set_Trk2Trk_Val@
drc_Set_Trk2Trk_Dcode@
See Analysis > DRC
l drc_trkpad@ drc_Set_Trk2Pad_Test@
drc_Set_Trk2Pad_Val@
drc_Set_Trk2Pad_Dcode@
See Analysis > DRC
l drc_padpad@ drc_Set_Pad2Pad_Test@
drc_Set_Pad2Pad_Val@
drc_Set_Pad2Pad_Dcode@
See Analysis > DRC
l drc_outline@ drc_Set_Outline_Test@
drc_Set_Outline_Val@
See Analysis > DRC
l drc_mintrk@ drc_Set_MinTrk_Test@
drc_Set_MinTrk_Val@
drc_Set_MinTrk_Dcode@
See Analysis > DRC
l drc_minpad@ drc_Set_MinPad_Test@
drc_Set_MinPad_Val@
drc_Set_MinPad_Dcode@
See Analysis > DRC
l drc_redunpad@ drc_Set_RedundPad_Test@
See Analysis > DRC

Pag. 1 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/O...

l drc_anringpaddata@ drc_Set_Drill2Pad_Pad_Lyr@
See Analysis > DRC
l drc_anringmaskdata@ drc_Set_Drill2Mask_Mask_Lyr@
See Analysis > DRC
l drc_anringdrilldata@ drc_Set_Drill2Mask_Drill_Lyr@
drc_Set_Drill2Pad_Drill_Lyr@
See Analysis > DRC
l drc_anringpadmask@ drc_Set_Pad2MaskTop_Test@
drc_Set_Pad2MaskTop_Val@
drc_Set_Pad2MaskBot_Test@
drc_Set_Pad2MaskBot_Val@
See Analysis > DRC
l drc_anringdrillmask@ drc_Set_Drill2Mask_Test@
drc_Set_Drill2Mask_Val@
See Analysis > DRC
l drc_anringdrillpad@ drc_Set_Drill2Pad_Test@
drc_Set_Drill2Pad_Val@
See Analysis > DRC
l drc_drillwopad@ drc_Set_DrillWOPad_Test@
See Analysis > DRC
l drc_padwodrill@ drc_Set_PadWODrill_Test@
See Analysis > DRC
l drc_drltrk@ drc_Set_Drill2Trk_Test@
drc_Set_Drill2Trk_Val@
See Analysis > DRC
l edit_layerreorder@ init_layer_reorder@
change_layer_position@
apply_layer_order@
l export_orbotech@ None. (see Superceded Features).
l import_orbotech@
l starved_thermals_window@ starved_thermals_window2@

l starved_thermals_layer@ starved_thermals_layer2@

l add_comp@ add_component@

l addcomp@ addcomp_makecmp@

l addcomp_ok@ None. (see Add > Part)

l panel_spread@ * all Utilities > Panelization macro commands have been


l panel_spacing@ * superceded by the Panel Editor Panelization Menu macro
commands.
l panel_merge@
l set_panel_dimensions@
l panel_dimension@ *
l set_panel_border_spacing@
l panel_outline@ *
l set_minimum_image_spacing@
l panel_copies@
l add_panel_symbol@
l panel_mode@
l del_panel_symbol@
l panelization@ *
l del_all_panel_symbols@

* = these commands are still l edit_panel_symbol@

used by the Utilities > l set_panel_symbol_loc@


Panelization > Autofilm l set_panel_coupoon_angle@
command, but are no longer l set_panel_symbol_ncrank@
acceptable for generating
l set_panel_image_rotation@
true panels.
l set_panel_image_spacing@

l set_panel_image_copies@

l set_panel_use_spacebetween@

l set_panel_compute_copies@

Pag. 2 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/O...

l set_panel_use_autocalc@
l do_panel_autocalc@
l place_panel_symbols@
l add_panel_image@
l del_panel_image@
l del_all_panel_images@
l edit_panel_image@
l do_panel_renderimages@
l vent_type@ Panel Editor Panelization > Venting Macro Commands
l ventfillpattern@ l add_panel_vent@

l vent_borderlayer@ l del_panel_vent@

l vent_layera@ l del_all_panel_vents@

l vent_layerb@ l edit_panel_vent@

l vent_offset@ l add_panel_vent_layer@

l ventfilldcode@ l del_panel_vent_layer@

l ventpatdcode@ l del_all_panel_vent_layers@

l ventpatangle@ l set_panel_vent_offsetfromedge@

l ventpatstep@ l set_panel_vent_offsetfromimages@

l ventpatoffset@ l set_panel_vent_offsetfromsymbols@

l Vent_Galvanic@ l set_panel_vent_galvanicwidth@

l Vent_DataOffset@ l set_panel_vent_patternoffsets@

l vent@ l set_panel_vent_galvanic@

l set_panel_vent_offsetpattern@

l set_panel_vent_outline@

l set_panel_vent_nopartials@

l set_panel_vent_polarity@

l set_panel_vent_pattern@

l set_panel_dotpatternline@

l set_panel_dotpatternlineenable@

l set_panel_dotpatternystep@

l set_panel_hatchpatternline@

l do_panel_rendervents@

l explode_panel@ explode_flattenpanel@ in Panel Editor

NC Editor

Obsolete Macro Alternative


l change_drill@ nc_edit_change_tool@, nc_change_tool@

l drill_setup@ nc_add_tool@,nc_set_tool_type@,etc...

l drill_setup1@ nc_add_tool@,nc_set_tool_type@,etc...

l drill_setup2@ nc_set_tool_id@

l drill_start_reassign@ None

l drill_end_reassign@ None

l drill_setlegendstosize@ None

l drill_loadlib@ nc_load_table_replace@

l drill_savelib@ nc_save_table@

l set_adddrill@ set_current_toolref@

l set_fromdrill@ None

Pag. 3 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Macro_Menu/O...

l set_todrill@ None

l chgdrill_ok@ None

l chgdrill_cancel@ None

l mill_createdata@ nc_add_mill_path@

l mill_addtool@ nc_add_tool@

l mill_deletetool@ nc_delete_tool@

l mill_modifytool@ nc_set_tool_type@
nc_set_tool_size@
nc_set_tool_infeed@
nc_set_tool_outfeed@
nc_set_tool_feedrate@
nc_set_tool_rpms@
nc_set_tool_maxhits@
nc_set_tool_linktool@
nc_set_tool_exportorder@
nc_set_tool_display_color@
nc_set_tool_display_size@
nc_set_tool_cap@
nc_set_tool_shape@
nc_set_tool_usesize@
l mill_modifytoolid@ nc_set_tool_id@

l gerber2drill@ nc_gerber_to_drill@

l gerber2drill_unplated@ nc_gerber_to_drill@

l gerber2mill@ nc_gerber_to_mill@

l set_active_drilltbl@ nc_assign_tool_table_to_layer@

l view_drillpath@ view_nc_annotate_drill@

l nc_exp_nc_use_SR@ None. (see Superceded Features).

Pag. 4 di 4
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Panel Creation

The Panel Editor allows for the fast creation of efficiently-panelized designs, complete with test coupons,
registration holes, vent patterns, title boxes, etc. (generated using the new Symbol Editor) The original one-up
design, and the panelized result, are separate entities that can be manipulated at any time before, during, and
even after the process.

This tutorial provides you with an overview of how to use the Panel Editor. Each setup you create may be
saved as a file that can be used to panelize subsequent jobs. Multiple panel formats can be saved for later
execution as "one button", fully-automatic routines. Or you can chose to prepare individualized panels on a job
by job basis: the flexibility exists for both approaches.

Note: It is highly recommended you read and complete the Symbol Creation tutorial before reading this
tutorial, as a number of the symbols created in the Symbol tutorial are used to set up your example panel.

Creating a Panel
Panelizing a Job

Creating a Panel

A panel can be generated using the Panelization Menu commands in the Panel Editor. Each menu command
controls a specific area of the panel, from setting up the panel's physical layout to actually generating the
panelized images and creating the venting patterns. The panel setup may be reconfigured at any time, even
after panelization has occurred.

Setup Symbols

Before beginning a Panel Setup it is advisable to create all the symbols you are likely to require in your panel
(s). Symbols, such as coupons, will be placed at fixed locations in the panel during a panel set up. They may be
placed on an individual basis when, you actually panelize a job (using Add > Symbol), but it is generally
preferred you have a symbol library available for the variety of panels you are likely to need to set up: most
shops have a fixed set of symbols they use for their panels.

If you completed the manual symbol creation section of the Symbol Creation tutorial, you will already have a
symbol library to draw from for this tutorial.

Setup Panel

It's best to begin a fresh panel setup with no database loaded in the application. This will give you a blank slate
to work on. Enter the Panel Editor using Tools > Panel Editor. In the editor you will notice a number of similar
functions to the CAM Editor - this is intended to give you much of the functionality of the main editor for all
panel-level data. Note that panel data includes such things as symbols, venting patterns, etc, but doesn't not
include the data (draws, flashes, drills, etc). in the one-up image you are panelizing. Once in the Panel Editor,
you will not be able to make edits to the database itself without a) exiting to the CAM Editor (all changes there
will reflect in the Panel Editor) or b) exploding the Panel using Edit > Change > Explode > Flatten Panel
(once you explode a panel, however, there is no recourse! The panelized data will lose its panel intelligence and
become one-up data, not step & repeat images).

Inside the Panel Editor you will notice 3 buttons on the toolbar: Setup, Create and Venting. (These commands
are also available in the Panelization menu). These buttons show the basic steps needed to panelize a job. .
Begin by clicking Setup.

This tutorial does not exhaustively cover each individual command in the Setup dialog, but will go over all the
required steps to make a generic panel setup. For more information, see Panelization > Setup.

Set Panel Size

You will need to set the panel size for your generic panel. Size may be set as a function of the specific boards
your shop receives, or as a general size for all jobs. The Size Tab allows you to set this information, as well as
the spacing clearances for all step & repeat data in the panel.

Pag. 1 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
1. Set the panel size to 12" x 12"

2. Border spacing controls the minimum distance step images will be created from the panel border. Set this
value to 2"

If you want to custom tailor this border spacing for your panel, check the Advanced box and enter spacing
values from all four sides of the panel.

3. Set the image spacing value to .5". This controls how close step images may be generated in a panel,
allowing you to maximize the panelized images or leave adequate clearance for venting patterns. Your panel
will now look like this:

Note: Use the checkbox Automatically Update FilmBox to keep the Film Box definition in sync with the
Panelization box definition. The default is to keep the Film Box and Panelization Box matched. If you chose
not to keep the Film Box and Panelization Box in sync, you can use the Edit > Change > Origin commands
to manage the panel origin and film box origin separately. Use the File > Setup > Film Box command to
define the size and location of the film box.

Add Pinning Holes

Pinning Holes are the most basic Symbol used to set up your panel. Each fabrication shop typically has its own
pinning hole unique to its production processes. For our purposes, set up a generic series of holes, as outlined
below:

1. Click on the Pinning Hole tab

2. Click the Add button to select a pinning hole Symbol to use in the panel. Use the symbol "pinhole". This is
available in the Symbol tutorial library (this library should already be set in your application from the Symbol
Creation tutorial; if not, see the tutorial for how to specify the symbol library to use).

3. Now you'll need to set the placement points for the pinning hole you're adding. You may set these as
absolute or relative coordinates from the edge of the panel. Use the coordinates for the first pinning hole
below, then use Add again to insert an additional 4 holes, at the given coordinates:

Hole #1 Hole #2 Hole #3 Hole #4 Hole #5


x1", x1", x6", x11",y6" x5",y11"
y5" y6" y1"

Relative coordinate mode allows you to set the pinning holes a given distance from the edge of the panel,
regardless of the panel size - the symbols will move automatically should you change the size.

Pag. 2 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Note: You can also set the rotation of each pinning hole by using the Rotation drop-down list. However,
rotations are limited to 90 degree increments and may only be useful for special pinning hole designs.

4. Pinning holes may be added as Primary (plated) or Secondary (unplated/tented) drill hits by checking the
appropriate box. When done, your panel preview should look like this:

Add Fiducials

Fiducials are required for film alignment/collation. The process and commands are essentially the same as for
Pinning Holes, with the exception of the drill settings - fiducials have no drills, so these commands do not apply
to them.

1. Click on the Fiducial tab.

2. Click the Add button to select a fiducial symbol to use in the panel: use "fiducial" from the symbol library.

3. Place several fiducials around the panel., as indicated by these coordinates:

Hole #1 Hole #2
x7", y1" x5",
y11"

When done, your panel preview should look like this:

Add Title Block

Pag. 3 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
The Title Block tab is used to enter your title block. Commands are the same as for Pinning Holes and Fiducials,
again with no need for a drill option. The title block in our sample panel will be offset from the lower left corner.

1. Click on the Title Block tab.

2. Click the Add button to select a title block Symbol to use in the panel: use "title_block".

3. Place your Title Block at x2.5", y1.4". When done, your panel preview should look something like this:

Add Coupons

Finally, add the coupon(s) required for your panel. For our example panel, we will use one drill coupon, offset
from the lower right corner.

1. Click on the Coupons tab.

2. Click the Add button to select a coupon Symbol to use in the panel: use "firstlast".

3. Place your Coupon at x11", y3". Select Primary from the NC Layer check boxes, to make sure these drill hits
will be plated hits.

4. In this case, we also need to rotate the coupon to avoid overrunning the step images: use a 90 degree
rotation. When done, your panel preview should look something like this:

Pag. 4 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Save & Load Panel Setup -

Once you've verified that all symbols have been added correctly, it's time to save the final panel. You can save
any number of panel setups in the application directory, under the *.pan extension. These setups can be loaded
for any design you wish to panelize. You may make case by case adjustments to the setups as necessary, and
still be assured that you have a clean copy saved for future jobs.

1. Click the Save button. The Save Setup As dialog box appears with a list of all current panel setups.

2. Type a setup name in the top field (it isn't necessary to add the .pan extension - the system will assign it
automatically) or select a previous panel setup from the list, if you wish to overwrite it. For this tutorial, add
the new panel setup as "tutorial.pan"

3. You may now test the saved setup by exiting the Setup dialog and reopening it. Notice the dialog box still
shows the current setup you were working on.

4. Change the panel size to 24" x 20".

5. Click Load and select "tutorial.pan". The size values you changed will be overwritten by the saved panel
setup.

Panelizing a Job

Now that you've created your basic panel setup, you're ready to begin panelizing a job. Panelization involves
adding the desired step images to your panel, as well as setting up venting patterns and exporting the final
result.

Import Gerbers and Prepare Database

It is assumed you know how to import and prepare standard Gerber files. If not, refer to the Import > Gerber
Data and Tables > Layers commands to import and tag your files properly. To panelize a sample design in this
tutorial, please use either the sample Gerber files located in the application's Demos directory (use must import
& prep these), or use the sample .CAM database, preview.cam, under the same directory (this file has been
prepped).

In addition to the normal file preparation, you must set some panel-specific items:

Panelization Anchor

Each step image in the Panel Editor has a "handle" or anchor which will be used to place the image in the panel,
as well as calculate rotations, etc. This anchor point is set in the CAM Editor, using Edit > Change > Origin >
Panelization Anchor. You may assign the point anywhere within the one-up image. The anchor point appears
on screen briefly to show you its new location, but disappears after you exit the command.

You only need to set the anchor point if you want to change its default location - if no new anchor is set in the
CAM Editor, the origin point (0,0) is assumed to also be the panel anchor in the Panel Editor. For our purposes,
leaves this as the default.

Pag. 5 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
One-Up Border

In addition to an anchor, each step image has a "border" which acts as the outline when calculating panel
spacing between images, as well as protecting the step images from venting patterns. This border defaults to a
rectangular shape around the extents of the one-up image in the CAM Editor (visible as a bounding box in the
Panel Editor).

If you have a complex board outline you wish to use for this purpose, you can set the border to a specific shape
using the Utilities > Draw To One-Up Border command in the CAM Editor. The command allows you to select
any continuous line on the database's "border" layer as the one-up border. In the case of preview.cam, we'll
stick with the default border.

Layer Stackup

The layer stackup controls the placement of symbol data on specific layers in your panel. If you don't select a
layer stackup for your job, you will be prompted to enter one before you can create your panel. It's a good idea
to get into the habit of setting your layer stackup prior to entering the Panel Editor, using Tables > Layer Sets
> Layer Stackup. If you do forget, you may also set the layer stackup under the same command in the Panel
Editor, at any time prior to panelization. A typical stackup may look like this (use this for preview.cam):

See also the Symbol Creation tutorial.

Viewing Step Images

While working on a panel, you have a few options on how to display the step images contained in the panel. As
a default, step images appear as a rectangular box with the number of the step image inside. This indicates that
step images themselves cannot be edited in the Panel Editor (you cannot change the contents of a step image).
If you'd like to get a more visual representation of the step images, in the Panel Editor you may select Settings
> View Options > View Circuit Images, which displays all internal data in each step image. This gives you a
better feel for how the data in each image orients compared to its neighbors.

However, on larger step images, this amount of graphical data in the panel can slow redraw times significantly.
In those cases you may select the BitBlt Circuit Images view option under the main View Circuit Images option -
this will redraw step images in a much faster mode. The trade-off is in accuracy: while the normal mode displays
all data as it exists in the step images, this mode is less graphically accurate, depending on screen resolution,
etc., so is better suited for getting an overview of the data, rather than a 100% accurate image.

Load Panel Setup

Once you've prepared the database, you're ready for panelization. Go to the Panel Editor and select the Setup
button from the toolbar or Panelization > Setup from the menus. You'll be loading the sample panel you
created, so hit the Load button and select "tutorial.pan"

If you needed to make adjustments to the panel setup (increase panel size, etc). you can make those changes
now. For this tutorial, leave the setup as is, and exit the dialog.

Pag. 6 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
NOTE: CAM350 supports alternatives for importing Panel Template data. In the Panel Editor, you are able to
import Gerber data using the File > Import > Gerber Data command. You can import drill and mill data using
File > Import > Drill Data and File > Import > Mill Data. Further, you can merge panel data template
using the File > Merge Panel command.

Create Panel

The Create command places the step images in the panelized job, much as the old command Utilities >
Panelization > Panelize did in previous versions of the software, but allows more flexible control over the
images.

You can choose to allow the system to calculate some of the values in the panel: either 1) the image offset
values, or 2) the number of step images in the panel. Unlike the old command, you can specify rotations for the
images, or use SpreadSheet mode to have complete control over the placements of each individual step image.

Note: When switching between AutoCalc and SpreadSheet modes, be aware that all changes you made in one
mode will be discarded when you switch to another mode! You cannot return and expect your previous values to
remain.

AutoCalc Mode

By default Create operates in AutoCalc mode, in which the system generates some of the values in the panelized
job. As noted, these are the between/offset values for the images, or the number of step images in the panel.
Rotation will allow you to change the orientation of the step images, but only works on all step images and only
in 90 degree increments.

1. Determine if you wish to have the system calculate Panel Size, Border Spacing, Image Spacing or Number of
Copies and select the appropriate Compute radio button.

2. If you selected Copies, you will need to fill in the Spacing information:

Between Select the x & y spacing between the panelization borders of the step images

Offset Specify an offset distance between the data in the step images themselves (i.e. trace to trace)

3. Set the Between Spacing values at .5"

4. If you had selected Copies, you would have specified the number of copies in the x- & y-axis: the results of
your selections appear in the panel preview.

5. You may also set the angle of the step images. Click on the 90 degree radio button and notice how the

Pag. 7 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
images all rotate to the new position. (In this case the rotation doesn't yield any extra step images in the
panel).

6. If you need to make any adjustments to the panel Setup, click the Setup button - this brings up the Setup
dialog box, where you can make changes as described in the first section of this tutorial.

7. When you have set all the step image values, click the Create button to generate the panelized job:

SpreadSheet Mode

Spreadsheet mode allows you complete control over the placement of step images in the panel, but requires
more finesse than AutoCalc mode. You must set the x,y placement of each step image individually. You can set
each image's Rotation to any angle, though you will need to keep an eye on superimposing one image over
another accidentally.

1. SpreadSheet mode displays a table of the current images in the panel. You may set the values for any of the
image's characteristics by typing in the appropriate field. All coordinate values are absolute from the panel
origin (always the lower left corner of the panel). As a demonstration we'll be changing step images 1-4 in
this tutorial panel.

image 1 - set the rotation to 90 degrees and placement to x 4",y 2"

image 2 - leave the rotation, but set the spacing to x 3.9", y 2"

image 3 - set rotation to 90 degrees and x 10", y 2"

image 4 - finally, leave rotation, but set location to x 3.9", y 3.9"

Your final panel image should appear like this:

Pag. 8 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

2. Notice the orientation change did not give more space in this case, as the step images were only
reorganized. However there will be many cases where turning the images will free up additional space on the
panel for more step images.

In those cases, you can use the Add Image button to add additional images to the table: you will need to set
the rotation and location of the new image as you did for the others.

3. If you wish to decrease the number of step images in a panel, use the Delete Image button. A selection
dialog appears in which you can select individual or multiple step images (using the Shift or Ctrl keys) for
deletion.

4. Click the Create button to generate the panelized job:

Add Variable Text

Pag. 9 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
The next step is to define any Variable Text in your panel's symbols. Variable Text is a form of variable name
that you can replace with information in a panelized job. See the Symbol Creation tutorial for more information
on this topic.

1. Select Tables > Variable Text. The dialog will show all currently-defined variable text in the left-hand
selection list. You should see a list of all the variable text in the Symbol "title_block":

Note: preview.cam has no internal or positive layers. Therefore you do not need to fill in the Variable Text
pertaining to these layer types - symbols contain all potential Variable Text, even those variables used on
layers which don't exist in the current job. These entries cannot be deleted, as they are part of the original
Symbol's layout.

2. Fill in all the pertinent Variable Text in the dialog. Click on the text in the left-hand selection area and the
definition area to the right will activate.

Simply click in the definition area and begin typing your text. Use these values:

date today's date and time


job_no Job# 1234
layer_no_bot Layer 4
layer_no_neg_1 Layer 2
layer_no_top Layer 1
layer_type_bot bottom
layer_type_neg1 negative
layer_type_top top
Rev Rev A

3. Once you finish entering all of the Variable Text values, click OK to save the entries. All the Variable Text
contained in the title block will now be updated to the new definitions. Turn on layer 1 (top layer) for
example and view the results:

Each Variable Text entry has been replaced with its new definition. Toggle through the layers to make sure
all variable text is as you want it, and go on to the next process.

Add Venting

Pag. 10 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
You will now be adding venting to your panel. The Panel Editor make allowances for most major venting styles
and gives you complete control of each vent pattern on a layer-by-layer basis. Venting patterns may include
solid vents, dot-pattern and hatched vents, as well as robber bars to equalize the copper balance.

Positive Venting

This type of venting should be used on all positive layers (top, bottom, internal, etc). In preview.cam we will be
adding positive venting to the top and bottom layers.

Note: If you want your pattern to vent up to the border of each step image, be sure to set the one-up border as
described above.

1. Select Venting. Notice you have a choice of units to work in: Inches, MMs, or mils. Select mils.

2. In the upper left, under Vents, use Add to enter a new venting pattern.

3. Add the details of the vent pattern:

Offset from Panel Edge controls how close the venting will come to the edge of the panel. Set this value to
2000 mils (same as our panel border spacing - 2").

Offset from Images determines how close venting comes to step images. Use 50 mils - we want to get
relatively close.

Offset from Symbols Set this to 5 mils.

Pattern This drop-down list allows you to select a dot, hatched, or solid pattern. Pick Dot. Notice the Polarity
field highlights and a spread sheet for setting the pattern is opened.

Polarity Set this to Positive.

No Partials This check box determines if the vent pattern will include only whole dots. If this is selected the
venting pattern for the layer will be generated as a polygon - much the same way venting was created in
older versions of the application - leaving clearance areas around each step image's border. For our
purposes, leave this unchecked.

Tip: If you select the No Partials option, you must use Offset From Images and Offset from Symbols values
of at least half the shape's Width to insure the shape does not overlap the image edge. For example, if you
choose a round dot pattern with 0.06 width, the offset values should be at least 0.03.

Spread Sheet The dot pattern spreadsheet is set to the default pattern, using a 60 mil round aperture.
Leave these default values, but change the shape used to Square with the drop-down list.

4. Add the layers that will use this venting pattern: in Layers selection area (lower left), use the Add button and
select the top and bottom layers from the Layer List dialog box which appears. Your final venting pattern
should look like this:

Pag. 11 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

5. Click OK to exit the command.

6. Turn on only layer 1 (top). The venting will appear like this:

Robber Bars

Robber bars (or galvanic vents) are often added to top and bottom layers to balance the copper between them,
preventing over etching from occurring. You'll need to determine the existing copper balance before attempting
to fix it using robber bars. This can be done using the Analysis > Copper Area command. Once you've
determined that information, you can either calculate out the needed copper to be added, and determine the
subsequent size of the robber bars to add, or do some trial and error additions of robber bars until the balance is

Pag. 12 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
met.

For our purposes, you'll be adding a fixed bar size, assuming the design you're panelizing has no significant
copper difference between the two layers.

1. Select the Panelization > Venting command.

2. Under Vents, click Add to add a new pattern.

3. Select the Pattern first: pick Solid. Notice that the Robber Bar option appears in the upper right, and the
Polarity dropdown list is grayed out. Click the Robber Bar check box.

4. Set the Offsets for the venting pattern:

Offset from Panel Edge controls how close the venting will come to the edge of the panel. Set this value to
1000 mils.

Robber Bar Width Notice that this field has changed from the "Offset from Images" settings. It now
determines how wide the robber bar being added is. Set this to 1000 mils, or a 1" robber bar.

Offset from Symbols Set this to 5 mils.

5. Under Layers, select top and bottom from the list. Your final Robber Bar pattern should look like this:

6. Click OK. The top layer will now display the robber bar at the edge of the previous venting pattern:

Pag. 13 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

Notice how the bars clearance around all Symbols - the symbol border protects the symbols from venting
patterns.

Negative Venting

Negative venting is used on all layers which will be plotted with reverse polarity (negative planes). You will be
adding this venting to the two negative layers in the design.

As with positive venting, setting the one-up border allows you to vent to the exact shape of the board's outline.

Negative layers should take advantage of the Offset command to stagger their venting patterns, allowing them
to interlock and perform better venting.

1. Select Panelization > Venting.

2. In the upper left, under Vents, use Add to enter a new venting pattern.

3. We will add the negative venting for the first negative layer in the database (layer 2):

Offset From Panel Edge Set to 900 mils

Offset From Images Set to 0.

Offset From Symbols Set to 5 mils.

Pattern Select Hatched pattern. (The hatch-pattern spreadsheet appears).

Polarity Set to Negative.

Spread Sheet You can set the hatch-pattern spreadsheet to any desired combination of hatched lines (again

Pag. 14 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
similar to old versions of the application). Set the hatch pattern to a single 45 degree line: Width 200 mils,
Step 500 mils, and Angle 45 degree.

Your final venting pattern should look like this:

4. Under Layers, select only layer 2. The first hatch pattern is done.

5. Create the second, offset hatch pattern for layer 3. The settings are the same as above, with these
exceptions:

Polarity Set to Positive.

Click the Offset check box.

6. Add layer 3 to the pattern:

7. Click OK to generate the two patterns:

Pag. 15 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

Notice how the two layers interlock their venting patterns.

8. The patterns are not complete yet. They appear correct since they are displayed in positive mode. Use the N
key to toggle each layer's polarity and you'll see the hatch patterns have created dead-ends for the venting
just at the border offset of the panel. To fix this, you must add positive venting where the hatched venting
meets the border offset zone, creating a flow area for the venting. To do so, place a Robber Bar on both
negative layers, with these settings:

Robber Bar Width 1000 mils

Offset from Symbols 5 mils

9. Select both negative layers in the Layers > Add command.

10. Click OK. The new robber bars will appear positive, but using the N-key you can see they created the desired
clearance area:

Pag. 16 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

Save Database

Before you begin exporting files, it's a good idea to Save your design as a .CAM file. This assures all panel and
symbol information used in your panelized job will remain with the original design - you can refer back to
the .CAM file to make any changes to the panel without having to start the panelization process over again.

You may save your file in the Panel Editor by using File > Save PCB or File > Save As PCB, or exit to the CAM
Editor and save it as you would normally.

In the Panel Editor, if you wish to overwrite the original preview.cam file (not recommended), select File >
Save PCB. Skip this step, as you should retain the original preview.cam file for other demonstration purposes.

OR

Use File > Save As PCB, which functions the same as the File > Save As command in the CAM Editor. The
Save As dialog appears and you are prompted to enter a name for a new file: use "preview_panel.cam"

Export Panel

Once you have completed the panel creation process, it's time to export the files for plotting. There are several
export options in the Panel Editor. Once you have panelized a job you may export it as individual files (Gerber
data, composites, drill & mill data), or as a complete panel to some CAD systems (DXF, ODB++, GenCAD).

Export Gerber

Exporting a panel as Gerber files is essentially the same as exporting individual layers using the standard File >
Export Gerber Data command. Refer to the File > Export Panel > Gerber Data command for details, with
the following caveats:

Pag. 17 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Panel Gerber layers will be flattened on export: all symbol and panel data will be exploded and exported as
normal Gerber data, while the step & repeat codes for the step images themselves will be retained (if
exported in a Gerber format other than 274D). If you reimport these files, you will not get an intelligent
panelized database, as you do by saving the .CAM file.

Layers containing venting patterns will be exported as composites. If imported back into the application,
they appear as multi-layer composites, which must be viewed using View > Composite or Tables >
Composites.

Export Composites

If your panel contains any composites from the original one-up design, you must export these using File >
Export Panel > Composites. Again, this command is essentially the same as the CAM Editor equivalent, with
the exceptions noted above.

Export Drill/Mill Data

NC Data files are exported in the same fashion as they are in the CAM Editor, with the exception that the
drill/mill files will contain any panel drills (from symbols, etc), as well as all drills used in the step images of the
panel.

Refer to File > Export Panel > Drill Data & File > Export Panel > Mill Data for details.

Export DXF

Functions the same as its CAM Editor equivalent.

Refer to File > Export Panel > DXF for details.

Export ODB++

Functions the same as its CAM Editor equivalent.

Refer to File > Export Panel > ODB++ for details.

Pag. 18 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Panelization_M...
Overview of the Panelization Process

The Panelization Menu commands are used to create a multiple-board array for manufacturing. Since
Panelization uses Step & Repeat codes, it does not make the database any larger than the one-up image. You
can "explode" a panel into raw data using Edit > Change > Explode > Flatten Panel. However, this will
increase the database size.

All editing of panelized data (and the panel itself), must be made in the Panel Editor.

Prior to panelizing a database, it is assumed that the operator has prepared the data for being panelized. Please
be sure to follow the steps below to properly panelize data:

Command Sequence:

In the CAM Editor

1. Import all the Gerber layers or import a CAD design.

2. Make sure all the layers are "tagged." Refer to Tables > Layers for instructions on how to tag your layers.

3. Use the Edit > Layers > Reorder command to set the layer sequence. Although not specifically required, it
helps production if all your jobs have the same "stackup". This is also a good time to set the layer colors to
match your internal standard.

4. Make sure that any data outside the one-up image is deleted.

All data will be panelized, so make sure templates and title boxes are removed. Use Edit > Layers >
Remove to remove any layers that do not pertain to the result.

5. Use Tools > Panel Editor to open the Panel Editor

In the Panel Editor

1. If you will be adding symbols to the panel, you first need to create those using the Symbol Editor.

2. Select Panelization > Setup. The Panel Setup dialog box appears.

3. After setting up the panel configuration, use Panelization > Create to generate a panel for your specific
database.

4. Select Panelization > Venting to generate a venting pattern for your panel.

5. After the panelization process is complete, save your panel using the File > Save PCB or File > Save As
PCB commands, or export the panel for manufacture, using the variety of options under the File > Export
Panel command.

6. When you are finished with the panelization process, select File > Exit Panel Editor or the Return To CAM
Editor button (on the Task Bar) to exit the Panel Editor.

Pag. 1 di 1
file://C:\Documents and Settings\Amministratore\Impostazioni locali\Temp\~hhBC8B.htm

Overview of the Panelization Process

The Panelization Menu commands are used to create a multiple-board array for manufacturing. Since Panelization
uses Step & Repeat codes, it does not make the database any larger than the one-up image. You can "explode" a panel
into raw data using Edit > Change > Explode > Flatten Panel. However, this will increase the database size.

All editing of panelized data (and the panel itself), must be made in the Panel Editor.

Prior to panelizing a database, it is assumed that the operator has prepared the data for being panelized. Please be sure
to follow the steps below to properly panelize data:

Command Sequence:

In the CAM Editor

1. Import all the Gerber layers or import a CAD design.

2. Make sure all the layers are "tagged." Refer to Tables > Layers for instructions on how to tag your layers.

3. Use the Edit > Layers > Reorder command to set the layer sequence. Although not specifically required, it helps
production if all your jobs have the same "stackup". This is also a good time to set the layer colors to match
your internal standard.

4. Make sure that any data outside the one-up image is deleted.

All data will be panelized, so make sure templates and title boxes are removed. Use Edit > Layers > Remove to
remove any layers that do not pertain to the result.

5. Use Tools > Panel Editor to open the Panel Editor

In the Panel Editor

1. If you will be adding symbols to the panel, you first need to create those using the Symbol Editor.

2. Select Panelization > Setup. The Panel Setup dialog box appears.

3. After setting up the panel configuration, use Panelization > Create to generate a panel for your specific database.

4. Select Panelization > Venting to generate a venting pattern for your panel.

5. After the panelization process is complete, save your panel using the File > Save PCB or File > Save As PCB
commands, or export the panel for manufacture, using the variety of options under the File > Export Panel
command.

6. When you are finished with the panelization process, select File > Exit Panel Editor or the Return To CAM
Editor button (on the Task Bar) to exit the Panel Editor.

Panelization > Setup

The Setup command creates a panel configuration, by setting the placement of the symbol and structure of a panel.
Each tab in the dialog box controls a separate set of information for the panel you create. All tabs display a preview
window which allows you to view the proposed layout for the panel. In addition, each tab allows you to specify the
unit format for the placement values of the symbols (either in Inches or MMs).
Pag. 1 di 6
file://C:\Documents and Settings\Amministratore\Impostazioni locali\Temp\~hhBC8B.htm
Note: You may click Cancel at any time during the Panel Setup to quit this function; however any panel settings you
have made will not be recorded.

Command Sequence:

1. Select Panelization > Setup, or click the Setup button in the Tool Bar. The Panel Setup dialog box appears.

2. Select the tab for the area you wish to modify.

Size This section allows you to control the physical size and layout of your panel. Panel size may be set, as well as
the spacing multiple images on the panel must maintain from the Panel Border (and from each other).

Coupons You can add various types of coupons to the panel using this section. These coupons may include text,
drill coupons, etc. You can determine the location of the coupon, either relative to the panel border, or absolute
from the lower left corner of the panel, as well as the rotation of the coupon relative to the panel border. Each
coupon must be placed as an individual instance - in other words, if your panel needs four drill coupons in all
corners, each coupon must be placed individually.

Title Block You can add a title block to a panel using this section. A title block is a block of text which states
particular information about the panel being produced. It generally lists the operator, number of layers, job &
revision, date of manufacture, as well which particular layer of the panel is on the film.

Location and placement controls are the same as for the Coupons Tab.

Pinning Hole These are manufacturing holes necessary to hold the panel for drilling or routing operations. This tab
allows you to place an unplated drill hit in the location appropriate to your manufacturing process. Again,
placement controls are similar to the previous two tab controls.

Fiducial Use this section to place one or more fiducials to assist in the manual alignment of film. Similar controls
to the other tabs exist to allow you to specify the placement point(s) for the fiducials.

3. For the Size Tab, you are given choices to set the physical properties of the panel and its multiple images:

4. Set the Panel Size by entering values in the for the X and Y coordinates in the Panel text boxes.

Note: Panel sizes up to 56" (~1422mm) per side are handled normally. Above that range, the panel origin defaults to
the center of the panel. Such panel sizes require the use of a special photoplotter to plot the panel.

l Define the Border Spacing . For more complete control of the border spacing, check the Advanced check box
and specify the exact spacing of the border for all four orientations: Left, Right, Top & Bottom.

l Minimum Image Spacing controls the minimum distance multiple designs must maintain from one another.
Type the distance in the two text boxes.

4. For all Other Tabs, the selection list on the left displays all (if any) currently used symbols in the panel.

5. To add a symbol to this list, click the Add button. The Select Symbol dialog box appears. Select the specific
symbol in the list which appears below the symbol type buttons: a preview of the symbol you select appears in
the upper right corner of the dialog. If this symbol is correct, click the OK button. Otherwise make another
selection, or click Cancel to return to the Panel Setup dialog box.

l Once you have selected a symbol to insert in the panel, you need to specify its placement in the panel.

Absolute placement allows you to specify the symbol's placement relative to the lower left corner of the panel.

Relative placement lets you to place the symbol offset from a specific edge of the panel, as determined by the
selection buttons. These buttons control the symbol distance relative to the horizontal (Left, Center, & Right)
and vertical (Top, Middle & Bottom) panel edges. Enter an offset distance for the symbol from each of these

Pag. 2 di 6
file://C:\Documents and Settings\Amministratore\Impostazioni locali\Temp\~hhBC8B.htm
edges.

Rotation can be used to specify the orientation of the symbol, relative to the placement point selected for it in the
panel.

NC Layer is only available for coupon and pinning hole symbols: this allows you to set the NC drill layer to use
for drilling these type of coupons. Use the radio button to select Primary (plated) or Secondary (unplated/tented).

l To remove a symbol you no longer want in the panel, select the symbol from the list and click Delete.

5. Click OK to close the dialog box.

Related Macro Command(s)

Panelization > Create

After setting up a panel configuration using the Panelization > Setup command, use the Create command to generate a
panel for the current design loaded in the application. This command allows you to specify the orientation of the
images in the panel and automatically calculates either the number of image copies in the panel, or a logical offset
based on an arbitrary number of images which you enter.

Note: Click Cancel at any time during the Panel Create to quit this function; however, any panel settings you have
made will not be recorded.

Command Sequence:

1. Select Panelization > Create, or click the Create button on the Tool Bar. The Parameters dialog box appears.

2. The panel size and border spacing are in the upper left corner of the dialog box. As in the Panelization > Setup
command, a preview pane to the upper right displays the current configuration of the panel. This are updated as
you change the panel settings.

3. Specify the units for the panel by selecting the Inches or MMs radio button.

4. Select the desired Image Rotation for the orientation of the panelized images: 0, 90, 180, or 270 degrees
counter-clockwise.

5. Underneath the Image Rotation is the AutoCalculate area. Click the Compute toggle button to specify which of
the major panel elements you would like the command to calculate for you:

l If your selection is Spacing, the command determines the optimal number and spacing for the panel images,
based on the number of copies you enter in the X & Y Copies fields.

l For the command to calculate the number of copies, you are required to enter a spacing value for the multiple
images: Between specifies the spacing between the border of one image to another. Offset specifies the spacing
between the same element in each image, such as their center points.

6. As an alternative to AutoCalculate, the Spreadsheet button allows you to manually edit the exact locations of the
panel images in a text-based format. If you click this button, the Parameters dialog box changes, replacing the
AutoCompute section with a scrollable display showing each Image ID #, Rotation, X-Location, and Y-
Location for the panelized images.

7. You may change any of these values (except ID #) to fine-tune the location of the images.

8. The list of images may be sorted by selecting one of the buttons above each column type.

Pag. 3 di 6
file://C:\Documents and Settings\Amministratore\Impostazioni locali\Temp\~hhBC8B.htm
9. Use the scroll bar on the right side to scan through the images and their associated coordinates.

10. Make modifications to the images by typing new values directly into the associated fields for the image.

11. The Add Image and Delete Image buttons allow you to add or remove images from the panel.

Warning: Changes made in the Spreadsheet mode are not retained if you switch back to AutoCalculate mode.

7. When you are finished, click the Create button to generate the panel.

Related Macro Command(s)

Panelization > Venting

Use this command to create a venting pattern for your panel. Venting is used to fill in the areas around the design
images in a panel. You must have first created a panel before adding venting patterns to it.

You may create three basic types of patterns, Solid, Hatched, or Dot. (Venting uses the same Raster and Vector fill
modes as the Solid, Hatched and Dcode fill patterns in Add > Polygon). Each venting pattern you create may be
assigned to single or multiple layers in the panel, as well as saved as a file for future use with other panels.

You are given options to fine tune the pattern to suit your panel's particular needs, including spacing distances relative
to all panel data, etc.

Command Sequence:

1. Select Panelization > Venting, or the click the Venting button in the Tool Bar. The Vent dialog box appears.

2. You may set the unit for all venting pattern specifications by selecting the Inches, MMs or Mils radio button.

3. The Vents list box allows you to Add or Remove venting patterns in your panel. Select Add if you wish to
create a new venting pattern.

OR

If you want to reuse a previously-saved pattern, click the Load button and select the pattern .VPT file you wish to
use.

4. The Layers list box allows you to control which layers utilize the venting pattern selected in the other list. It is
possible to have multiple layers assigned to a venting pattern, and different layers in a panel may have unique
patters assigned to them, but only one venting pattern may be associated with any particular layer.

l Click the Add button to select each layer that will use the current venting pattern (a Layer List dialog box
appears, allowing you to select single or multiple layers).

l Click the Remove button to deselect layers from the current venting pattern.

5. Create the pattern specifications. The Offset text boxes allow you to describe the venting pattern's placement on
the panel. (These offsets have a maximum value of 56 inches [~1422mm], unless otherwise noted).

Note: No Partials options is fully supported for both Positive polarity and Negative Polarity venting patterns.

Tip: If you select the No Partials option, you must use Offset From Images and Offset from Symbols values of at least
half the shape's Width to insure the shape does not overlap the image edge. For example, if you choose a round dot
pattern with 0.06 width, the offset values should be at least 0.03.

Pag. 4 di 6
file://C:\Documents and Settings\Amministratore\Impostazioni locali\Temp\~hhBC8B.htm
Offset from Panel Edge is the distance you want the pattern to start from the edge of the panel.

Offset from Images specifies the distance a venting pattern must maintain from each step image in the panel. This
value is in addition to any offset the step image border may have from the actual image data. (May be specified as
a negative value).

Offset from Symbols sets the pattern's distance from any symbols in the panel. (May be specified as a negative
value).

6. Set venting pattern Polarity (positive or negative, depending on the layer its to be used on).

7. The Galvanic check box allows you to set the current venting pattern as galvanic . Galvanic venting creates a
solid border around the data, but does not fill the areas between images.

8. You can edit the venting pattern itself. Begin by selecting the Pattern type: solid, hatched, or dot. New input
fields for pattern specifications are displayed, depending on the pattern type.

The Solid pattern has no settings, and merely fills in all space within the panel that is not excluded by a border
(images, symbols, and any panel border offsets).

For a Hatch pattern, you can use 3 different lines at different angles. Use the check boxes to the left of the line to
deselect/select any you wish to use. Each line allows you to specify the width, step distance, and angle of the line.

For a Dot pattern, you can select two types of Shape Lines (rows of same-shaped Dcodes). Line 1 and 2 alternate.
Select the shape (round or square) and size of the Dcode. The X-Step is the distance between each Dcode on the X
axis, and the Y-Step is the distance between the Dcodes on the Y axis. The X Offset is the offset of the pattern
from the origin, on the X axis.

After you have made edits to the pattern, the resulting changes appear in the preview window to the right of the
input fields.

9. To make a final review of your venting pattern, press the Redraw button below the Layers list. The venting
pattern is displayed on your panel.

10. Once you are satisfied with the format of the venting pattern, click the Save button to save the pattern for later
use in other panels.

11. Click the Default button to select the current pattern as the default pattern. This pattern will automatically be
loaded as the default during each subsequent use of the Venting function.

12. When completed, click OK to finalize the venting pattern, or Cancel to quit the command and abandon your
changes.

Related Macro Command(s)

Panelization > Rotate

After you have panelized your board, use the Panelization > Rotate command to rotate the entire panel.

Command Sequence:

1. While viewing your panelized board in the Panel Editor, select Panelization > Rotate.

Pag. 5 di 6
file://C:\Documents and Settings\Amministratore\Impostazioni locali\Temp\~hhBC8B.htm
2. Select if you wish to rotate your panel 90, 180, or 270 degrees counterclockwise.

3. Select if you wish to rotate the film box.

4. Click the OK button to rotate the panel.

Related Macro Command(s)

Panelization > Panel Border To Layer

The Panelization > Setup command is used to define the Panel Border.

The one-up border for a design serves as a clearance outline in the Panel Editor when panelizing step & repeated
images. In addition, it also functions as a venting border to keep venting from pouring over the stepped images. The
Panel Editor allows you to panelize one-up designs, using the border layer of the design as a clearance border. It is
sometimes desirable to have a border which is outside the actual border layer of the design, to provide a wider area of
spacing around the one-up.

The Panel Border to Layer command allows you to convert the existing Panel Border and optionally one-up borders
for the design to graphics on an existing layer or on a new layer in the Panel Editor. This graphic data can be useful for
creating assembly array drawings.

Command Sequence:

1. Select Panelization > Panel Border To Layer.

2. The Panel Border to Layer dialog appears. Select the DCODE for rendering the graphics for the Panel Border.
Select either an existing layer or new layer for the Target Layer to which the Panel Border graphics will be
converted. You have a choice to Include One-Up Borders for Stepped Images in the conversion operation. Click
the checkbox to include the One-Up Borders.

3. Click OK to complete the conversion. Click CANCEL to cancel the command.

Related Macro Command(s)

Pag. 6 di 6
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
Symbol Creation

Before you panelize a job, you need to create a library of symbols for use in the panelization process. Symbols
may be created manually in the Symbol Editor, or by automatically converting existing symbols using the
Utilities > Draw To Symbol command. Once created, a symbol may be saved in a symbol library and reused for
a variety of panelized jobs. As a time-saving tool, it is advisable to maintain a library of all symbols used in your
manufacturing processes, rather than recreate symbols on a job-by-job basis.

Symbol Layers

The function of layers in the Symbol Editor is slightly different from that of layers in the CAM Editor. Although
the Symbol Editor workspace and functions appear much the same as the CAM Editor, Symbol layers are
independent of the one-up PCB layers that you work on in the CAM Editor.

Virtual Layers

Because they are designed to be used universally for different jobs, symbols contain "virtual layers" that you
map to "destination layers" in your PCB stackups. Each virtual layer is a layer type rather than a specific layer
number. For example, when using the layer "Top" in the Symbol Editor, this layer represents the top layer in any
design, regardless of where it may fall in the layer stackup for a specific job. When you create a panel, if a PCB
does not have a destination layer which corresponds to a virtual layer, that symbol layer is not used for that job.

It is possible to place symbol data on multiple layers of the same type. Each subsequent layer of a specific type
created in the Layers Table will be denoted by a new layer name of the format "layertype(#th)". For example,
each Internal layer added after the initial one will be called "Internal(2nd)", "Internal(3rd)", etc. in the symbol
layer table. This denotes that the symbol's data will be placed on the 1st, 2nd & 3rd internal layers in the
panelized job (the order being determined by the layer stackup). Symbol data will only be placed if those layers
exist in the design, regardless of how may virtual layers are assigned to the symbol itself.

Destination Layers

Symbol data is targeted at Destination Layers. You can either design a symbol so that all data on each symbol
layer (drill hits, draws, flashes, virtual text, etc) is mapped to a particular destination layer (All Layers of Type),
or you can minimize the number of virtual layers by specifying the destination layer(s) which specific symbol
data elements are added to (All Layers, All Electrical Layers, or the Current Layer). When adding text or other
graphical elements to a symbol, the toolbar gives you the option to select from the destination layers:

All Layers Data will be added to all layers in the PCB, where possible (for instance, drill data cannot be
added to graphic layers and vice-versa).

All Electrical Layers Data will be added to all electrical layer types in the design: top, bottom, internal,
negative and positive layers.

All Layers of Type Data will be added only to layers of the same type that the data was added to in the
symbol. For example: if virtual text was added to a negative plane symbol layer, all negative planes in the
panel would display this virtual text. Use this setting if you are mapping all elements on each virtual layer to
a corresponding destination layer.

Current Layer Data will display only on the layer with the same layer number as the symbol layer the data
was created on. If a series of flashes was added to layer 3 in the Symbol Editor, these flashes would only
display on layer 3 in a panelized job.

Destination Layers may be set when data is first added to the symbol, by using the pull-down selector on the
toolbar, or at any time by changing its destination layer using Edit > Change > Destination Layer in the
Symbol Editor.

Layer Stackup

Before you can place a create a panel you must define a layer stackup . This list of PCB layers is required to
determine which virtual symbol layers will be placed on actual panel layers. Setting the stackup can be done in
the CAM or Panel Editors, under the Tables > Layer Sets > Layer Stackup command. A typical layer stackup

Pag. 1 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
may look like this:

If you create a layer stackup first, before creating your symbols, you will notice that the Symbol Editor reflects
this set of layers. you may choose to use this specific set of layers to create your symbol, or you may alter the
set using the standard Edit > Layer commands in the Symbol Editor.

Symbol Anchor

Each symbol has an insertion point, called the anchor, which is used to place the symbol in a panel (through
Panelization > Setup or Add > Symbol in the Panel Editor). As such it determines symbol placement in
relation to the panel border. This anchor defaults to the lower left corner of the data in the symbol. If you wish
to change the anchor, and thus the distance calculation from the panel border, you may do so by using Edit >
Change > Anchor in the Symbol Editor.

Creating Symbols

You can create symbols manually or use the Draw to Symbol command. It is advisable that you run through
both of these sections before moving on to the Panel Creation tutorial, as you will be using the symbols you
created manually in the panel tutorial.

Regardless of the creation method, you will be saving symbols to a symbol library. For demonstration purposes,
you should begin with an empty symbol library. When saving or modifying symbols for this tutorial, use the
blank symbol library "symbols.smb" located where you saved the application, under the ../Symbols subdirectory.

To make sure you are using this library, follow these steps:

1. In the CAM Editor, select File > Setup > Paths: under the Symbol Library button, note the location of the
path for the current symbol library.

2. Click the Symbol Library button and browse for ..\Symbols\symbols.smb under the application's directory.

3. Once the path displays, click OK to accept this as the new symbol library.

4. Click OK on the Setup Paths dialog.

5. Select Tools > Panel Editor.

6. Select Tools > Symbol Editor.

7. Select File > Open to check the library - no symbols should appear in the selection box.

8. After you have finished either this tutorial and the Panelization Tutorial, reinstate the original symbol library
by changing the symbol library path to its original directory.

You're ready to begin adding symbols.


Pag. 2 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
Create Symbol Manually
Create Symbol using Draw to Symbol

Create Symbol Manually

Begin the process by entering the Panel Editor, using Tools > Panel Editor. From there, use Tools > Symbol
Editor to enter the Symbol Editor itself. Notice that the symbol only has two default layers: top layer and a drill
layer (unless you've already created a layer stackup). Your first step in symbol creation is to set the layers for
your symbol:

Add layers to your symbol.

1. Your symbols should contain all the layers you are likely to need to add to a typical panel setup. You can
always add more layers as needed on a job-by-job basis, but it's best to start out with a "master" set. For
our purposes, create the following set of layers, using Tables > Layers to add and tag the layers properly.
These layers don't need to be in any particular order, but for the purposes of this tutorial, reorder them using
Edit > Layers > Reorder until they appear as below:

Note: These are primarily electrical layers, with the exception of the mask and silk layers, which can be used
to create test coupons.

2. When creating any type of symbol, you must specify the clearance border for the symbol. This border is used
to protect the symbol data from other elements on the final panel, such as venting patterns. The border is
closed polygon in shape and typically encompasses all the data in the symbol for it to be protected from
venting, etc. In the manual creation process you may draw a border using the Add > Border command. If
you find the border doesn't meet your size needs further down the process, you may change the border at
any time by reselecting the command and drawing a new border - the old border is discarded.

NOTE: You can use symbols to create venting keepouts. Further, if desired, you can specify a symbol border
so that the symbol is not protected from venting.

Pag. 3 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...

Create a pinning hole symbol.

Pinning holes (or tooling holes) are used to hold the finished board for NC machine processing, etc. They are the
most basic symbol, consisting of a drill tool hit, a mask clearance, and a symbol border.

1. Use the Add > Drill command to add a drill hit at the desired location. You may specify the size of the
tooling hole by selecting the Drill Spec button on the toolbar: specify a tool size of 185 mils. (see Add > Drill
for more information)

2. Add the drill hit at the origin (0,0)

3. If you have not already done so when you set up your symbol layers, add mask layers to the symbol layer
table.

3. Use Tables > Apertures to create a mask aperture. This Dcode should be of the appropriate size to
clearance the tooling hole (typically 30 mils larger than the drill tool being used): create a 215 mil round
aperture.

4. Turn on only the Mask Top layer and add a flash at 0,0 with the new Dcode. Do the same for the Mask
Bottom layer.

5. Using Add > Border, you may now add a symbol border to your tooling hole. Add a border square
approximately 50 mils offset from the sides of the mask clearances you made. Alternatively, you may wait
for the system to assign a border when you Save the symbol. When you first save a symbol, a border is
assigned to it, at a given clearance distance. However, it's best to use Add > Border if you have a specific
clearance distance requirement for your symbols.

Pag. 4 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...

Add the symbol to your library

1. Select File > Save Symbol. Type the name of your new pinning hole in the text box above the symbol list
(use "pinhole"). Select "Pinning Hole" as the type from the Save Symbol As radio buttons.

2. Select File > Save Lib to save the symbol library.

Create a Title Block Symbol -

Title Blocks display job and layer information for each layer in the design. They are often used for film
identification purposes.

Title Blocks are an excellent place to learn the use of Variable Text . There are pieces of information that you
will be called on again and again to add to layers in the panel: job number, date, revision, etc. You can
automate this process by adding Variable Text to your symbols. Variable Text functions as a variable name in
the symbol itself (ex: "revision"), but once the symbol is added to your panel, this variable can be defined in the
Panel Editor (under Tables > Variable Text) - the new information will replace the variable name in all
symbols that use that variable text in the panel. This is a handy way to update all Title Block symbols to list the
Date the job was run, for instance.

Note: Due to its use as a "variable", Variable Text cannot contain commas, periods, spaces, or carriage returns.
If you wish to demark two words for your variable text, use an underscore: ex - "job name" should be called
"job_name".

1. Define the contents you need to display in your Title Block. For this exercise, use the following list: job
number, revision, date, layer number and layer type.

2. Select Add > Border to create a symbol border. For a Title Block you want a border which will leave enough
space for the text definitions which will replace the Variable Text terms: once placed in a panel, a symbol
border does not grow with the symbol's contents, so very long terms may overrun the border and be at risk
of being vented over. For this tutorial, use a 1" x 3" border with the symbol origin at the center of the
rectangle.

3. Add a 5 mil round aperture to the Aperture Table, to use for the Variable Text.

4. Select Add > Variable Text

Pag. 5 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
5. You can use the Style button on the toolbar to set the text style & font, as you can with the normal Add >
Text command. Set the variable text height to 100 mils.

6. Now add your variables: space each variable out to allow room for those which will take the most room.

7. As you are placing them, specify the name and set the Destination Layer for each, using the toolbar pull-
down:

Variable Text Name Destination Layer


job_no All Layers
revision All Layers
date All Layers
layer_no_xxx* Current Layer
layer_type_xxx* Current Layer

* Since layer numbers and layer types will be added to specific layers, you must customize the Variable Text
for each layer they appear on. Layer number should be placed as "layer_no_top", "layer_no_int",
"layer_no_neg", etc. for all electrical layers. Turn ON only one electrical layer at a time and add the variable
appropriate for that layer.

Tip: add layer_no_top to the top layer and use Edit > Copy to copy it to each subsequent electrical layer.
Then use Edit > Change > Variable Text Style & Contents to rename the variable for each specific layer.
Follow the same procedure for layer type.

When completed, your Title Bar should look something like this:

8. Use File > Save Symbol As to save your Title Block as symbol "title_block". Be sure to check the correct
symbol type in the save dialog.

9. Use File > Save Lib to save the library.

Create a Coupon Symbol

Coupons are used for testing various aspects of the manufacturing process, including drilling and plating. They
may contain NC drill hits, lines, flashes, etc.

The most important aspect of some coupons is the Drill Sequence . A Drill Sequence represents a series of
virtual drill tool hits. These drill tools comprise specific sizes, or ranges of sizes, that are replaced by the
equivalent tools from the job being panelized when the coupon is placed in a panel. In this manner you can
place representative drill hits from a wide selection of drill tools in your job.

Drill Sequence drills are defined by the Sequence Spec button: a dialog box opens, giving you the settings for
the first and last drill tools in the sequence. You have the option to set the first and last hits to smallest tool,
largest tool, tool size or tool number:

Smallest takes the smallest tool in the design

Largest takes the largest tool in the design.

Tool size gives a set size to use: if no tool of this size exists, one will be created and added to the panel's
drill table.
Pag. 6 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
Tool num gives a specific tool number (useful if you always have a set tool table).

In addition, smallest and largest have several subsettings. You can set the minimum size that each must be
above/below: for example, setting the largest tool with a minimum size "smaller than" 150 mils might be useful
for ignoring any pinning drill tools in the table. You may set a range where the smallest/largest falls in the table,
using the drop-down list: this allows you to specify a tool that's a set amount up or down the tool table.

For example, say you set the First drill in the Drill Sequence to "smallest" tool and then select "3rd smallest"
from the drop-down list. If you were to use this coupon in a job with an NC table containing 20 mil, 50 mil, 60
mil, 80 mil, 120 mil and 135 mil tools, the first drill tool in the sequence would be the 60 mil tool, or the 3rd
smallest in the table.

Note: Drill Sequences are "virtual" in that they will display a series of equal-sized hits in the Symbol Editor. In
reality, these hits will be of varying sizes in the finished panel. In the panel, these drills will be spaced evenly
with a set distance separating them. You must account for the expected size a drill sequence will ultimately take
up when creating your symbol border. Otherwise you run the risk of the drills being outside the border and thus
potentially drilling into venting patterns, etc. outside this clearance area. See Add > Drill Sequence for more
information.

1. Use Add > Drill Sequence to add all desired drill sequences to the coupon:

2. For your example drill coupon, add one sequence: from smallest to largest tools (horizontally from left to
right)

3. Add > Border to place a symbol border around the coupon. Again, leave additional space around the ends of
the sequence to account for the ultimate tool sizes which will be placed there in the panel. When finished
your border should look like this:

4. Add a solder mask clearance for the drill sequences: turn ON only the appropriate mask layer.

5. Use the Add > Polygon command to add a clearance polygon on that mask layer. Select three of the
corners of the border, in sequence, and then click your right mouse button. The command will close the
polygon, creating a rectangular mask clearance.

Pag. 7 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...

6. Repeat this procedure for the bottom mask layer.

7. Use File > Save Symbol As to save your Coupon as symbol "firstlast". Be sure to check the correct symbol
type in the save dialog.

8. Use File > Save Lib to save the library.

Fiducial Symbol

Fiducials are alignment markers for collating or comparing plotted film. These can include shapes such as
targets, rounds, etc. to form a unique identifier. They are a very basic type of symbol, but care must be given
to their use on negative planes - each symbol must contain a positive fiducial for use on electrical layers which
are plotted positive (top, bottom, internal) as well as a reverse-image fiducial for layers which are plotted
negative (negative and positive planes).

1. Create the aperture or drawn data you wish to use as the fiducial. Tables > Apertures allows you to select
from a number of intrinsic apertures - if these do not meet your requirements you may use the Add Menu in
the Symbol Editor to generate drawn data approximating your fiducial.

2. You may generate a custom aperture for unusual fiducials. This is a recommended procedure when you have
unique fiducial shapes that require reverse images for negative planes. For our example fiducial, use the CAP
Editor: to access it, click the Return To Panel Editor button on the toolbar, and select Tools > CAP Editor
there.

3. Once in the editor, first create the positive fiducial image. It is recommended you set the grid to an even
working distance using the toolbar: switch to a 10:10 grid.

4. Select Add > Circle > Center Radius to add a 40mil circle at the origin

5. Then add an arc with a radius of 70 mils (close the arc to create a full circle)

6. You need to add an outline for the custom aperture: use Add > Line. Set the width of the line on the toolbar
to 1mil and draw a square around the fiducial elements (at 80mils from the origin).

Circle Arc Border

Pag. 8 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...

7. Save the CAP as a unique name: "fidpos" is recommended.

8. Now you may create the negative version of this fiducial. First, use File > New to clear the other CAP.

9. Add a positive polygon at 80 mils from the origin: this will serve as the CAP outline clearance when the
negative layer is plotted.

10. Add a negative circle of 70 mils in diameter

11. Add a positive circle of 60 mils diameter

12. Add a negative circle of 40 mils directly at the origin

13. Save the CAP as "fidneg".

Polygon Neg. Circle

Pos. Circle Neg. Circle

14. Return to the Panel Editor, and then to the Symbol Editor.

15. Add the CAP's you've just created to the Aperture Table (note their Dcode numbers).

Pag. 9 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
16. You're ready to place the CAP's for your fiducials, on the following layers:

Top & Bottom layers - add a flash using "fidpos", setting the Destination Layer to Current Layer

Negative & Positive Plane layers - add "fidneg" to these layers, setting Destination Layer to All Layers of
Type

Add mask clearance for these fiducials to the Mask Top and Mask Bottom layers: create a rectangular
polygon tracing the edges of the CAPs you've just added (an 80 mil square) using Add > Polygon

Pag. 10 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...

17. Use File > Save Symbol As to save your Fiducial as symbol "fiducial". Check symbol type Fiducial in the save
dialog.

18. Use File > Save Lib to save the library.

You have now created one symbol of each major type. To review your symbols, select File > Open in the Symbol
Editor. Note that there are now 4 symbols in your symbol library. If you close the application and reopen it, the
symbols will still be present in the selection list, as they are now permanently part of your library.

If you should ever need to delete a symbol from your library, click on the symbol in question in the selection list
and click on the Delete button. Click Cancel (not OK) to delete the symbol. Now use File > Save Lib to save the
new library.

You are ready to begin using your sample symbols in the Panel Creation tutorial.

Create Symbol Using Draw to Symbol

In addition to the manual method of creating symbols, you may also take existing graphical data and convert it
to a symbol. This allows you to use any existing symbols which you've created for use with previous versions of
the product. It is not a 100% automated process, however, and you will still be required to set up the new
symbol for use.

Depending on the old-style symbol which you created, the steps described here may only apply to parts of your
symbol. We'll be starting out with a typical drawn coupon and following the conversion process. The process is
similar for other types of coupons you may be using (pinning holes, title blocks, etc) - refer to the manual
symbol creation instructions for a sense of how these symbols are constructed in the Symbol Editor.

Begin by opening the file ..\Symbol\symbol.cam in the applications directory. Note that this is a drawn Coupon
symbol with multiple layers of information. This is typical of a symbol which is saved as a separate .cam file and
intended to be merged into the panelized job using File > Merge. Toggle through the layers (either manually or
using the showeachlayer.scr macro) to familiarize yourself with the format of the symbol on each layer type:

Full Symbol Top/Bottom/Internal Negative Plane

Pag. 11 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...

Positive Plane Border Drill

Top & Bottom use positive images for the coupon draws and flashes. Negative and positive planes use test
polygons, etc. which are mirror opposites of each other in polarity, owing to the fact that the negative plane will
be plotted with the opposite polarity. A border layer consisting of some 10 mil lines would have served as a
clearance border for venting patterns, if copied to all the layers which were vented. Finally, the NC Primary layer
shows the test plated drills used in the coupon.

Draw to Symbol Conversion

The first step in the process is to convert the existing data to a symbol.

1. In the CAM Editor, select Utilities > Draw To Symbol

2. If you have not already done so, you will be prompted to create a layer stackup. Add all current layers to the
layer stackup. These will correspond to the symbol's virtual layers in the Symbol Editor:

3. You may now select the data to convert to a symbol. If you intend to convert only some of the data in your
old symbol to the new symbol format, you could turn off all unnecessary layers at this point, or choose to
select individual data in the symbol, using the standard Edit Menu grouping commands.

Pag. 12 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
For this tutorial, however, we will be converting the entire drawn symbol, so click on SelectAll. All drawn data
will highlight.

4. Right click on your mouse to approve the selection.

5. The Draw to Symbol dialog box appears.

6. Type a name for your new symbol in the top field: use "manual_coupon"

7. Select a symbol type: use Coupon.

8. Under Layer Treatment, you may now select the type of layer this symbol's data will appear on in a panelized
job. If you were converting a single layer of data, instead of multiple layer types worth, you could select All
Layers or All Electrical Layers. Since the layer types in this symbol each have unique data, you are better off
selecting All Layers of Type or Current Layer: for our purposes, select All Layers of Type.

9. The Spacing field controls the distance the symbol border will be generated from any graphical data in the
new symbol. This border serves as the clearance border for vent patterns, etc. Leave the default at 50 mils.

10. Click OK. Your new coupon has been converted. Right click to end the Draw To Symbol command.

Editing the Symbol

The conversion process is automatic, but you may need to change some of your new symbol's Destination
Layers, etc. To do so, you'll need to edit the symbol in the Symbol Editor, which is accessible by using Tables >
Panel Editor from the CAM Editor, and then using Tables > Symbol Editor.

Notice the symbol editor layer bar now includes all of the layers in the Layer Stackup you created. Open your
symbol by selecting File > Open: select "manual_coupon" from the list and hit OK. The coupon you converted
will display:

Data have been added to all layers in your stackup. Toggle through the layers to make sure all data appears
correctly on the appropriate layers.

You may now make manual edits to the symbol if desired:

Symbol Border
Pag. 13 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Symb...
1. Notice that the symbol now displays a white border around all of the data, offset 50 mils from the graphics -
as you specified. This symbol border makes the data on the symbol's actual border layer superfluous.
Remove the border layer using Edit > Layers > Remove.

2. If you want to change the size of the symbol border itself, you may do so by using Add > Border to draw a
new rectangular border for the symbol. The old border will remain as a reference guide until you right click to
OK the new border.

Setting Destination Layers

1. To change the Destination Layer of any data in the symbol, simply turn ON only that layer.

2. Use the Edit > Change > Destination Layer command to specify a new target layer for the data.

For example, select the data on the internal layer (layer 3). Use the Edit > Change > Destination Layer
command and pick SelectAll on the data. (Notice you may also use the toolbar check boxes to select only
draw or flash information if you choose).

3. Right click to accept the selection.

4. Specify the Destination Layer: in the dialog box, choose "Current Layer" from the drop-down list. In this
case, the internal layer's symbol data will now only appear on layer 3 in your panelized job.

Adding Layers

1. You may need to add additional virtual layers in your symbol, to account for additional layers you anticipate
in your job.

2. Add layers in the Symbol Editor just as you would in the CAM Editor, but note that these layers are virtual, as
described above: each additional layer of the same type will be labeled as "layertype 2nd", "layertype 3rd",
etc.

Adding Data

1. You may add data to these new layers (or existing layers) by copying the existing data from another symbol
layer, using Edit > Copy.

2. Additionally, you may add new symbol data manually, using the available graphic options in the Add Menu
(flash, line, etc).

Once you have made all the necessary edits, save the modified symbol using File > Save Symbol, or Save
Symbol As (if you wish to change the name). The symbol is now stored in your project library and can be used
immediately in panelizing a job. If you wish to save the symbol permanently to your symbol library, for use with
all future jobs, use File > Save Lib.

You are now ready to move on to the Panel Creation tutorial.

Pag. 14 di 14
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Panel Creation

The Panel Editor allows for the fast creation of efficiently-panelized designs, complete with test coupons,
registration holes, vent patterns, title boxes, etc. (generated using the new Symbol Editor) The original one-up
design, and the panelized result, are separate entities that can be manipulated at any time before, during, and
even after the process.

This tutorial provides you with an overview of how to use the Panel Editor. Each setup you create may be
saved as a file that can be used to panelize subsequent jobs. Multiple panel formats can be saved for later
execution as "one button", fully-automatic routines. Or you can chose to prepare individualized panels on a job
by job basis: the flexibility exists for both approaches.

Note: It is highly recommended you read and complete the Symbol Creation tutorial before reading this
tutorial, as a number of the symbols created in the Symbol tutorial are used to set up your example panel.

Creating a Panel
Panelizing a Job

Creating a Panel

A panel can be generated using the Panelization Menu commands in the Panel Editor. Each menu command
controls a specific area of the panel, from setting up the panel's physical layout to actually generating the
panelized images and creating the venting patterns. The panel setup may be reconfigured at any time, even
after panelization has occurred.

Setup Symbols

Before beginning a Panel Setup it is advisable to create all the symbols you are likely to require in your panel
(s). Symbols, such as coupons, will be placed at fixed locations in the panel during a panel set up. They may be
placed on an individual basis when, you actually panelize a job (using Add > Symbol), but it is generally
preferred you have a symbol library available for the variety of panels you are likely to need to set up: most
shops have a fixed set of symbols they use for their panels.

If you completed the manual symbol creation section of the Symbol Creation tutorial, you will already have a
symbol library to draw from for this tutorial.

Setup Panel

It's best to begin a fresh panel setup with no database loaded in the application. This will give you a blank slate
to work on. Enter the Panel Editor using Tools > Panel Editor. In the editor you will notice a number of similar
functions to the CAM Editor - this is intended to give you much of the functionality of the main editor for all
panel-level data. Note that panel data includes such things as symbols, venting patterns, etc, but doesn't not
include the data (draws, flashes, drills, etc). in the one-up image you are panelizing. Once in the Panel Editor,
you will not be able to make edits to the database itself without a) exiting to the CAM Editor (all changes there
will reflect in the Panel Editor) or b) exploding the Panel using Edit > Change > Explode > Flatten Panel
(once you explode a panel, however, there is no recourse! The panelized data will lose its panel intelligence and
become one-up data, not step & repeat images).

Inside the Panel Editor you will notice 3 buttons on the toolbar: Setup, Create and Venting. (These commands
are also available in the Panelization menu). These buttons show the basic steps needed to panelize a job. .
Begin by clicking Setup.

This tutorial does not exhaustively cover each individual command in the Setup dialog, but will go over all the
required steps to make a generic panel setup. For more information, see Panelization > Setup.

Set Panel Size

You will need to set the panel size for your generic panel. Size may be set as a function of the specific boards
your shop receives, or as a general size for all jobs. The Size Tab allows you to set this information, as well as
the spacing clearances for all step & repeat data in the panel.

Pag. 1 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
1. Set the panel size to 12" x 12"

2. Border spacing controls the minimum distance step images will be created from the panel border. Set this
value to 2"

If you want to custom tailor this border spacing for your panel, check the Advanced box and enter spacing
values from all four sides of the panel.

3. Set the image spacing value to .5". This controls how close step images may be generated in a panel,
allowing you to maximize the panelized images or leave adequate clearance for venting patterns. Your panel
will now look like this:

Note: Use the checkbox Automatically Update FilmBox to keep the Film Box definition in sync with the
Panelization box definition. The default is to keep the Film Box and Panelization Box matched. If you chose
not to keep the Film Box and Panelization Box in sync, you can use the Edit > Change > Origin commands
to manage the panel origin and film box origin separately. Use the File > Setup > Film Box command to
define the size and location of the film box.

Add Pinning Holes

Pinning Holes are the most basic Symbol used to set up your panel. Each fabrication shop typically has its own
pinning hole unique to its production processes. For our purposes, set up a generic series of holes, as outlined
below:

1. Click on the Pinning Hole tab

2. Click the Add button to select a pinning hole Symbol to use in the panel. Use the symbol "pinhole". This is
available in the Symbol tutorial library (this library should already be set in your application from the Symbol
Creation tutorial; if not, see the tutorial for how to specify the symbol library to use).

3. Now you'll need to set the placement points for the pinning hole you're adding. You may set these as
absolute or relative coordinates from the edge of the panel. Use the coordinates for the first pinning hole
below, then use Add again to insert an additional 4 holes, at the given coordinates:

Hole #1 Hole #2 Hole #3 Hole #4 Hole #5


x1", x1", x6", x11",y6" x5",y11"
y5" y6" y1"

Relative coordinate mode allows you to set the pinning holes a given distance from the edge of the panel,
regardless of the panel size - the symbols will move automatically should you change the size.

Pag. 2 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Note: You can also set the rotation of each pinning hole by using the Rotation drop-down list. However,
rotations are limited to 90 degree increments and may only be useful for special pinning hole designs.

4. Pinning holes may be added as Primary (plated) or Secondary (unplated/tented) drill hits by checking the
appropriate box. When done, your panel preview should look like this:

Add Fiducials

Fiducials are required for film alignment/collation. The process and commands are essentially the same as for
Pinning Holes, with the exception of the drill settings - fiducials have no drills, so these commands do not apply
to them.

1. Click on the Fiducial tab.

2. Click the Add button to select a fiducial symbol to use in the panel: use "fiducial" from the symbol library.

3. Place several fiducials around the panel., as indicated by these coordinates:

Hole #1 Hole #2
x7", y1" x5",
y11"

When done, your panel preview should look like this:

Add Title Block

Pag. 3 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
The Title Block tab is used to enter your title block. Commands are the same as for Pinning Holes and Fiducials,
again with no need for a drill option. The title block in our sample panel will be offset from the lower left corner.

1. Click on the Title Block tab.

2. Click the Add button to select a title block Symbol to use in the panel: use "title_block".

3. Place your Title Block at x2.5", y1.4". When done, your panel preview should look something like this:

Add Coupons

Finally, add the coupon(s) required for your panel. For our example panel, we will use one drill coupon, offset
from the lower right corner.

1. Click on the Coupons tab.

2. Click the Add button to select a coupon Symbol to use in the panel: use "firstlast".

3. Place your Coupon at x11", y3". Select Primary from the NC Layer check boxes, to make sure these drill hits
will be plated hits.

4. In this case, we also need to rotate the coupon to avoid overrunning the step images: use a 90 degree
rotation. When done, your panel preview should look something like this:

Pag. 4 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Save & Load Panel Setup -

Once you've verified that all symbols have been added correctly, it's time to save the final panel. You can save
any number of panel setups in the application directory, under the *.pan extension. These setups can be loaded
for any design you wish to panelize. You may make case by case adjustments to the setups as necessary, and
still be assured that you have a clean copy saved for future jobs.

1. Click the Save button. The Save Setup As dialog box appears with a list of all current panel setups.

2. Type a setup name in the top field (it isn't necessary to add the .pan extension - the system will assign it
automatically) or select a previous panel setup from the list, if you wish to overwrite it. For this tutorial, add
the new panel setup as "tutorial.pan"

3. You may now test the saved setup by exiting the Setup dialog and reopening it. Notice the dialog box still
shows the current setup you were working on.

4. Change the panel size to 24" x 20".

5. Click Load and select "tutorial.pan". The size values you changed will be overwritten by the saved panel
setup.

Panelizing a Job

Now that you've created your basic panel setup, you're ready to begin panelizing a job. Panelization involves
adding the desired step images to your panel, as well as setting up venting patterns and exporting the final
result.

Import Gerbers and Prepare Database

It is assumed you know how to import and prepare standard Gerber files. If not, refer to the Import > Gerber
Data and Tables > Layers commands to import and tag your files properly. To panelize a sample design in this
tutorial, please use either the sample Gerber files located in the application's Demos directory (use must import
& prep these), or use the sample .CAM database, preview.cam, under the same directory (this file has been
prepped).

In addition to the normal file preparation, you must set some panel-specific items:

Panelization Anchor

Each step image in the Panel Editor has a "handle" or anchor which will be used to place the image in the panel,
as well as calculate rotations, etc. This anchor point is set in the CAM Editor, using Edit > Change > Origin >
Panelization Anchor. You may assign the point anywhere within the one-up image. The anchor point appears
on screen briefly to show you its new location, but disappears after you exit the command.

You only need to set the anchor point if you want to change its default location - if no new anchor is set in the
CAM Editor, the origin point (0,0) is assumed to also be the panel anchor in the Panel Editor. For our purposes,
leaves this as the default.

Pag. 5 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
One-Up Border

In addition to an anchor, each step image has a "border" which acts as the outline when calculating panel
spacing between images, as well as protecting the step images from venting patterns. This border defaults to a
rectangular shape around the extents of the one-up image in the CAM Editor (visible as a bounding box in the
Panel Editor).

If you have a complex board outline you wish to use for this purpose, you can set the border to a specific shape
using the Utilities > Draw To One-Up Border command in the CAM Editor. The command allows you to select
any continuous line on the database's "border" layer as the one-up border. In the case of preview.cam, we'll
stick with the default border.

Layer Stackup

The layer stackup controls the placement of symbol data on specific layers in your panel. If you don't select a
layer stackup for your job, you will be prompted to enter one before you can create your panel. It's a good idea
to get into the habit of setting your layer stackup prior to entering the Panel Editor, using Tables > Layer Sets
> Layer Stackup. If you do forget, you may also set the layer stackup under the same command in the Panel
Editor, at any time prior to panelization. A typical stackup may look like this (use this for preview.cam):

See also the Symbol Creation tutorial.

Viewing Step Images

While working on a panel, you have a few options on how to display the step images contained in the panel. As
a default, step images appear as a rectangular box with the number of the step image inside. This indicates that
step images themselves cannot be edited in the Panel Editor (you cannot change the contents of a step image).
If you'd like to get a more visual representation of the step images, in the Panel Editor you may select Settings
> View Options > View Circuit Images, which displays all internal data in each step image. This gives you a
better feel for how the data in each image orients compared to its neighbors.

However, on larger step images, this amount of graphical data in the panel can slow redraw times significantly.
In those cases you may select the BitBlt Circuit Images view option under the main View Circuit Images option -
this will redraw step images in a much faster mode. The trade-off is in accuracy: while the normal mode displays
all data as it exists in the step images, this mode is less graphically accurate, depending on screen resolution,
etc., so is better suited for getting an overview of the data, rather than a 100% accurate image.

Load Panel Setup

Once you've prepared the database, you're ready for panelization. Go to the Panel Editor and select the Setup
button from the toolbar or Panelization > Setup from the menus. You'll be loading the sample panel you
created, so hit the Load button and select "tutorial.pan"

If you needed to make adjustments to the panel setup (increase panel size, etc). you can make those changes
now. For this tutorial, leave the setup as is, and exit the dialog.

Pag. 6 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
NOTE: CAM350 supports alternatives for importing Panel Template data. In the Panel Editor, you are able to
import Gerber data using the File > Import > Gerber Data command. You can import drill and mill data using
File > Import > Drill Data and File > Import > Mill Data. Further, you can merge panel data template
using the File > Merge Panel command.

Create Panel

The Create command places the step images in the panelized job, much as the old command Utilities >
Panelization > Panelize did in previous versions of the software, but allows more flexible control over the
images.

You can choose to allow the system to calculate some of the values in the panel: either 1) the image offset
values, or 2) the number of step images in the panel. Unlike the old command, you can specify rotations for the
images, or use SpreadSheet mode to have complete control over the placements of each individual step image.

Note: When switching between AutoCalc and SpreadSheet modes, be aware that all changes you made in one
mode will be discarded when you switch to another mode! You cannot return and expect your previous values to
remain.

AutoCalc Mode

By default Create operates in AutoCalc mode, in which the system generates some of the values in the panelized
job. As noted, these are the between/offset values for the images, or the number of step images in the panel.
Rotation will allow you to change the orientation of the step images, but only works on all step images and only
in 90 degree increments.

1. Determine if you wish to have the system calculate Panel Size, Border Spacing, Image Spacing or Number of
Copies and select the appropriate Compute radio button.

2. If you selected Copies, you will need to fill in the Spacing information:

Between Select the x & y spacing between the panelization borders of the step images

Offset Specify an offset distance between the data in the step images themselves (i.e. trace to trace)

3. Set the Between Spacing values at .5"

4. If you had selected Copies, you would have specified the number of copies in the x- & y-axis: the results of
your selections appear in the panel preview.

5. You may also set the angle of the step images. Click on the 90 degree radio button and notice how the

Pag. 7 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
images all rotate to the new position. (In this case the rotation doesn't yield any extra step images in the
panel).

6. If you need to make any adjustments to the panel Setup, click the Setup button - this brings up the Setup
dialog box, where you can make changes as described in the first section of this tutorial.

7. When you have set all the step image values, click the Create button to generate the panelized job:

SpreadSheet Mode

Spreadsheet mode allows you complete control over the placement of step images in the panel, but requires
more finesse than AutoCalc mode. You must set the x,y placement of each step image individually. You can set
each image's Rotation to any angle, though you will need to keep an eye on superimposing one image over
another accidentally.

1. SpreadSheet mode displays a table of the current images in the panel. You may set the values for any of the
image's characteristics by typing in the appropriate field. All coordinate values are absolute from the panel
origin (always the lower left corner of the panel). As a demonstration we'll be changing step images 1-4 in
this tutorial panel.

image 1 - set the rotation to 90 degrees and placement to x 4",y 2"

image 2 - leave the rotation, but set the spacing to x 3.9", y 2"

image 3 - set rotation to 90 degrees and x 10", y 2"

image 4 - finally, leave rotation, but set location to x 3.9", y 3.9"

Your final panel image should appear like this:

Pag. 8 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

2. Notice the orientation change did not give more space in this case, as the step images were only
reorganized. However there will be many cases where turning the images will free up additional space on the
panel for more step images.

In those cases, you can use the Add Image button to add additional images to the table: you will need to set
the rotation and location of the new image as you did for the others.

3. If you wish to decrease the number of step images in a panel, use the Delete Image button. A selection
dialog appears in which you can select individual or multiple step images (using the Shift or Ctrl keys) for
deletion.

4. Click the Create button to generate the panelized job:

Add Variable Text

Pag. 9 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
The next step is to define any Variable Text in your panel's symbols. Variable Text is a form of variable name
that you can replace with information in a panelized job. See the Symbol Creation tutorial for more information
on this topic.

1. Select Tables > Variable Text. The dialog will show all currently-defined variable text in the left-hand
selection list. You should see a list of all the variable text in the Symbol "title_block":

Note: preview.cam has no internal or positive layers. Therefore you do not need to fill in the Variable Text
pertaining to these layer types - symbols contain all potential Variable Text, even those variables used on
layers which don't exist in the current job. These entries cannot be deleted, as they are part of the original
Symbol's layout.

2. Fill in all the pertinent Variable Text in the dialog. Click on the text in the left-hand selection area and the
definition area to the right will activate.

Simply click in the definition area and begin typing your text. Use these values:

date today's date and time


job_no Job# 1234
layer_no_bot Layer 4
layer_no_neg_1 Layer 2
layer_no_top Layer 1
layer_type_bot bottom
layer_type_neg1 negative
layer_type_top top
Rev Rev A

3. Once you finish entering all of the Variable Text values, click OK to save the entries. All the Variable Text
contained in the title block will now be updated to the new definitions. Turn on layer 1 (top layer) for
example and view the results:

Each Variable Text entry has been replaced with its new definition. Toggle through the layers to make sure
all variable text is as you want it, and go on to the next process.

Add Venting

Pag. 10 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
You will now be adding venting to your panel. The Panel Editor make allowances for most major venting styles
and gives you complete control of each vent pattern on a layer-by-layer basis. Venting patterns may include
solid vents, dot-pattern and hatched vents, as well as robber bars to equalize the copper balance.

Positive Venting

This type of venting should be used on all positive layers (top, bottom, internal, etc). In preview.cam we will be
adding positive venting to the top and bottom layers.

Note: If you want your pattern to vent up to the border of each step image, be sure to set the one-up border as
described above.

1. Select Venting. Notice you have a choice of units to work in: Inches, MMs, or mils. Select mils.

2. In the upper left, under Vents, use Add to enter a new venting pattern.

3. Add the details of the vent pattern:

Offset from Panel Edge controls how close the venting will come to the edge of the panel. Set this value to
2000 mils (same as our panel border spacing - 2").

Offset from Images determines how close venting comes to step images. Use 50 mils - we want to get
relatively close.

Offset from Symbols Set this to 5 mils.

Pattern This drop-down list allows you to select a dot, hatched, or solid pattern. Pick Dot. Notice the Polarity
field highlights and a spread sheet for setting the pattern is opened.

Polarity Set this to Positive.

No Partials This check box determines if the vent pattern will include only whole dots. If this is selected the
venting pattern for the layer will be generated as a polygon - much the same way venting was created in
older versions of the application - leaving clearance areas around each step image's border. For our
purposes, leave this unchecked.

Tip: If you select the No Partials option, you must use Offset From Images and Offset from Symbols values
of at least half the shape's Width to insure the shape does not overlap the image edge. For example, if you
choose a round dot pattern with 0.06 width, the offset values should be at least 0.03.

Spread Sheet The dot pattern spreadsheet is set to the default pattern, using a 60 mil round aperture.
Leave these default values, but change the shape used to Square with the drop-down list.

4. Add the layers that will use this venting pattern: in Layers selection area (lower left), use the Add button and
select the top and bottom layers from the Layer List dialog box which appears. Your final venting pattern
should look like this:

Pag. 11 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

5. Click OK to exit the command.

6. Turn on only layer 1 (top). The venting will appear like this:

Robber Bars

Robber bars (or galvanic vents) are often added to top and bottom layers to balance the copper between them,
preventing over etching from occurring. You'll need to determine the existing copper balance before attempting
to fix it using robber bars. This can be done using the Analysis > Copper Area command. Once you've
determined that information, you can either calculate out the needed copper to be added, and determine the
subsequent size of the robber bars to add, or do some trial and error additions of robber bars until the balance is

Pag. 12 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
met.

For our purposes, you'll be adding a fixed bar size, assuming the design you're panelizing has no significant
copper difference between the two layers.

1. Select the Panelization > Venting command.

2. Under Vents, click Add to add a new pattern.

3. Select the Pattern first: pick Solid. Notice that the Robber Bar option appears in the upper right, and the
Polarity dropdown list is grayed out. Click the Robber Bar check box.

4. Set the Offsets for the venting pattern:

Offset from Panel Edge controls how close the venting will come to the edge of the panel. Set this value to
1000 mils.

Robber Bar Width Notice that this field has changed from the "Offset from Images" settings. It now
determines how wide the robber bar being added is. Set this to 1000 mils, or a 1" robber bar.

Offset from Symbols Set this to 5 mils.

5. Under Layers, select top and bottom from the list. Your final Robber Bar pattern should look like this:

6. Click OK. The top layer will now display the robber bar at the edge of the previous venting pattern:

Pag. 13 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

Notice how the bars clearance around all Symbols - the symbol border protects the symbols from venting
patterns.

Negative Venting

Negative venting is used on all layers which will be plotted with reverse polarity (negative planes). You will be
adding this venting to the two negative layers in the design.

As with positive venting, setting the one-up border allows you to vent to the exact shape of the board's outline.

Negative layers should take advantage of the Offset command to stagger their venting patterns, allowing them
to interlock and perform better venting.

1. Select Panelization > Venting.

2. In the upper left, under Vents, use Add to enter a new venting pattern.

3. We will add the negative venting for the first negative layer in the database (layer 2):

Offset From Panel Edge Set to 900 mils

Offset From Images Set to 0.

Offset From Symbols Set to 5 mils.

Pattern Select Hatched pattern. (The hatch-pattern spreadsheet appears).

Polarity Set to Negative.

Spread Sheet You can set the hatch-pattern spreadsheet to any desired combination of hatched lines (again

Pag. 14 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
similar to old versions of the application). Set the hatch pattern to a single 45 degree line: Width 200 mils,
Step 500 mils, and Angle 45 degree.

Your final venting pattern should look like this:

4. Under Layers, select only layer 2. The first hatch pattern is done.

5. Create the second, offset hatch pattern for layer 3. The settings are the same as above, with these
exceptions:

Polarity Set to Positive.

Click the Offset check box.

6. Add layer 3 to the pattern:

7. Click OK to generate the two patterns:

Pag. 15 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

Notice how the two layers interlock their venting patterns.

8. The patterns are not complete yet. They appear correct since they are displayed in positive mode. Use the N
key to toggle each layer's polarity and you'll see the hatch patterns have created dead-ends for the venting
just at the border offset of the panel. To fix this, you must add positive venting where the hatched venting
meets the border offset zone, creating a flow area for the venting. To do so, place a Robber Bar on both
negative layers, with these settings:

Robber Bar Width 1000 mils

Offset from Symbols 5 mils

9. Select both negative layers in the Layers > Add command.

10. Click OK. The new robber bars will appear positive, but using the N-key you can see they created the desired
clearance area:

Pag. 16 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...

Save Database

Before you begin exporting files, it's a good idea to Save your design as a .CAM file. This assures all panel and
symbol information used in your panelized job will remain with the original design - you can refer back to
the .CAM file to make any changes to the panel without having to start the panelization process over again.

You may save your file in the Panel Editor by using File > Save PCB or File > Save As PCB, or exit to the CAM
Editor and save it as you would normally.

In the Panel Editor, if you wish to overwrite the original preview.cam file (not recommended), select File >
Save PCB. Skip this step, as you should retain the original preview.cam file for other demonstration purposes.

OR

Use File > Save As PCB, which functions the same as the File > Save As command in the CAM Editor. The
Save As dialog appears and you are prompted to enter a name for a new file: use "preview_panel.cam"

Export Panel

Once you have completed the panel creation process, it's time to export the files for plotting. There are several
export options in the Panel Editor. Once you have panelized a job you may export it as individual files (Gerber
data, composites, drill & mill data), or as a complete panel to some CAD systems (DXF, ODB++, GenCAD).

Export Gerber

Exporting a panel as Gerber files is essentially the same as exporting individual layers using the standard File >
Export Gerber Data command. Refer to the File > Export Panel > Gerber Data command for details, with
the following caveats:

Pag. 17 di 18
mk:@MSITStore:C:\Programmi\DownStream%20Technologies\CAM350%2010.1\camnt95.chm::/Tutorials/Panel_...
Panel Gerber layers will be flattened on export: all symbol and panel data will be exploded and exported as
normal Gerber data, while the step & repeat codes for the step images themselves will be retained (if
exported in a Gerber format other than 274D). If you reimport these files, you will not get an intelligent
panelized database, as you do by saving the .CAM file.

Layers containing venting patterns will be exported as composites. If imported back into the application,
they appear as multi-layer composites, which must be viewed using View > Composite or Tables >
Composites.

Export Composites

If your panel contains any composites from the original one-up design, you must export these using File >
Export Panel > Composites. Again, this command is essentially the same as the CAM Editor equivalent, with
the exceptions noted above.

Export Drill/Mill Data

NC Data files are exported in the same fashion as they are in the CAM Editor, with the exception that the
drill/mill files will contain any panel drills (from symbols, etc), as well as all drills used in the step images of the
panel.

Refer to File > Export Panel > Drill Data & File > Export Panel > Mill Data for details.

Export DXF

Functions the same as its CAM Editor equivalent.

Refer to File > Export Panel > DXF for details.

Export ODB++

Functions the same as its CAM Editor equivalent.

Refer to File > Export Panel > ODB++ for details.

Pag. 18 di 18

Você também pode gostar