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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015, 462 с. ISBN 978-5-97060-066-5.


Книга посвящена вопросам разработки приложений, работающих в системе AutoCAD версий 2013-2015, и их отличиям от предыдущих версий. Рассмотрены необходимые продукты Microsoft Visual Studio 2010-2013, Microsoft Visual Basic 7.1, библиотеки ObjectARX 2013-2015, AutoCAD .NET API 2013-2015. В книге описан также механизм проектирования интеллектуальных объектов (custom objects), которые становятся новыми примитивами AutoCAD. Книга разделена на 6 глав:
 1. Языки программирования и объектная модель
 2. C++ и ObjectARX
 3. Интеллектуальные объекты
 4. .NET и плагины (C#)
 5. AutoLISP и DCL
 6. VBA
 По ссылкам доступно содержание всех глав.
 
Программный код примеров из книги (1.67 Мбайт) можно скачать с сайта издательства. Некоторые примеры написаны А. Бушманом (Санкт-Петербург).
Книгу можно купить через Интернет-магазин.

Достаточно давно не издавалась русскоязычная литература по программированию для AutoCAD. Думаю, что эта книга будет полезна как для начинающих, так и для опытных программистов, использующих различные API AutoCAD.

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
2-я порция замечаний.

#=============================
стр. 13, Обзор средств разработки.
Абзац 1

#=============================
> Вместе с системой AutoCAD всех версий поставля[Ю]тся среда разработки на языке
LISP (Visual LISP).

*******************************

Во первых оЧепятка. Поскольку это обзор, то раз уж речь заходит об AutoLISP и
Visual LISP - не лишним было бы упомянуть о Петровых (можно глянуть здесь:
http://habrahabr.ru/company/nanosoft/blog/234221/ ). Эта информация в "обзоре"
была бы намного интересней чем то, что сейчас размещено на стр. 16-18 (которые
перелистываются не будучи прочитанными).

#=============================
стр. 13, Обзор средств разработки.
Абзац 2

#=============================
> Для работы с другими языками обычно требуются приобретение и установка среды
разработки Microsoft Visual Studio (версия Visual Studio зависит от версии
AutoCAD).

*******************************

Ситуацию несколько спасает слово "обычно", оставляя некоторый путь к отступлению...
А теперь представьте, что прочитавший это пользователь пишет не на C++, как это
ни странно, но на .NET. Будет ли для него верно данное заявление? Нет, не будет.
Для использования .NET API можно использовать любую IDE, способную работать с
той версией .NET Framework, которая может быть использована в целевой версии
AutoCAD. Например можно использовать такие бесплатные аналоги: Sharpdevelop (
http://www.icsharpcode.net/opensource/sd/ ) или Monodevelop (
http://www.monodevelop.com/ ). Для написания кода и компиляции можно
использовать в т.ч. и Visual Studio Express однако, насколько я помню, там есть
какие-то ограничения на отладку (не проверял, т.к. никогда не использовал этот
вариант IDE).

#=============================
стр. 13, Обзор средств разработки.
Абзац 3

#=============================
> Отдельно от системы AutoCAD распространяется пакет ObjectARX...
*******************************

Неплохо было бы уточнить, что во первых, распространяется он бесплатно, а во
вторых - что официально Autodesk в открытый доступ выкладывает версии SDK только
для последних трёх версий AutoCAD. Более старые версии SDK, с разрешения
Autodesk, А.Н. Ривилис выкладывает на странице
http://adn-cis.org/forum/index.php?topic=61.0

#=============================
стр. 13, Обзор средств разработки.
Абзац 4

#=============================
> .NET Framework за последние годы стала самой популярной платформой...
*******************************

Я бы воздержался от столь категоричных заявлений. А если их давать, то неплохо
было бы сослаться на результаты какого-нибудь отчёта по данному вопросу,
составленного авторитетной компанией. Если же в данном предложении речь идёт
о программировании именно под AutoCAD - то это стоило бы уточнить (я понял это так,
что автор имеет в виду программирование в целом).

#=============================
стр. 13, Обзор средств разработки.
Абзац 6

#=============================
> VBA в основном работает через объектную модель AutoCAD.
*******************************

Несколько неточное предложение. В AutoCAD существует несколько объектных моделей:
ObjectARX, AutoCAD .NET API и COM. Насколько мне известно, VBA в AutoCAD
использует COM.

#=============================
стр. 14, Обзор средств разработки.
Абзац 1

#=============================
> а если нужна связка языков, то лучше всего себя зарекомендовала пара C++-LISP.
*******************************

На мой взгляд это несколько субъективное мнение, моё отличается от обозначенного.
LISP функции в AutoCAD можно создавать в т.ч. и с помощью .NET. Помним, что .NET API в
AutoCAD сейчас активно развивается, чего к сожалению нельзя сказать о AutoLISP и
Visual LISP. Платформа .NET позволяет писать код на любом .NET языке, причём
этот код бесшовно стыкуется между собой. Можно писать базовые классы на одном
языке и наследоваться от них на другом. Т.о. говоря о связке, на мой взгляд
первое место занимает managed C++ совместно с любым .NET языком или даже их группой.

#=============================
стр. 14, Об объектной модели AutoCAD.
Абзац 1

#=============================
> Система AutoCAD разработана с учётом концепции COM...
*******************************

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

#=============================
стр. 15, Объекты и коллекции.
Абзац последний:

#=============================
> В табл. 1.1. приведён перечень объектов и коллекций.
*******************************

В том виде, в каком это представлено, данная информация не представляет никакого
интереса (во всяком случае для меня). Страницы 16, 17 и 18 просто перелистываются
не будучи прочитанными. Если уж и размещать информацию о класса, то в древовидном
представлении, как это сделано в файле classmap.dwg, входящем в состав ObjectARX
SDK. Такую иерархическую структуру было бы интересно просмотреть, а так получается,
что потеряно три страницы, тем более, что см. цитату в след. замечании:

#=============================
стр. 19, Объекты и коллекции.
Абзац 1

#=============================
> В таблицу не внесены объекты и семейства, связанные с подшивками и операЦИМИ
связи с базами данных.

*******************************

оЧепятка + смотрим предыдущее замечание в комплексе.

#=============================
стр. 19, Свойства.
Абзац 2

#=============================
> Такие компоненты объектной модели, как интерфейсы, не все обладают свойствами.
*******************************

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

#=============================
стр. 19, Простой пример использования объектной модели.
Абзац 1

#=============================
> Все разбираемые в следующих главах системы программирования дают возможность
использовать рассмотренную объектную модель с помощью COM(ActiveX).

*******************************

Всё то же замечание об отсутствии уточнения, о какой объектной модели речь. Кроме
того, я бы не сказал, что тот материал, который предшествовал данному предложению,
можно честно называть "рассмотренной объектной моделью". Наличие таблицы с именами
классов, занимающей три страницы, совместно с парой-тройкой последующих общих
предложений, вляд ли можно считать "рассмотрением".

#=============================
стр. 20, Особенности программирования для AutoCAD 2015.
Абзац 1

#=============================
> В системе AutoCAD прекращена поддержка fibers (волокон потоков Windows).
*******************************

Разве так уж и прекращена? Практика показывает, что по умолчанию использование фиберов
отключено, но может быть включено при необходимости. Процитирую А.Н. Ривилиса:
>Хотя нормально 2015 работает только с FIBERWORLD == 0
За подробностями к нему (так же читаем это http://adn-cis.org/forum/index.php?topic=647 ).

Неплохо было бы пояснить читателю, что такое "волокна потока". Много места такое
пояснение не займёт и будет полезным.

#=============================
стр. 21, О совместимости
Абзац 1

#=============================
> Разрабатывая приложение под какую-то версию AutoCAD определённой разрядности,
автор хотел бы знать, сможет ли его приложение без переделки правильно
функционировать в другой разрядности, а так же в другой версии.

*******************************

Насколько я понимаю, "без переделки" следует обособить запятыми. Разработка
приложений под AutoCAD ведётся абстрагированно от его разрядности. Один и тот же
исходный код компилируется под win32\x64, в случае native C++, либо под AnyCPU в
.NET. Если ограничиться AnyCPU не удаётся, то вместо неё собираются x86 и x64.

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

На стр. 22, в абзаце "Язык C++" автор пишет о совместимости на уровне машинного
кода.

#=============================
стр. 22, Платформа .NET
Абзац 1:

#=============================
> Платформа .NET (C# и др.) Здесь всё зависит от номера версии целевой платформы
.Net Framework, использованной при построении.

*******************************

Этой фразы я не понял. Использованной при построении чего? Предполагаю, что речь
идёт о компиляции самого AutoCAD, но автору лучше бы уточнить это.

#=============================
стр. 23, Платформа .NET
Абзац 1:

#=============================
> Если платформа проекта была AnyCPU, то не очень сложные приложения смогут
работать как в 32-bit, так и в 64-bit. Но чаще всего придётся собирать
индивидуальную версию для каждой версии и для каждой разрядности. См. главу 4.

*******************************

Во первых, неплохо было бы в тексте уточнить так: "индивидуальную версию
расширения для каждой версии AutoCAD
", а то получается двусмысленность "версия-
версия
". Во вторых, основываясь на своём личном практическом опыте написания .NET
расширений под AutoCAD, могу сказать, что всё обстоит с точностью до наоборот:
чаще всего вариант AnyCPU работает нормально. С действительной потребностью в
компиляции кода отдельно под x86 и отдельно под x64 я сталкивался, но происходило
это не часто. Причём я бы не сказал, что всё то, что мною компилировалось как
AnyCPU было "не очень сложным приложением"... Вообще, понятие "сложности" - оно
несколько относительно: то, что одному кажется простым, другому может показаться
сложным и наоборот.

#=============================
стр. 23, Язык VBA.
Абзац 1:

#=============================
> Для 32-разрядных версий AutoCAD до 2013, собранных в VBA 6, совместимость есть.
*******************************

Предполагаю, что речь идёт о совместимости на уровне машинного кода. Следовало
бы уточнять это в тексте, чтобы пользователь понимал, о какой именно совместимости
говорится.
« Последнее редактирование: 24-11-2014, 14:01:47 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Во вторых, основываясь на своём личном практическом опыте написания .NET
расширений под AutoCAD, могу сказать, что всё обстоит с точностью до наоборот:
чаще всего вариант AnyCPU работает нормально. С действительной потребностью в
компиляции кода отдельно под x86 и отдельно под x64 я сталкивался, но происходило
это не часто.
Если используются сборки AutoCAD (без позднего связывания и Reflection), то требуется раздельная компиляция при использовании сборок Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll (т.е. оберток для ActiveX/COM-интерфейса AutoCAD).
Для написания кода и компиляции можно
использовать в т.ч. и Visual Studio Express однако, насколько я помню, там есть
какие-то ограничения на отладку (не проверял, т.к. никогда не использовал этот
вариант IDE).
А теперь еще и Visual Studio 2013 Community, которая по основным параметрам эквивалентна Visual Studio Pro. Но когда Николай Николаевич сдавал книгу в печать я думаю об этой версии Visual Studio еще ничего не было известно. Там нужно внимательно изучить лицензионное соглашение для этой версии: http://www.visualstudio.com/products/visual-studio-community-vs
Во всяком случае для индивидуального программирования для создания даже коммерческих приложений эта версия доступна, что не может не радовать.
 
Практика показывает, что по умолчанию использование фиберов
отключено, но может быть включено при необходимости. Процитирую А.Н. Ривилиса:
>Хотя нормально 2015 работает только с FIBERWORLD == 0
За подробностями к нему.
Это нас всех ввел в заблуждение Киан Уомсли в своём блоге. Потом он исправился: http://through-the-interface.typepad.com/through_the_interface/2014/03/autocad-2015-for-developers.html
Цитировать
Update:

It turns out NEXTFIBERWORLD/FIBERWORLD are still usable – primarily for QA purposes, in case issues with fiber removal require verification – so the code paths for using fibers are still there, just inactive by default. I’d recommend against switching fibers back on unless it’s to help diagnose and report an issue, though. Thanks to Stephen Preston for checking on this. :-)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Если используются сборки AutoCAD (без позднего связывания и Reflection), то требуется раздельная компиляция при использовании сборок Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll (т.е. оберток для ActiveX/COM-интерфейса AutoCAD).
Я обращаюсь к функционалу обозначенных библиотек лишь тогда, когда искомый функционал не найден в AutoCAD .Net API. Как правило, в моём коде таких обращений не много. В подобных случаях я делаю выбор в пользу совместимости на уровне машинного кода и для достижения этого предпочитаю использовать позднее связывание.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Собственно говоря если хотя бы одна из сборок, используемая в нашей сборке не "Any CPU", то и наша сборка будет по факту не "Any CPU". Так что условие "Any CPU" для всех сборок есть необходимое, но не всегда достаточное. Например, использовали P/Invoke только с x86 или только с x64.

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Собственно говоря если хотя бы одна из сборок, используемая в нашей сборке не "Any CPU", то и наша сборка будет по факту не "Any CPU". Так что условие "Any CPU" для всех сборок есть необходимое, но не всегда достаточное.
Компилируя под AutoCAD 2009 я подключаю DLL из каталога %ObjectARX 2009%\inc-x64 (т.е. из каталога конкретной целевой платформы) и компилирую проект как AnyCPU. Результат работает как в AutoCAD 2009 x64, так и в AutoCAD 2009 x86. Но если вместо AnyCPU я укажу конкретную платформу, то только под ней и будет работать.

P.S.: Кажется мы отошли от темы обсуждения.  :)
я так не думаю. Корректность\точность опубликованных замечаний так же обсуждаема, потому как мало ли чего я там в замечаниях напишу (ну, или А.Н. Ривилис оЧепятается ;))...

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Нда... Заказал книгу неделю назад, до сих пор идет, причем когда заказывал, писали про большую скидку...

В общем, барбак у них там в издательстве.
Книгу отправили через 3 дня после оплаты, трек номер прислали через 6 (с какого то левого ящика на yandex.ru) при этом цена со скидкой + доставкой до Питера (на пункт выдачи Почты России) на 100 руб больше, чем если бы я купил эту книгу на Озоне с доставкой до пункта выдачи, да и по срокам Озон намного оперативнее.

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

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Нда... Заказал книгу неделю назад, до сих пор идет
Я когда книгу по почте отправлял, она ещё в СПб в течении 8-ми дней мусолилась Почтой России. Для сравнения: книги, которые я покупаю на Amazon.com, нередко доходят из США до Мск за три дня. Уже вся страна отлично знает, что такое Почта России ("Почта России" - и пусть весь мир подождёт...).

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Да я, на почту России, не очень то и качу бочку... Я больше на издательство. Из недели сроку, ее до почты несли 3 дня, да еще и ошибку в фамилии сделали. Так что я имею все шансы вообще не получить посылку в ближайшее время. Она пролежит месяц на почте и потом ее отправят обратно, отправитель исправит ошибку и отправит заново, а это как минимум еще месяца полтора...  :-\

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

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
В Петербурге можно купить в Доме книги за 882 руб., в Москве в Доме книги - за 1045 руб.

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

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
2-я порция замечаний
Спасибо Андрею Бушману за внимательное прочтение. Есть вопросы – значит, требуются ответы или пояснения. Гораздо хуже было бы без вопросов, ведь тема не столь проста… За обнаруженные опечатки тоже спасибо. Книга писалась в первой половине 2014 года и вышла в сентябре, поэтому последние новости в нее не могли попасть.
Поскольку по данной теме это у меня были другие книги (первая вышла в 2001 году), то я старался соблюдать традиции, хотя бы в отношении терминологии. Таких книг становится все меньше, поскольку узок круг покупателей (читателей, видимо, больше). Тираж всего 200 экз., но и его еще надо продать, чтобы покрыть редакционные издержки.
Если вдруг спрос окажется чуть больше критического минимума и редакция решит продолжить публикации, а авторы (автор) решат, что стоит тратить на это время хотя бы ради ностальгии, то не исключено, что замечания будут учтены в следующих книгах.

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

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Во первых оЧепятка. Поскольку это обзор, то раз уж речь заходит об AutoLISP и
Visual LISP - не лишним было бы упомянуть о Петровых (можно глянуть здесь:
http://habrahabr.ru/company/nanosoft/blog/234221/ ). Эта информация в "обзоре"
была бы намного интересней чем то, что сейчас размещено на стр. 16-18 (которые
перелистываются не будучи прочитанными).
Статья о Петровых интересная, я даже испытываю гордость за наших, но она (статья) вышла, когда книга уже ехала в типографию.
Насчет страниц 16-18 я не согласен: не все читатели знают, что такое объектная модель AutoCAD. Кому-то надо хотя бы раз увидеть перечисление объектов, чтобы создать раздел в памяти. А затем уже пойти по ссылке на полное описание модели (acadauto.chm).

Ситуацию несколько спасает слово "обычно", оставляя некоторый путь к отступлению...
А теперь представьте, что прочитавший это пользователь пишет не на C++, как это
ни странно, но на .NET. Будет ли для него верно данное заявление? Нет, не будет.
Для использования .NET API можно использовать любую IDE, способную работать с
той версией .NET Framework, которая может быть использована в целевой версии
AutoCAD. Например можно использовать такие бесплатные аналоги: Sharpdevelop (
http://www.icsharpcode.net/opensource/sd/ ) или Monodevelop (
http://www.monodevelop.com/ ). Для написания кода и компиляции можно
использовать в т.ч. и Visual Studio Express однако, насколько я помню, там есть
какие-то ограничения на отладку (не проверял, т.к. никогда не использовал этот
вариант IDE).
Замечание правильное. Я ограничился средой VS и теми IDE, что предоставляет Autodesk.

> Отдельно от системы AutoCAD распространяется пакет ObjectARX...
*******************************
Неплохо было бы уточнить, что во первых, распространяется он бесплатно, а во
вторых - что официально Autodesk в открытый доступ выкладывает версии SDK только
для последних трёх версий AutoCAD. Более старые версии SDK, с разрешения
Autodesk, А.Н. Ривилис выкладывает на странице
http://adn-cis.org/forum/index.php?topic=61.0
О бесплатности см. стр.25. Согласен, что стоило выйти за рамки темы 2013-2015 и на стр.25 дать ссылку на загрузки от Александра Ривилиса – это уникальная возможность доступа к предыдущим версиям. Интересно что на ObjectARX есть лицензионное соглашение ( www.objectarx.com ).

> Для работы с другими языками обычно требуются приобретение и установка среды
разработки Microsoft Visual Studio (версия Visual Studio зависит от версии
AutoCAD).
*******************************
Я бы воздержался от столь категоричных заявлений. А если их давать, то неплохо
было бы сослаться на результаты какого-нибудь отчёта по данному вопросу,
составленного авторитетной компанией. Если же в данном предложении речь идёт
о программировании именно под AutoCAD - то это стоило бы уточнить (я понял это так,
что автор имеет в виду программирование в целом).
Я имел в виду не только AutoCAD. Думаю, что компания Microsoft со мной согласна. :)

> VBA в основном работает через объектную модель AutoCAD.
*******************************

Несколько неточное предложение. В AutoCAD существует несколько объектных моделей:
ObjectARX, AutoCAD .NET API и COM. Насколько мне известно, VBA в AutoCAD
использует COM.
По традиции имеется в виду главная модель типа COM, доступная на всех языках, на которых пишутся приложения для AutoCAD. Из восьми TLB-файлов, поставляемых в папках ObjectARX 2015\inc-win32 (inc-x64), этой объектной модели соответствует файл axdb20enu.tlb.

Оффлайн bender

  • ADN Club
  • **
  • Сообщений: 62
  • Карма: 4
Цитировать
В Петербурге можно купить в Доме книги за 882 руб., в Москве в Доме книги - за 1045 руб.

Через OZON с доставкой к месту выдачи (не Москва) - 740 рр

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Через OZON с доставкой к месту выдачи (не Москва) - 740 рр
В Питере, 558 р книга и 49 р  доставка, по крайней мере именно такое уведомление свалилось мне на почту...

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Давайте не будем отвлекаться от основной темы.

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

  • 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
  • ****
  • Сообщений: 470
  • Карма: 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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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

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

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

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Можно, но не нужно :)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Сказали бы сразу, что все статьи по С# - бумажный вариант сайтов Андрея :)
(получил книгу, пробежал глазом)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитата: Agens
Приедет книга ко мне в Минск в понедельник.
Сказали бы сразу, что все статьи по С# - бумажный вариант сайтов Андрея
(получил книгу, пробежал глазом)
Я так понял, что книга доехала... :) В главе по .NET не весь материал мой - кое-что и от Николая Николаевича присутствует. Кроме того, насколько я помню, он местами вносил авторские правки в мой материал, дабы изложение было более последовательным и плавным (в блоге ведь это в виде отдельных, почти не связанных друг с другом заметок).

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Тема VBA в книге вообще слабенькая. Я понимаю, что для "серьезных парней" она интереса не вызывает, но книгу, я так думаю, покупают новички, а VBA для старта - самая оптимальная среда.
Что по VBA очень много примеров, информации, что модель достаточно подробно описана - это я знаю.
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
VBA для старта - самая оптимальная среда
Субъективное мнение. Если тебе чего-то нехватает в главе по VBA, то выдавай конкретные пожелания того, чего бы тебе хотелось там найти. Это позволит автору в будущем, если будет переиздание книги, улучшить её исходный вариант за счёт добавления материала с подробным рассмотрением тем, запрошенных читателями. Книга, в конце-концов не резиновая, да и издательство накладывает чёткое ограничение на количество страниц и на сроки. Так что автору приходилось чем-то жертвовать, чтобы уложиться в очерченные рамки. На мой взгляд, оптимальным решением было бы отделение мух от котлет: каждому языку отдельная книга. По лиспу Николай Николаевич написал отличный справочник. Возможно следующей книгой по этому языку была бы кстати книга в стиле "Практика программирования на AutoLisp\Visual Lisp в AutoCAD". Аналогично в отдельные книжки лучше было бы заворачивать ARX, .NET и VBA. Но это в идеале и требует значительных усилий, а поскольку эти усилия не стоят текущего спроса, то вряд ли сие будет реализовано (ну разве что Autodesk возьмётся профинансировать работу автора).
« Последнее редактирование: 20-01-2015, 13:14:23 от Андрей Бушман »

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

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Объем книги строго определен договором заказа. Состав тоже во многом зависит от издательства. Именно оно настояло на включении главы по VBA. Я с VBA отчасти согласен, поскольку с появлением VBA 7 возникла поддержка 64-разрядности. На это и обращено внимание в главе.
Но Autodesk, похоже, не уверен, что поддержка VBA будет продолжаться долго и все-таки рекомендует переходить на .NET.
Книги по программированию в специальной среде имеют небольшой спрос у покупателей, поэтому появление книги по одному языку в среде AutoCAD маловероятно (разве что Autodesk профинансирует).

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

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

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Вряд ли ответ на вопрос лежит в сфере ответственности Ярослава.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Именно оно(издательство) настояло на включении главы по VBA
Чтобы увеличить число потенциальных покупателей, все правильно...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020


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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Выделил время на 2-ю главу. Первая партия замечаний по ней:
 
Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 25
Рекомендуемой и почти обязательной средой разработки является Microsoft Visual Studio (VS) Professional.

На мой взгляд, здесь в тексте присутствует некоторая двусмысленность, согласно которой у читателя может сложиться впечатление о том, что то ли можно попытаться использовать IDE от других производителей (т.е. не Microsoft), то ли даже имея на руках версию VS Premium или VS Ultimate он всё же по каким-то причинам должен стараться использовать именно VS Professional. Наверное стоило бы уточнить, что IDE должна быть именно MS VS, а в составе конкретной линейки продуктов рекомендуется использовать не ниже чем Professional, тем самым давая понять, что более функциональные варианты (например Premium или Ultimate) так же годятся. Так же неплохо было бы пояснить читателю, чем обусловлены эти требования.

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 29
Основное окно Solution01-Microsoft Visual Studio(Администратор)...

У меня "(Администратор)" отсутствует, поскольку я никогда не работаю с правами администратора, но пользуюсь ими лишь для установки\удаления софта или в др. важных случаях, когда такие права действительно необходимы. Вы работаете из под учётной записи администратора - это конечно же Ваше личное дело однако, пусть даже и невольно, но прививать такую привычку читателю не стоит и на скринах книги "(Администратор)" присутствовать не должен (ИМХО).

Небольшая цитата из официального учебного курса Microsoft:

Цитата: Microsoft, "Разработка защищённых приложений на Visual Basic .NET и Visual C# .NET (экзамены 70-330, 70-430)" стр. 56
В наши дни нет оправдания тем, кто не использует принцип наименьших привилегий, так как все должны входить в системы под учётной записью стандартных пользователей. Чтобы использовать принцип наименьших привилегий, следуйте двум правилам:
  1. Не запрашивайте большего уровня доступа к ресурсам, чем необходимо.
  2. Создавайте файлы и разделы реестра там, где стандартные пользователи могут их изменить.

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

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 31
Разработчикам, создающим коммерческие версии своих продуктов, необходимо компилировать и собирать проекты под обе платформы (они несовместимы друг с другом).

Т.е. если софт не является коммерческим, то такой необходимости нет? Вопрос риторический. :) Такая формулировка может сбить с толку читателя. Коммерческий это продукт или некоммерческий - роли не играет: правила "игры" одни и те же в обоих случаях. Я думаю, что корректней было бы написать так: "Разработчикам, желающим чтобы их приложение работало как в 32-х битной, так и в 64-х битной версии AutoCAD, необходимо...".

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 32
Параметр Конечное расширение (Target Extension) необходимо заменить на .arx (по умолчанию - .dll), так как это обязательно для ARX-приложений...

Данное заявление не совсем корректно... Пользователю действительно не удастся загрузить ARX приложение, имеющее произвольное расширение, при помощи диалогового окна Load\Unload Applications. Это обусловлено тем, что в настройках этого окна установлены фильтры на расширения отображаемых файлов. Однако ничто не мешает выполнить загрузку такого приложения программно: в настройках проекта я заменил .arx на .abcd, после чего смог успешно через COM API загрузить приложение в AutoCAD и использовать определённые в нём команды и lisp-функции. Код загрузки прост:

Код - C# [Выбрать]
  1. // C# code:
  2. public void Initialize() {
  3.   IAcadApplication comApp = (IAcadApplication) cad.AcadApplication;
  4.   comApp.LoadArx(@"C:\public\Debug\App01\App01_x64.abcd");
  5. }

Т.о. слово "обязательно" следовало бы заменить на "стандартно" и при этом добавить информацию о возможности программной загрузки ARX приложений с произвольными расширениями файлов (это может быть полезно, когда программист по каким-либо причинам не хочет предоставлять пользователю возможность загрузки тех или иных ARX приложений через обозначенное выше диалоговое окно).

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 33
... создаваемые файлы приложения будут накрывать друг друга.
Накрывать чем, медным тазом? :) Мне кажется слово "перезапись" было бы более к месту.

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 33
Представляет интерес параметр Набор инструментов платформы (Platform Toolset). Это номер версии используемого компилятора. Обычное значение - v100 (соответствует версии 10 компилятора, необходимого для ObjectARX2013-2014).

Неплохо было бы пояснить, что если на компьютере установлены, к примеру, VS 2008-2013, то для разработки ARX приложений, которые требуют одну из этих версий VS, при желании можно использовать даже самую новую версию (VS 2013 на сегодняшний день) при условии, что свойству Platform Toolset назначена корректная версия компилятора. Т.е. разработчик сможет использовать более современную IDE, а уж msbuild.exe для компиляции воспользуется именно той версией компилятора, которая указана в обозначенном выше свойстве. Т.е. в данном месте была бы полезна ссылка на стр. 52.

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 36
Если вы посмотрите параметр Свойства конфигурации => С/С++ => ...

В VS 2013 обозначенная группа свойств по умолчанию присутствует, но в VS 2010, используемом согласно тексту книги, она отсутствует. Группа настроек С/С++ появляется в VS 2010 сразу после добавления в проект первого CPP файла. Возможно, что такое поведение будет наблюдаться и у др. читателей и об этом следует предупредить заранее, дабы не оставлять их в замешательстве.

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 37
Примечание. Предлагаемые в примере настройки не работают в VS 2012 и ObjectARX 2015.

Это здорово... :) Но если уж сказано "А", то тут же хотелось бы услышать и "Б": почему они не работают и что нужно сделать, чтобы заработали? Или же нужна ссылка на стр. где это будет объяснено позднее. Оставлять читателя в недоумении - не самый лучший ход.

Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 41
Теперь к проекту необходимо добавить файл определений имён функций, экспортируемых из DLL (такой файл должен быть с расширением .def).

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

В конце заголовочного файла dbxEntryPoint.h определена следующая директива условной компиляции:

Код - C++ [Выбрать]
  1. //- This line allows us to get rid of the .def file in ARX projects
  2. #if !defined(_WIN64) && !defined (_AC64)
  3. #pragma comment(linker, "/export:_acrxGetApiVersion,PRIVATE")
  4. #else
  5. #pragma comment(linker, "/export:acrxGetApiVersion,PRIVATE")
  6. #endif

Неплохо было бы обратить внимание читателя на то, что в данном коде для Win32 имя экспортируемой функции начинается с символа подчёркивания. Включив обозначенный заголовок в наш код, мы тем самым выполняем тот самый экспорт обозначенной в коде функции acrxGetApiVersion (или _acrxGetApiVersion). Остаётся выполнить экспорт функции acrxEntryPoint (её имя одинаково для Win32 и x64). В обозначенном выше файле заголовка присутствует макрос IMPLEMENT_ARX_ENTRYPOINT_STD, посредством которого, видимо Wizard выполняет регистрацию acrxEntryPoint, предварительно сгенерировав некий вспомогательный класс, имя которого и передаёт параметром макросу. Можно попробовать самому написать такой класс, после чего воспользоваться обозначенным макросом, либо, как наиболее простой вариант - создать и подключить такой заголовочный файл:

Код - C++ [Выбрать]
  1. /* exports.h */
  2. #pragma once
  3. //- This line allows us to get rid of the .def file in ARX projects
  4. #pragma comment(linker, "/export:acrxEntryPoint,PRIVATE")

Т.о. после подключения заголовочных файлов dbxEntryPoint.h и exports.h необходимость в DEF файле исчезает. Если позднее потребуется экспортировать какие-то дополнительные функции, то всегда можно добавить соответствующие записи в файл exports.h.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Начну с конца. Вместо использования
Код - C++ [Выбрать]
  1. #pragma comment(linker, "/export:acrxEntryPoint,PRIVATE")
Можно использовать __declspec(dllexport):
Код - C++ [Выбрать]
  1. extern "C" AcRx::AppRetCode __declspec(dllexport) acrxEntryPoint (AcRx::AppMsgCode msg, void *pkt)
  2. {
  3.   //...
  4. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитата: MSDN, Exporting from a DLL Using __declspec(dllexport)
Because there is no standard specification for name decoration, the name of an exported function might change between compiler versions.
Насколько мне известно, такой стандарт существует. Там же указаны и те, кто участвовал в его разработке:
Цитировать
This document was developed jointly by an informal industry coalition consisting of (in alphabetical order) CodeSourcery, Compaq, EDG, HP, IBM, Intel, Red Hat, and SGI. Additional contributions were provided by a variety of individuals.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Пользователю действительно не удастся загрузить ARX приложение, имеющее произвольное расширение, при помощи диалогового окна Load\Unload Applications. Это обусловлено тем, что в настройках этого окна установлены фильтры на расширения отображаемых файлов.
Вообще-то и в этом окне можно выбрать файлы с другим расширением. Достаточно в строке "Имя файла" указать что-нибудь типа *.* и нажать Загрузка (Load). Только AutoCAD не поймёт как его грузить. Кстати, кроме расширения arx может быть еще и crx и dbx. И грузить вне зависимости от расширения можно еще при помощи (arxload ...) в lisp, или DynamicLinker.LoadApp, или DynamicLinker.LoadModule, или HostApplicationServices.LoadApplication в AutoCAD .NET API
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Можно использовать __declspec(dllexport):
Возьму на вооружение, спасибо!

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
По поводу DEF файла: неплохо было бы упомянуть и третий вариант - подключение к проекту уже имеющегося в составе SDK файла AcRxDefault.def, в составе которого уже прописаны экспортируемые функции. Подключение можно выполнить при помощи указания обозначенного файла следующему свойству проекта: Configuration Properties -> Linker -> Input -> Module Definition File.
« Последнее редактирование: 16-06-2015, 14:01:26 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Это не всегда удобно, хотя и имеет право на жизнь. В этом случае остальные экспортируемые функции (если таковые есть) придётся указывать другим способом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение


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

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Применимы любые языки, поддерживающие ActiveX или .NET. Технология .NET описана в 4 главе данной книги, а ActiveX - в книге "САПР на базе AutoCAD" (разделы о Delphi). Впрочем, в каждом языке могут быть свои дополнительные плюсы или минусы.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитата: Н.Н.Полещук, Глава 2. C++ и ObjectARX, стр. 33
Здесь используются стандартные переменные платформы MSBuild, работающие в Visual Studio (переменные заключаются в круглые скобки и предваряются символом $).
Не только стандартные (раз, два, три), но и системные переменные Windows ($(AppData) и т.п.), а так же все пользовательские переменные Windows, определённые в диалоговом окне Переменные среды. Дополнительно существует возможность хранить набор переменных во внешних XML файлах и импортировать их (удобно при коллективной работе).

Пример:
Код - XML [Выбрать]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- sdk.props
  3. UTF-8 encoding.
  4. © Andrey Bushman, 2015
  5. This file describes SDK locations of CAD systems. You are free to change its
  6. content according your SDK locations.
  7.  
  8. Three last versions of ObjectARX SDK you can download from the Autodesk official
  9. site: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=785550
  10. Older ObjectARX versions you can download from here: http://adn-cis.org/forum/index.php?topic=61.0 -->
  11. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  12.   <!-- SDK locations. -->
  13.   <PropertyGroup>
  14.     <!-- Parent directory for all SDKs (any software) -->
  15.     <SDK>\\hyprostr\dfs\groups\developers\sdk</SDK>
  16.     <!-- Parent directory for all ObjectARX SDKs -->
  17.     <ObjectARX>$(SDK)\Autodesk\AutoCAD</ObjectARX>
  18.     <!-- The ObjectARX SDK locations list -->
  19.     <ObjectARX_2009>$(ObjectARX)\ObjectARX 2009</ObjectARX_2009>
  20.     <ObjectARX_2010>$(ObjectARX)\ObjectARX 2010</ObjectARX_2010>
  21.     <ObjectARX_2011>$(ObjectARX)\ObjectARX 2011</ObjectARX_2011>
  22.     <ObjectARX_2012>$(ObjectARX)\ObjectARX 2012</ObjectARX_2012>
  23.     <ObjectARX_2013>$(ObjectARX)\ObjectARX 2013</ObjectARX_2013>
  24.     <ObjectARX_2014>$(ObjectARX)\ObjectARX 2014</ObjectARX_2014>
  25.     <ObjectARX_2015>$(ObjectARX)\ObjectARX 2015</ObjectARX_2015>
  26.     <ObjectARX_2016>$(ObjectARX)\ObjectARX 2016</ObjectARX_2016>
  27.     <!-- Add here new locations for ObjectARX of newer AutoCAD versions when
  28.    they appear. -->
  29.   </PropertyGroup>  
  30. </Project>

Импорт в *PROJ-файле должен быть прописан до первого обращения к любому из свойств, определённых в импортируемом файле (свойства можно переопределять):

Код - XML [Выбрать]
  1. <Import Project="..\sdk.props" />
« Последнее редактирование: 29-09-2015, 15:01:34 от Андрей Бушман »

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Здравствуйте,
Я пытаюсь изучать программирование на C# для AutoCAD'а по этой книге. У меня возник вопрос по примеру кода (начало на стр.181) рисования смайлика. Там есть строка:
Код - C# [Выбрать]
  1. if (!Db.TileMode)
  2.   cad.SetSystemVariable("TILEMODE", 1);
  3.  
При ее вводе появляется сообщение об ошибке:
Цитировать
The type or namespace name 'TileMode' does not exist in the namespace 'Autodesk.AutoCAD.DatabaseServices' (are you missing an assembly reference?)
Вручную я тоже такого метода не нашел в Db. Я что-то не так делаю, или это, действительно, ошибка?
« Последнее редактирование: 15-03-2016, 21:49:23 от Александр Ривилис »

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Должна быть примерно такая строчка где-то выше:
Код - C# [Выбрать]
  1. Database Db = Application.DocumentManager.MdiActiveDocument.Database;
А у Вас, скорее всего, есть только такая:
Код - C# [Выбрать]
  1. using Db = Autodesk.AutoCAD.DatabaseServices;

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

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Такое свойство есть. Но, возможно, не во всех версиях AutoCAD

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Балиев
1. Прочитай у меня в подписи как следует форматировать код на форуме.
2. Не:
Код - C# [Выбрать]
  1. if (!Db.TileMode)
  2.   cad.SetSystemVariable("TILEMODE", 1);
а
Код - C# [Выбрать]
  1. if (!db.TileMode)
  2.   cad.SetSystemVariable("TILEMODE", 1);
Всего лишь ошибка в регистре...
P.S.: В книге правильно.
P.S.S.: Приводи сразу номер страницы, с которой берёшь пример. В данном случае это страница 185.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Всего лишь ошибка в регистре...
Точно! А ведь чувствовал, что "сам дурак", но так и не догадался в чем...

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
День добрый,

Сначала о грустном. Обнаружил опечатку (возможно, вы уже о ней знаете) на стр. 154 внизу напечатано:
  • 2011 - 3.5,4.0,4.5,4.5.1 (VS2005 и выше);
а должно быть:
  • 2011 - 3.5 (VS2005 и выше);
Я сначала не обратил внимания и промучился с .NET 4.0, пытаясь использовать его для AutoCAD 2011.

Теперь о главном. По некоторым причинам мне нужно писать плагины под AutoCAD 2011. Я попробовал воспроизвести под AutoCAD 2011 пример со смайликом, который удачно заработал под AutoCAD 2015. Не получается. Попытки понять почему? привели к следующим выводам.

1. На работоспособность под AutoCAD 2011 влияют 2 строки.

Первая строка на стр.182:
Код - C# [Выбрать]
  1. [assembly: Rt.ExtensionApplication(typeof(Bushman.CAD.Samples.Extention))]
  2.  
и вторая строка на стр.184:
Код - C# [Выбрать]
  1. [Rt.CommandMethod(cmdGr, "hello", "hello_ID", Rt.CommandFlags.Modal)]

При этом, если эти строки не комментировать или закомментировать только первую из этих двух строк, то при попытке исполнить команду "netload" появляется сообщение:

Цитировать
Не удалось найти ресурсы, соответствующие указанной культуре или нейтральной
культуре. Проверьте правильность внедрения или связывания
"Bushman.CAD.Samples.Commands.resources" со сборкой "ACAD11_test" во время
компиляции, или убедитесь, что все необходимые сопутствующие сборки полностью
подписаны и могут быть загружены.
Не удалось загрузить сборку. Сведения об ошибке:
System.Resources.MissingManifestResourceException: Не удалось найти ресурсы,
соответствующие указанной культуре или нейтральной культуре. Проверьте
правильность внедрения или связывания "Bushman.CAD.Samples.Commands.resources"
со сборкой "ACAD11_test" во время компиляции, или убедитесь, что все
необходимые сопутствующие сборки полностью подписаны и могут быть загружены.
   в System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo
culture, Boolean createIfNotExists, Boolean tryParents)
   в System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo
culture, Boolean createIfNotExists, Boolean tryParents)
   в System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo
culture, Boolean createIfNotExists, Boolean tryParents)
   в System.Resources.ResourceManager.GetString(String name, CultureInfo
culture)
   в Autodesk.AutoCAD.Runtime.CommandClass.AddCommand(ICommandLineCallable ca,
MethodInfo mi)
   в
Autodesk.AutoCAD.ApplicationServices.AutoCADApplicationHolder.Initialize(Assembl
y assembly)
   в
Autodesk.AutoCAD.ApplicationServices.ExtensionLoader.ProcessAssembly(Assembly
assembly)

Если же закомментировать обе строки или вторую из двух, то появляется более короткое сообщение:
Цитировать
Не удалось найти ресурсы, соответствующие указанной культуре или нейтральной
культуре. Проверьте правильность внедрения или связывания
"Bushman.CAD.Samples.Commands.resources" со сборкой "ACAD11_test" во время
компиляции, или убедитесь, что все необходимые сопутствующие сборки полностью
подписаны и могут быть загружены.

Это как-то лечится?
Заранее благодарен.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
а должно быть:

    2011 - 3.5 (VS2005 и выше);

Я сначала не обратил внимания и промучился с .NET 4.0, пытаясь использовать его для AutoCAD 2011.
Если разкоментировать в C:\Program Files\Autodesk\AutoCAD 2011\acad.exe.config строку <supportedRuntime version="v4.0"/>,
т.е. получить в результате:
Код - XML [Выбрать]
  1. <configuration>
  2.   <startup useLegacyV2RuntimeActivationPolicy="true">
  3.     <supportedRuntime version="v4.0"/>
  4.   </startup>
  5.  
  6. <!--All assemblies in AutoCAD are fully trusted so there's no point generating publisher evidence-->
  7.    <runtime>        
  8.         <generatePublisherEvidence enabled="false"/>    
  9.    </runtime>
  10. </configuration>
  11.  
то будет работать и с .NET 4.0:
http://adndevblog.typepad.com/autocad/2012/07/using-net-framework-40-in-various-autocad-versions.html
http://bushman-andrey.blogspot.com/2014/04/net-autocad-net-framework-ms-visual.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Если разкоментировать в C:\Program Files\Autodesk\AutoCAD 2011\acad.exe.config строку <supportedRuntime version="v4.0"/>,... то будет работать и с .NET 4.0:
Хм... А зачем ее вообще в закомментированом виде поставляют, не знаешь?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Чтобы результат компиляции мог работать в AutoCAD 2011, тебе необходимо подключать соответствующие библиотеки AutoCAD 2011 (или более ранних версий). Кроме того, по обозначенной выше ссылке на мой блог дана некоторая информация об изменениях, которые произошли в API AutoCAD 2013.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Хм... А зачем ее вообще в закомментированом виде поставляют, не знаешь?
Знаю. Когда вышел AutoCAD 2011 его не успели протестировать с .NET 4.0, который тоже только-только вышел. Так что во избежания проблем его поставляли с .NET 3.5 и настроенным на .NET 3.5
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Кроме того, по обозначенной выше ссылке на мой блог дана некоторая информация об изменениях, которые произошли в API AutoCAD 2013.
Какая ссылка имеется в виду?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
http://bushman-andrey.blogspot.com/2014/04/net-autocad-net-framework-ms-visual.html
Спасибо! Идею понял, но, как говорится, "осадочек остался" - непонятно, почему один и тот же код скомпилированный с библиотеками, пусть с разной архитектурой, но с одинаковым, в части потребностей данного кода, содержанием, оказывается в одном случае работоспособным, а в другом - нет?

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Балиев, не стоит все свои вопросы лепить в одну и ту же тему, которая создавалась для др. целей.
100%

Балиев
Эта тема посвящена обсуждению конкретной книги, а не обсуждению особенностей AutoCAD .NET API, .NET Framework и Visual Studio.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Эта тема посвящена обсуждению конкретной книги, а не обсуждению особенностей AutoCAD .NET API, .NET Framework и Visual Studio.
ОК. Как скажете...

Оффлайн tujn08

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Купил вторую книгу Автора и есть хорошие результаты в программировании. Спасибо за литературу! Вопрос как самым осведомленным (прошу прощения, что не по теме): на lisp-е можно сделать своё всплывающее сообщение как при отправке на печать (там ведь уведомления без паузы в работе функций)?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вопрос как самым осведомленным (прошу прощения, что не по теме): на lisp-е можно сделать своё всплывающее сообщение как при отправке на печать (там ведь уведомления без паузы в работе функций)?
Для этого есть отдельный раздел. Там и создай тему.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн tujn08

  • ADN OPEN
  • Сообщений: 21
  • Карма: 0
    • КОМПЛЕКСНАЯ СИСТЕМА УДАЛЕННОГО ПРОЕКТИРОВАНИЯ
  • Skype: RIES.PRO
Для этого есть отдельный раздел.
Спасибо! Попробую