aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2010-10-08 23:45:46 +0000
committerBibiko <bibiko@eva.mpg.de>2010-10-08 23:45:46 +0000
commita8bc3c8f6cedc76cd64babacaec4310737787edc (patch)
treeac15331180e7b4cfb2984853e04eb88dc0927d6c /Source
parent8b4c46a01eab8f390ff4ab8ec5b78d8055ff4f34 (diff)
downloadsequelpro-a8bc3c8f6cedc76cd64babacaec4310737787edc.tar.gz
sequelpro-a8bc3c8f6cedc76cd64babacaec4310737787edc.tar.bz2
sequelpro-a8bc3c8f6cedc76cd64babacaec4310737787edc.zip
• some further work on displaying geometry fields as image
Diffstat (limited to 'Source')
-rw-r--r--Source/SPGeometryDataView.h17
-rw-r--r--Source/SPGeometryDataView.m98
2 files changed, 63 insertions, 52 deletions
diff --git a/Source/SPGeometryDataView.h b/Source/SPGeometryDataView.h
index 3ff72110..c40cff97 100644
--- a/Source/SPGeometryDataView.h
+++ b/Source/SPGeometryDataView.h
@@ -29,14 +29,15 @@
{
NSString *type;
NSArray *coordinates;
- double x_min;
- double x_max;
- double y_min;
- double y_max;
- double width;
- double height;
- double zoom_factor;
- double margin_offset;
+ CGFloat x_min;
+ CGFloat x_max;
+ CGFloat y_min;
+ CGFloat y_max;
+ CGFloat width;
+ CGFloat height;
+ CGFloat zoom_factor;
+ CGFloat margin_offset;
+
}
- (id)initWithCoordinates:(NSDictionary*)coord;
diff --git a/Source/SPGeometryDataView.m b/Source/SPGeometryDataView.m
index 45d9632b..0a5a0294 100644
--- a/Source/SPGeometryDataView.m
+++ b/Source/SPGeometryDataView.m
@@ -33,39 +33,59 @@
- (id)initWithCoordinates:(NSDictionary*)coord
{
- margin_offset = 5.0;
+ margin_offset = 10.0;
type = [coord objectForKey:@"type"];
coordinates = [coord objectForKey:@"coordinates"];
- x_min = [[[coord objectForKey:@"bbox"] objectAtIndex:0] doubleValue] - margin_offset;
- x_max = [[[coord objectForKey:@"bbox"] objectAtIndex:1] doubleValue] + margin_offset;
- y_min = [[[coord objectForKey:@"bbox"] objectAtIndex:2] doubleValue] - margin_offset;
- y_max = [[[coord objectForKey:@"bbox"] objectAtIndex:3] doubleValue] + margin_offset;
-
+ x_min = (CGFloat)[[[coord objectForKey:@"bbox"] objectAtIndex:0] doubleValue];
+ x_max = (CGFloat)[[[coord objectForKey:@"bbox"] objectAtIndex:1] doubleValue];
+ y_min = (CGFloat)[[[coord objectForKey:@"bbox"] objectAtIndex:2] doubleValue];
+ y_max = (CGFloat)[[[coord objectForKey:@"bbox"] objectAtIndex:3] doubleValue];
zoom_factor = 1.0;
width = x_max - x_min;
height = y_max - y_min;
-
- if ( self = [super initWithFrame:NSMakeRect(0,0,width,height)] )
+ // make it a square due to aspect ratio
+ if(width>height)
+ height = width;
+ else
+ width = height;
+
+ if ( self = [super initWithFrame:NSMakeRect(0,0,width+margin_offset*2,height+margin_offset*2)] )
{
;
}
- return self;
+ return self;
}
- (NSPoint)normalizePoint:(NSPoint)aPoint
{
+
+ aPoint.x-=x_min;
+ aPoint.y-=y_min;
+ aPoint.x+=margin_offset;
+ aPoint.y+=margin_offset;
+
return aPoint;
}
+- (void)drawPoint:(NSPoint)aPoint
+{
+ NSBezierPath *circlePath = [NSBezierPath bezierPath];
+ [circlePath appendBezierPathWithOvalInRect:NSMakeRect(aPoint.x-2,aPoint.y-2,4,4)];
+ [[NSColor grayColor] setStroke];
+ [[NSColor redColor] setFill];
+ [circlePath stroke];
+ [circlePath fill];
+}
+
- (void)drawRect:(NSRect)dirtyRect
{
if(!type || ![type length] || !coordinates || ![coordinates count]) return;
- NSBezierPath *path, *circlePath;
+ NSBezierPath *path;
NSColor *polyFillColor = [NSColor colorWithCalibratedRed:.5 green:.5 blue:0.5 alpha:0.05];
BOOL isFirst = YES;
@@ -82,39 +102,33 @@
[[NSColor blackColor] set];
[path setLineWidth:1];
- if ([type isEqualToString:@"POINT"]) {
- circlePath = [NSBezierPath bezierPath];
- [circlePath appendBezierPathWithOvalInRect:NSMakeRect(width/2-2,height/2-2,4,4)];
- [[NSColor grayColor] setStroke];
- [[NSColor redColor] setFill];
- [circlePath stroke];
- [circlePath fill];
+ if ([type hasSuffix:@"POINT"]) {
+ for(NSString* coord in coordinates)
+ [self drawPoint:[self normalizePoint:NSPointFromString(coord)]];
}
- else if([type isEqualToString:@"LINESTRING"]) {
-
- for(NSString* coord in coordinates) {
- aPoint = [self normalizePoint:NSPointFromString(coord)];
- if(isFirst) {
- [path moveToPoint:aPoint];
- isFirst = NO;
- } else {
- [path lineToPoint:aPoint];
+ else if([type hasSuffix:@"LINESTRING"]) {
+
+ for(NSArray* lines in coordinates) {
+ path = [NSBezierPath bezierPath];
+ isFirst = YES;
+ for(NSString* coord in lines) {
+ aPoint = [self normalizePoint:NSPointFromString(coord)];
+ if(isFirst) {
+ [path moveToPoint:aPoint];
+ isFirst = NO;
+ } else {
+ [path lineToPoint:aPoint];
+ }
+ [self drawPoint:aPoint];
}
- circlePath = [NSBezierPath bezierPath];
- [circlePath appendBezierPathWithOvalInRect:NSMakeRect(aPoint.x-2,aPoint.y-2,4,4)];
- [[NSColor grayColor] setStroke];
- [[NSColor redColor] setFill];
- [circlePath stroke];
- [circlePath fill];
+ [[NSColor blackColor] setStroke];
+ [path stroke];
}
- [[NSColor blackColor] setStroke];
- [path stroke];
-
}
- else if([type isEqualToString:@"POLYGON"]) {
- for(NSArray* polygon in coordinates) {
+ else if([type hasSuffix:@"POLYGON"]) {
+ for(NSArray* polygons in coordinates) {
isFirst = YES;
- for(NSString* coord in polygon) {
+ for(NSString* coord in polygons) {
aPoint = [self normalizePoint:NSPointFromString(coord)];
if(isFirst) {
[path moveToPoint:aPoint];
@@ -122,12 +136,7 @@
} else {
[path lineToPoint:aPoint];
}
- circlePath = [NSBezierPath bezierPath];
- [circlePath appendBezierPathWithOvalInRect:NSMakeRect(aPoint.x-2,aPoint.y-2,4,4)];
- [[NSColor grayColor] setStroke];
- [[NSColor redColor] setFill];
- [circlePath stroke];
- [circlePath fill];
+ [self drawPoint:aPoint];
}
[[NSColor blackColor] setStroke];
[polyFillColor setFill];
@@ -147,6 +156,7 @@
NSBitmapImageRep *bitmap = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:[self bounds]] autorelease];
[image addRepresentation:bitmap];
return image;
+
}
/**