void test_nodestore () { gint i; NodeStore *store; Part *part; Wire *wire; Node *node; Coords p_pos = {111.,22.}; Coords n_pos = {111.,33.}; Coords w_pos = {111.,7.}; Coords w_len = {0.,88.}; store = node_store_new (); part = part_new (); wire = wire_new (); // add one Pin with a offset that is on the wire when rotation N*Pi times Pin *pin = g_new (Pin, 1); pin->offset.x = n_pos.x - p_pos.x; pin->offset.y = n_pos.y - p_pos.y; GSList *list = NULL; list = g_slist_prepend (list, pin); part_set_pins (part, list); g_slist_free (list); item_data_set_pos (ITEM_DATA (part), &p_pos); item_data_set_pos (ITEM_DATA (wire), &w_pos); wire_set_length (wire, &w_len); node_store_add_part (store, part); node_store_add_wire (store, wire); { for (i=0; i<11; i++) item_data_rotate (ITEM_DATA (part), 90, NULL); item_data_set_pos (ITEM_DATA (part), &w_len); for (i=0; i<4; i++) item_data_rotate (ITEM_DATA (part), 90, NULL); item_data_set_pos (ITEM_DATA (part), &n_pos); for (i=0; i<7; i++) item_data_rotate (ITEM_DATA (part), -90, NULL); item_data_set_pos (ITEM_DATA (part), &p_pos); } g_assert (node_store_is_wire_at_pos (store, n_pos)); g_assert (node_store_is_pin_at_pos (store, n_pos)); node = node_store_get_node (store, n_pos); g_assert (!node_is_empty (node)); g_assert (node_needs_dot (node)); node_store_remove_part (store, part); node_store_remove_wire (store, wire); g_object_unref (store); }
static void rotate_items (Sheet *sheet, GList *items) { GList *list, *item_data_list; Coords center, b1, b2; item_data_list = NULL; for (list = items; list; list = list->next) { item_data_list = g_list_prepend (item_data_list, sheet_item_get_data (list->data)); } item_data_list_get_absolute_bbox (item_data_list, &b1, &b2); center.x = (b2.x + b1.x) / 2.; center.y = (b2.y + b1.y) / 2.; snap_to_grid (sheet->grid, ¢er.x, ¢er.y); for (list = item_data_list; list; list = list->next) { ItemData *item_data = list->data; if (sheet->state == SHEET_STATE_NONE) item_data_unregister (item_data); item_data_rotate (item_data, 90, ¢er); if (sheet->state == SHEET_STATE_NONE) item_data_register (item_data); } g_list_free (item_data_list); }
static void rotate_items (Sheet *sheet, GList *items, gint angle) { GList *list, *item_data_list; Coords center, b1, b2; item_data_list = NULL; for (list = items; list; list = list->next) { item_data_list = g_list_prepend (item_data_list, sheet_item_get_data (list->data)); } item_data_list_get_absolute_bbox (item_data_list, &b1, &b2); center = coords_average(&b1, &b2); snap_to_grid (sheet->grid, ¢er.x, ¢er.y); for (list = item_data_list; list; list = list->next) { ItemData *item_data = list->data; if (item_data==NULL) continue; if (sheet->state == SHEET_STATE_NONE) item_data_unregister (item_data); item_data_rotate (item_data, angle, ¢er); if (sheet->state == SHEET_STATE_NONE) item_data_register (item_data); } g_list_free (item_data_list); }
void sheet_item_rotate (SheetItem *sheet_item, int angle, Coords *center) { g_return_if_fail (sheet_item != NULL); g_return_if_fail (IS_SHEET_ITEM (sheet_item)); item_data_rotate (sheet_item->priv->data, angle, center); }