示例#1
0
static PyObject*
connects(PygtsSegment *self, PyObject *args)
{
  PyObject *v1_,*v2_;
  GtsVertex *v1,*v2;

  SELF_CHECK

  /* Parse the args */
  if(! PyArg_ParseTuple(args, "OO", &v1_, &v2_) ) {
    return NULL;
  }

  /* Convert to PygtsObjects */
  if(!pygts_vertex_check(v1_)) {
    PyErr_SetString(PyExc_TypeError,"expected a Vertex");
    return NULL;
  }
  v1 = PYGTS_VERTEX_AS_GTS_VERTEX(v1_);

  if(!pygts_vertex_check(v2_)) {
    PyErr_SetString(PyExc_TypeError,"expected a Vertex");
    return NULL;
  }
  v2 = PYGTS_VERTEX_AS_GTS_VERTEX(v2_);

  if(gts_segment_connect(PYGTS_SEGMENT_AS_GTS_SEGMENT(self),v1,v2)) {
    Py_INCREF(Py_True);
    return Py_True;
  }
  else {
    Py_INCREF(Py_False);
    return Py_False;
  }
}
示例#2
0
文件: triangle.c 项目: finetjul/gts
/**
 * gts_triangle_set:
 * @triangle: a #GtsTriangle.
 * @e1: a #GtsEdge.
 * @e2: another #GtsEdge touching @e1.
 * @e3: another #GtsEdge touching both @e1 and @e2.
 *
 * Sets the edge of @triangle to @e1, @e2 and @e3 while checking that they
 * define a valid triangle.
 */
void gts_triangle_set (GtsTriangle * triangle,
                       GtsEdge * e1,
                       GtsEdge * e2,
                       GtsEdge * e3)
{
    g_return_if_fail (e1 != NULL);
    g_return_if_fail (e2 != NULL);
    g_return_if_fail (e3 != NULL);
    g_return_if_fail (e1 != e2 && e1 != e3 && e2 != e3);

    triangle->e1 = e1;
    triangle->e2 = e2;
    triangle->e3 = e3;

    if (GTS_SEGMENT (e1)->v1 == GTS_SEGMENT (e2)->v1)
        g_return_if_fail (gts_segment_connect (GTS_SEGMENT (e3),
                                               GTS_SEGMENT (e1)->v2,
                                               GTS_SEGMENT (e2)->v2));
    else if (GTS_SEGMENT (e1)->v2 == GTS_SEGMENT (e2)->v1)
        g_return_if_fail (gts_segment_connect (GTS_SEGMENT (e3),
                                               GTS_SEGMENT (e1)->v1,
                                               GTS_SEGMENT (e2)->v2));
    else if (GTS_SEGMENT (e1)->v2 == GTS_SEGMENT (e2)->v2)
        g_return_if_fail (gts_segment_connect (GTS_SEGMENT (e3),
                                               GTS_SEGMENT (e1)->v1,
                                               GTS_SEGMENT (e2)->v1));
    else if (GTS_SEGMENT (e1)->v1 == GTS_SEGMENT (e2)->v2)
        g_return_if_fail (gts_segment_connect (GTS_SEGMENT (e3),
                                               GTS_SEGMENT (e1)->v2,
                                               GTS_SEGMENT (e2)->v1));
    else
        return; //finetjul: g_assert_not_reached ();

    e1->triangles = g_slist_prepend (e1->triangles, triangle);
    e2->triangles = g_slist_prepend (e2->triangles, triangle);
    e3->triangles = g_slist_prepend (e3->triangles, triangle);
}