mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-23 04:42:32 +00:00
218 lines
3.2 KiB
Objective-C
218 lines
3.2 KiB
Objective-C
|
|
#include "qedefs.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;
|
|
|
|
switch (num) {
|
|
case 2:
|
|
VectorCopy (pos[0], temp);
|
|
VectorCopy (pos[1], pos[0]);
|
|
VectorCopy (temp, pos[1]);
|
|
break;
|
|
case 3:
|
|
VectorCopy (pos[0], temp);
|
|
VectorCopy (pos[2], pos[0]);
|
|
VectorCopy (temp, pos[2]);
|
|
break;
|
|
default:
|
|
qprintf ("no clip plane");
|
|
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 already 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);
|
|
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);
|
|
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
|