PyObject *py_ped_alignment_align_nearest(PyObject *s, PyObject *args) { PyObject *in_geom = NULL; PedAlignment *align = NULL; PedGeometry *out_geom = NULL; PedSector sector, ret; if (!PyArg_ParseTuple(args, "O!L", &_ped_Geometry_Type_obj, &in_geom, §or)) { return NULL; } align = _ped_Alignment2PedAlignment(s); if (align == NULL) { return NULL; } out_geom = _ped_Geometry2PedGeometry(in_geom); if (out_geom == NULL) { return NULL; } ret = ped_alignment_align_nearest(align, out_geom, sector); ped_alignment_destroy(align); if (ret == -1) { PyErr_SetString(PyExc_ArithmeticError, "Could not align to closest sector"); return NULL; } return PyLong_FromLong(ret); }
/* * Return the nearest start that will have at least one other end that * together satisfy the constraint. */ static PedSector _constraint_get_nearest_start_soln (const PedConstraint* constraint, PedSector start) { PedGeometry* start_range; PedSector result; start_range = _constraint_get_canonical_start_range (constraint); if (!start_range) return -1; result = ped_alignment_align_nearest ( constraint->start_align, start_range, start); ped_geometry_destroy (start_range); return result; }
/* * Given "constraint" and "start", find the end that is nearest to * "end", such that ("start", the end) together form a solution to * "constraint". */ static PedSector _constraint_get_nearest_end_soln (const PedConstraint* constraint, PedSector start, PedSector end) { PedGeometry* end_range; PedSector result; end_range = _constraint_get_end_range (constraint, start); if (!end_range) return -1; result = ped_alignment_align_nearest (constraint->end_align, end_range, end); ped_geometry_destroy (end_range); return result; }