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

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

P.S. Хотите построить CAD - систему?
Ubhra
Это только для понимания как оно работает.

Линии просто отрисовал по всему холсту:
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
4kpt_II
Итак по-очереди:

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.

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

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

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

Но в этом случае я не знаю как будет работать метод .scale, т.е. Ваш последний вопрос. Лучше сделать почти тот в тон с канвасом. Задать для канваса цвет и задать цвет для линий, который отличается на полтона. Можно еще попробовать рисовать штриховые линии.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB