quakeforge/tools/Forge/Bundles/MapEdit/Clipper.m
Bill Currie 931900fbd3 Pass .m files through indent.
The result isn't perfect, but it cleans up the whitespace and makes the
code more consistent with the rest of the project.
2010-09-26 13:50:17 +09:00

224 lines
3.4 KiB
Objective-C

#include <AppKit/NSGraphics.h>
#include <AppKit/DPSOperators.h>
#include "QF/sys.h"
#include "Clipper.h"
#include "Map.h"
#include "XYView.h"
#include "CameraView.h"
#include "QuakeEd.h"
id clipper_i;
@implementation Clipper
-init
{
[super init];
clipper_i = self;
return self;
}
-(BOOL) hide
{
int oldnum;
oldnum = num;
num = 0;
return (oldnum > 0);
}
-flipNormal
{
vec3_t temp;
if (num == 2) {
VectorCopy (pos[0], temp);
VectorCopy (pos[1], pos[0]);
VectorCopy (temp, pos[1]);
} else if (num == 3) {
VectorCopy (pos[0], temp);
VectorCopy (pos[2], pos[0]);
VectorCopy (temp, pos[2]);
} else {
Sys_Printf ("no clipplane");
NSBeep ();
}
return self;
}
-(BOOL) getFace:(face_t *) f
{
vec3_t v1, v2, norm;
int i;
VectorCopy (vec3_origin, plane.normal);
plane.dist = 0;
if (num < 2)
return NO;
if (num == 2) {
VectorCopy (pos[0], pos[2]);
pos[2][2] += 16;
}
for (i = 0; i < 3; i++)
VectorCopy (pos[i], f->planepts[i]);
VectorSubtract (pos[2], pos[0], v1);
VectorSubtract (pos[1], pos[0], v2);
CrossProduct (v1, v2, norm);
VectorNormalize (norm);
if (!norm[0] && !norm[1] && !norm[2])
return NO;
[texturepalette_i getTextureDef:&f->texture];
return YES;
}
/*
================
XYClick
================
*/
-XYClick:(NSPoint) pt
{
int i;
vec3_t new;
new[0] =[xyview_i snapToGrid:pt.x];
new[1] =[xyview_i snapToGrid:pt.y];
new[2] =[map_i currentMinZ];
// see if a point is allready there
for (i = 0; i < num; i++) {
if (new[0] == pos[i][0] && new[1] == pos[i][1]) {
if (pos[i][2] ==[map_i currentMinZ])
pos[i][2] =[map_i currentMaxZ];
else
pos[i][2] =[map_i currentMinZ];
[quakeed_i updateAll];
return self;
}
}
if (num == 3)
num = 0;
VectorCopy (new, pos[num]);
num++;
[quakeed_i updateAll];
return self;
}
/*
================
XYDrag
================
*/
-(BOOL) XYDrag:(NSPoint *) pt
{
int i;
for (i = 0; i < 3; i++) {
if (fabs (pt->x - pos[i][0] > 10) || fabs (pt->y - pos[i][1] > 10))
continue;
// drag this point
}
return NO;
}
-ZClick:(NSPoint) pt
{
return self;
}
//=============================================================================
-carve
{
[map_i makeSelectedPerform:@selector (carveByClipper)];
num = 0;
return self;
}
-cameraDrawSelf
{
vec3_t mid;
int i;
linecolor (1, 0.5, 0);
for (i = 0; i < num; i++) {
VectorCopy (pos[i], mid);
mid[0] -= 8;
mid[1] -= 8;
CameraMoveto (mid);
mid[0] += 16;
mid[1] += 16;
CameraLineto (mid);
VectorCopy (pos[i], mid);
mid[0] -= 8;
mid[1] += 8;
CameraMoveto (mid);
mid[0] += 16;
mid[1] -= 16;
CameraLineto (mid);
}
return self;
}
-XYDrawSelf
{
int i;
char text[8];
PSsetrgbcolor (1, 0.5, 0);
// XXX PSselectfont("Helvetica-Medium",10/[xyview_i currentScale]);
PSrotate (0);
for (i = 0; i < num; i++) {
PSmoveto (pos[i][0] - 4, pos[i][1] - 4);
sprintf (text, "%i", i);
PSshow (text);
PSstroke ();
PSarc (pos[i][0], pos[i][1], 10, 0, 360);
PSstroke ();
}
return self;
}
-ZDrawSelf
{
int i;
char text[8];
PSsetrgbcolor (1, 0.5, 0);
// XXX PSselectfont("Helvetica-Medium",10/[zview_i currentScale]);
PSrotate (0);
for (i = 0; i < num; i++) {
PSmoveto (-28 + i * 8 - 4, pos[i][2] - 4);
sprintf (text, "%i", i);
PSshow (text);
PSstroke ();
PSarc (-28 + i * 8, pos[i][2], 10, 0, 360);
PSstroke ();
}
return self;
}
@end