This is crayQuad.c in view mode; [Download] [Up]
#include "geom.h" #include "quadP.h" #include "crayolaP.h" static char msg[] = "crayQuad.c"; void *cray_quad_HasVColor(int sel, Geom *geom, va_list args); void *cray_quad_UseVColor(int sel, Geom *geom, va_list args); void *cray_quad_EliminateColor(int sel, Geom *geom, va_list args); void *cray_quad_SetColorAll(int sel, Geom *geom, va_list args); void *cray_quad_SetColorAt(int sel, Geom *geom, va_list args); void *cray_quad_SetColorAtV(int sel, Geom *geom, va_list args); void *cray_quad_SetColorAtF(int sel, Geom *geom, va_list args); void *cray_quad_GetColorAt(int sel, Geom *geom, va_list args); void *cray_quad_GetColorAtV(int sel, Geom *geom, va_list args); void *cray_quad_GetColorAtF(int sel, Geom *geom, va_list args); #define MAX_METHODS 12 static craySpecFunc methods[] = { "crayHasColor", cray_quad_HasVColor, "crayHasVColor", cray_quad_HasVColor, "crayCanUseVColor", crayTrue, "crayUseVColor", cray_quad_UseVColor, "crayEliminateColor", cray_quad_EliminateColor, "craySetColorAll", cray_quad_SetColorAll, "craySetColorAt", cray_quad_SetColorAt, "craySetColorAtV", cray_quad_SetColorAtV, "craySetColorAtF", cray_quad_SetColorAtF, "crayGetColorAt", cray_quad_GetColorAt, "crayGetColorAtV", cray_quad_GetColorAtV, "crayGetColorAtF", cray_quad_GetColorAtF }; cray_quad_init() { crayInitSpec(methods, MAX_METHODS, GeomClassLookup("quad")); return 0; } void *cray_quad_HasVColor(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; return (void *)(q->flag & QUAD_C); } void *cray_quad_UseVColor(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; ColorA *color; int i; if (crayHasVColor(geom, NULL)) return 0; color = va_arg(args, ColorA *); q->c = OOGLNewNE(QuadC, q->maxquad, msg); for (i = 0; i < q->maxquad; i++) q->c[i][0] = q->c[i][1] = q->c[i][2] = q->c[i][3] = *color; q->flag |= QUAD_C; return (void *)geom; } void *cray_quad_EliminateColor(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; if (!crayHasVColor(geom, NULL)) return 0; OOGLFree(q->c); q->c = NULL; q->flag &= ~QUAD_C; return (void *)geom; } void *cray_quad_SetColorAll(int sel, Geom *geom, va_list args) { int i; Quad *q = (Quad *)geom; ColorA *color = va_arg(args, ColorA *); if (!crayHasColor(geom, NULL)) return NULL; for (i = 0; i < q->maxquad; i++) { q->c[i][0] = *color; q->c[i][1] = *color; q->c[i][2] = *color; q->c[i][3] = *color; } return (void *)geom; } void *cray_quad_SetColorAt(int sel, Geom *geom, va_list args) { ColorA *color; int vindex, findex; color = va_arg(args, ColorA *); vindex = va_arg(args, int); findex = va_arg(args, int); if (vindex != -1) return (void *)craySetColorAtV(geom, color, vindex, NULL, NULL); return (void *)craySetColorAtF(geom, color, findex, NULL); } void *cray_quad_SetColorAtV(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; ColorA *color; int index; color = va_arg(args, ColorA *); index = va_arg(args, int); if (index == -1 || !crayHasVColor(geom, NULL)) return 0; q->c[0][index] = *color; return (void *)geom; } /* * Note - this is somewhat strangely written. Quad colors may be set * (and gotten) by vertex or by face, although they are always stored * by vertex. */ void *cray_quad_SetColorAtF(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; ColorA *color; int index; color = va_arg(args, ColorA *); index = va_arg(args, int); if (index == -1 || !crayHasVColor(geom, NULL)) return 0; q->c[index][0] = q->c[index][1] = q->c[index][2] = q->c[index][3] = *color; return (void *)geom; } void *cray_quad_GetColorAt(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; ColorA *color; int vindex, findex; color = va_arg(args, ColorA *); vindex = va_arg(args, int); findex = va_arg(args, int); if (!crayHasVColor(geom, NULL)) return 0; if (vindex != -1) return (void *)crayGetColorAtV(geom, color, vindex, NULL, NULL); return (void *)crayGetColorAtF(geom, color, findex, NULL); } void *cray_quad_GetColorAtV(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; ColorA *color; int index; color = va_arg(args, ColorA *); index = va_arg(args, int); if (!crayHasVColor(geom, NULL) || index == -1) return 0; *color = q->c[0][index]; return (void *)geom; } void *cray_quad_GetColorAtF(int sel, Geom *geom, va_list args) { Quad *q = (Quad *)geom; ColorA *color; int index; color = va_arg(args, ColorA *); index = va_arg(args, int); if (!crayHasVColor(geom, NULL) || index == -1) return 0; *color = q->c[index][0]; return (void *)geom; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.