Вход

Просмотр полной версии : Геометрия в скрипте для Altium Designer


piton369
04.05.2017, 12:37
Добрый день. Пишу скрипт для Altium Designer. Его смысл заключается в том, что он простыми линиями (Track) и/или дугами (Arc) обрисовывает отверстие (Pad).
Застрял на геометрии. У объекта отверстие есть следующие переменные:
Pad.x - координата центра отверстия по оси х.
Pad.y - координата центра отверстия по оси y.
Pad.Rotate - угол поворота отверстия.
Pad.HoleSize - диаметр отверстия.
Pad.Length - длина отверстия (появляется только у отверстия эллипсоидной формы).
И вот с эллипсоидным отверстием начинается проблема. Оно состоит из двух линий и двух дуг. Каждое отверстие соединяется с двумя дугами. Мне нужно посчитать точки где они это делать, чтобы построить их, потому что у линий есть переменные Track.x1, Track.x2, Track.y1 и Track.y2. У дуг есть Arc.x, Arc.y, Arc.StartAngle, Arc.EndEngle - координаты центра и начальный и конечный угол дуги.
Я пытался рассчитать с помощью формул типа x*cos(Pad.Rotate)-y*sin(Pad.Rotate), но кажется, что они должны быть разными для разных углов поворота, потому что нормально получается построить только для одной линии и только при начальном угле поворота.
Я или путаю знаки или использую не те формулы. Подскажите, пожалуйста.

piton369
05.05.2017, 09:43
Сначала скриншоты.
Вот это 3D вид двух типов отверстий. С круглым и квадратным отверстиями.
http://techdocs.altium.com/sites/default/files/wiki_attachments/239806/PCB_RectPadHole2.png
А вот так овальное выглядит в рабочем окне программы, линия, которая нарисована синим это Track:
https://i.ytimg.com/vi/BNmpBA65308/hqdefault.jpg
Вот все возможные типы отверстий, все они могут быть повернуты на произвольный угол:
http://techdocs.altium.com/sites/default/files/wiki_attachments/239806/PCB_Pnl-PCB_HoleSzEd.png
Так выглядит Arc с параметрами Arc.StartAngle - 90, Arc.EndAngle - 270 и Arc.StartAngle - 0, Arc.EndAngle - 360:
http://techdocs.altium.com/sites/default/files/wiki_attachments/209814/PCB_Obj-Arc_Placed.png
Идем дальше.
Я хочу получить такую фигуру из 2 штук Track и 2 штук Arc:
http://savepic.ru/13889957.jpg
Координаты вот этих точек я не могу рассчитать:
http://savepic.ru/13855140.jpg

piton369
05.05.2017, 15:41
Я не могу скинуть скриншоты со своей версии программы, поэтому нагуглил. Symbol просто условное обозначение, на него можно не смотреть. Эта картинка из следующей версии и там добавлен ещё один тип отверстий(Rectangle). В моей есть только Slot, Round и Square.

Да, вот мне надо взять данные из отверстия типа Slot и нарисовать линиями и дугами как на последних картинках. Это мне надо для ускорения процесса рисования конструкторской документации.

В конечном итоге я хочу получить из такого варианта:
http://savepic.ru/13853157.jpg

Такой:
http://savepic.ru/13889957.jpg

Касательно Arc. Направление дуги отсутствует. Оно указывается по сути стартовым углом и конечным. Т.е. чтобы нарисовать дугу, загнутую влево берем углы начальный - 90 и конечный - 270, а если хотим загнуть вправо, то начальный берем - 270, а конечный - 90. А радиус окружности есть, я его не написал Arc.Radius. Занятно, что у дуги радиус, а у отверстия диаметр.

piton369
10.05.2017, 10:59
Да, на миниатюре всё верно. Именно эти точки я не могу рассчитать. Нужна общая формула, которая будет работать при любом повороте отверстия. Отверстие может поворачиваться на любое целое значение угла от 0 до 360 градусов.

MallSerg
10.05.2017, 14:58
получить координаты чего угодно после поворота = тригонометрия (https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%BE%D0%BD%D0%BE%D0%BC%D 0%B5%D1%82%D1%80%D0%B8%D1%8F)
Если нужно повернуть объект т.е. сразу кучу точек вокруг заданой оси тогда матрица трансформации (https://www.google.ru/search?q=%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B 0+%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80 %D0%BC%D0%B0%D1%86%D0%B8%D0%B8&oq=%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0+%D1% 82%D1%80%D0%B0&aqs=chrome.1.69i57j0l5.5927j0j7&sourceid=chrome&ie=UTF-8)
ну или как частный случай только поворота на двухмерной плоскости вокруг заданной точки матрица поворота (https://www.google.ru/search?q=%D1%82%D1%80%D0%B8%D0%B3%D0%BE%D0%BD%D0%B E%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&oq=%D1%82%D1%80%D0%B8%D0%B3%D0%BE%D0%BD%D0%B5%D0%B E&aqs=chrome.1.69i57j0l5.3207j0j7&sourceid=chrome&ie=UTF-8#newwindow=1&q=%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D0%B0+%D0%B F%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82%D0%B0)
Если читать и понимать для тебя пока сложно то нужно обращаться в раздел работа.

piton369
10.05.2017, 15:40
Не совсем правильно выразился про поворот. Спрошу по-другому. Как рассчитать то же самое, что тут:
http://javascript.ru/forum/attachments/misc/3507d1493992040-geometriya-v-skripte-dlya-altium-designer-rect-png
Для такого случая, где есть координаты центра x1, y1:
http://savepic.ru/13904229.jpg

piton369
10.05.2017, 15:48
piton369, а что известно, радиус дуг, центры дуг, расстояние между центрами, центр поворота, угол поворота?

Все данные берутся из отверстия, т.е. всё что я писал ранее про Pad. Т.е. диаметр отверстия, длина отверстия (я не знаю как лучше объяснить этот параметр, это диаметр удлиненной части отверстия) и координаты центра.

MallSerg
10.05.2017, 16:19
Из одних координат центра ничего рассчитать невозможно.
Но хрустальный шар подсказывает что ты специально умалчиваеш о том что заранее известен радиус дуг и расстояние до центров дуг а угол поворота будет переменной в этой формуле.

piton369
10.05.2017, 16:20
Хорошо, попробую подготовить подробный чертеж.

piton369
11.05.2017, 12:19
Чертеж:
http://savepic.ru/13947929.jpg

рони
11.05.2017, 17:25
Rise,
а так видно?
http://savepic.net/9281301m.jpg (http://savepic.net/9281301.htm)

рони
11.05.2017, 19:10
Rise,
конвертировал из tiff в jpg

рони
11.05.2017, 20:04
Rise,
ie support tiff yes
Mozilla Firefox no
https://en.wikipedia.org/wiki/Comparison_of_web_browsers#Image_format_support

piton369
12.05.2017, 09:27
Забавно) Даже не подумал, что будут такие проблемы с TIFF) Да, сам сижу на IE)

Ладно, вроде всю информацию скинул, которая может понадобиться. Не писал только поля, которые относятся к толщинам линий, слоям проектирования и прочим параметрам, изменение которых не влияет на формулу.