У меня есть домашний проект DebugView ++ (https://github.com/CobaltFusion/DebugViewPP)
)
Это инструмент просмотра журналов, и я хочу добавить к нему шкалу времени.
Это то, что я имею до сих пор:
В принципе, я могу рисовать то, что хочу, эта часть в порядке. У меня есть шкала, курсор, временная шкала и «флаги» или артефакты, как я их называю на временной шкале.
Что я хочу сделать, так это сделать его «бесконечно» масштабируемым, чтобы я мог уменьшить масштаб до 1000px == 1 день или 1 год и увеличить до 1000px == 1 мкс.
Проблема в том, как сделать математику при масштабировании артефактов.
- как лучше округлить, когда «время» не соответствует «точному» пикселю.
- на каком-то уровне артефакты начинают накапливаться / перекрываться, и мне нужно будет отобразить «есть еще кое-что, если вы увеличите» вид артефакта.
- Я хочу увеличить текущий курсор
Я мог бы действительно использовать некоторую помощь о том, как это настроить, у меня настоящая головная боль от
вычисления, которые просто не «работают» для всех крайних случаев, в том смысле, что результат не очень приятен для просмотра, когда:
- набор данных меньше текущего размера представления
- детализация данных произвольна, иногда есть точка данных, затем ничего в течение часа, а затем сотые точки данных
У меня очень мало опыта в рендеринге графики;
У кого-нибудь есть советы о том, как «думать» о рендеринге такой временной шкалы. Для меня это звучит так, как будто пользовательский интерфейс решил эту проблему (и гораздо более сложную), поэтому я не хочу заново изобретать колесо.
Nico>
Я не решил масштабирование, математика для масштабирования / масштабирования / позиционирования - моя главная проблема. во-первых, я не уверен, использовать ли дискретную математику или математику с плавающей запятой.
У меня есть несколько входов:
- данные для отображения, набор произвольных событий в фиксированные моменты времени.
- точка данных с самым ранним моментом времени является началом диапазона.
- точка данных с самым последним моментом времени является концом диапазона.
- набор может расти и, как правило, увеличивается, поскольку точки данных получены из файла журнала
- текущий диапазон просмотра
- положение курсора в представлении
- колесо прокрутки (влияет на коэффициент масштабирования)
и выходы:
- шкала (не коэффициент масштабирования): цифры на временной шкале
- точки данных (я называю их артефактами), нарисованные на виде
предположим, что текущий набор данных (в секундах)
1: red flag
3: red flag
5: red flag
7: red flag
10: red flag
С этого я и начинаю:
datarange = 1 to 10 seconds.
viewXmin = 0px
viewXmax = 1000px
scalefactor = 1.0
unitsToPixels = 1000px / (size(datarange)) = 100px
unitsToPixels = 1000px / 9 = 111.111111111px
флажок для рисования = единицы измеренияПиксели * время в секундах
Так что здесь уже есть некоторая неточность 111.111111111px, некоторая точность там была потеряна. Я действительно хочу сделать это в наносекундах (или лучше), так:
unitsToPixels = 1000px / 9e-9) = 1.111111111e-7px
pos to draw flag = unitsToPixels * timeInSeconds
pos to draw flag = 1.111111111e-7px* 5e-9 = 555.555555px.
Я не уверен, куда идти отсюда ...
Это нормально?
Также об ответах на вопросы дизайна. Я тоже не знаю ответа:
- должно ли меняться содержимое временной шкалы, если вы изменяете размер окна или изменяется способ отображения? Вы отображаете больше временной шкалы или ту же часть, но распределяете по большему количеству пикселей?
- учитывая N пикселей, должно ли количество основных тиков быть нечетным или четным?
- odd кажется хорошим выбором, поэтому в начале и в конце представления всегда есть основной тик, но что делать, если основной тик находится точно в первом и последнем пикселях представления; тогда вы не сможете увидеть это ясно, так как обращаться с краем дела.
- как отображать числа на шкале с «достаточной» точностью? Например: 850.000US, 950.000US, 1.050ms теперь отображается в масштабе. 850.000us не нужно, потому что точность «просто нет», но я не могу сказать это по самому числу.
Список можно продолжить ...
Тогда еще одна вещь: помимо того, что она точная по пикселям, она также довольно уродливая, в основном я хочу, чтобы она выглядела красиво и была удобной для пользователя, но я понятия не имею, как этого добиться ... какие-либо дизайнеры пользовательского интерфейса получили какие-либо советы?
Meowgoesthedog>
Дело не в GDI, что эта часть работает нормально.
-январь.