/* --------------------------------------------------------------------------- * copies a polygon */ static void * CopyPolygon (LayerType *Layer, PolygonType *Polygon) { PolygonType *polygon; polygon = CreateNewPolygon (Layer, NoFlags ()); CopyPolygonLowLevel (polygon, Polygon); MovePolygonLowLevel (polygon, DeltaX, DeltaY); if (!Layer->polygon_tree) Layer->polygon_tree = r_create_tree (NULL, 0, 0); r_insert_entry (Layer->polygon_tree, (BoxType *) polygon, 0); InitClip (PCB->Data, Layer, polygon); DrawPolygon (Layer, polygon); AddObjectToCreateUndoList (POLYGON_TYPE, Layer, polygon, polygon); return (polygon); }
static void * MyMovePolygonLowLevel (DataType *Data, LayerType *Layer, PolygonType *Polygon, Coord dx, Coord dy) { if (Data) { r_delete_entry (Layer->polygon_tree, (BoxType *) Polygon); } /* move.c actually only moves points, note no Data/Layer args */ MovePolygonLowLevel (Polygon, dx, dy); if (Data) { r_insert_entry (Layer->polygon_tree, (BoxType *) Polygon, 0); InitClip(Data, Layer, Polygon); } return Polygon; }
/* --------------------------------------------------------------------------- * moves a polygon */ static void * MovePolygon (LayerTypePtr Layer, PolygonTypePtr Polygon) { if (Layer->On) { ErasePolygon (Polygon); } r_delete_entry (Layer->polygon_tree, (BoxType *)Polygon); MovePolygonLowLevel (Polygon, DeltaX, DeltaY); r_insert_entry (Layer->polygon_tree, (BoxType *)Polygon, 0); InitClip (PCB->Data, Layer, Polygon); if (Layer->On) { DrawPolygon (Layer, Polygon); Draw (); } return (Polygon); }