Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015

Автор Тема: Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015  (Прочитано 165006 раз)

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

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Продолжу по замечаниям.
Цитировать
> а если нужна связка языков, то лучше всего себя зарекомендовала пара C++-LISP.
*******************************
На мой взгляд это несколько субъективное мнение, моё отличается от обозначенного.
LISP функции в AutoCAD можно создавать в т.ч. и с помощью .NET. Помним, что .NET API в
AutoCAD сейчас активно развивается, чего к сожалению нельзя сказать о AutoLISP и
Visual LISP. Платформа .NET позволяет писать код на любом .NET языке, причём
этот код бесшовно стыкуется между собой. Можно писать базовые классы на одном
языке и наследоваться от них на другом. Т.о. говоря о связке, на мой взгляд
первое место занимает managed C++ совместно с любым .NET языком или даже их группой.
Здесь имеется в виду связка сильного языка (C++) с более слабым (LISP) языком. Языки .NET все-таки относятся к сильным, самодостаточным языкам (с большими возможностями GUI).
LISP все равно нужен в меню, на нем легко пишутся простые, но полезные выражения. И компилировать их не обязательно.

Цитировать
> Система AutoCAD разработана с учётом концепции COM...
*******************************
Как-то слово "концепция" в данном контексте, на мой взгляд ни к месту... "AutoCAD
имеет COM интерфейс для работы с ним из внешних приложений" - мне кажется, что так
было бы более корректно. Кроме того, не стоит забывать, что в комплект AutoCAD,
начиная с версии 2013, помимо acad.exe входит и accoreconsole.exe, который [к
сожалению] не имеет COM интерфейса.
Имел в виду, что много операций (но не все) можно выполнить, используя COM-интерфейс, которого теоретически разработчики могли бы и не предоставить. На COM держится VBA.

Цитировать
> В табл. 1.1. приведён перечень объектов и коллекций.
*******************************
В том виде, в каком это представлено, данная информация не представляет никакого
интереса (во всяком случае для меня). Страницы 16, 17 и 18 просто перелистываются
не будучи прочитанными. Если уж и размещать информацию о класса, то в древовидном
представлении, как это сделано в файле classmap.dwg, входящем в состав ObjectARX
SDK. Такую иерархическую структуру было бы интересно просмотреть, а так получается,
что потеряно три страницы, тем более, что см. цитату в след. замечании:
Здесь мне нужны были только объекты, которыми оперирует COM-сервер AutoCAD.Application, доступный из многих языков. Файл classmap.dwg нужен только для C++.

Цитировать
> В таблицу не внесены объекты и семейства, связанные с подшивками и операЦИМИ
связи с базами данных.
*******************************
оЧепятка + смотрим предыдущее замечание в комплексе.
Сапсибо. :)

Цитировать
> Такие компоненты объектной модели, как интерфейсы, не все обладают свойствами.
*******************************
Выше в замечаниях я уже писал, что объектные модели бывают разными. Предполагаю,
что в данном случае автор имеет в виду COM. Соответственно следует чётко
обозначать целевую объектную модель.
COM.

Цитировать
> Все разбираемые в следующих главах системы программирования дают возможность
использовать рассмотренную объектную модель с помощью COM(ActiveX).
*******************************
Всё то же замечание об отсутствии уточнения, о какой объектной модели речь. Кроме
того, я бы не сказал, что тот материал, который предшествовал данному предложению,
можно честно называть "рассмотренной объектной моделью". Наличие таблицы с именами
классов, занимающей три страницы, совместно с парой-тройкой последующих общих
предложений, вляд ли можно считать "рассмотрением".
Согласен. Точнее “упомянутую объектную модель”.
Цитировать
> В системе AutoCAD прекращена поддержка fibers (волокон потоков Windows).
*******************************
Разве так уж и прекращена? Практика показывает, что по умолчанию использование фиберов
отключено, но может быть включено при необходимости. Процитирую А.Н. Ривилиса:
>Хотя нормально 2015 работает только с FIBERWORLD == 0
За подробностями к нему (так же читаем это http://adn-cis.org/forum/index.php?topic=647 ).
Неплохо было бы пояснить читателю, что такое "волокна потока". Много места такое
пояснение не займёт и будет полезным.
Полагаю, что эту тему лучше не трогать. Autodesk в ряде сообщений объявил о прекращении поддержки “фибров”, но, видимо, что-то пошло не так…


Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Файл classmap.dwg нужен только для C++.
Не только. В нём так же обозначена следующая информация:
1. Какие неуправляемые классы имеют управляемую оболочку (представляет интерес для .Net программистов).
2. Иерархическая структура классов AutoCAD .Net API (представляет интерес для .Net программистов).
3. Иерархическая структура объектной модели ActiveX (представляет интерес для программистов VBA, а так же тех, кто планирует работать с AutoCAD из внешних приложений посредством COM).

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

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Файл classmap.dwg нужен только для C++.
Не только. В нём так же обозначена следующая информация:
1. Какие неуправляемые классы имеют управляемую оболочку (представляет интерес для .Net программистов).
2. Иерархическая структура классов AutoCAD .Net API (представляет интерес для .Net программистов).
3. Иерархическая структура объектной модели ActiveX (представляет интерес для программистов VBA, а так же тех, кто планирует работать с AutoCAD из внешних приложений посредством COM).
Насчет classmap.dwg согласен. Я не обратил внимание, что в последних версиях этот файл расширился.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я не обратил внимание, что в последних версиях этот файл расширился.
Иерархическая структура классов AutoCAD .Net API присутствует в обозначенном файле ещё со времён AutoCAD 2009 (возможно и в более ранних версиях, но у меня их нет под рукой). Просто я помню, что когда-то смотрел структуру .Net-классов в этом файле именно в AutoCAD 2009.

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Managed classes я видел. Добавилось дерево интерфейсов и модели Activex/COM (странно, что терминах классов VBA - наверное, в связи с включением VBA 7 в версию 2014).

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
JavaScript API нет  ::)
offtop: Кто бы выложил classmap.dwg, а то качать весь SDK - нет желания...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
JavaScript API нет 
offtop: Кто бы выложил classmap.dwg, а то качать весь SDK - нет желания...
Лови. Я не вижу смысла смотреть в сторону JavaScript API. Во всяком случае в том состоянии, в каком оно сейчас имеется.

UPD Кроме того, для меня очень важна совместимость хотя бы на уровне исходного кода. Ориентир [прикладного программиста] на JavaScript API автоматически "отрезает" применимость к более старым версиям AutoCAD, в которых этого API нет. Мне же интересны версии начиная с AutoCAD 2009. Помимо этого, использование JavaScript API автоматом убивает переносимость на уровне исходного кода и по отношению к другим CAD системам и платформам, на которых они работают. Для меня это неприемлемо.
« Последнее редактирование: 28-11-2014, 14:36:52 от Андрей Бушман »

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Цитировать
> Разрабатывая приложение под какую-то версию AutoCAD определённой разрядности,
автор хотел бы знать, сможет ли его приложение без переделки правильно
функционировать в другой разрядности, а так же в другой версии.
*******************************
Насколько я понимаю, "без переделки" следует обособить запятыми. Разработка
приложений под AutoCAD ведётся абстрагированно от его разрядности. Один и тот же
исходный код компилируется под win32\x64, в случае native C++, либо под AnyCPU в
.NET. Если ограничиться AnyCPU не удаётся, то вместо неё собираются x86 и x64.

Говоря о совместимости, нужно чётко различать понятие "совместимости на уровне
исходного кода" от понятия "совместимости на уровне машинного кода" (т.е.
скомпилированного результата). Т.о. "переделки" - они бывают разными: одно дело,
когда один и тот же код нужно просто пересобрать, создав новый файл проекта, включив
в него существующие исходники посредством "Add as Link", а так же указав в его
настройках иные ссылки на внешние зависимости. Но совсем другое дело, когда
непосредственно в исходный код нужно вносить дополнительные изменения.

На стр. 22, в абзаце "Язык C++" автор пишет о совместимости на уровне машинного
кода.
Под совместимостью я имею в виду совместимость на уровне исполняемых файлов (т.е. машинного кода). Вопросы минимизации поддержки исходного кода для разных версий у меня называются “проблемой единого кода”, они рассматриваются на стр. 52 и 194.

Цитировать
> Платформа .NET (C# и др.) Здесь всё зависит от номера версии целевой платформы
.Net Framework, использованной при построении.
*******************************
Этой фразы я не понял. Использованной при построении чего? Предполагаю, что речь
идёт о компиляции самого AutoCAD, но автору лучше бы уточнить это.
Целевая платформа – это платформа, указываемая в настройках проекта. Она должна учитывать платформу, используемую той версией AutoCAD, для которой создается приложение.

Цитировать
> Если платформа проекта была AnyCPU, то не очень сложные приложения смогут
работать как в 32-bit, так и в 64-bit. Но чаще всего придётся собирать
индивидуальную версию для каждой версии и для каждой разрядности. См. главу 4.
*******************************
Во первых, неплохо было бы в тексте уточнить так: "индивидуальную версию
расширения для каждой версии AutoCAD", а то получается двусмысленность "версия-
версия". Во вторых, основываясь на своём личном практическом опыте написания .NET
расширений под AutoCAD, могу сказать, что всё обстоит с точностью до наоборот:
чаще всего вариант AnyCPU работает нормально. С действительной потребностью в
компиляции кода отдельно под x86 и отдельно под x64 я сталкивался, но происходило
это не часто. Причём я бы не сказал, что всё то, что мною компилировалось как
AnyCPU было "не очень сложным приложением"... Вообще, понятие "сложности" - оно
несколько относительно: то, что одному кажется простым, другому может показаться
сложным и наоборот.
С "индивидуальной версией расширения для каждой версии AutoCAD" согласен.
Здесь моя задача была насторожить читателя. А по технике дела – когда работаете с AutoCAD одного номера, но разных разрядностей, то если ссылаться на любую из 4 сборок в папке ObjectARX 2015\inc-win32 (inc-x64), то AnyCPU точно не годится. Что касается AutoCAD разных номеров, но одной разрядности, то тут надо проверять конкретно.

Цитировать
> Для 32-разрядных версий AutoCAD до 2013, собранных в VBA 6, совместимость есть.
*******************************
Предполагаю, что речь идёт о совместимости на уровне машинного кода. Следовало
бы уточнять это в тексте, чтобы пользователь понимал, о какой именно совместимости
говорится.
Да, речь идет о совместимости на уровне машинного кода.


Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
то если ссылаться на любую из 4 сборок в папке ObjectARX 2015\inc-win32 (inc-x64),
О каких сборках речь?

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
AcAxDb20res.dll, AdUiPalettes.dll, Autodesk.AutoCAD.Interop.dll, Autodesk.AutoCAD.Interop.Common.dll

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
AcAxDb20res.dll, AdUiPalettes.dll, Autodesk.AutoCAD.Interop.dll, Autodesk.AutoCAD.Interop.Common.dll
Ясно. Нет, когда я писал об AnyCPU, то подразумевал AcDbMgd, AcMgd, AcCoreMgd, поскольку чаще всего мне их достаточно (в старых версиях акада они находятся в inc-win32 и inc-x64, вместо inc). Недостающий функционал вытягиваю через позднее связывание.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Autodesk в ряде сообщений объявил о прекращении поддержки “фибров”, но, видимо, что-то пошло не так…
Думаю, что возможность использования FIBERLESS != 0 в AutoCAD 2015 - это атавизм, оставленный лишь на всякий случай и в следующей версии такой возможности уже не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн gomer

  • ADN OPEN
  • Сообщений: 4
  • Карма: 2
Мне кажется или глава 5 Книги - это всего лишь вариации на тему другой книги, изданной 10 лет назад? ???

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Да, материал примерно тот же - краткая схема изложения. Но с учетом особенностей программирования под AutoCAD 2015.

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Приедет книга ко мне в Минск в понедельник. Надeюсь поможет :)
« Последнее редактирование: 18-01-2015, 19:12:27 от Agens »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020