/*
		Copyright (c) Uwe Hoffmann, 1995.
                  All Rights Reserved.

Filename: MiscConcreteShape.m
Author:   Uwe Hoffmann
Date:	  Sep 07, 1995

$Id: MiscConcreteShape.m,v 1.0 1995/09/07 11:22:00 Uwe Hoffmann Exp $
 $Log: MiscConcreteShape.m,v $
*/

#import <appkit/appkit.h>
#import <foundation/foundation.h>
#import <foundation/NSArchiver.h>

#import "MiscConcreteShape.h"
#import "MiscUserPath.h"
#import "MiscHitPath.h"


@implementation MiscConcreteShape 

- initBounds:(NSRect)aRect
{
	path = [[MiscUserPath allocWithZone:[self zone]] init];
	[self makePathWithBounds:aRect];
	return self;
}

- (void)dealloc
{
	[path release];
   	return [super dealloc];
}

- copyWithZone:(NSZone *)aZone
{
	MiscConcreteShape *theCopy;
	
	theCopy = (MiscConcreteShape *)NSCopyObject(self, 0, aZone);	
	theCopy->path = [path copyWithZone:aZone];	
	return theCopy;
}

- copy
{
	return [self copyWithZone:NULL];
}

- (NSRect)bounds
{
	return [path bounds];
}

- (void)moveTo:(NSPoint)aPos
{
	NSRect r;
	
	r = [path bounds];
	r.origin = aPos;
	[self fillParamsWithBounds:r];
}

- (void)sizeTo:(NSSize)aSize
{
	NSRect r;
	
	r = [path bounds];
	r.size = aSize;
	[self fillParamsWithBounds:r];
}

- (void)drawOutline
{
	[path send:dps_ustroke cached:YES];
}

- (void)drawFill
{
	[path send:dps_ufill cached:YES];
}

- (void)drawShadowWithDelta:(NSPoint)aPos
{
	NSRect r;
	NSPoint original;
	
	r = [path bounds];
	original = r.origin;
	r.origin = aPos;
	[self fillParamsWithBounds:r];
	[path send:dps_ufill cached:YES];
	r.origin = original;
	[self fillParamsWithBounds:r];
}

- (BOOL)hit:(MiscHitPath *)hitPath
{
	return [hitPath hit:dps_inufill path:path];
}

- initWithCoder:(NSCoder *)coder
{
	[super initWithCoder:coder];
	path = [[coder decodeObject] retain];
	return self;
}

- (void)encodeWithCoder:(NSCoder *)coder
{
	[super encodeWithCoder:coder];
	[coder encodeObject:path];
}


- (void)makePathWithBounds:(NSRect)aRect
{
	return;
}

- (void)fillParamsWithBounds:(NSRect)aRect
{
	return;
}

+ (NSSize)calcSizeForInnerSize:(NSSize)aSize
{
	NSSize s;
	
	s.width = s.height = 0;
	return s;
}
		              
@end


BOOL straddles(NSPoint p1, NSPoint p2, NSPoint p3, NSPoint p4)
{
	float crossP1, crossP2;
	
	crossP1 = (p3.x - p1.x) * (p2.y - p1.y) - (p2.x - p1.x) * (p3.y - p1.y); 
	crossP2 = (p4.x - p1.x) * (p2.y - p1.y) - (p2.x - p1.x) * (p4.y - p1.y);
	if((crossP1 > 0 && crossP2 < 0) || (crossP1 < 0 && crossP2 > 0)){
		crossP1 = (p1.x - p3.x) * (p4.y - p3.y) - (p4.x - p3.x) * (p1.y - p3.y); 
		crossP2 = (p2.x - p3.x) * (p4.y - p3.y) - (p4.x - p3.x) * (p2.y - p3.y);
		if((crossP1 > 0 && crossP2 < 0) || (crossP1 < 0 && crossP2 > 0))
			return YES;
		else
			return NO;
	} else
		return NO;
} 

	
