📄 arcs8.c
字号:
/*************************************************************************/
/* */
/* Copyright (c) 1997 - 1999 Accelerated Technology, Inc. */
/* */
/* PROPRIETARY RIGHTS of Accelerated Technology are involved in the */
/* subject matter of this material. All manufacturing, reproduction, */
/* use, and sales rights pertaining to this subject matter are governed */
/* by the license agreement. The recipient of this software implicitly */
/* accepts the terms of the license. */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* ARCS8.c 1.9 */
/* */
/* COMPONENT */
/* */
/* All */
/* */
/* DESCRIPTION */
/* */
/* This file contains the mwArcFill function. */
/* */
/* AUTHOR */
/* */
/* Robert G. Burrill, Accelerated Technology, Inc. */
/* */
/* DATA STRUCTURES */
/* */
/* None */
/* */
/* FUNCTIONS */
/* */
/* None */
/* */
/* DEPENDENCIES */
/* */
/* None */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* BobB 5/8/98 Corrected for global level */
/* */
/*************************************************************************/
#include "meta_wnd.h"
#include "metconst.h" /* MetaWINDOW Constant & Stucture Definitions */
#include "metports.h" /* MetaWINDOW Port & Bitmap Definitions */
#include "grafdata.h"
#include "metmacs3.h"
#include "xpol_4.h"
/* Function mwArcFill fills the specified elliptical arc contained within
rectangle ovalR starting at bgnAngle degrees with a total of arcAngle degrees
using the specified pattern (PATT) and rasterOp transfer mode (RASOP).
The current "pen" position is not affected by mwArcFill. */
void mwArcFill(rect *ovalR, int bgnAngle, int arcAngle, int RASOP, int PATT)
{
short ChkAngle(int angle);
void AddToGETYXSorted(qarcState *newEdge);
void mwSBQA(qarcState *QArcEdge, int QArcA, int QArcB, int QArcCenterX,
int QArcCenterY, int QArcDirection, int QArcTToB);
void mwSV(Vedge *VLEdge, int VLX, int VLY, int VLHeight, int VLDir);
void mwSLE(lineEdgeV *LineEdge, int XStart, int YStart, int XEnd, int YEnd,
int LineEdgeTToB);
void mwScanGET(void **GETPtrPtr, blitRcd *fillRcd, int scanRcdSize, int shape,
int fillRule, int allEdgesAreLines);
void mwSTQA(qarcState *QArcEdge, int QArcA, int QArcB, int QArcCenterX,
int QArcCenterY, int QArcDirection, int QArcTToB);
void OvalPt(rect *argR, int angle, point *gblPt);
rect gR; /* global rectangle */
rect cR; /* center point of rectangle */
point bgnPt; /* begin angle intersection point */
point endPt; /* end angle intersection point */
short grafErrValue; /* error value */
short lineHeight;
int endAngle;
int bgnQuad;
int endQuad;
int arcType;
int typePtr;
short pointTbl[12]; /* table of X, Y values for the edges */
int i;
short savRop;
short savPat;
qarcState *newEdge; /* pointer to new edge to add to table */
/* void mwFDA(rect *boundR, int BANGLE, int AANGLE); */
/* The following table defines the line segment insertions for the 20 arc
type cases.
For vertical "vt" lines the definitions provide the following
information for the call mwSV to insert the vertical edge:
db vt, X, minY, n/a, maxY, dir, more
mwSV(edgePtr, X, minY, maxY - minY, dir)
For arc edge "ln" lines the definitions provide the following
information for the "mwSLE" call to insert the line edge:
db ln, bgnX, bgnY, endX, endY, dir, more
mwSLE(edgePtr, bgnX, bgnY, endX, endY, dir);
In both cases "dir" indicates the edge trace direction (1=down, -1=up),
"more" indicates of another edge follows (0) or not (tEnd). */
#define vt 0 /* Vertical line */
#define ln 0xff /* Arc line edge */
#define tEnd 0xff /* end type definitions */
#define down 1 /* down edge */
#define up 0xff /* up edge */
#define NA 0
#define aeType 0 /* arc edge type, line (ln) or vertical (vt) */
#define aeBgnX 1 /* line begin X */
#define aeBgnY 2 /* line begin Y */
#define aeEndX 3 /* line end X */
#define aeEndY 4 /* line end Y */
#define aeDir 5 /* direction (up or down) */
#define aeEnd 6 /* last edge flag */
#define aXmin 0
#define aYmin 1
#define aXmax 2
#define aYmax 3
#define gXmin 4
#define gYmin 5
#define gXmax 6
#define gYmax 7
#define bgnX 8
#define bgnY 9
#define endX 10
#define endY 11
int typeTbl[20][5][7] = {
/* type00 */vt, gXmax, endY, NA, bgnY, down, 0,
ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA,
/* type01 */vt, gXmax, gYmin, NA, bgnY, down, 0,
ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, up, 0,
vt, gXmin, gYmin, NA, endY, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
/* type02 */vt, gXmax, gYmin, NA, bgnY, down, 0,
ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, down, 0,
vt, gXmin, gYmin, NA, endY, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
/* type03 */vt, gXmax, gYmin, NA, bgnY, down, 0,
ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, down, 0,
vt, gXmax, endY, NA, gYmax, down, 0,
vt, gXmin, gYmin, NA, gYmax, up, tEnd,
/* type04 */vt, gXmax, gYmin, NA, bgnY, down, 0,
ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, up, 0,
vt, gXmax, endY, NA, gYmax, down, 0,
vt, gXmin, gYmin, NA, gYmax, up, tEnd,
/* type05 */ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, up, 0,
vt, gXmin, bgnY, NA, endY, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA,
/* type06 */ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, down, 0,
vt, gXmin, bgnY, NA, endY, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA,
/* type07 */ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, down, 0,
vt, gXmax, endY, NA, gYmax, down, 0,
vt, gXmin, bgnY, NA, gYmax, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
/* type08 */ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, up, 0,
vt, gXmax, endY, NA, gYmax, down, 0,
vt, gXmin, bgnY, NA, gYmax, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
/* type09 */vt, gXmax, gYmin, NA, gYmax, down, 0,
vt, gXmin, bgnY, NA, gYmax, up, 0,
ln, bgnX, bgnY, aXmax, aYmax, down, 0,
ln, aXmax, aYmax, endX, endY, up, 0,
vt, gXmin, gYmin, NA, endY, up, tEnd,
/* type10 */ln, aXmax, aYmax, bgnX, bgnY, down, 0,
vt, gXmin, bgnY, NA, endY, down, 0,
ln, endX, endY, aXmax, aYmax, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA,
/* type11 */ln, aXmax, aYmax, bgnX, bgnY, down, 0,
vt, gXmin, bgnY, NA, gYmax, down, 0,
vt, gXmax, endY, NA, gYmax, up, 0,
ln, endX, endY, aXmax, aYmax, up, tEnd,
NA, NA, NA, NA, NA, NA, NA,
/* type12 */ln, aXmax, aYmax, bgnX, bgnY, down, 0,
vt, gXmin, bgnY, NA, gYmax, down, 0,
vt, gXmax, endY, NA, gYmax, up, 0,
ln, endX, endY, aXmax, aYmax, down, tEnd,
NA, NA, NA, NA, NA, NA, NA,
/* type13 */ln, aXmax, aYmax, bgnX, bgnY, down, 0,
vt, gXmin, bgnY, NA, gYmax, down, 0,
vt, gXmax, gYmin, NA, gYmax, up, 0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -