Index: src_plugins/ddraft/cli.c =================================================================== --- src_plugins/ddraft/cli.c (revision 18836) +++ src_plugins/ddraft/cli.c (revision 18837) @@ -49,15 +49,23 @@ CLI_ANGLE, CLI_ABSOLUTE, CLI_RELATIVE, + CLI_PERP, CLI_PARAL, CLI_TANGENT, + CLI_CENTER, + CLI_START, + CLI_END, + CLI_DIST, CLI_OFFS, - CLI_COORD, - CLI_ID + CLI_COORD } cli_ntype_t; +#define case_object \ + case CLI_PERP: case CLI_PARAL: case CLI_TANGENT: case CLI_CENTER: \ + case CLI_START: case CLI_END + typedef struct cli_ntname_s { const char *name; cli_ntype_t type; @@ -72,6 +80,9 @@ {"perpendicular", CLI_PERP}, {"parallel", CLI_PARAL}, {"tangential", CLI_TANGENT}, + {"center", CLI_CENTER}, + {"start", CLI_START}, + {"end", CLI_END}, {"coord", CLI_COORD}, {"distance", CLI_DIST}, {"length", CLI_DIST}, @@ -213,6 +224,9 @@ dst[i-1].angle = strtod(s, &next); dst[i-1].invalid = (dst[i-1].angle > 360.0) || (dst[i-1].angle < -360.0); break; + case_object : + dst[i-1].id = strtol(s, &next, 10); + break; default: APPEND(CLI_INVALID, next); } Index: src_plugins/ddraft/cli_line.c =================================================================== --- src_plugins/ddraft/cli_line.c (revision 18836) +++ src_plugins/ddraft/cli_line.c (revision 18837) @@ -177,6 +177,17 @@ replace=1; pcb_snprintf(buff, sizeof(buff), "~%.08$$mm", pcb_distance(pcb_crosshair.X, pcb_crosshair.Y, ox, oy)); break; + case_object: ; + { + void *p1, *p2, *p3; + pcb_any_obj_t *o; + if (pcb_search_screen(pcb_crosshair.X, pcb_crosshair.Y, PCB_OBJ_LINE | PCB_OBJ_ARC, &p1, &p2, &p3) == 0) + return 0; + o = p2; + replace=1; + pcb_snprintf(buff, sizeof(buff), "%s %ld", find_rev_type(argv[by].type), (long)o->ID); + } + break; default: return 0; }