1
0
mirror of git://projects.qi-hardware.com/cae-tools.git synced 2025-01-03 21:50:15 +02:00

cameo: cleaned up and documented the tool compensation

- README, lang.l, lang.y: renamed the "tool" command to "offset"
- README: documented "offset"
- ops.h, ops.c (tool_comp_paths), cameo.c (main), lang.y: added
  parameter to tool_comp_paths to treat all paths as internal
- lang.l, lang.y: added option "inside" to the "offset" command
- lang.y: "offset" can now take multiple options in any order
This commit is contained in:
Werner Almesberger 2010-12-14 23:37:31 -03:00
parent 68d5eff7cd
commit 3ae3d6cdd3
6 changed files with 55 additions and 18 deletions

View File

@ -110,4 +110,15 @@ Vertical adjustment:
Tool compensation:
tool [dog]
offset [dog] [inside]
"offset" offsets the toolpaths by the tool radius. By default, it offsets
the outermost toolpath to the outside and all other toolpaths to the
inside. This can be overridden with the #%outside directive in a gnuplot
file or the "inside" option to "offset". "inside" has precedence over
"#%outside".
Concave corners on an outside path are normally cut such that the corner
is round, leaving material at and near the corner point. The option "dog"
changes this to cutting a "dogbone" hole such that material is also
removed up to the corner point.

View File

@ -100,7 +100,7 @@ int main(int argc, char **argv)
paths = gerber_read(in, r);
else
paths = gnuplot_read(in, r);
tool_comp_paths(paths, dog_bone);
tool_comp_paths(paths, dog_bone, 0);
gnuplot_write(out, paths);
return 0;

View File

@ -43,7 +43,7 @@ NUM -?[0-9]+\.?[0-9]*
<INITIAL>array return TOK_ARRAY;
<INITIAL>clear return TOK_CLEAR;
<INITIAL>reset return TOK_RESET;
<INITIAL>tool return TOK_TOOL;
<INITIAL>offset return TOK_OFFSET;
<INITIAL>translate return TOK_TRANSLATE;
<INITIAL>z return TOK_Z;
@ -55,6 +55,7 @@ NUM -?[0-9]+\.?[0-9]*
return TOK_WRITE; }
<INITIAL>dog return TOK_DOG;
<INITIAL>inside return TOK_INSIDE;
<INITIAL>mm metric = 1;
<INITIAL>mil metric = 0;

View File

@ -113,19 +113,24 @@ static void align(int ref, double x, double y)
%union {
double num;
char *str;
enum {
OO_DOG = 1 << 0,
OO_INSIDE = 1 << 1,
} oopt;
};
%token TOK_ALIGN TOK_ARRAY TOK_CLEAR TOK_RESET TOK_TOOL
%token TOK_ALIGN TOK_ARRAY TOK_CLEAR TOK_RESET TOK_OFFSET
%token TOK_TRANSLATE TOK_Z
%token TOK_GERBER TOK_GNUPLOT TOK_WRITE
%token TOK_DOG
%token TOK_DOG TOK_INSIDE
%token <num> NUM_EXP_MIL NUM_EXP_MM NUM_IMP_MIL NUM_IMP_MM REF
%token <str> STRING
%type <str> opt_filename
%type <num> dimen number
%type <oopt> offset_options offset_option
%%
@ -172,13 +177,10 @@ command:
{
xo = yo = 0;
}
| TOK_TOOL
| TOK_OFFSET offset_options
{
tool_comp_paths(paths, 0);
}
| TOK_TOOL TOK_DOG
{
tool_comp_paths(paths, 1);
tool_comp_paths(paths,
!!($2 & OO_DOG), !!($2 & OO_INSIDE));
}
| TOK_TRANSLATE dimen dimen
{
@ -251,3 +253,25 @@ number:
$$ = $1;
}
;
offset_options:
{
$$ = 0;
}
| offset_option offset_options
{
$$ = $1 | $2;
}
;
offset_option:
TOK_DOG
{
$$ = OO_DOG;
}
| TOK_INSIDE
{
$$ = OO_INSIDE;
}
;

View File

@ -29,7 +29,7 @@ static void tool_comp_1(struct path *path, int inside, int dog_bone)
}
void tool_comp_paths(struct path *paths, int dog_bone)
void tool_comp_paths(struct path *paths, int dog_bone, int all_inside)
{
struct path *leftmost, *path;
@ -46,10 +46,11 @@ void tool_comp_paths(struct path *paths, int dog_bone)
leftmost = path_find_leftmost(paths);
for (path = paths; path; path = path->next)
if (path != leftmost && !path->outside)
if (path != leftmost && (all_inside || !path->outside))
tool_comp_1(path, 1, dog_bone);
for (path = paths; path; path = path->next)
if (path != leftmost && path->outside)
tool_comp_1(path, 0, dog_bone);
tool_comp_1(leftmost, 0, dog_bone);
if (!all_inside)
for (path = paths; path; path = path->next)
if (path != leftmost && path->outside)
tool_comp_1(path, 0, dog_bone);
tool_comp_1(leftmost, !all_inside, dog_bone);
}

View File

@ -18,6 +18,6 @@
#include "path.h"
void tool_comp_paths(struct path *paths, int dog_bone);
void tool_comp_paths(struct path *paths, int dog_bone, int all_inside);
#endif /* !OPS_H */