コード例 #1
0
ファイル: copy_attached.c プロジェクト: rlutz/geda-gaf
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);
}
コード例 #2
0
ファイル: copy_attached.c プロジェクト: rlutz/geda-gaf
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);
}
コード例 #3
0
ファイル: revision.c プロジェクト: SayCV/geda-gaf
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;
}
コード例 #4
0
ファイル: motivation.c プロジェクト: rlutz/geda-gaf
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;
}
コード例 #5
0
ファイル: revision.c プロジェクト: SayCV/geda-gaf
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;
}