This commit is contained in:
246
trunk/ulp/source/pcb-gcode.h
Normal file
246
trunk/ulp/source/pcb-gcode.h
Normal file
@@ -0,0 +1,246 @@
|
||||
// -*- Mode: Eagle -*-
|
||||
//
|
||||
// Constants and enums for pcb-gcode.ulp.
|
||||
//
|
||||
// (Actually, they should be consts and typedefs,
|
||||
// but Eagle doesn't support that.)
|
||||
//
|
||||
|
||||
//
|
||||
// No users options here.
|
||||
//
|
||||
|
||||
#include "string.h"
|
||||
|
||||
string RELEASE = "NOT SET";
|
||||
string REVISION = "000";
|
||||
|
||||
string g_path = ".";
|
||||
|
||||
string BOARD_NAME;
|
||||
board(B) { BOARD_NAME = B.name; }
|
||||
|
||||
enum {
|
||||
U_MICRONS = 0,
|
||||
U_MILLIMETERS = 1,
|
||||
U_MILS = 2,
|
||||
U_INCHES = 3,
|
||||
U_INTERNALS = 4
|
||||
};
|
||||
|
||||
enum {
|
||||
OUTPUT_MICRONS = 0,
|
||||
OUTPUT_MILLIMETERS = 1,
|
||||
OUTPUT_MILS = 2,
|
||||
OUTPUT_INCHES = 3,
|
||||
OUTPUT_INTERNALS = 4
|
||||
};
|
||||
|
||||
enum { NO = 0, YES = 1 };
|
||||
enum { false = 0, true = 1 };
|
||||
|
||||
enum { TASK_INVALID, TASK_OUTLINES, TASK_FILL };
|
||||
|
||||
enum { ST_INVALID,
|
||||
ST_START_LINE, ST_CONTINUE_LINE, ST_END_LINE,
|
||||
ST_DRILL,
|
||||
ST_FILL,
|
||||
ST_ARC_BEGIN,
|
||||
ST_ARC_END};
|
||||
|
||||
enum { TOP = 0, BOTTOM = 1, MILL = 2, TEXT = 3, ALL = 4 };
|
||||
|
||||
int PROGRAM_NAME_ARG = 0;
|
||||
int FILENAME_ARG = 1;
|
||||
int WIDTH_ARG = 2;
|
||||
int ISO_ARG = 3;
|
||||
int PASS_ARG = 4;
|
||||
int PHASE_ARG = 5;
|
||||
|
||||
real COORD_TOLERANCE = 0.0001;
|
||||
|
||||
string OUTLINES_SIGNAL_NAME = "_OUTLINES_";
|
||||
|
||||
int TOP_LAYER = 1;
|
||||
int BOTTOM_LAYER = 16;
|
||||
int MILL_LAYER = 46;
|
||||
int TEXT_LAYER = 46; // same as MILL_LAYER
|
||||
|
||||
int OUTLINES = 1;
|
||||
int FILL = 2;
|
||||
int MILL_BOARD = 3;
|
||||
int MILL_TEXT = 4;
|
||||
|
||||
enum {
|
||||
PH_INVALID = 0,
|
||||
PH_TOP_OUT_GEN = 1,
|
||||
PH_TOP_OUT_WRITE = 2,
|
||||
PH_TOP_FILL_GEN = 3,
|
||||
PH_TOP_FILL_WRITE = 4,
|
||||
PH_BOTTOM_OUT_GEN = 5,
|
||||
PH_BOTTOM_OUT_WRITE = 6,
|
||||
PH_BOTTOM_FILL_GEN = 7,
|
||||
PH_BOTTOM_FILL_WRITE = 8,
|
||||
PH_TOP_DRILL = 9,
|
||||
PH_BOTTOM_DRILL = 10,
|
||||
PH_MILL = 11,
|
||||
PH_TEXT = 12,
|
||||
|
||||
PH_LAST_PHASE = 13
|
||||
};
|
||||
|
||||
string PHASE_NAME[] = {
|
||||
"invalid",
|
||||
"Gen_Top_Outlines", "Write_Top_Outlines",
|
||||
"Gen_Top_Fill", "Write_Top_Fill",
|
||||
"Gen_Bottom_Outlines", "Write_Bottom_Outlines",
|
||||
"Gen_Bottom_Fill", "Write_Bottom_Fill",
|
||||
"Top_Drills", "Bottom_Drills",
|
||||
"Milling",
|
||||
"Text",
|
||||
"Finished!"
|
||||
};
|
||||
|
||||
string get_phase_name(int phase)
|
||||
{
|
||||
return PHASE_NAME[phase];
|
||||
}
|
||||
|
||||
// Used to convert a numeric state into a text name for that state.
|
||||
string state_text[] = {
|
||||
"ST_START_LINE",
|
||||
"ST_CONTINUE_LINE",
|
||||
"ST_END_LINE",
|
||||
"ST_DRILL",
|
||||
"ST_FILL"
|
||||
};
|
||||
|
||||
real ROUND_FACTOR = 1000;
|
||||
|
||||
real BORDER_SIZE = 0.001;
|
||||
|
||||
int DRILL_SIZE = 0;
|
||||
int DRILL_X = 1;
|
||||
int DRILL_Y = 2;
|
||||
|
||||
string UNIT_OF_MEASURE = "not set";
|
||||
|
||||
real g_width = 0.01;
|
||||
int g_side = TOP;
|
||||
|
||||
// Which phase of the process we're working on.
|
||||
int g_phase;
|
||||
|
||||
string IS_SETUP_FILE_NAME = "pcb_gcode_is_setup";
|
||||
|
||||
// Current profile array and indices for it.
|
||||
string CURRENT_PROFILE[];
|
||||
enum {
|
||||
FILE_NAME = 0,
|
||||
AUTHOR = 1,
|
||||
DESCRIPTION = 2
|
||||
}
|
||||
|
||||
string get_current_profile()
|
||||
{
|
||||
string files[];
|
||||
int num_files = fileglob(files, g_path + "/" + IS_SETUP_FILE_NAME);
|
||||
if (num_files > 0) {
|
||||
fileread(CURRENT_PROFILE, g_path + "/" + IS_SETUP_FILE_NAME);
|
||||
}
|
||||
else {
|
||||
CURRENT_PROFILE[FILE_NAME] = "NONE";
|
||||
CURRENT_PROFILE[AUTHOR] = "NONE";
|
||||
CURRENT_PROFILE[DESCRIPTION] = "NONE";
|
||||
return "NONE";
|
||||
}
|
||||
|
||||
return CURRENT_PROFILE[DESCRIPTION];
|
||||
}
|
||||
|
||||
void set_current_profile(string profile_fields)
|
||||
{
|
||||
strsplit(CURRENT_PROFILE, profile_fields, '\t');
|
||||
output(g_path + "/" + IS_SETUP_FILE_NAME) {
|
||||
printf("%s\n", CURRENT_PROFILE[FILE_NAME]);
|
||||
printf("%s\n", CURRENT_PROFILE[AUTHOR]);
|
||||
printf("%s\n", CURRENT_PROFILE[DESCRIPTION]);
|
||||
}
|
||||
}
|
||||
|
||||
int program_is_setup()
|
||||
{
|
||||
if (get_current_profile() == "NONE")
|
||||
return NO;
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
// Find the path where all our files are located. It must be one of the directories in the
|
||||
// Options | Directories | User Language Programs settings.
|
||||
|
||||
|
||||
void get_path()
|
||||
{
|
||||
int index = 0;
|
||||
string last_g_path;
|
||||
|
||||
board(B) g_path = filedir(B.name);
|
||||
|
||||
last_g_path = g_path;
|
||||
while (g_path > "") {
|
||||
g_path = remove_last_dir(g_path);
|
||||
if (filetime(g_path + "/source/pcb-gcode.h")) {
|
||||
return;
|
||||
}
|
||||
if (last_g_path == g_path) {
|
||||
break;
|
||||
}
|
||||
last_g_path = g_path;
|
||||
}
|
||||
|
||||
while (path_ulp[index] != "" && index < 10) {
|
||||
if(filetime(path_ulp[index] + "/source/pcb-gcode.h")) {
|
||||
g_path = path_ulp[index];
|
||||
return;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
get_path();
|
||||
|
||||
if (g_path == "") {
|
||||
dlgMessageBox("There is a problem with your installation of pcb-gcode.\n" +
|
||||
"You probably need to add the path to pcb-gcode's folder in " +
|
||||
"EAGLE's Control Panel | Options | Directories | User Language Programs.\n"
|
||||
"Please see docs/readme.html");
|
||||
exit(-1);
|
||||
}
|
||||
else {
|
||||
// dlgMessageBox("g_path = " + g_path);
|
||||
}
|
||||
|
||||
// This reads the current profile into CURRENT_PROFILE, if available.
|
||||
get_current_profile();
|
||||
|
||||
// I know, I know. No way around it that I see right now.
|
||||
string g_real_to_string_string = "";
|
||||
string real_to_string(real n)
|
||||
{
|
||||
sprintf(g_real_to_string_string, "%f", n);
|
||||
return g_real_to_string_string;
|
||||
}
|
||||
|
||||
string g_int_to_string_string = "";
|
||||
string int_to_string(int n)
|
||||
{
|
||||
sprintf(g_int_to_string_string, "%d", n);
|
||||
return g_int_to_string_string;
|
||||
}
|
||||
|
||||
|
||||
// Used to show debugging information.
|
||||
string g_debug;
|
||||
|
||||
Reference in New Issue
Block a user