Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 18, 2013 11:08:48

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Canvas

Добрый день.
Несколько вопросов по отрисовке.
Нарисовал сетку с шагом 10px и размером 8000 на 8000.
1) В чем нужно указывать размеры (если не в px), для правильной работы на разных разрешениях?
2) Как добавить сетке прозрачности? Читал про битмапы, но мало что понял.
3) Как изначально отобразить центр сетки (4000,4000,4000,4000) по центру канваса?
4) Как научить сетку двигаться с помощью ПКМ? (То есть при видимой (например) области 400 на 300, двигать все содержимое, вернувшись в вопросу №3 отображать по центру канваса сетку с иными координатами)
Спасибо. Очень поможете хотя бы частичными ответами.

П.С. И пятый вопросик забыл. Как этот центральный канвас скролом приближать и отдалять? Уменьшать шаг сетки?
Спасибо.



Отредактировано Ubhra (Дек. 18, 2013 11:10:12)

Прикреплённый файлы:
attachment Точечный рисунок.JPG (68,4 KБ)

Офлайн

#2 Дек. 18, 2013 12:39:21

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Canvas

Могу ответить на многие вопросы. Но нужно знать. Как Вы построили сетку?

P.S. Хотите построить CAD - систему?

Отредактировано 4kpt_II (Дек. 18, 2013 13:16:34)

Офлайн

#3 Дек. 18, 2013 15:00:34

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Canvas

Это только для понимания как оно работает.

Линии просто отрисовал по всему холсту:

net_x=net_y=10
while net_x<8000:
    canv_window.create_line(net_x,0,net_x,8000,fill = '#809090')
    net_x=net_x+10
while net_y<8000:
    canv_window.create_line(0,net_y,8000,net_y,fill = '#809090')
    net_y=net_y+10



Отредактировано Ubhra (Дек. 18, 2013 15:01:59)

Офлайн

#4 Дек. 18, 2013 22:13:03

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Canvas

Итак по-очереди:

Ubhra
1) В чем нужно указывать размеры (если не в px), для правильной работы на разных разрешениях?
В пикселях, в пикселях. Но нужно просто высчитывать. Это проще. Сталкивался с тем, что другие величины не всегда отображаются адекватно…

Ubhra
2) Как добавить сетке прозрачности? Читал про битмапы, но мало что понял.
Я бы просто рекомендовал использовать светло-серый цвет. Цвет можно установить в параметры fill линии. Еще есть вариант нанести множество png изображений размеров в 1 пиксель с альфапрозрачностью, но я не знаю насколько это будет ресурсоемко да и как потом эту хрень масштабировать.

Ubhra
3) Как изначально отобразить центр сетки (4000,4000,4000,4000) по центру канваса?
Мои рекомендации: используейте canvas.create_window(). Это позволит вам настроить отображение этого окна (какая часть внутреннего канваса будет у Вас видна или точку монтирования внутреннего канваса относительно окна). Понимаю, что запутанно говорю, но проще не могу

Ubhra
4) Как научить сетку двигаться с помощью ПКМ? (То есть при видимой (например) области 400 на 300, двигать все содержимое, вернувшись в вопросу №3 отображать по центру канваса сетку с иными координатами)
Вот тут уже интереснее. Вешаете на нажатие правой кнопки + Motion бинд и обрабатываете событие. В функции обработчике анализируете event.x и event.y. И на его изменения перемещаете объект внутри window (построенного в пункте 2) на нужные пиксели.

Ubhra
П.С. И пятый вопросик забыл. Как этот центральный канвас скролом приближать и отдалять? Уменьшать шаг сетки?
Не надо забывать Тут есть небольшая проблема. Обработчик на скролл в никсах и в винде вешается по-разному. Нужно это будет прописывать. А так легко. Есть метод .scale… Плюс в винде нужно делать bind_all.

Будут вопросы - пишите.

Отредактировано 4kpt_II (Дек. 18, 2013 23:57:56)

Офлайн

#5 Дек. 19, 2013 08:27:22

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Canvas

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

Насчет canvas.create_window()
Я понял мысль, в таком случае придется (если правильно понял) окна создавать классами.



Отредактировано Ubhra (Дек. 19, 2013 10:46:07)

Офлайн

#6 Дек. 19, 2013 12:45:31

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Canvas

Ubhra
Я понял мысль, в таком случае придется (если правильно понял) окна создавать классами.
Не обязательно. Просто вкладывать придется одно окно в другое. Если нужен пример - пишите.

Ubhra
По прозрачности попробую картинками, т.к. как бы не осветлял или затенял линии, при большом количестве на глаза давят

Но в этом случае я не знаю как будет работать метод .scale, т.е. Ваш последний вопрос. Лучше сделать почти тот в тон с канвасом. Задать для канваса цвет и задать цвет для линий, который отличается на полтона. Можно еще попробовать рисовать штриховые линии.

Отредактировано 4kpt_II (Дек. 19, 2013 12:46:11)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version