Разработка модуля для автоматического размещения текстовых надписей на рисунке в векторном графическом редакторе

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

1pic.FillStyle=0pic.FillColor=vbRedpic.Circle(cm.x,cm.y),4,vbRedpic.FillStyle=1Dimy2AsSingle,x2AsSingley2=(pic.ScaleWidth)*Sin(angle)x2=pic.ScaleWidth*Cos(angle)pic.Line(cm.x,cm.y)-(cm.x+x2,cm.y+y2)pic.Line(cm.x,cm.y)-(cm.x-x2,cm.y-y2)DimsAsStrings=txtText.TextDimapiFontAsLOGFONTDimbytBuf()AsByteDimintIAsIntegerDimstrFontNameAsStringstrFontName=pic.Font.NamebytBuf=StrConv(strFontName&Chr$(0),vbFromUnicode)APIForintI=0ToUBound(bytBuf)apiFont.ifFaseName(intI)=bytBuf(intI)NextintIapiFont.ifHeight=pic.Font.Size*GetDeviceCaps(pic.hdc,LOGPIXELSY)\72">Sub paint_field() pic.Cls очищаем рабочие переменные для точек Dim dot As pointapi, nextDot As pointapi временная строка Dim tmpS As String длина сторон полигона Dim length As Single временная переменная для точки Dim tmpDot As pointapi проходим по всем точкам в массиве For i = 1 To UBound(dots) цвет синий col = vbYellow берем первую точку dot = dots(i) отмечаем на поле зеленым цветом pic.Circle (dot.x, dot.y), 10, vbGreen j = i + 1 следующая точка If j > UBound(dots) Then j = 1 если вдруг следующая точка оказалась несуществующей _ значит переходим на первую col = vbGreen End If nextDot = dots(j) определяем координаты для следующей точки рисуем линию символизирующую сторону полигона pic.Line (nextDot.x, nextDot.y)-(dot.x, dot.y), col Next если имеются точки то If UBound(dots) > 1 Then определяем центр масс, записываем в глобальную переменную cm = getCM() рисуем этот центр масс как красную закрашенную точку pic.FillStyle = 0 pic.FillColor = vbRed pic.Circle (cm.x, cm.y), 4, vbRed pic.FillStyle = 1 рассчитываем линию Dim y2 As Single, x2 As Single y2 = (pic.ScaleWidth) * Sin(angle) x2 = pic.ScaleWidth * Cos(angle) pic.Line (cm.x, cm.y)-(cm.x + x2, cm.y + y2) pic.Line (cm.x, cm.y)-(cm.x - x2, cm.y - y2) читаем строку которую надо вывести Dim s As String s = txtText.Text шрифт Dim apiFont As LOGFONT битовый массив Dim bytBuf() As Byte переменная итератор Dim intI As Integer имя шрифта из коммондиалога Dim strFontName As String strFontName = pic.Font.Name приводим имя шрифта в кошерный вид bytBuf = StrConv(strFontName & Chr$(0), vbFromUnicode) побайтово записываем в переменную для передаче API функции For intI = 0 To UBound(bytBuf) apiFont.ifFaseName(intI) = bytBuf(intI) Next intI записываем параметры шрифта apiFont.ifHeight=pic.Font.Size*GetDeviceCaps(pic.hdc, LOGPIXELSY) \ 72

apiFont.ifItalic=Switch(pic.Font.Italic=True,1, pic.Font.Italic = False, 0 apiFont.ifUnderline = Switch(pic.Font.Underline = True, 1, pic.Font.Underline = False, 0).ifStrikeOut = Switch(pic.Font.Strikethrough = True, 1, pic.Font.Strikethrough = False, 0) apiFont.ifWeight = pic.Font.Weight определяем поворот apiFont.ifEscapement = -(angle) * 1800 / pi apiFont.ifOrientation = apiFont.ifEscapement Dim fontObject As Long, oldFont As Long Dim ingRes As Long создаем объект шрифта fontObject = CreateFontIndirect(apiFont) выбираем созданный шрифт для данного устройства (пиктчербокс) _ при этом функция возвращает ссылку а старый шрифт oldFont = SelectObject(pic.hdc, fontObject) Dim oldColor As Long сохранеяем старый цвет oldColor = pic.ForeColor устанавливаем новый pic.ForeColor = picFontColor производим вывод ingRes = TextOut(pic.hdc, cm.x, cm.y, s, Len(s)) восстанавливаем параметры pic.ForeColor = oldColor fontObject = SelectObject(pic.hdc, oldFont) удаляем созданный шрифт DeleteObject fontObject End If pic.Refresh обновляем картинку, т.к. AutoRedraw=true

End Sub

Режим работы приложения.

 

 

Заключение

 

В качестве результата данной курсовой работы представляется компьютерная программа - модуль для графического векторного редактора. Программа позволяет вводить с помощью мыши полигональные объекты, находить центр тяжести введенного полигона, а также размещать на рисунке надпись, по линии симметричной относительно центра.

В рамках данной курсовой работы, были реализованы следующие задачи:

обзор средств реализации

обоснование методов и приемов решения

разработка программной части

реализация

подведение итога

Наработки включенные в данный проект могут послужить базой для программного модуля реализующего интерфейс данной программы.