Программирование в AutoCAD на PowerShell

Автор Тема: Программирование в AutoCAD на PowerShell  (Прочитано 19216 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Интересуют сторонние точки зрения по обозначенному сабжу от тех, кто хотя бы на базовом уровне разбирается в PowerShell. На данный момент мне видятся пока лишь только плюсы. Если упустил минусы - с интересом их рассмотрю.

На мой взгляд возможность хостинга движка PowerShell в AutoCAD, автоматом отправляет в ведро AutoLISP и Visual LISP, поскольку они из очень разных весовых категорий (в плане возможностей). Т.е. вместо скриптов, написанных на AutoLISP и Visual LISP можно использовать скрипты, написанные на PowerShell (проверял - работает как часы). При этом скрипты PowerShell работают в контексте приложения, а не в контексте документа (как это, к сожалению, обстоит у Лиспа от Автодеска). В таких скриптах легко работать не только с COM, но и полноценно использовать возможности .NET. Так же легко работать практически со всеми технологиями и продуктами Microsoft (например с WMI, SQL Server, SharePoint и т.д.).

Хостуемому движку PowerShell автоматом доступен API хостующего приложения (в данном случае - AutoCAD). Хостить можно столько экземпляров движков, сколько нужно. Извлекая данные из чертежа, их можно обрабатывать многопоточно, после чего результаты обработки обратно "заливать" в Database.

Скрипты PowerShell можно подписывать цифровой подписью. Управление возможностями загрузок скриптов легко выполняется посредством политик выполнения (Execution polices).

Я не знаю, почему Autodesk до сих пор не внедрила движок PowerShell в AutoCAD - скорее всего просто потому, что это им в голову пока не приходило. Если конкуренты сделают это ранее, то для них [конкурентов] это может оказаться существенным преимуществом (информация к размышлению для Автодеск).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Программирование в AutoCAD на PowerShell
« Ответ #1 : 01-02-2016, 19:22:17 »
На мой взгляд возможность хостинга движка PowerShell в AutoCAD, автоматом отправляет в ведро AutoLISP и Visual LISP
Ты как всегда не в меру категоричен. ;) А что делать с наработками на AutoLisp/VisualLisp за 25+ лет? Предлагаешь их все переписать или туда же в ведро?
При этом скрипты PowerShell работают в контексте приложения, а не в контексте документа (как это, к сожалению, обстоит у Лиспа от Автодеска)
В этом я вижу скорее минус, чем плюс, так как это:
1) Требует блокировки документов для их модификации
2) Делает проблематичным (если не невозможным) синхронный запуск команд AutoCAD/сторонних приложений.
Скрипты PowerShell можно подписывать цифровой подписью.
Лисп-приложения тоже можно подписывать цифровой подписью: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-Customization/files/GUID-A63E8C40-6870-4874-BF7E-FD75E87268AA-htm.html
Кстати, внутрь AutoCAD уже пытались всунуть и не один скриптовый язык. Это был и Python и еще ряд ...Shell. Вроде как не прижилось. о всяком случае широкого распространения не получило.
Я ничего не имею против PowerShell, то твоя категоричность меня поражает...

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #2 : 01-02-2016, 21:43:47 »
А что делать с наработками на AutoLisp/VisualLisp за 25+ лет? Предлагаешь их все переписать или туда же в ведро?
Под "отправкой в ведро":) я подразумевал  не "вырезать вовсе, как аппендицит", но подразумевал то, что возможности PowerShell полностью перекрывают существующие возможности AutoLisp/Visual Lisp, в виду чего дальнейшие наработки можно создавать на PowerShell вместо Lisp, т.е. переходить с Lisp на PowerShell. Понятное дело, что движок лиспа удалять не стоит (дабы можно было использовать наработанные годами Лиспы). Автодеск не развивает Лисп. Майкрософт постоянно развивает PowerShell.
Цитата: Александр Ривилис
Кстати, внутрь AutoCAD уже пытались всунуть и не один скриптовый язык. Это был и Python и еще ряд ...Shell. Вроде как не прижилось.
Я не пытаюсь изобратеть велосипед. Вместо этого я всего лишь использую в AutoCAD то, что создано Майкрософтом и предлагается программистам для использования. Движок PowerShell разработан так, чтобы его можно было максимально просто использовать в любом Windows-приложении. Имеются успешные примеры его использования (например, тот же NuGet). Код внедрения движка занимает несколько строк, так что существенных затрат для этого не требуется.

Понятное дело, что пользоваться PowerShell будут только те, кто знаком с ним. Причём таких людей среди моих знакомых нет (даже среди админов и программеров) - только в Интернете на некоторых форумах наблюдаю специалистов по PowerShell. Однако отказываться от возможности использования PowerShell в AutoCAD только потому, что большинство людей лишь что-то почитывали о нём на заборе - это сомнительная аргументация.

PowerShell - язык администрирования Windows, так что зная его, в Windows можно делать почти всё что угодно, не прибегая к помощи компилятора. Песочница AutoLisp и Visual Lisp гораздо меньше.

Цитата: Александр Ривилис
В этом я вижу скорее минус, чем плюс, так как это:
1) Требует блокировки документов для их модификации
2) Делает проблематичным (если не невозможным) синхронный запуск команд AutoCAD/сторонних приложений.
При желании можно использовать PowerShell и в контексте документа. А в необходимости блокировки документа я не вижу ничего страшного.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Программирование в AutoCAD на PowerShell
« Ответ #3 : 03-02-2016, 01:47:23 »
PowerShell - язык администрирования Windows, так что зная его, в Windows можно делать почти всё что угодно, не прибегая к помощи компилятора.
Примерно в той-же мере, что и автолисп позволяет делать с автокадом - а если нужны "изыски" то можно программировать на чем-то посерьезней. Насчет, что автолисп в ведро - ихмо он еще вполне переживет PowerShell, как пережил VB, у того тоже возможностей было поболее. У автолиспа есть фишка - это "лисп основа" и ее не имеет смысла сравнивать с умением вызывать API. На автолиспе можно как начать писать через 10 минут, так и в "ясном виде" описать сложнейший алгоритм - с его сочетанием простоты и выразительности мало кто до сих пор может соревноваться.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #4 : 03-02-2016, 02:05:14 »
Примерно в той-же мере, что и автолисп позволяет делать с автокадом
В той, да не в той. Например, насколько я помню, из акадовского лиспа невозможно работать с подшивками. Добраться к подшивкам, например, можно через AutoCAD .NET API, но лисп сам по себе туда [туда - это к AutoCAD .NET API] добраться не может. PowerShell может.
Цитата: Дима_
У автолиспа есть фишка - это "лисп основа" и ее не имеет смысла сравнивать с умением вызывать API.
Если важен результат, то очень даже имеет, на мой взгляд.
Цитата: Дима_
На автолиспе можно как начать писать через 10 минут, так и в "ясном виде" описать сложнейший алгоритм - с его сочетанием простоты и выразительности мало кто до сих пор может соревноваться.
Ну, через 10 минут, начав писать на лиспе, сложнейший алгоритм вряд ли можно качественно написать, т.к. необходимы некоторые навыки работы, опыт. Относительно сложные вещи - да, можно. Но это в равной степени относится и к PowerShell. Мне не интересно вести полемику вида "PowerShell vs AutoLISP". Меня интересуют подводные камни, которые могут встретиться в случае использования PowerShell (не важно, вместо лиспа, или же параллельно с лиспом).

Я смотрю на PowerShell в том числе (но далеко не в первую очередь) и как на возможную альтернативу для AutoLISP\Visual LISP. Против лиспа, как такового, я ничего не имею (тем более против настоящего LISP).

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Программирование в AutoCAD на PowerShell
« Ответ #5 : 03-02-2016, 08:02:16 »
с его сочетанием простоты и выразительности
Выразительность лиспа может превратиться в плохо читаемый код.
Попробуйте описать математическую(физическую) формулу с корнями, дробями и т.д. и от выразительности не останется и следа. Всю выразительность съедят скобки и шифровка логики, когда операция над переменными предшествует переменным (+ a b). И это не естественно для большинства, т.к. со школы учат a + b. В итоге быстро проверить/дополнить формулу не получится.

 
Я смотрю на PowerShell в том числе (но далеко не в первую очередь) и как на возможную альтернативу для AutoLISP\Visual LISP
Собственно я за введение альтернативы LISP. Подход c Lisp очень хорош, если бы не сам язык Lisp.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: Программирование в AutoCAD на PowerShell
« Ответ #6 : 03-02-2016, 11:01:55 »
Цитировать
Добраться к подшивкам, например, можно через AutoCAD .NET API
через COM

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #7 : 03-02-2016, 11:54:50 »
через COM
Что "через COM"? Я в курсе, что API подшивок реализовано посредством COM и имел в виду то, что с COM API подшивок можно работать из AutoCAD .NET API, в то время как из акадовского лиспа с этим возникнут проблемы. Из скриптов PowerShell можно работать с подшивками как напрямую (через COM), так и через .NET API (которое за кулисами будет дёргать всё тот же COM API).

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #8 : 03-02-2016, 12:05:33 »
Собственно я за введение альтернативы LISP.
Сегодня займусь оформлением уже имеющегося примера, а так же хочу добавить в него пример того, как PowerShell может исполнять исходный код, написанный на C# (для VB.NET пример делать не буду). Результат выложу на Bitbucket (исходники, откомпилированную версию и описание). Так же напишу демонстрационное видео и закину на youtube. В блоге отпишусь об этом, как только сделаю.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Программирование в AutoCAD на PowerShell
« Ответ #9 : 03-02-2016, 18:32:54 »
Выразительность лиспа может превратиться в плохо читаемый код.
Попробуйте описать математическую(физическую) формулу с корнями, дробями и т.д. и от выразительности не останется и следа. Всю выразительность съедят скобки и шифровка логики, когда операция над переменными предшествует переменным (+ a b). И это не естественно для большинства, т.к. со школы учат a + b. В итоге быстро проверить/дополнить формулу не получится.
Пробовал и не раз - "Вы просто не умеете их готовить".

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #10 : 03-02-2016, 23:02:45 »
Пробовал и не раз - "Вы просто не умеете их готовить".
"Приготовь" и покажи это юзерам не имеющим твоего опыта программирования. Смогут прочесть и (в идеале) понять его? :) Интереса ради, можно показать им код на др. языках. Вряд ли код на лиспе будет им более понятен.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #11 : 04-02-2016, 00:04:06 »
Собственно я за введение альтернативы LISP.
Закинул в блог.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Программирование в AutoCAD на PowerShell
« Ответ #12 : 04-02-2016, 07:19:46 »
Пробовал и не раз - "Вы просто не умеете их готовить".
Так вот о каком выразительном, декларативном языке был намек))))

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Программирование в AutoCAD на PowerShell
« Ответ #13 : 05-02-2016, 21:49:21 »
    Посмотрел коды - свои впечатления. PowerShellHost - мне очень понравился - есть немалая сила динамических языков в методе Invoke (или eval, apply итп).
Off-Topic: показать
Я не силен в API PS, но с выводом в psOutput там по моему какая-то "борода", я бы поискал асинхронный метод или создал его сам - но это больше придирки.
Я не раз уже писал, что считаю лучший вид отладки это REPL, который, к сожалению, в прямом виде достаточно проблемно работает в разрезе .Net в автокаде. Если нужно в "он-лайне" посмотреть работу "корявых" акадовских api (документация к которым, к сожалению, оставляет желать лучшего) я использую подобный самописный "порт" из AutoLisp в Net. (то есть вызываю .Net api из лиспа - через аналогичный по сути плагин).
    С точки зрения примера рисующего рожицу - он показателен. Он показывает почему лисп не умрет, по крайней мере от PS. Т.к. и подготовительные затраты и сам код реализации не может сравниться в трудозатратах с лиспом - даже если мы "зафиксим" подготовительную работу на большинство операций. Но ключевое в лиспе даже не это, он своей структурой (в сочетании с возможностями) заставляет идти от специфики, то есть в лиспе подобная функция в "естественном" виде была-бы выражена, не как написание функции рисования окружности, вычисления их координат и запуска функций с соответствующими параметрами, а как функция получения примитивов из некого "списочного" описания рожицы в ее результат (примитивы), причем с выводом в самом конце - что дает очень сильную гибкость при внесении изменений в исходный алгоритм в случае необходимости. При написании на лиспе DSL создается сам собой естественным образом и именно в этом его преимущество в выразительности (конечно для тех кто научился "читать" лисп выражения - то Привалов Дмитрий - кстати по поводу что все со школы пишут 2+2 - спросите у знакомых на работе сколько будет 2+2*2 - и вы поймете в чем сила скобок).
    Но вернемся к теме, инструмент (PSHost) для .Net'чиков действительно классный (даже не для .Net'чиков, а для PS кодеров). Кому надо "затычку" для юзера и он знает PS - просто подарок. + Очень хорошая "подмога" для .Net отладки изнутри. Прикрутить туда еще кнопок для подстрочника или копирования из VS (на автодополнения замахиваться это "крутовато" - готовых API я не встречал - хотя я их и не искал) - инструмент вполне годный и имеющий право на жизнь в своем сегменте.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Программирование в AutoCAD на PowerShell
« Ответ #14 : 05-02-2016, 22:25:51 »
подготовительные затраты и сам код реализации не может сравниться в трудозатратах с лиспом - даже если мы "зафиксим" подготовительную работу на большинство операций.
Если на PS создать некоторую коллекцию общих функций, для последующего их использования (подобно тому, как это уже сделано Автодеском для Лиспа), то размер кода, использующего эти функции, будет сопоставим с аналогичным кодом на лиспе, т.к. используя эти функции можно создавать цепочки вызовов, когда результаты вызова одной функции передаётся в очередную посредством оператора "|" - это так называемый конвейр объектов в PS (при этом получаем отсутствие гигантского количества скобок, коими изобилует Лисп). Ведь и за кулисами лаконичности "стандартных" функций Лиспа стоИт их реализация, которая не факт что всегда будет короче кода PS.

Показанный мною пример PS кода не претендует на красоту и краткость. Я более чем уверен, что опытный PS-программист мог бы существенно сократить объём этого кода (скорее всего даже в разы).

Цитата: Дима_
Я не силен в API PS, но с выводом в psOutput там по моему какая-то "борода", я бы поискал асинхронный метод или создал его сам - но это больше придирки.
В PS код легко можно запускать код как синхронно, так и асинхронно. Обозначенный мною пример написан так, чтобы максимально походить на .NET-код, дабы программисты, знакомые с .NET API могли без проблем понять его. Не знаю, насколько это у меня получилось.

Цитата: Дима_
Прикрутить туда еще кнопок для подстрочника или копирования из VS
Помимо движка PS компания Майкрософт так же бесплатно предоставляет и набор готовых контролов, разработанных специально для создания GUI приложений, предназначенных для написания кода PS, его тестирования, отладки (насколько я понял - даже с подсветкой синтаксиса и прочими плюшками, возможно что даже с ИнтеллиСенсом). Но я пока с этим не разбирался, поэтому могу в чём-то и ошибаться.