
04.05.2017, 12:37
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Геометрия в скрипте для Altium Designer
Добрый день. Пишу скрипт для 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), но кажется, что они должны быть разными для разных углов поворота, потому что нормально получается построить только для одной линии и только при начальном угле поворота.
Я или путаю знаки или использую не те формулы. Подскажите, пожалуйста.
|
|

05.05.2017, 09:43
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Сначала скриншоты.
Вот это 3D вид двух типов отверстий. С круглым и квадратным отверстиями.

А вот так овальное выглядит в рабочем окне программы, линия, которая нарисована синим это Track:

Вот все возможные типы отверстий, все они могут быть повернуты на произвольный угол:

Так выглядит Arc с параметрами Arc.StartAngle - 90, Arc.EndAngle - 270 и Arc.StartAngle - 0, Arc.EndAngle - 360:

Идем дальше.
Я хочу получить такую фигуру из 2 штук Track и 2 штук Arc:

Координаты вот этих точек я не могу рассчитать:

Последний раз редактировалось piton369, 05.05.2017 в 09:54.
|
|

05.05.2017, 15:41
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Я не могу скинуть скриншоты со своей версии программы, поэтому нагуглил. Symbol просто условное обозначение, на него можно не смотреть. Эта картинка из следующей версии и там добавлен ещё один тип отверстий(Rectangle). В моей есть только Slot, Round и Square.
Да, вот мне надо взять данные из отверстия типа Slot и нарисовать линиями и дугами как на последних картинках. Это мне надо для ускорения процесса рисования конструкторской документации.
В конечном итоге я хочу получить из такого варианта:
Такой:
Касательно Arc. Направление дуги отсутствует. Оно указывается по сути стартовым углом и конечным. Т.е. чтобы нарисовать дугу, загнутую влево берем углы начальный - 90 и конечный - 270, а если хотим загнуть вправо, то начальный берем - 270, а конечный - 90. А радиус окружности есть, я его не написал Arc.Radius. Занятно, что у дуги радиус, а у отверстия диаметр.
Последний раз редактировалось piton369, 05.05.2017 в 16:07.
|
|

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

10.05.2017, 14:58
|
 |
Профессор
|
|
Регистрация: 07.03.2011
Сообщений: 1,138
|
|
получить координаты чего угодно после поворота = тригонометрия
Если нужно повернуть объект т.е. сразу кучу точек вокруг заданой оси тогда матрица трансформации
ну или как частный случай только поворота на двухмерной плоскости вокруг заданной точки матрица поворота
Если читать и понимать для тебя пока сложно то нужно обращаться в раздел работа.
|
|

10.05.2017, 15:40
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Не совсем правильно выразился про поворот. Спрошу по-другому. Как рассчитать то же самое, что тут:

Для такого случая, где есть координаты центра x1, y1:

Последний раз редактировалось piton369, 10.05.2017 в 15:59.
|
|

10.05.2017, 15:48
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Сообщение от Rise
|
piton369, а что известно, радиус дуг, центры дуг, расстояние между центрами, центр поворота, угол поворота?
|
Все данные берутся из отверстия, т.е. всё что я писал ранее про Pad. Т.е. диаметр отверстия, длина отверстия (я не знаю как лучше объяснить этот параметр, это диаметр удлиненной части отверстия) и координаты центра.
|
|

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

10.05.2017, 16:20
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Хорошо, попробую подготовить подробный чертеж.
|
|

11.05.2017, 12:19
|
Интересующийся
|
|
Регистрация: 26.01.2017
Сообщений: 16
|
|
Чертеж:

|
|
|
|