static void assert_this_net_with_text( xorn_revision_t rev, xorn_object_t ob, int color, int text_color) { xorn_object_t *objects; size_t count; assert(xorn_get_objects_attached_to(rev, NULL, &objects, &count) == 0); assert(objects != NULL); assert(count == 1); assert(objects[0] == ob); assert(xorn_get_object_type(rev, ob) == xornsch_obtype_net); assert(xornsch_get_net_data(rev, ob)->color == color); free(objects); assert(xorn_get_objects_attached_to(rev, ob, &objects, &count) == 0); assert(objects != NULL); assert(count == 1); assert(xorn_get_object_type(rev, objects[0]) == xornsch_obtype_text); assert(xornsch_get_text_data(rev, objects[0])->color == text_color); free(objects); }
static void assert_this_net(xorn_revision_t rev, xorn_object_t ob, int color) { xorn_object_t *objects; size_t count; assert(xorn_get_objects(rev, &objects, &count) == 0); assert(objects != NULL); assert(count == 1); assert(objects[0] == ob); assert(xorn_get_object_type(rev, ob) == xornsch_obtype_net); assert(xornsch_get_net_data(rev, ob)->color == color); free(objects); }
static PyObject *Revision_get_object_data( Revision *self, PyObject *args, PyObject *kwds) { PyObject *ob_arg = NULL; static char *kwlist[] = { "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!:Revision.get_object_data", kwlist, &ObjectType, &ob_arg)) return NULL; xorn_object_t ob = ((Object *)ob_arg)->ob; xorn_obtype_t type = xorn_get_object_type(self->rev, ob); switch (type) { case xorn_obtype_none: PyErr_SetNone(PyExc_KeyError); return NULL; case xornsch_obtype_arc: return construct_arc(xornsch_get_arc_data(self->rev, ob)); case xornsch_obtype_box: return construct_box(xornsch_get_box_data(self->rev, ob)); case xornsch_obtype_circle: return construct_circle( xornsch_get_circle_data(self->rev, ob)); case xornsch_obtype_component: return construct_component( xornsch_get_component_data(self->rev, ob)); case xornsch_obtype_line: return construct_line(xornsch_get_line_data(self->rev, ob)); case xornsch_obtype_net: return construct_net(xornsch_get_net_data(self->rev, ob)); case xornsch_obtype_path: return construct_path(xornsch_get_path_data(self->rev, ob)); case xornsch_obtype_picture: return construct_picture( xornsch_get_picture_data(self->rev, ob)); case xornsch_obtype_text: return construct_text(xornsch_get_text_data(self->rev, ob)); } char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "Object type not supported (%d)", type); PyErr_SetString(PyExc_ValueError, buf); return NULL; }
int main(void) { xorn_revision_t rev; rev = xorn_new_revision(NULL); /** [discrete] */ xorn_object_t *objects; size_t count; unsigned int i; xorn_get_objects(rev, &objects, &count); for (i = 0; i < count; i++) { xorn_obtype_t type = xorn_get_object_type(rev, objects[i]); if (type == xornsch_obtype_circle && xornsch_get_circle_data(rev, objects[i])->radius == 0.) xorn_delete_object(rev, objects[i], NULL); if (type == xornsch_obtype_arc && xornsch_get_arc_data(rev, objects[i])->radius == 0.) xorn_delete_object(rev, objects[i], NULL); } free(objects); /** [discrete] */ /** [integrated] */ xorn_selection_t sel = xornsch_select_by_radius(rev, 0.); xorn_delete_selected_objects(rev, sel, NULL); xorn_free_selection(sel); /** [integrated] */ xorn_free_revision(rev); return 0; }
static PyObject *Revision_relocate_object( Revision *self, PyObject *args, PyObject *kwds) { PyObject *ob_arg = NULL, *attach_to_arg = NULL, *insert_before_arg = NULL; static char *kwlist[] = { "ob", "attach_to", "insert_before", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!OO:Revision.relocate_object", kwlist, &ObjectType, &ob_arg, &attach_to_arg, &insert_before_arg)) return NULL; if (attach_to_arg != Py_None && !PyObject_TypeCheck(attach_to_arg, &ObjectType)) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "Revision.relocate_object() argument 2 " "must be %.50s or None, not %.50s", ObjectType.tp_name, attach_to_arg->ob_type->tp_name); PyErr_SetString(PyExc_TypeError, buf); return NULL; } if (insert_before_arg != Py_None && !PyObject_TypeCheck(insert_before_arg, &ObjectType)) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "Revision.relocate_object() argument 3 " "must be %.50s or None, not %.50s", ObjectType.tp_name, insert_before_arg->ob_type->tp_name); PyErr_SetString(PyExc_TypeError, buf); return NULL; } if (!xorn_revision_is_transient(self->rev)) return not_transient(); xorn_obtype_t ob_type = xorn_get_object_type( self->rev, ((Object *)ob_arg)->ob); if (ob_type == xorn_obtype_none) { PyErr_SetString(PyExc_KeyError, "Object does not exist"); return NULL; } if (attach_to_arg != Py_None) { if (ob_type != xornsch_obtype_text) { PyErr_SetString(PyExc_ValueError, "Only text objects can be attached"); return NULL; } switch (xorn_get_object_type(self->rev, ((Object *)attach_to_arg)->ob)) { case xorn_obtype_none: PyErr_SetString(PyExc_KeyError, "Parent object does not exist"); return NULL; case xornsch_obtype_net: case xornsch_obtype_component: break; default: PyErr_SetString(PyExc_ValueError, "Can only attach to net and " "component objects"); return NULL; } } if (insert_before_arg != Py_None) { xorn_object_t attached_to; if (xorn_get_object_location( self->rev, ((Object *)insert_before_arg)->ob, &attached_to, NULL) == -1) { PyErr_SetString(PyExc_KeyError, "Reference object does not exist"); return NULL; } if (attached_to != (attach_to_arg == Py_None ? NULL : ((Object *)attach_to_arg)->ob)) { PyErr_SetString(PyExc_ValueError, "Invalid reference object"); return NULL; } } if (xorn_relocate_object(self->rev, ((Object *)ob_arg)->ob, attach_to_arg == Py_None ? NULL : ((Object *)attach_to_arg)->ob, insert_before_arg == Py_None ? NULL : ((Object *)insert_before_arg)->ob) == -1) return PyErr_NoMemory(); Py_INCREF(Py_None); return Py_None; }