Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 5205) +++ trunk/src/obj_line.c (revision 5206) @@ -258,8 +258,21 @@ } +pcb_coord_t pcb_line_length(const pcb_line_t *line) +{ + pcb_coord_t dx = line->Point1.X - line->Point2.X; + pcb_coord_t dy = line->Point1.Y - line->Point2.Y; + return pcb_round(sqrt(dx*dx + dy*dy)); +} +pcb_coord_t pcb_line_area(const pcb_line_t *line) +{ + return + pcb_line_length(line) * line->Thickness /* body */ + + line->Thickness * line->Thickness * M_PI; /* cap circles */ +} + /*** ops ***/ /* copies a line to buffer */ Index: trunk/src/obj_line.h =================================================================== --- trunk/src/obj_line.h (revision 5205) +++ trunk/src/obj_line.h (revision 5206) @@ -61,6 +61,10 @@ void pcb_line_rotate90(pcb_line_t *Line, pcb_coord_t X, pcb_coord_t Y, unsigned Number); void pcb_line_rotate(pcb_layer_t *layer, pcb_line_t *line, pcb_coord_t X, pcb_coord_t Y, double cosa, double sina); +pcb_coord_t pcb_line_length(const pcb_line_t *line); +pcb_coord_t pcb_line_area(const pcb_line_t *line); + + /* hash */ int pcb_line_eq(const pcb_element_t *e1, const pcb_line_t *l1, const pcb_element_t *e2, const pcb_line_t *l2); unsigned int pcb_line_hash(const pcb_element_t *e, const pcb_line_t *l);