Система координат

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Система координат

Сообщение Kiryusha » 08.02.2007 (Чт) 0:07

Вобщем труба....

Есть PictureBox, есть в памяти в массиве точки я рисую многоугольники, но теперь мне надо не меняя значений точек нарисовать то же только повернув систему координат на 90 градусов
pic.Scale не помогает, SetWorldTransform тоже...

Мож я что не так делаю...
Вот код (где-то здесь же вроде на форумах и отрыл у них работает):
Код: Выделить всё

Private Sub Command1_Click()
   
    Dim da As Double: da = 30 * pi / 180
    'матрица преобразования
    Dim XF As XFORM
    XF.eDx = picMap.ScaleWidth / 2
    XF.eDy = picMap.ScaleHeight / 2
    XF.eM11 = Cos(-da)
    XF.eM12 = Sin(-da)
    XF.eM21 = -Sin(-da)
    XF.eM22 = Cos(-da)
    'устанавливаем расширенный графический режим
    SetGraphicsMode picMap.hdc, GM_ADVANCED
    'смещаем и поворачиваем мир на нужную величину
    SetWorldTransform picMap.hdc, XF
    picMap.Cls
    Draw picMap.hdc, POI(), POLYGON(), POLYLINE(), chkRoad = vbChecked
    picMap.Refresh
End Sub


И он выводит абсолютно такую же картинку....
Для рисования многоугольников юзаю LineTo

Вроде все, может кто чем поможет? :roll:
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.02.2007 (Чт) 7:23

Ну, как минимум GDI+ поможет ;-)
А лучше дай свой исходник, а то что дебажить?
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.02.2007 (Чт) 8:11

SetWorldTransform, что возвращает?
З.Ы. Кстати, она поддерживается только на NT и потомках.
Весь мир матрица, а мы в нем потоки байтов!

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 08.02.2007 (Чт) 9:04

1) Что именно с GDI+ ?

2) Вот это не могу, ибо программа не с открытым кодом, мы ее продавать будем...

3) Как ни странно функция возвращает 1, вроде бы это значит все сработало...

4) Платформа ХР
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.02.2007 (Чт) 10:43

Аналогичные функции GDI+ типа GdipSetWorldTransform или GdipRotateWorldTransform.

З.Ы. На первый взгляд, твой пример кода должен работать... Возможно проблемы за его пределами
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.02.2007 (Чт) 10:47

2) ну тогда сделай небольшой тестовый пример, в котором проявлялась бы та же проблема. Либо жди телепатов.
Изображение

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 08.02.2007 (Чт) 11:05

tyomitch, уговорил
Вложения
GPS.rar
(37.09 Кб) Скачиваний: 68
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.02.2007 (Чт) 12:52

Судебно-медицинское вскрытие показало, что константа pi у автора не определена!!!!

З.Ы. Кстати, прицепленый пример вообще ничего не рисует, ни в повернутом виде, ни в каком либо другом.
Весь мир матрица, а мы в нем потоки байтов!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 08.02.2007 (Чт) 15:49

Вы что? Повернуть на 90 градусов - поменять X и Y местами. и где надо поставить минус (зависит от направления поворота и точки, которую считать за 0 градусов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 08.02.2007 (Чт) 16:03

ему надо не меняя значений точек... SetWorldTransform тут прще всего применить, чем по всему массиву менять X на Y
Весь мир матрица, а мы в нем потоки байтов!

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 08.02.2007 (Чт) 16:34

!Viper! писал(а):ему надо не меняя значений точек... SetWorldTransform тут прще всего применить, чем по всему массиву менять X на Y

и верятно придется реализовывать динамическое вращение изображения...

Судебно-медицинское вскрытие показало, что константа pi у автора не определена!!!!


упс :) , но с ее инициализацией ничего не изменилось

З.Ы. Кстати, прицепленый пример вообще ничего не рисует, ни в повернутом виде, ни в каком либо другом.


А ты файл в папке Maps открываешь?
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.02.2007 (Чт) 18:19

Вот в таком виде работает. (Поскольку время позднее, множить матрицы на бумажке было влом.)
Код: Выделить всё
Private Sub Command1_Click()
    picMap.Cls
    'óñòàíàâëèâàåì ðàñøèðåííûé ãðàôè÷åñêèé ðåæèì
    SetGraphicsMode picMap.hDC, GM_ADVANCED
   
    da = da + 10 * pi / 180
    'ìàòðèöà ïðåîáðàçîâàíèÿ
    Dim XF As XFORM
    With XF
    'ñìåùàåì è ïîâîðà÷èâàåì ìèð íà íóæíóþ âåëè÷èíó
        .eDx = picMap.ScaleWidth / 2
        .eDy = picMap.ScaleHeight / 2
        .eM11 = 1
        .eM22 = 1
    Debug.Print ModifyWorldTransform(picMap.hDC, XF, MWT_LEFTMULTIPLY)
        .eDx = 0
        .eDy = 0
        .eM11 = Cos(-da)
        .eM12 = Sin(-da)
        .eM21 = -Sin(-da)
        .eM22 = Cos(-da)
    Debug.Print ModifyWorldTransform(picMap.hDC, XF, MWT_LEFTMULTIPLY)
        .eDx = -picMap.ScaleWidth / 2
        .eDy = -picMap.ScaleHeight / 2
        .eM11 = 1
        .eM12 = 0
        .eM22 = 1
        .eM21 = 0
    Debug.Print ModifyWorldTransform(picMap.hDC, XF, MWT_LEFTMULTIPLY)
    End With
    Draw picMap.hDC, POI(), Polygon(), Polyline(), chkRoad = vbChecked
    picMap.Refresh
End Sub
Изображение

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 08.02.2007 (Чт) 18:51

Странно, но у меня после нажатия кнопки ничего не меняется...

В дебаге все 3 функции возвращают 0
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 08.02.2007 (Чт) 20:54

А нет, сори, все круто! Работает спасибо всем за соучастие!
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.02.2007 (Пт) 7:55

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.02.2007 (Пт) 11:59

...где-то на форуме даже мой пример лежит, который без СК и совместим с Win98 ;-)
Изображение

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 11.02.2007 (Вс) 18:53

Теперь в другом проблема, ск то я повернул, но теперь и текст повернулся... Как выводить текст, чтобы он был горизонтально? :oops:
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.02.2007 (Пн) 8:11

Печатай текст ДО поворота СК. И/или восстаанавливай ориентацию СК.
Весь мир матрица, а мы в нем потоки байтов!

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 13.02.2007 (Вт) 19:32

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

Вот если бы выводить текст в отдельные области с собственной ск, так вообще можно?
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.02.2007 (Вт) 19:50

Kiryusha писал(а):Вот если бы выводить текст в отдельные области с собственной ск, так вообще можно?

Можно сам текст повернуть при выводе, против угла поворота СК.
Но чесслово, лучше бы ты взял GDI+, там со всем этим куда проще :-)
Изображение

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 13.02.2007 (Вт) 22:03

tyomitch писал(а):Можно сам текст повернуть при выводе, против угла поворота СК.


Как?
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.02.2007 (Вт) 22:35

См. lfEscapement в структуре LOGFONT
Изображение

Kiryusha
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 216
Зарегистрирован: 30.08.2005 (Вт) 10:56
Откуда: УР, Ижевск

Сообщение Kiryusha » 14.02.2007 (Ср) 11:28

Грац ;)
Судебно-медицинское вскрытие показало, что чукча умер в
результате судебно-медицинского вскрытия.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 112

    TopList