#include #include #include "QF/sys.h" #include "Clipper.h" #include "Map.h" #include "XYView.h" #include "ZView.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); GSSetFont (DEFCTXT, [NSFont fontWithName: @"Helvetica-Medium" size: 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); GSSetFont (DEFCTXT, [NSFont fontWithName: @"Helvetica-Medium" size: 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