void BWDrawRectangle(Widget w, Position from_x, Position from_y, Position to_x, Position to_y, int value) { register Position i; Dimension delta, width, height; QuerySwap(from_x, to_x); QuerySwap(from_y, to_y); width = to_x - from_x; height = to_y - from_y; delta = max(width, height); if (!QueryZero(width, height)) { for (i = 0; (int)i < (int)delta; i++) { if ((int)i < (int)width) { BWDrawPoint(w, from_x + i, from_y, value); BWDrawPoint(w, to_x - i, to_y, value); } if ((int)i < (int)height) { BWDrawPoint(w, from_x, to_y - i, value); BWDrawPoint(w, to_x, from_y + i, value); } } } else BWDrawLine(w, from_x, from_y, to_x, to_y, value); }
void BWBlindLine(Widget w, Position from_x, Position from_y, Position to_x, Position to_y, int value) { Position i; register double x, y; double dx, dy, delta; dx = to_x - from_x; dy = to_y - from_y; x = from_x + 0.5; y = from_y + 0.5; delta = max(abs(dx), abs(dy)); if (delta > 0) { dx /= delta; dy /= delta; x += dx; y += dy; for(i = 1; i <= delta; i++) { BWDrawPoint(w, (Position) x, (Position) y, value); x += dx; y += dy; } } else BWDrawPoint(w, from_x, from_y, value); }
static void DrawImageData(BitmapWidget BW, XImage *image, Position at_x, Position at_y, int value) { Position x, y; Boolean C, S, I, H; bit A, B; C = value == Clear; S = value == Set; I = value == Invert; H = value == Highlight; for (x = 0; x < image->width; x++) for (y = 0; y < image->height; y++) { A = GetBit(image, x, y); B = GetBit(BW->bitmap.image, at_x + x, at_y + y); if ((A & C) | ((A | B) & S) | ((A ^ B) & I) | ((A | B) & H)) value = (A & H) ? Highlight : Set; else value = Clear; BWDrawPoint((Widget) BW, at_x + x, at_y + y, value); } }
void plotpart(part* p) { int x,y; x=SCR_WIDTH*((p->pos.x)-left)/(right-left); y=SCR_HEIGHT*((p->pos.y)-top)/(bottom-top); BWDrawPoint(window1,x,y); }
void BWDrawFilledCircle(Widget w, Position origin_x, Position origin_y, Position point_x, Position point_y, int value) { register Position i, j, delta; Dimension dx, dy; double radius; dx = abs(point_x - origin_x); dy = abs(point_y - origin_y); radius = sqrt((double) ((int)dx * (int)dx + (int)dy * (int)dy)); for(j = origin_x - (Position) floor(radius); j <= origin_x + (Position) floor(radius); j++) BWDrawPoint(w, j, origin_y, value); for(i = 1; i <= (Position) floor(radius); i++) { delta = sqrt(radius * radius - i * i); for(j = origin_x - delta; j <= origin_x + delta; j++) { BWDrawPoint(w, j, origin_y - i, value); BWDrawPoint(w, j, origin_y + i, value); } } }
void BWDrawFilledRectangle(Widget w, Position from_x, Position from_y, Position to_x, Position to_y, int value) { register Position x, y; QuerySwap(from_x, to_x); QuerySwap(from_y, to_y); for (x = from_x; x <= to_x; x++) for (y = from_y; y <= to_y; y++) BWDrawPoint(w, x, y, value); }
void moveparts() { int i,j,new; for (i=0; i<numps; i++) { BWClearArea(window1,scrx(particle[i].pos),scry(particle[i].pos),1,1); movepart(&particle[i]); BWDrawPoint(window1,scrx(particle[i].pos),scry(particle[i].pos)); /* new=0; for (j=0; j<numps; j++) { if (j!=i) if (Vequal(particle[i].pos,particle[j].pos)) new=1; } if (outofbounds(particle[i].pos)) new=1; if (new==1) randpart(&particle[i]);*/ } }
void plotpart(part* p) { BWDrawPoint(window1,scrx(p->pos),scry(p->pos)); }
void BWDrawCircle(Widget w, Position origin_x, Position origin_y, Position point_x, Position point_y, int value) { register Position i, delta; Dimension dx, dy, half; double radius; dx = abs(point_x - origin_x); dy = abs(point_y - origin_y); radius = sqrt((double) ((int)dx * (int)dx + (int)dy * (int)dy)); if (radius < 1.0) { BWDrawPoint(w, origin_x, origin_y, value); } else { BWDrawPoint(w, origin_x - (Position) floor(radius), origin_y, value); BWDrawPoint(w, origin_x + (Position) floor(radius), origin_y, value); BWDrawPoint(w, origin_x, origin_y - (Position) floor(radius), value); BWDrawPoint(w, origin_x, origin_y + (Position) floor(radius), value); } half = radius / sqrt(2.0); for(i = 1; (int)i <= (int)half; i++) { delta = sqrt(radius * radius - i * i); BWDrawPoint(w, origin_x - delta, origin_y - i, value); BWDrawPoint(w, origin_x - delta, origin_y + i, value); BWDrawPoint(w, origin_x + delta, origin_y - i, value); BWDrawPoint(w, origin_x + delta, origin_y + i, value); if (i != delta) { BWDrawPoint(w, origin_x - i, origin_y - delta, value); BWDrawPoint(w, origin_x - i, origin_y + delta, value); BWDrawPoint(w, origin_x + i, origin_y - delta, value); BWDrawPoint(w, origin_x + i, origin_y + delta, value); } } }