реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как от зеркалить текст, вопрос к программистам
Yuri Potapoff
сообщение Oct 7 2006, 17:53
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 752
Регистрация: 10-11-04
Из: Железнодорожный
Пользователь №: 1 093



Тему создаю здесь, почему, поймете ниже.

Проблема в следующем: необходимо найти готовую функцию зеркального отображения TrueType шрифта в приложении Windows.

При разработке очередного модуля программы Schemagee, мы столкнулись с проблемой, что в стандартном наборе функций Windows отсутствует функция зеркального отображения шрифтов. Именно поэтому пикад долго не мог правильно отображать надписи при флипе. Фирме потребовалось 10 лет, чтобы написать эту функцию. Нам хотелось бы решить проблему несколько быстрее.

Может ли кто-либо помочь и дать совет, где можно найти эту функцию готовой? Или ссылку на людей. кто может помочь ее грамотно реализовать.

В противном случае функцию придется писать самим.
Go to the top of the page
 
+Quote Post
ktod
сообщение Oct 8 2006, 03:45
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 27-09-05
Пользователь №: 8 979



Может , я, конечно, вопрос до конца не понял, но:
Функция зеркализации реализуется элементарно, что в растре, что на векторах.

Попробуйте задачу поставить полее полно.

ЗЫ: Уж не знаю кому там потребовалось десять лет на реализацию...

Сообщение отредактировал ktod - Oct 8 2006, 03:48


--------------------
Ignoramus et Ignorabimus
Go to the top of the page
 
+Quote Post
svz
сообщение Oct 8 2006, 11:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 22-02-05
Из: СПб
Пользователь №: 2 812



Цитата(Yuri Potapoff @ Oct 7 2006, 21:53) *
Проблема в следующем: необходимо найти готовую функцию зеркального отображения TrueType шрифта в приложении Windows.

При разработке очередного модуля программы Schemagee, мы столкнулись с проблемой, что в стандартном наборе функций Windows отсутствует функция зеркального отображения шрифтов. Именно поэтому пикад долго не мог правильно отображать надписи при флипе. Фирме потребовалось 10 лет, чтобы написать эту функцию. Нам хотелось бы решить проблему несколько быстрее.

Хе, мы это уже проходили (в ТопоРе). cheers.gif Проще вручную разбирать ACAD'овские векторные шрифты.
Можно попытаться поработать с мировыми координатами - перед выводом текста делать
SetGraphicMode (hDC, GM_ADVANCED), SetWorldTransform(bla-bla-bla), пересчитывать координаты текста, а после того, как текст нарисован возвращать состояние Контекста в исходное состояние.
Но тогда с Win9x/ME придется распрощаться - только НТ/2000.
В общем, читать Фень Юаня "Программирование Графики для Windows" до полного просветления.
Желаю удачи.

Появилась еще идея - рисовать "прямой" текст в отдельный буфер в памяти, полученную картинку переворачивать, и перевернутое изображение накладывать на экран. Через одно место, но реализовать будет проще :-)

Сообщение отредактировал svz - Oct 8 2006, 11:27
Go to the top of the page
 
+Quote Post
arttab
сообщение Oct 9 2006, 02:56
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



А зачем такое хитрое шаманство надо? Судя по теме форума, Вам нужно нанести текст на плату в зеркльном виде (смотрите на TOP, а пишите на BOT). Галочку миррор поставить не возможно? Или кад это не поддерживает?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Mikle Klinkovsky
сообщение Oct 9 2006, 06:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 10-10-05
Из: 54°36'41.81" 39°43'6.90"
Пользователь №: 9 445



Цитата(svz @ Oct 8 2006, 15:24) *
Появилась еще идея - рисовать "прямой" текст в отдельный буфер в памяти, полученную картинку переворачивать, и перевернутое изображение накладывать на экран. Через одно место, но реализовать будет проще :-)

А перерисовка потом будет по полчаса проц грузить на 100%...
Уж лучше отзеркалить в буфер используемые шрифты и перевернуть текст, а потом юзать стандартные функции не заморачиваясь о режимах, разрешении и пр.

И вообще, если в Пикаде все так круто работает, то почему не заюзать пикадовскую Dll'ку?


--------------------
Подвиг одного - это преступление другого! (с) Жванецкий
Go to the top of the page
 
+Quote Post
Fellow
сообщение Oct 9 2006, 07:20
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 29-06-05
Пользователь №: 6 404



Если старые ОС не очень волнуют, то можно создать фонт с lfOrientation = 1800 в режиме GM_ADVANCED. Буквы фонта будут повернуты на 180 градусов, то есть зеркальное отрображение относительно оси x уже есть (не проверял). Можно пользоваться BeginPath/EndPath и самим преобразовывать и выдавать полилинии текста методом PolyPolygon (проверено). Работает достаточно быстро.
Go to the top of the page
 
+Quote Post
Vinnetu
сообщение Oct 9 2006, 08:10
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 1-08-05
Из: Sunny Israel
Пользователь №: 7 269



Цитата
Фирме потребовалось 10 лет, чтобы написать эту функцию.
Серьёзными вы вещами занимаетесь! Попробуйте иначе. Я так понимаю, что время для вас не вопрос. Напишите программу, которая переворачивает плату, а потом в нужном месте напишете обычным шрифтом.

ЗЫ. Вы, наверно, очень серьёзные ребята, если с такой ответственностью подходите к вопросам о надписях. Что вы разрабатываете, если не секрет?
Go to the top of the page
 
+Quote Post
Yuri Potapoff
сообщение Oct 9 2006, 08:43
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 752
Регистрация: 10-11-04
Из: Железнодорожный
Пользователь №: 1 093



Пока речь идет о библиотекаре к нашему редактору схем Schemagee, в котором будет возможность рисовать не только символы, но и футпринты. Наличие футпринтов предполагает возможность их переноса на другую сторону платы, а это требует наличие функции зеркального преобразования текста.

Использование зеркальных шрифтов с выворачиванием текста рассматривалось, но было отнесено к разделу извращений.
Go to the top of the page
 
+Quote Post
Vinnetu
сообщение Oct 9 2006, 09:22
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 1-08-05
Из: Sunny Israel
Пользователь №: 7 269



Цитата
Наличие футпринтов ... требует наличие функции зеркального преобразования текста.
Зачем на плате писать шрифтами True Type? Несмотря на то, что при изготовлении PCB сейчас в основном используются лазерные плоттеры, формат ориентирован, в первую очередь, на векторные машины. Именно поэтому во всех CAD-ах используются собственные шрифты.

Да и потом, при размере символов высотой 60 mil, заметите вы разницу между шрифтом Times Roman и Arial?
Go to the top of the page
 
+Quote Post
ktod
сообщение Oct 9 2006, 11:37
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 27-09-05
Пользователь №: 8 979



Если задача стоит только на вывод текста на контекст устройства под вин32 тогда:
Действительно, самый простой способ создать контекст, подключить к нему битмап, вывести на этот контекст надпись, залочить битмап, "ручками" отзеркалировать и битблитнуть наш контекст на выходной контекст устройства (экран, принтер, етц).
Самое некрасивое в таком решении то, что придется написать несколько функций зеркализации для разной глубины цвета.

Сам частенько пользуюсь.
И тормозить будет если работать не с памятью битмапа, а например через гетпиксел+сетпиксел.
Это если в терминологии MFC. Если напрямую с вин32 ничего особо не меняется.


--------------------
Ignoramus et Ignorabimus
Go to the top of the page
 
+Quote Post
Mikle Klinkovsky
сообщение Oct 10 2006, 08:21
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 972
Регистрация: 10-10-05
Из: 54°36'41.81" 39°43'6.90"
Пользователь №: 9 445



Вот, мой коллега сказал, что никаких проблем:

SetLayout(hDC, LAYOUT_RTL);


Правда под 98ми виндами скорее всего работать не будет.


--------------------
Подвиг одного - это преступление другого! (с) Жванецкий
Go to the top of the page
 
+Quote Post
Fellow
сообщение Oct 10 2006, 09:09
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 29-06-05
Пользователь №: 6 404



Цитата(Vinnetu @ Oct 9 2006, 12:22) *
Цитата
Наличие футпринтов ... требует наличие функции зеркального преобразования текста.
Зачем на плате писать шрифтами True Type? Несмотря на то, что при изготовлении PCB сейчас в основном используются лазерные плоттеры, формат ориентирован, в первую очередь, на векторные машины. Именно поэтому во всех CAD-ах используются собственные шрифты.

Да и потом, при размере символов высотой 60 mil, заметите вы разницу между шрифтом Times Roman и Arial?

И кто, интересно, Вам нарисует сотни иероглифов для векторного шрифта?
Go to the top of the page
 
+Quote Post
Vinnetu
сообщение Oct 10 2006, 20:16
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 1-08-05
Из: Sunny Israel
Пользователь №: 7 269



Цитата
И кто, интересно, Вам нарисует сотни иероглифов для векторного шрифта
Каких ещё иероглифов? А вообще вы правы. При современном уровне развития технологий, эта задача вряд ли может быть решена. Может быть, лет через 10...
Go to the top of the page
 
+Quote Post
Yuri Potapoff
сообщение Oct 10 2006, 20:23
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 752
Регистрация: 10-11-04
Из: Железнодорожный
Пользователь №: 1 093



Ну, допустим, иероглифы нам не нужны. Вариант с векторными шрифтами - это первый и простейший случай. Именно поэтому он используется в большинстве кадов.

Тут важно соблюсти соотношение разумности красоты вывода на экран/печать и в гербер.

Битовое преобразование, что порекомендовал ktod, подойдет для экрана, но что с ним потом делать в гербере.

В любом случае, спасибо за советы. Попробуем.
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Oct 10 2006, 20:50
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675



Засомневался - правильно-ли я понял вопрос.

Тока что запустил Хранитель Экрана в WinXP - "3D Text" - там надпись замечательно крутится вокруг оси Y. Т.е. в OpenGL можно. А может и DirectX ?
Go to the top of the page
 
+Quote Post
nikkov
сообщение Oct 11 2006, 02:28
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332



Юрий, пусть ваши программисты посмотрят библиотеку 2D графики http://wxart2d.sourceforge.net/. Там есть исходные коды на C++ и с текстом можно производить любые операции с использованием т.н. матрицы преобразований.

Или вот еще очень неплохая библиотека, разрабатывает российский программист, там есть демо которое крутит текст как в 3D. http://antigrain.com/. Обеспечивает очень качественный рендер векторных объектов.

Вторая библиотека включена и в wxart2d, как опция. В свое время пробовал обе библиотеки, вам думаю
надо поискать идеи во второй
Go to the top of the page
 
+Quote Post
Vinnetu
сообщение Oct 11 2006, 10:27
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 1-08-05
Из: Sunny Israel
Пользователь №: 7 269



Юрий, покажите своему программисту аттачмент.
На меня не обижайтесь.
Go to the top of the page
 
+Quote Post
Yuri Potapoff
сообщение Oct 11 2006, 16:44
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 752
Регистрация: 10-11-04
Из: Железнодорожный
Пользователь №: 1 093



Vinnetu

Я оценил ваше чувство юмора. Я тоже знаю, где поставить галочку, чтобы получить зеркальный текст в файле Adobe PDF. Какое это имеет отношение к заданному вопросу?
Go to the top of the page
 
+Quote Post
Vinnetu
сообщение Oct 11 2006, 17:22
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 1-08-05
Из: Sunny Israel
Пользователь №: 7 269



Юрий, меня очень... э-э-э... удивило, что на какую-то задачу можно тратить столько времени. Как видите, готовые функции в приложениях Windows существуют.

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

Только, я ещё раз хочу обратить ваше внимание. На печатных платах шрифтами True Type не пишут, если вы об этом.
Go to the top of the page
 
+Quote Post
nikkov
сообщение Oct 12 2006, 03:12
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 217
Регистрация: 1-02-05
Пользователь №: 2 332



Цитата(Vinnetu @ Oct 12 2006, 00:22) *
Юрий, меня очень... э-э-э... удивило, что на какую-то задачу можно тратить столько времени. Как видите, готовые функции в приложениях Windows существуют.

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

Только, я ещё раз хочу обратить ваше внимание. На печатных платах шрифтами True Type не пишут, если вы об этом.


Vinnetu, если бы Вы поинтересовались как работают эти функции в указанных приложениях, то Ваш энтузиазм бы поугас. С т.з. программиста здесь несколько задач: преобразование шрифта в векторный объект, модификация этого объекта (кстати подобные операции необходимо делать и с падами, и др. объектами футпринта, это уже решили?), растеризация для вывода на экран и сохранение векторных объектов в гербер.
В предложенных мною библиотеках все это решено (ну кроме вывода в гербер, конечно) на очень качественном уровне.
Go to the top of the page
 
+Quote Post
Fellow
сообщение Oct 12 2006, 05:56
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 29-06-05
Пользователь №: 6 404



Цитата(Yuri Potapoff @ Oct 10 2006, 23:23) *
Ну, допустим, иероглифы нам не нужны. Вариант с векторными шрифтами - это первый и простейший случай. Именно поэтому он используется в большинстве кадов.

Тут важно соблюсти соотношение разумности красоты вывода на экран/печать и в гербер.

Битовое преобразование, что порекомендовал ktod, подойдет для экрана, но что с ним потом делать в гербере.

В любом случае, спасибо за советы. Попробуем.

Иероглифы сегодня не нужны -- завтра пригодятся. Так что закладывать в систему лучше побольше для возможности дальнейшего развития. Если Вы еще и гербер собираетесь охватить, то путь один -- получить набор полилиний текста (уже писал, как это сделать). Можно будет хотя бы контур буквы выдавать. Если же есть желание выдавать буквы заполненными, то придется превращать их в односвязные области либо штриховать внутри, либо как-то полярность слоев задействовать. Ну а товарищи, утверждающие, что TTF фонты на дизайнах не используются, просто не в теме. Стоит реализовать начальный уровень, и тут же поступают вопросы, а почему Type1 не поддерживается или символьные фонты типа штрих-кода.
Go to the top of the page
 
+Quote Post
Vinnetu
сообщение Oct 12 2006, 06:24
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 265
Регистрация: 1-08-05
Из: Sunny Israel
Пользователь №: 7 269



Цитата
Vinnetu, если бы Вы поинтересовались как работают эти функции в указанных приложениях, то Ваш энтузиазм бы поугас
Да я и не говорил, что просто. Но не десять же лет сидеть над этим! За такое время, как говорится, либо падишах умрёт, либо осёл, либо... Ходжа Насреддин. smile.gif

Тем более, как я понял, ребята решили переплюнуть западных братьев из Cadence и Mentor.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01578 секунд с 7
ELECTRONIX ©2004-2016