آموزش کتابخانه گرافیکی دوبعدی جلسه ی ششم
آموزش کتابخانه گرافیکی دوبعدی جلسه ی ششم
در ادامه ی ترسیم های دو بعدی در emwin به رسم چند ظلعی ها میپردازیم.
از توابع رسم چند ظلعی ها میتوان استفاده های گوناگونی کرد. ترسیم چند ظلعی با اندازه و شکل های مختلف و سفارشی تا رسم علامت های فلش و هر نوع علامتی که از متصل کردن نقاط به یکدیگر بدست می آید.
تابع نمونه :
void GUI_DrawPolygon(const GUI_POINT * pPoint, int NumPoints, int x, int y);پارامترهای تابع
pPoint | اشاره گر به چند ظلعی که ترسیم خواهد شد |
NumPoints | تعداد نقاطی که به هم متصل خواهند شد |
X | موقعیت x از مبداء |
Y | موقعیت y از مبداء |
توضیحات :
این تابع خطوط بیرونی یک چند ظلعی را با استفاده از متصل کردن نقاط به هم ترسیم می کند.
چند ظلعی به طور اتوماتیک به نقطه ی شروع بسته می شود
تابع نمونه :
void GUI_EnlargePolygon(GUI_POINT * pDest,const GUI_POINT * pSrc,int NumPoints,int Len);
پارامترهای تابع
pDest | اشاره گر به چند ظلعی مقصد |
pSrc | اشاره گر به چند ظلعی منبع |
NumPoints | تعداد نقاط که در لیست نقاط مشخص شده است |
Len | طول (به پیکسل) برای بزرگتر کردن چند ظلعی |
توضیحات :
این تابع یک چند ظلعی را توسط پیکسل های مشخص وسیع تر می کند.
اطمینان حاصل کنید که آرایه مقصد از نقاط برابر یا بزرگتر از آرایه منبع است.
مثال
const GUI_POINT aPoints[] = { { ۴۰, ۲۰}, { ۰, ۲۰}, { ۲۰, ۰} }; GUI_POINT aEnlargedPoints[GUI_COUNTOF(aPoints)]; void Sample(void) { int i; GUI_Clear(); GUI_SetDrawMode(GUI_DM_XOR); GUI_FillPolygon(aPoints, GUI_COUNTOF(aPoints), 140, 110); for (i = 1; i < 10; i++) { GUI_EnlargePolygon(aEnlargedPoints, aPoints, GUI_COUNTOF(aPoints), i * 5); GUI_FillPolygon(aEnlargedPoints, GUI_COUNTOF(aPoints), 140, 110); } }
اسکرین شات :
تابع نمونه :
void GUI_FillPolygon(const GUI_POINT * pPoint, int NumPoints, int x, int y);
پارامترهای تابع
pPoint | اشاره گر به چند ضلعی برای نمایش و پر شدن |
NumPoints | تعداد نقاط که در لیست نقاط مشخص شده اند |
x | موقعیت X از مبداء |
y | موقعیت Y از مبداء |
توضیحات :
یک چند ظلعی پر شده در ویندوز جاری ترسیم می کند.
چند ظلعی به طور اتوماتیک به نقطه ی اول متصل می گردد. و لازم نیست نقطه ی پایانی که همان نقطه ی شروع است دوباره تعریف شود.
یک چند ضلعی با رسم یک یا چند خط افقی برای هر موقعیت y تشکیل می شود
به طور پیش فرض حداکثر تعداد نقاط برای رسم خطوط افقی برای یک موقعیت y ، ۱۲ است (که به معنی ۶ خط در هر موقعیت y). اگر این مقدار افزایش یابد، توسط ماکرو GUI_FP_MAXCOUNT می توان حداکثر تعداد نقاط را افزایش داد.
برای مثال
#define GUI_FP_MAXCOUNT 50
تابع نمونه :
void GUI_MagnifyPolygon(GUI_POINT * pDest,const GUI_POINT * pSrc,int NumPoints,int Mag);
پارامترهای تابع
pDest | اشاره گر به چند ظلعی بزرگنمایی شده |
pSrc | اشاره گر به چند ظلعی اصلی |
NumPoints | تعداد نقاط که در لیست نقطه ها مشخص شده است |
Mag | ضریب بزرگنمایی چند ظلعی |
توضیحات :
این تابع یک چندظلعی را با ضریب مشخص شده بزرگنمایی می کند.
اطمینان حاصل کنید که آرایه مقصد از نقاط برابر یا بزرگتر از آرایه منبع می باشد.
به تفاوت بین بزرگ شدن و بزرگنمایی یک چند ضلعی توجه داشته باشید.
با فراخوانی تابع GUI_EnlargePolygon با پارامتر len=1 یک چند ظلعی را از همه طرف یک پیکسل بزکتر می کند، در حالی که فراخوانی تابع GUI_MagnifyPolygon () با mag=1 هیچ تاثیری ندارد.
مثال:
const GUI_POINT aPoints[] = { { ۰, ۲۰}, { ۴۰, ۲۰}, { ۲۰, ۰} }; GUI_POINT aMagnifiedPoints[GUI_COUNTOF(aPoints)]; void Sample(void) { int Mag, y = 0, Count = 4; GUI_Clear(); GUI_SetColor(GUI_GREEN); for (Mag = 1; Mag <= 4; Mag *= 2, Count /= 2) { int i, x = 0; GUI_MagnifyPolygon(aMagnifiedPoints, aPoints, GUI_COUNTOF(aPoints), Mag); for (i = Count; i > 0; i--, x += 40 * Mag) { GUI_FillPolygon(aMagnifiedPoints, GUI_COUNTOF(aPoints), x, y); } y += 20 * Mag; } }
اسکرین شات مثال :
تابع نمونه :
void GUI_RotatePolygon(GUI_POINT * pDest,const GUI_POINT * pSrc,int NumPoints,float Angle);
پارامترهای تابع
pDest | اشاره گر به چند ظلعی مورد نظر |
pSrc | اشاره گر به چند ظلی اصلی |
NumPoints | تعداد نقاط مشخص شده در لیست نقطه ها |
Angle | زاویه به رادیان برای چرخاندن چند ظلعی |
توضیحات :
این تابع یک چند ظلعی را با مقدار درجه ی مشخص شده می چرخاند
اطمینان حاصل کنید که نقطه مقصد از نقاط برابر یا بزرگتر از نقاط منبع می باشد.
دقت کنید ورودی تابع ، پارامتر زاویه ، بر حسب رادیان می باشد.
مثال :
#include "gui.h" /******************************************************************* * * The points of the arrow */ static const GUI_POINT aPointArrow[] = { { ۰, -۵}, {-۴۰, -۳۵}, {-۱۰, -۲۵}, {-۱۰, -۸۵}, { ۱۰, -۸۵}, { ۱۰, -۲۵}, { ۴۰, -۳۵}, }; /******************************************************************* * * Draws a polygon */ static void DrawPolygon(void) { int Cnt =0; GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetFont(&GUI_Font8x16); GUI_SetColor(0x0); GUI_DispStringAt("Polygons of arbitrary shape ", 0, 0); GUI_DispStringAt("in any color", 120, 20); GUI_SetColor(GUI_BLUE); /* Draw filled polygon */ GUI_FillPolygon (&aPointArrow[0],7,100,100); } /******************************************************************* * * main */ void main(void) { GUI_Init(); DrawPolygon(); while(1) GUI_Delay(100); }
اسکرین شات: