1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
/* $Id: rect.i,v 1.12 2006/07/03 22:43:50 hobu Exp $ */
%extend rectObj {
rectObj(double minx=-1.0, double miny=-1.0,
double maxx=-1.0, double maxy=-1.0,
int imageunits=MS_FALSE)
{
rectObj *rect;
if (imageunits == MS_FALSE)
{
if (minx > maxx || miny > maxy)
{
msSetError(MS_RECTERR,
"{ 'minx': %f , 'miny': %f , 'maxx': %f , 'maxy': %f }",
"rectObj()", minx, miny, maxx, maxy);
return NULL;
}
}
else
{
if (minx > maxx || maxy > miny)
{
msSetError(MS_RECTERR,
"image (pixel/line) units { 'minx': %f , 'miny': %f , 'maxx': %f , 'maxy': %f }",
"rectObj()", minx, miny, maxx, maxy);
return NULL;
}
}
rect = (rectObj *)calloc(1, sizeof(rectObj));
if (!rect)
return(NULL);
rect->minx = minx;
rect->miny = miny;
rect->maxx = maxx;
rect->maxy = maxy;
return(rect);
}
~rectObj() {
free(self);
}
int project(projectionObj *projin, projectionObj *projout) {
return msProjectRect(projin, projout, self);
}
double fit(int width, int height) {
return msAdjustExtent(self, width, height);
}
int draw(mapObj *map, layerObj *layer, imageObj *image,
int classindex, char *text)
{
shapeObj shape;
msInitShape(&shape);
msRectToPolygon(*self, &shape);
shape.classindex = classindex;
shape.text = strdup(text);
msDrawShape(map, layer, &shape, image, -1);
msFreeShape(&shape);
return MS_SUCCESS;
}
%newobject toPolygon;
shapeObj *toPolygon()
{
lineObj line = {0,NULL};
shapeObj *shape;
shape = (shapeObj *)malloc(sizeof(shapeObj));
if (!shape)
return NULL;
msInitShape(shape);
shape->type = MS_SHAPE_POLYGON;
line.point = (pointObj *)malloc(sizeof(pointObj)*5);
line.point[0].x = self->minx;
line.point[0].y = self->miny;
line.point[1].x = self->minx;
line.point[1].y = self->maxy;
line.point[2].x = self->maxx;
line.point[2].y = self->maxy;
line.point[3].x = self->maxx;
line.point[3].y = self->miny;
line.point[4].x = line.point[0].x;
line.point[4].y = line.point[0].y;
line.numpoints = 5;
msAddLine(shape, &line);
msComputeBounds(shape);
free(line.point);
return shape;
}
%newobject toString;
char *toString()
{
char buffer[256];
char fmt[]="{ 'minx': %.16g , 'miny': %.16g , 'maxx': %.16g , 'maxy': %.16g }";
msRectToFormattedString(self, (char *) &fmt, (char *) &buffer, 256);
return strdup(buffer);
}
}
|