![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с графикой Gerber файла. [D7, Win2k, WinXP]
George © (2005-02-24 18:33:00)Сабж, господа. Имеется файл, из него нужно получить картинку. При попытке сделать это Канвасом возникла куча проблем (например проблема с дробными координатами - сокращать нельзя). Может у кого есть компонент для таких целей, или исходничек где завалялся?
George (2005-03-03 22:26:00) [1]Alx2 © В общем я полнял - легче сделать картинку и считать точки)))
Fenik - спасибо за ссылку.
Alx2 (2005-03-03 07:31:00) [2]>George © (02.03.05 21:17)
У меня пашет :)
Пример для N=3:
x[1]:=0;y[1]:=0;x[2]:=a;y[2]:=0;x[3]:=alpha;y[3]:=h; (теугольник с основанием = a и высотой = b) получаем S=1/2*a*h = площадь такого треугольника.
Еще пример для N=4 (прямоугольник со сторонами a и b)
x[1]:=0;y[1]:=0;x[2]:=a;y[2]:=0;x[3]:=a;y[3]:=b;x[4]:=0;y[4]:=b;
S = a*b
Для прямоугольника, полученного поворотом предыдущего прямоугольника на угол alpha относительно начала координат:
x[1]:=0;y[1]:=0;x[2]:=cos(alpha)*a;y[2]:=sin(alpha)*a;x[3]:=cos(alpha)*a-sin(alpha)*b;y[3]:=sin(alpha)*a+cos(alpha)*b;x[ 4]:=-sin(alpha)*b;y[4]:=cos(alpha)*b;
S = 1/2*cos(alpha)*a*(sin(alpha)*a+cos(alpha)*b)-1/2*(cos(alpha)*a-sin(alpha)*b)*sin(alpha)*a+1/2*(cos(alpha)*a-sin(alpha)*b )*cos(alpha)*b+1/2*sin(alpha)*b*(sin(alpha)*a+cos(alpha)*b) =
cos(alpha)^2*a*b+sin(alpha)^2*a*b =
a*b
Т.е. пока все работает :)
Fenik (2005-03-02 21:36:00) [3]http://delphibase.spb.ru/?action=viewfunc&topic=mathcalc&id=10091
George (2005-03-02 21:17:00) [4]Хорошшо... тока не пашет. Вот это - +x[N]*y[1]-x[1]*y[N] в результате будет ноль т.к. конечная координада по любому должна совпасть с первой, иначе это кривая, а не фигура. А скобка x[k]*y[k+1]-x[k+1]*y[k] в итоге дает результат меньше, чем должно быть. Может я что-то неправильно делаю?
Alx2 (2005-02-28 09:02:00) [5]George © (28.02.05 7:32) [12]
Для многоугольника с вершинами x[k],y[k] где k=1..N площадь считается, кажется, так:
1/2 * (Sum (x[k]*y[k+1]-x[k+1]*y[k],k=1..N-1) +x[N]*y[1]-x[1]*y[N])
(нумерация вершин в направлении положительного обхода).
George (2005-02-28 07:32:00) [6]Кстати если таким способом (не графическим) считать площадь, как я узнаю прощадь нестандартной аппертуры (многоугольника), если там можно оч короткими отрезками хоть Кремль нарисовать? (код аппертуры 4)
George (2005-02-27 21:14:00) [7]Типо все просчитывать по координатам... А есть у кого такой исходничек? Просто не хочется лезть в нудные вычисления... хотя такое возможно...
DiamondShark (2005-02-26 19:19:00) [8]Для того, чтобы посчитать площадь, рисовать рисунок не надо.
А если надо показать рисунок на экране, так всё равно точнее пикселя ничего нарисовать нельзя.
Масштаб (сколько физических единиц в пикселе) можно взять любой, вообще любой, какой только захочется.
George (2005-02-26 18:24:00) [9]Ок, смиряюсь с мыслью, что придется округлять дробь до 2х знаков. Тогда 1пиксель=0.01мм. Картинка вырастает в 100 раз))) Получается, что любая печатная плата уже БОЛЬШЕ размера монитора))))) По поводу CAM350 нужно учесть, что с прогой будут работать 90летние бабуськи, которые должны запомнить 5 кнопок. Кроме того - начальство требует НОВУЮ ПРОГУ, а с ним спорить не будешь))) Цель - прочитать Gerber, выудить из него рисунок (с минимальными потерями) и потом просчитывать площадь рисунка (точно еще не знаю т.к. пока мне только в общих чертах сказали, что должно быть) с учетом отверстий, итд итп, чтобы потом расчитать кол-во материала(ов), которые будут затрачены на производство платы + кол-во операций, кот придется провести + примерное время обработки каждой операции по отдельности. Увеличивать рисунок в 100 раз не очень хочется... мжожет есть какие другие способы?
P.S. Да простят меня люди, читающие это, но к моему великому стыду, я совершенно не умею работать с графикой.
Руслана (2005-02-26 09:10:00) [10]Непонятна цель. А что нельзя загрузить в CAM350(или подобное) и оттуда печатью в pdf, например получить картинку?
akvilon (2005-02-25 23:25:00) [11]а если не умножать и не сокращать (кстати, сокращать = округлять?) тогда задача не решаема (между пикселами рисовать придется :)), можно конечно изменить режим отображения, но это и есть округление.
не такая уж и большая картинка, сомневаюсь что размер пп у вас будет больше экрана монитора, а координаты даются в очень маленьких единицах
а для того чтобы по нарисованному вычислить размер площади, то нужно и рисовать один к одному, в режиме MM_TEXT такое врядли удастся, меняй режим отображения SetMapMode(...)
но это уже излишества :)
Cosinus (2005-02-25 19:32:00) [12]
> George © (25.02.05 19:13) [5]
Только умножать. см. DiamondShark © (24.02.05 21:08) [2]
А конкретная то задача, какая стоит?
George (2005-02-25 19:13:00) [13]Не совсем конвертер... Gerber - это формат файла для фотоплоттера (если кто знает что это такое) :) А если умножать на 10000... представьте размер картинки и и время обработки такого файла. Кроме того))) После того, как я нарисую мне нужно будет узнать площать сей поверхности. Есть какие идеи?
Руслана (2005-02-25 00:24:00) [14]To George - пишем конвертер.? :)))
akvilon (2005-02-25 00:16:00) [15]gerber это вроде нечто управляющее станками, производящими фотошаблоны?
если я прав, то там же не бесконечная дробь, можно просто умножить каждую координату на 10000 например и получится попиксельно
DiamondShark (2005-02-24 21:08:00) [16]
> например проблема с дробными координатами - сокращать нельзя
А между пикселями рисовать никакой компонент не умеет.
Fenik (2005-02-24 20:21:00) [17]Что есть Gerber файл?