Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Javascript for Altium Designer (https://javascript.ru/forum/misc/67067-javascript-altium-designer.html)

piton369 26.01.2017 16:15

Javascript for Altium Designer
 
Добрый день. У меня занятная ситуация. Пишу скрипт для среды Altium Designer (ПО для разводки печатных плат) для небольшой автоматизации своей работы. Версия javasript 5.8.17840, обращаясь к интернету по некоторым вопросам, выяснил, что даже вместо alert не работает, поэтому использую showmessage. Компьютер закрытый, интернета нет и не планируется. Обновления, наверное, возможны через заявку itшнику. Могу скидывать на комп, но не могу с него. Ориентируюсь на скрипт на паскале и на несколько javasriptовых для Altium, если надо могу скинуть.
Есть несколько вопросов, пока общих, но если надо код могу тоже скинуть, а вот скриншоты нет.
1) Документация по встроенным функциям и классам в интернете труднодоступна и часто гугл выдает 0 результатов)) Пробовал написать функцию, которая выводила хотя бы что во что входит, но не получилось. Если кто может подсказать, буду рад.
Но к счастью обнаружил, что есть автодополнение, немного продвинулся, но всё равно не всегда понятно как к чему обращаться. У всего, что есть в автодополнении определения типа. Там есть const, function и interface. Как использовать последнее? Как функцию? Кто сталкивался?
2) Есть рабочее окно программы, в которой производится разводка платы. Можно ли выбрать всё объекты, которые там находятся? В скрипте на паскале с которого я пытался передрать код для этого используется итератор, но в javasсript нет одной встроенной функции для этого или я её не нашел в автодополнении.
3) Возникает ошибка "... есть null или не является объектом". Я предполагаю, что она происходит из-за того, что используемая переменная undefined (проверил с помощью TypeOf), но не пойму как это исправить. По идее переменная как раз должна становится объектом, который является группой всех выделенных объектов в рабочем окне, но этого не происходит.

piton369 27.01.2017 10:55

Да, я пользуюсь их сайтом, но там всё плохо. Поиск ужасный, порой нашел то что надо, читаешь и понимаешь, что это про Паскаль. А какой-то внятной документации там нет.

TestUser013 27.01.2017 12:26

piton369,
Я сам работаю с Altium и соглашусь, что документация там не очень хорошая, но вполне читабельная и четкая.
Там действительно почти все примеры на паскале, но разве это проблема? Begin заменяем на { , a End на } ,в знаке присваивания убираем двоеточие, Nil стает Null и получаем обычный JS.

Отвечая на ваши вопросы:
1) http://techdocs.altium.com/display/S...m+Designer+API
Object Interfaces are implementation independent declarations of functionality. From a developer’s perspective, there are high level object interfaces which encapsulate certain system objects in Altium Designer system such as IProject, IWorkSpace, IClient and IServerModule interfaces, which can be used to extract data for further processing by other servers.

2) В JS есть итераторы for(i = 0; i < PCB_Board.BoardOutline.PointCount; i++). Держите примеры скриптов http://valhalla.altium.com/AD10-Exam...es/Scripts.zip

3) Переменная станет тем, чем вы ее объявите. Пока вы ее не объявили она undefined. Объявите ее и сделайте объектом с нужными свойствами.


Кстати документацию лучше держать под рукой. У вас нет интернета, поэтому скачайте себе на рабочий комп. Внизу каждой страницы есть ссылка на pdf версию.
http://imu.gr/images/2017/01/27/fire...7_11-04-56.png

piton369 30.01.2017 11:35

Спасибо, полезная информация. Переработаю и доложусь))
Вообще, с переводом всё таки бывают проблемы. Не все функции хорошо переводятся, например, Board.SelectecObject[i] на паскале работает, а на JS выводит ошибку "Недопустимое число аргументов или присвоение значения свойства".

TestUser013 30.01.2017 11:40

piton369,
"Недопустимое число аргументов или присвоение значения свойства" - кажется в паскале нумерация элементов в массиве начинается с 1, если этого не учитывать происходит выход за границы массива.

piton369 30.01.2017 11:52

Я подумал о чём-то похожем, поэтому решил проверить. Выбрал три элемента, проверил что бы Board.SelectecObjectCount было 3 и попытался выполнить Prim=Board.SelectecObject[2]. Ошибка повторилась.
На всякий случай еще напишу, что Prim объявлял так var Prim = PCBServer.IPCB_Primitive.

TestUser013 31.01.2017 19:14

Это уже дебажить надо, угадывать не хочется.

piton369 07.02.2017 10:34

Понимаю. А подскажите тогда, пожалуйста. На паскале есть код:
Procedure ScaleTrack(Prim : IPCB_Track);
Как правильно конвертировать часть в скобках на js?
По идее Prim это название переменной, а IPCB_Track это тип. Что-то я туплю.

TestUser013 07.02.2017 12:21

Вот так...
function ScaleTrack(Prim);

piton369 07.02.2017 14:49

Спасибо. А если такая же конструкция используется при объявлении переменных?
var
Iter : IPCB_GroupIterator;
Prim : IPCB_Primitive;

То она, что просто превращается в
var Iter, Prim;


Часовой пояс GMT +3, время: 20:25.