📄 bezr0.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 */
/* */
/* BEZR0.c 1.9 */
/* */
/* COMPONENT */
/* */
/* All */
/* */
/* DESCRIPTION */
/* */
/* This file contains the FrameBezier function. */
/* */
/* AUTHOR */
/* */
/* Robert G. Burrill, Accelerated Technology, Inc. */
/* */
/* DATA STRUCTURES */
/* */
/* None */
/* */
/* FUNCTIONS */
/* */
/* None */
/* */
/* DEPENDENCIES */
/* */
/* None */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* */
/*************************************************************************/
#include "meta_wnd.h"
#include "metconst.h" /* MetaWINDOW Constant & Stucture Definitions */
#include "metports.h" /* MetaWINDOW Port & Bitmap Definitions */
#include "grafdata.h"
#include "metmacs3.h"
/* Function FrameBezier draws a frame around a series of Bezier curves
(closing the last point to the first if necessary). */
void FrameBezier(point *PTS, int PTCNT)
{
void mwBezier(point *PTS, int PTCNT, point *BEZPTS);
void PolyLine(short PTCNT, point *PTS);
void GrafFree(void *freePtr);
int mwBezCount(point *PTS, int PTCNT);
point *GrafAlloc(int memSize);
int numBzPts; /* number of interpolation points */
point *ptrBzPts; /* pointer for interpolated point array */
if (grafPort.pnLevel < 0) return; /* is pnLevel visible? */
/* Compute the number of points for approximation */
numBzPts = mwBezCount(PTS, PTCNT);
/* Allocate memory to point approximation array (add space for one
additional point in case we need to close) */
ptrBzPts = (point *) GrafAlloc(((numBzPts + 1) << 2));
/* Compute the bezier approximation and draw */
if (ptrBzPts != NULL)
{
mwBezier(PTS, PTCNT, ptrBzPts); ;
/* Does the last point close to the first? */
if ((ptrBzPts[0].X != ptrBzPts[numBzPts-1].X) ||
(ptrBzPts[0].Y != ptrBzPts[numBzPts-1].Y))
{ /* no, add final point to close to first */
ptrBzPts[numBzPts].X = ptrBzPts[0].X;
ptrBzPts[numBzPts].Y = ptrBzPts[0].Y;
numBzPts++;
}
globalLevel--;
PolyLine((short)numBzPts, (point *)ptrBzPts); /* Draw the bezier curve(s) */
globalLevel++;
GrafFree(ptrBzPts); /* Free the point array */
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -