-
Хотя вопрос про заливку снят... Она нужна, смотрб на чертежи.. используется. и часто.
А как вы реализуете градиент и штриховку?
-
Заливка везде применяется, поскольку это не чертеж и все объекты имеют ширину. На картинках показан только схематик, там оно не очень актуально, хотя тоже применяется. А в PCB просто чертеж не катит, там должны быть дорожки, заливка медью и т.п. (если кто знаком с тематикой).
-
Градиент и штриховка не нужны, поэтому никак.
-
> [21] novarm (23.12.07 17:50)
> просто чертеж не катит, там должны быть дорожки, заливка медью
Толщина линий = Масштаб*Коэффициент.
Как тебе мой алгоритм? )
-
> [23] homm © (23.12.07 17:52)
Так оно выродится также как и полик. :)
Да к томуже толщину придется для каждого элемента указывать...
-
> [24] @!!ex © (23.12.07 17:54)
> Так оно выродится также как и полик. :)
Ок.
Толщина линий = Масштаб*Коэффициент.
Если толщина < 1, то толшина = 1.
-
В OpenGL достаточно выводить линии при помощи GL_LINES (толщина не меняется в зависимости от проекционной матрицы)... думаю, в DX безусловно есть аналог подобного "примитива"
-
В приципе если для вас переход к представлению всего через линии(заливку через них тоже можно реализовать, кстати) не вариант, то единственно что я могу предложить - вынести расчет картинки для нового масштаба в отдельный поток, тогда не будет секунды задержки.
-
При пересчете делается ширина не меньше единицы, но при масштабировании пересчета нет, поэтому поменять ширину я не могу. Теоретически можно анализировать какие треугольники исчезают и чего-то с ними делать при перегонке из массива в видуху, вчера пробовал - не очень получилось (штрих-пунктиры, а вставлять много операций чтобы точно высчитать направление и т.п. не очень хотелось, хотя может и не замедлит сильно), возможно на днях еще раз попробую или дам задание тому кто это собственно писал.
-
> [25] homm © (23.12.07 17:55)
Медленно. Расчет для миллионов объектов... убицца ап стену...
-
Сам уже больше года занимаюсь CAD системой, поэтому рекомендую не жалеть ресурсов и использовать OpenGL. Компьютеры проектировщиков - это считай Hi-end железо обычно.
Насчёт вылета на забугорных машинах, в региональных настройках системы можно изменять знак запятой в дробях. Поэтому, FloatToStr и StrToFloat могут выдавать разные результаты на разных машинах. Решение - DecimalSeparator := '.' или ','
-
Новый масштаб не известен до того момента пока он не достигнут. Секундная задержка введена специально (т.е. если масштабирование закончено, то пересчитываем новую картинку).
-
> [28] novarm (23.12.07 18:00)
Кстати, есть вариант...
Берем картинку, и каждый объект представляем в двух видах...
как полик, и как линию.
Рисуешь полик, потом сверху линию единчной толщиной.
Пока полик невырожден, линия погоды делать не будет.
Как только полик вырождается, линия берет на себя отображение примитива.
-
С точками и запятыми все решено давно уже, системе все-равно что будет введено (свои функции). Тем более у нас тоже настройки забугорные и английская винда.
Вылетает не у всех, а только у некоторых товарищей. Хотя может где-то внутри D3D это действительно имеет место. В общем, пока тестим
-
> [29] @!!ex © (23.12.07 18:00)
> Медленно
Что медленно? Я сомневаюсь, что нужнабольшая точность, и по пикселям будут мерить реальные размеры дорожек, так что считать нужно один раз при изменении масштаба. В крайнем случае можно объеденить дорожки в группы, по признаку « большие, меньше, крохотные» и считать по группам.
-
> [34] homm © (23.12.07 18:09)
ИМХО проще рисовать полик и сверху линию.
хотя х.з. статистики на сей счет не имею...
-
Хорошая мысль с линией.
В общем, если настройками D3D это никак не решить, то прийдется самим либо треугольники корректировать, либо линии дорисовывать.
-
OpenGL попробуем опционально в будущем (больше для совместимости с не-Windows). В этот же модуль его встроить, думаю, проблем не составит.
-
> [37] novarm (23.12.07 18:16)
Будут проблемы.
DirectX - COM, а OpenGL - нет.
Довольно сложно их синхронизировать, особенно если делать это "потом"
-
У нас все в своих массивах до выхода на DirectX, поэтому просто заменить инициализацию и процедуры вывода должно быть не сложно. Так что по идее синхронизировать их не нужно - будет все раздельно. Основная сложность была в преобразовании всего в треугольники и системе работы с буфером (своим).