ЛАБОРАТОРНІ РОБОТИ № 1, 2, 3

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Адміністрування САПР

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра САП  ЛАБОРАТОРНІ РОБОТИ № 1, 2, 3 з курсу: “Адміністрування САПР” на тему: „Створення компоненту бібліотеки засобами графічного редактора Symbol Editor, Pattern Editor, Library Executive та схеми електричної принципової редактором Shematic” Львів - 2005 МЕТА РОБОТИ  ТЕОРЕТИЧНІ ВІДОМОСТІ             3. ІНДИВІДУАЛЬНЕ ЗАВДАННЯ  ТЕКСТ ПРОГРАМИ program TPMark3; uses SysUtils, Windows, Messages; var wc : TWndClassEx; // Зміна шаблону класу вікна. MainWnd : HWND; // Описувач головного вікна. Mesg : TMsg; // Змінна для циклу збора повідомлень. xPos, yPos, nWidth, nHeight : Integer; MyDC, WMFDC, OldDC : HDC; // Контекст пристрою. zoom : Integer; // Масштаб (по замовчуванню 100). brush : HBrush; // Координати початків координат для всіх графіків. ox1, oy1, ox2, oy2, ox3, oy3, ox4, oy4, ox5, oy5, ox6, oy6 : integer; MFile : HMetaFile; // Дескриптор метафайлу. count : integer; // Допоміжна змінна. rec : TRect; // Область вікна для малювання. prec : PRect; // Область для метафайлу. // Віконна процедура головного вікна. function WindowProc(wnd : HWND; Msg : Integer; Wparam : Wparam; Lparam : Lparam) : Lresult; stdcall; Begin // Далі проходить цикл обробки повідомлень. case msg of wm_destroy : // Повідомленні, яке надсилається при знищенні вікна. begin postquitmessage(0); exit; Result := 0; end else Result := DefWindowProc(wnd, msg, wparam, lparam); end; end; //--------------------------------------------------------------------------- // Процедура побудови графіка функції, з використанням ліній. procedure DrawGraphicWithLines(ox, oy, zoom : integer; A, B, krok : double; color : longint); var x, y : integer; Fi, Ro : double; pen : HPen; begin pen := CreatePen(ps_Solid, 2, color); SelectObject(MyDC, pen); Fi := 0; Ro := A*sin(B*Fi); x := Round(Ro*cos(Fi)*zoom) + ox; y := Round(Ro*sin(Fi)*zoom) + oy; MoveToEx(MyDC, x, y, nil); Fi := Fi + krok; repeat Ro := A*sin(B*Fi); x := Round(Ro*cos(Fi)*zoom) + ox; y := Round(Ro*sin(Fi)*zoom) + oy; LineTo(MyDC, x, y); Fi := Fi + krok; until Fi > 12.5; DeleteObject(pen); end; //--------------------------------------------------------------------------- // Процедура побудови графіка функції, з використанням точок. procedure DrawGraphicWithPoints(ox, oy, zoom : integer; A, B, krok : double; color : longint); var x, y : integer; Fi, Ro : double; begin Fi := 0; repeat Ro := A*sin(B*Fi); x := Round(Ro*cos(Fi)*zoom) + ox; y := Round(Ro*sin(Fi)*zoom) + oy; SetPixel(MyDC, x, y, color); Fi := Fi + krok; until Fi > 12.5; end; //--------------------------------------------------------------------------- // Процедура побудови координатних осей. procedure DrawOsi(ox, oy, zoom : integer); Var pen : HPen; brush : HBrush; point : array [1..5] of TPoint; begin // 1. Створуємо перо. pen := CreatePen(ps_Solid, 2, RGB(0, 0, 0)); SelectObject(MyDC, pen); // 2. Створюємо пензлик. brush := CreateSolidBrush(RGB(0, 0, 0)); SelectObject(MyDC, brush); SetBkMode(MyDc, 1); // Робимо прозорий фон. // 3. Малюємо осі координат. MoveToEx(MyDC, ox - zoom - 30, oy, nil); LineTo(MyDC, ox + zoom + 30, oy); // Малюємо OX. MoveToEx(MyDC, ox, oy + zoom + 30, nil); LineTo(MyDC, ox, oy - zoom - 30); // Малюємо OY. // 4. Малюємо стрілку для осі OX. point[1].X := ox + zoom + 33; point[1].Y := oy - 1; point[2].X := ox + zoom + 13; point[2].Y := oy + 4; point[3].X := ox + zoom + 23; point[3].Y := oy - 1; point[4].X := ox + zoom + 13; point[4].Y := oy - 5; point[5].X := ox + zoom + 33; point[5].Y := oy - 1; Polygon(MyDC, point, 4); // 5. Малюємо стрілку для осі OY. point[1].X := ox - 1; point[1].Y := oy - zoom - 33; point[2].X := ox - 5; point[2].Y := oy - zoom - 13; point[3].X := ox; point[3].Y := oy - zoom - 23; point[4].X := ox + 4; point[4].Y := oy - zoom - 13; point[5].X := ox - 1; point[5].Y := oy - zoom - 33; Polygon(MyDC, point, 4); // 6. Виводимо назви осей. TextOut(MyDc, ox + zoom + 30, oy + 4, 'X', 1); TextOut(MyDc, ox + 4, oy - zoom - 40, 'Y', 1); // 7. Знищуємо об'єкти. DeleteObject(brush); DeleteObject(pen); end; //--------------------------------------------------------------------------- // Процедура побудови координатної сітки. procedure DrawGrid(ox, oy, zoom : integer); Var pen : HPen; x, y, krok : integer; begin pen := CreatePen(ps_Dot, 1, RGB(0, 0, 0)); SelectObject(MyDC, pen); SetBkMode(MyDc, 1); // Робимо прозорий фон. krok := 40; y := oy + krok; while y <= oy + zoom + 30 do begin MoveToEx(MyDC, ox - zoom - 30, y, nil); LineTo(MyDC, ox + zoom + 30, y); y := y + krok; end; y := oy - krok; while y >= oy - zoom - 30 do begin MoveToEx(MyDC, ox - zoom - 30, y, nil); LineTo(MyDC, ox + zoom + 30, y); y := y - krok; end; x := ox - krok; while x >= ox - zoom - 30 do begin MoveToEx(MyDC, x, oy + zoom + 30, nil); LineTo(MyDC, x, oy - zoom - 30); x := x - krok; end; x := ox + krok; while x <= ox + zoom + 30 do begin MoveToEx(MyDC, x, oy + zoom + 30, nil); LineTo(MyDC, x, oy - zoom - 30); x := x + krok; end; DeleteObject(pen); end; //--------------------------------------------------------------------------- begin // Далі йде заповнення шаблону класу вікна. wc.cbSize := sizeof(wc); wc.style := cs_hredraw or cs_vredraw; wc.lpfnWndProc := @WindowProc; wc.cbClsExtra := 0; wc.cbWndExtra := 0; wc.hInstance := HInstance; wc.hIcon := LoadIcon(0, idi_application); wc.hCursor := LoadCursor(0, idc_arrow); wc.hbrBackground := COLOR_BTNFACE + 1; wc.lpszMenuName := nil; wc.lpszClassName := 'WinMin: Main'; RegisterClassEx(wc); // Реєстрація нового класу в системі. // Заповнення зменних xPos, yPos, nWidth, nHeight. xPos := 0; yPos := 0; nWidth := 1024; nHeight := 739; // Створення головного вікна. MainWnd := CreateWindowEx(0, // Прапорці розширених стилів. 'WinMin: Main', // Ім'я класу вікна, яке задане при заповненні структури wc. 'Маркелов - Лабораторна робота 3 (виконав Паранчак Т. М.).', // Заголовок вікна. ws_overlappedwindow, // Прапорці стилів вікна. xPos, // Горизонтальна позиція вікна. yPos, // Вертикальна позиція вікна. nWidth, // Ширина вікна. nHeight, // Висота вікна. 0, // Описувач батьківського вікна (parent) чи вікна-володаря (owner). 0, // Описувач меню вікна (меню нема, нема і описувача). Hinstance, // Описувач програми (application). nil); // Address of window-creation data. ShowWindow(MainWnd, CmdShow); // Відображуємо вікно. // Задання початкових значень. count := 0; zoom := 100; ox1 := 150; oy1 := 170; ox2 := 500; oy2 := 170; ox3 := 850; oy3 := 170; ox4 := 150; oy4 := 520; ox5 := 500; oy5 := 520; ox6 := 850; oy6 := 520; GetClientRect(MainWnd, rec); new(prec); prec.Left := rec.Left; prec.Top := rec.Top; prec.Right := rec.Right; prec.Bottom := rec.Bottom; // Цикл обробки повідомлень. Він може трохи видозмінюватися, але цей код присутній завжни. While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg); // Робота з графічними функціями. MyDC:=GetDC(MainWnd); // Отримання контексту пристрою виводу. SaveDC(OldDC); // ************************ Мій власний код. *************************** if (Mesg.message = 256) or (Mesg.message = 15) or (Mesg.message = 49366) then begin if (count = 0) or (count >= 3) then begin Rectangle(MyDC, xPos, yPos, nWidth, nHeight); // 1. Натиснення '+'. if (Mesg.message = 256) and (Mesg.wParam = 107) then begin Rectangle(MyDC, xPos, yPos, nWidth, nHeight); zoom := zoom + 20; ox2 := ox2 + (zoom - 100)*2; ox3 := ox3 + (zoom - 100)*4; oy4 := oy4 + (zoom - 100)*2; ox5 := ox5 + (zoom - 100)*2; oy5 := oy5 + (zoom - 100)*2; ox6 := ox6 + (zoom - 100)*4; oy6 := oy6 + (zoom - 100)*2; end else if (Mesg.message = 256) and (Mesg.wParam = 109) then begin Rectangle(MyDC, xPos, yPos, nWidth, nHeight); if zoom >= 100 then begin ox2 := ox2 - (zoom - 100)*2; ox3 := ox3 - (zoom - 100)*4; oy4 := oy4 - (zoom - 100)*2; ox5 := ox5 - (zoom - 100)*2; oy5 := oy5 - (zoom - 100)*2; ox6 := ox6 - (zoom - 100)*4; oy6 := oy6 - (zoom - 100)*2; end; zoom := zoom - 20; end else if (Mesg.message = 256) and (Mesg.wParam = 37) then begin ox1 := ox1 - 80; ox2 := ox2 - 80; ox3 := ox3 - 80; ox4 := ox4 - 80; ox5 := ox5 - 80; ox6 := ox6 - 80; end else if (Mesg.message = 256) and (Mesg.wParam = 39) then begin ox1 := ox1 + 80; ox2 := ox2 + 80; ox3 := ox3 + 80; ox4 := ox4 + 80; ox5 := ox5 + 80; ox6 := ox6 + 80; end else if (Mesg.message = 256) and (Mesg.wParam = 38) then begin oy1 := oy1 - 80; oy2 := oy2 - 80; oy3 := oy3 - 80; oy4 := oy4 - 80; oy5 := oy5 - 80; oy6 := oy6 - 80; end else if (Mesg.message = 256) and (Mesg.wParam = 40) then begin oy1 := oy1 + 80; oy2 := oy2 + 80; oy3 := oy3 + 80; oy4 := oy4 + 80; oy5 := oy5 + 80; oy6 := oy6 + 80; end else if (Mesg.message = 256) and (Mesg.wParam = 112) then begin // WMFDC := CreateEnhMetaFile(MyDC, 'd:\TPMark3.wmf', prec, nil); // MFile := CloseEnhMetaFile(WMFDC); end else if (Mesg.message = 256) and (Mesg.wParam = 113) then begin // PlayEnhMetaFile(WMFDC, MFile, rec); end; // 1. Малюємо перший графік. DrawOsi(ox1+zoom-100, oy1+zoom-100, zoom); DrawGrid(ox1+zoom-100, oy1+zoom-100, zoom); DrawGraphicWithPoints(ox1+zoom-100, oy1+zoom-100, zoom, 1, 4, 0.02, RGB(205, 1, 27)); TextOut(MyDc, ox1+zoom-100 - zoom - 20, oy1 + zoom+zoom-100 + 50, 'Рис. 1. Одна функція (A = 1, B = 4).', 37); // 2. Малюємо другий графік. DrawOsi(ox2+zoom-100, oy2+zoom-100, zoom); DrawGrid(ox2+zoom-100, oy2+zoom-100, zoom); DrawGraphicWithLines(ox2+zoom-100, oy2+zoom-100, zoom, 1, 10, 0.01, RGB(0, 168, 0)); TextOut(MyDc, ox2+zoom-100 - zoom - 20, oy2+zoom-100 + zoom + 50, 'Рис. 2. Одна функція (A = 1, B = 10).', 38); // 3. Малюємо третій графік. DrawOsi(ox3+zoom-100, oy3+zoom-100, zoom); DrawGrid(ox3+zoom-100, oy3+zoom-100, zoom); DrawGraphicWithLines(ox3+zoom-100, oy3+zoom-100, zoom, 1, 10.5, 0.01, RGB(0, 0, 255)); TextOut(MyDc, ox3+zoom-100 - zoom - 25, oy3+zoom-100 + zoom + 50, 'Рис. 3. Одна функція (A = 1, B = 10.5).', 40); // 1. Малюємо першу квітку. DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 1, 5.5, 0.001, RGB(255, 0, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.9, 5.5, 0.01, RGB(255, 100, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.8, 5.5, 0.01, RGB(255, 128, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.7, 5.5, 0.01, RGB(255, 150, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.6, 5.5, 0.01, RGB(255, 150, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.5, 5.5, 0.01, RGB(255, 180, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.4, 5.5, 0.01, RGB(255, 200, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.3, 5.5, 0.01, RGB(255, 220, 0)); DrawGraphicWithLines(ox4+zoom-100, oy4+zoom-100, zoom, 0.2, 5.5, 0.1, RGB(255, 255, 0)); TextOut(MyDc, ox4+zoom-100 - zoom - 40, oy4+zoom-100 + zoom + 10, 'Рис. 4. Девять функцій (A = [0.2; 1], B = 5.5).', 48); // 2. Малюємо другу квітку. DrawGraphicWithLines(ox5+zoom-100, oy5+zoom-100, zoom, 1, 3, 0.01, RGB(242, 0, 231)); brush := CreateSolidBrush(RGB(242, 0, 231)); SelectObject(MyDC, brush); FloodFill(MyDC, ox5+zoom-100, oy5+zoom-100-50, RGB(242, 0, 231)); FloodFill(MyDC, ox5+zoom-100-50, oy5+zoom-100+30, RGB(242, 0, 231)); FloodFill(MyDC, ox5+zoom-100+50, oy5+zoom-100+30, RGB(242, 0, 231)); DeleteObject(brush); DrawGraphicWithLines(ox5+zoom-100, oy5+zoom-100, zoom, 0.15, 3.5, 0.1, RGB(255, 255, 0)); TextOut(MyDc, ox5+zoom-100 - zoom, oy5+zoom-100 + zoom + 10, 'Рис. 5. Дві функції (A = 1, B = 3', 34); TextOut(MyDc, ox5+zoom-100 - zoom + 40, oy5+zoom-100 + zoom + 27, 'і A = 0.15; B = 3.5).', 23); // 3. Малюємо третю квітку. DrawGraphicWithLines(ox6+zoom-100, oy6+zoom-100, zoom, 1, 16.7, 0.01, RGB(255, 0, 0)); TextOut(MyDc, ox6+zoom-100 - zoom - 25, oy6+zoom-100 + zoom + 10, 'Рис. 6. Одна функція (A = 1, B = 16.7).', 40); end; end; count := count + 1; // *********************************************************************** ReleaseDC(MainWnd,OldDC); // Звільнення зсилки. DeleteDC(MyDC); // Видалення зсилки. end; //WMFDC := CreateEnhMetaFile(MyDC, 'd:\TPMark3.wmf', prec, nil); //MFile := CloseEnhMetaFile(WMFDC); //DeleteEnhMetaFile(MFile); end. РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ  ВИСНОВОК Програмування під операційну систему Windows є досить просте і дає великі можливості, хоча й потребує великих знань про принципи виконання програм та виникнення подій в системі.
Антиботан аватар за замовчуванням

02.10.2020 20:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!