آموزش کتابخانه گرافیکی دوبعدی جلسه ی ششم

آموزش کتابخانه گرافیکی دوبعدی جلسه ی پنجم
سپتامبر 28, 2016
آموزش کتابخانه گرافیکی دوبعدی جلسه ی هفتم
اکتبر 9, 2016

آموزش کتابخانه گرافیکی دوبعدی جلسه ی ششم

در ادامه ی ترسیم های دو بعدی در emwin به رسم چند ظلعی ها میپردازیم.

از توابع رسم چند ظلعی ها میتوان استفاده های گوناگونی کرد. ترسیم چند ظلعی با اندازه و شکل های مختلف و سفارشی تا رسم علامت های فلش و هر نوع علامتی که از متصل کردن نقاط به یکدیگر بدست می آید.

شرح تابع

GUI_DrawPolygon

تابع نمونه :

void GUI_DrawPolygon(const GUI_POINT * pPoint, int NumPoints, int x, int y);پارامترهای تابع

pPoint اشاره گر به چند ظلعی که ترسیم خواهد شد
NumPoints تعداد نقاطی که به هم متصل خواهند شد
X موقعیت x از مبداء
Y موقعیت y از مبداء

توضیحات :

این تابع خطوط بیرونی یک چند ظلعی را با استفاده از متصل کردن نقاط به هم ترسیم می کند.

چند ظلعی به طور اتوماتیک به نقطه ی شروع بسته می شود

شرح تابع

GUI_EnlargePolygon

تابع نمونه :

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);
}
}

اسکرین شات :

شرح تابع

GUI_FillPolygon

تابع نمونه :

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

شرح تابع

GUI_MagnifyPolygon

تابع نمونه :

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;
}
}

اسکرین شات مثال :

شرح تابع

GUI_RotatePolygon

تابع نمونه :

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);
}

اسکرین شات:

حسین
حسین
من 28 سال سن دارم و رشته ی تحصیلی ام مهندسی برق قدرت بوده علاوه بر برق علاقمند به دنیای الکترونیک ، برنامه نویسی و طراحی وب هستم . این سایت رو برای آموزش رابط گرافیکی emWin راه اندازی کردم که بدون کمک شما جلو رفتن غیر ممکنه پس اگه آموزش یا مطالب مرتبطی دارید برام ایمیل کنید تا به اسم خودتون توی سایت منتشر بشه. hosseintomari@gmail.com
اشتراک
اطلاع از
guest

0 نظرات
بازخورد داخلی
مشاهده همه نظرات
0
برای بهبود مطالب، لطفاً نظر بدهید.x