Index: trunk/src/insert.c =================================================================== --- trunk/src/insert.c (revision 4579) +++ trunk/src/insert.c (revision 4580) @@ -51,7 +51,6 @@ /* --------------------------------------------------------------------------- * some local prototypes */ -static void *InsertPointIntoLine(pcb_opctx_t *ctx, LayerTypePtr, LineTypePtr); static void *InsertPointIntoPolygon(pcb_opctx_t *ctx, LayerTypePtr, PolygonTypePtr); /* --------------------------------------------------------------------------- @@ -73,42 +72,6 @@ }; /* --------------------------------------------------------------------------- - * inserts a point into a line - */ -static void *InsertPointIntoLine(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line) -{ - LineTypePtr line; - Coord X, Y; - - if (((Line->Point1.X == ctx->insert.x) && (Line->Point1.Y == ctx->insert.y)) || - ((Line->Point2.X == ctx->insert.x) && (Line->Point2.Y == ctx->insert.y))) - return (NULL); - X = Line->Point2.X; - Y = Line->Point2.Y; - AddObjectToMoveUndoList(PCB_TYPE_LINE_POINT, Layer, Line, &Line->Point2, ctx->insert.x - X, ctx->insert.y - Y); - EraseLine(Line); - r_delete_entry(Layer->line_tree, (BoxTypePtr) Line); - RestoreToPolygon(PCB->Data, PCB_TYPE_LINE, Layer, Line); - Line->Point2.X = ctx->insert.x; - Line->Point2.Y = ctx->insert.y; - SetLineBoundingBox(Line); - r_insert_entry(Layer->line_tree, (BoxTypePtr) Line, 0); - ClearFromPolygon(PCB->Data, PCB_TYPE_LINE, Layer, Line); - DrawLine(Layer, Line); - /* we must create after playing with Line since creation may - * invalidate the line pointer - */ - if ((line = CreateDrawnLineOnLayer(Layer, ctx->insert.x, ctx->insert.y, X, Y, Line->Thickness, Line->Clearance, Line->Flags))) { - AddObjectToCreateUndoList(PCB_TYPE_LINE, Layer, line, line); - DrawLine(Layer, line); - ClearFromPolygon(PCB->Data, PCB_TYPE_LINE, Layer, line); - /* creation call adds it to the rtree */ - } - Draw(); - return (line); -} - -/* --------------------------------------------------------------------------- * inserts a point into a polygon */ static void *InsertPointIntoPolygon(pcb_opctx_t *ctx, LayerTypePtr Layer, PolygonTypePtr Polygon) Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 4579) +++ trunk/src/obj_line.c (revision 4580) @@ -675,3 +675,36 @@ return (Line); } +/* inserts a point into a line */ +void *InsertPointIntoLine(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line) +{ + LineTypePtr line; + Coord X, Y; + + if (((Line->Point1.X == ctx->insert.x) && (Line->Point1.Y == ctx->insert.y)) || + ((Line->Point2.X == ctx->insert.x) && (Line->Point2.Y == ctx->insert.y))) + return (NULL); + X = Line->Point2.X; + Y = Line->Point2.Y; + AddObjectToMoveUndoList(PCB_TYPE_LINE_POINT, Layer, Line, &Line->Point2, ctx->insert.x - X, ctx->insert.y - Y); + EraseLine(Line); + r_delete_entry(Layer->line_tree, (BoxTypePtr) Line); + RestoreToPolygon(PCB->Data, PCB_TYPE_LINE, Layer, Line); + Line->Point2.X = ctx->insert.x; + Line->Point2.Y = ctx->insert.y; + SetLineBoundingBox(Line); + r_insert_entry(Layer->line_tree, (BoxTypePtr) Line, 0); + ClearFromPolygon(PCB->Data, PCB_TYPE_LINE, Layer, Line); + DrawLine(Layer, Line); + /* we must create after playing with Line since creation may + * invalidate the line pointer + */ + if ((line = CreateDrawnLineOnLayer(Layer, ctx->insert.x, ctx->insert.y, X, Y, Line->Thickness, Line->Clearance, Line->Flags))) { + AddObjectToCreateUndoList(PCB_TYPE_LINE, Layer, line, line); + DrawLine(Layer, line); + ClearFromPolygon(PCB->Data, PCB_TYPE_LINE, Layer, line); + /* creation call adds it to the rtree */ + } + Draw(); + return (line); +} Index: trunk/src/obj_line_op.h =================================================================== --- trunk/src/obj_line_op.h (revision 4579) +++ trunk/src/obj_line_op.h (revision 4580) @@ -24,12 +24,11 @@ * */ -/*** Standard operations on line ***/ +/*** Standard operations on line segments ***/ #include "operation.h" void *AddLineToBuffer(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); - void *ChangeLineSize(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); void *ChangeLineClearSize(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); void *ChangeLineName(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); @@ -36,7 +35,7 @@ void *ChangeLineJoin(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); void *SetLineJoin(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); void *ClrLineJoin(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); - +void *InsertPointIntoLine(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); void *MoveLineToBuffer(pcb_opctx_t *ctx, LayerType * layer, LineType * line); void *CopyLine(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line); void *MoveLine(pcb_opctx_t *ctx, LayerTypePtr Layer, LineTypePtr Line);