Архив рубрики: Proxy

Прокси в AutoCAD

Обновлена утилита по работе с прокси в AutoCAD.

Что нового...

1. CadProxy был переименован в Proxy Tools for AutoCAD (т.е. в Прокси-инструменты для AutoCAD).
2. Теперь это бесплатное программное обеспечение вместо открытого программного обеспечения.
3. Добавлены русская и английская лицензии.
4. Добавлена русская локализация.
5. Для AutoCAD 2009-2011: в процессе загрузки приложения в AutoCAD, родительский каталог приложения будет добавлен в Путь доступа к вспомогательным файлам (если это ещё не было сделано ранее).* Это необходио для работы справочной системы приложения.
6. Для AutoCAD 2009-2011: в реестре будет выполнена регистрация приложения (загрузка по требованию), если это не было сделано ранее.* В виду этого, вызов команды _NETLOAD для этих версий AutoCAD потребуется только один раз.
7. Операция ПРОВЕРИТЬ (_AUDIT) будет выполняться каждый раз перед расчленением или удалением прокси, если команды ВЗПРОКСИ (_XPROXY) или УДПРОКСИ (_RMPROXY) не являются предыдущей выполненной командой. Так же команда ПРОВЕРИТЬ (_AUDIT) будет автоматически выполняться и после работы этих команд.
8. Если файлы меню CUICUIX были ранее загружены пользователем в AutoCAD непосредственно из каталога расширения, тогда они будут выгружены, скопированы в Windows-профиль пользователя и затем в AutoCAD будут загружены эти копии.*
9. Изображения в файлах меню CUICUIX были заменены. Теперь эти изображения используют ICO формат вместо BMP (новые изображения используют прозрачность).
10. MNR-файлы были удалены из MSI-инсталлятора.
11. MSI-инсталлятор был полностью переписан. Теперь он показывает лицензию, устанавливаемые наборы компонентов, а так же предоставляет фиксированный набор каталогов, в которые может быть выполнена установка приложения.
12. Имеется две версии локализации MSI-установщика: английская и русская.
13. Инсталлятор добавляет пункты меню в Пуск -> Все программы. Локализация этих пунктов меню совпадает с локализацией использованного MSI-инсталлятора.
14. Теперь 32-битная версия MSI-инсталлятора не может использоваться для Windows x64 (ограничение добавлено намеренно).
15. Теперь расширение может быть установлено как с административными правами, так и без них. Это зависит от выбора, который сделает пользователь в процессе установки приложения.
16. Файл справки полностью переписан.
17. Исправлены некоторые ошибки в программном коде.


* - Проверка будет выполняться каждый раз при загрузке приложения в AutoCAD.

Пользовательское меню:



 Меню в Пуск -> Все программы:


 Дополнительная информация, размещаемая в реестре:


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


Локализованная справка:




Прокси в AutoCAD

Обновлена утилита по работе с прокси в AutoCAD.

Что нового...

1. CadProxy был переименован в Proxy Tools for AutoCAD (т.е. в Прокси-инструменты для AutoCAD).
2. Теперь это бесплатное программное обеспечение вместо открытого программного обеспечения.
3. Добавлены русская и английская лицензии.
4. Добавлена русская локализация.
5. Для AutoCAD 2009-2011: в процессе загрузки приложения в AutoCAD, родительский каталог приложения будет добавлен в Путь доступа к вспомогательным файлам (если это ещё не было сделано ранее).* Это необходио для работы справочной системы приложения.
6. Для AutoCAD 2009-2011: в реестре будет выполнена регистрация приложения (загрузка по требованию), если это не было сделано ранее.* В виду этого, вызов команды _NETLOAD для этих версий AutoCAD потребуется только один раз.
7. Операция ПРОВЕРИТЬ (_AUDIT) будет выполняться каждый раз перед расчленением или удалением прокси, если команды ВЗПРОКСИ (_XPROXY) или УДПРОКСИ (_RMPROXY) не являются предыдущей выполненной командой. Так же команда ПРОВЕРИТЬ (_AUDIT) будет автоматически выполняться и после работы этих команд.
8. Если файлы меню CUI\CUIX были ранее загружены пользователем в AutoCAD непосредственно из каталога расширения, тогда они будут выгружены, скопированы в Windows-профиль пользователя и затем в AutoCAD будут загружены эти копии.*
9. Изображения в файлах меню CUI\CUIX были заменены. Теперь эти изображения используют ICO формат вместо BMP (новые изображения используют прозрачность).
10. MNR-файлы были удалены из MSI-инсталлятора.
11. MSI-инсталлятор был полностью переписан. Теперь он показывает лицензию, устанавливаемые наборы компонентов, а так же предоставляет фиксированный набор каталогов, в которые может быть выполнена установка приложения.
12. Имеется две версии локализации MSI-установщика: английская и русская.
13. Инсталлятор добавляет пункты меню в Пуск -> Все программы. Локализация этих пунктов меню совпадает с локализацией использованного MSI-инсталлятора.
14. Теперь 32-битная версия MSI-инсталлятора не может использоваться для Windows x64 (ограничение добавлено намеренно).
15. Теперь расширение может быть установлено как с административными правами, так и без них. Это зависит от выбора, который сделает пользователь в процессе установки приложения.
16. Файл справки полностью переписан.
17. Исправлены некоторые ошибки в программном коде.


* - Проверка будет выполняться каждый раз при загрузке приложения в AutoCAD.

Пользовательское меню:



 Меню в Пуск -> Все программы:


 Дополнительная информация, размещаемая в реестре:


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


Локализованная справка:




C#: скачиваем файлы из Интернет


Пример кода для простого скачивания файлов из Интернет (например файла http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h). Сетевые настройки при этом считываются из настроек Internet Explorer.




static voidMain(string[] args) {
    String file_name = Path.GetRandomFileName();
    String full_path = Environment.ExpandEnvironmentVariables(
        Path.Combine(@"%LocalAppData%Temp", file_name));

    using (WebClientclient = new WebClient()) {
        String uri = "http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h";
        var proxyUri = WebRequest.GetSystemWebProxy()
            .GetProxy(new Uri(uri));
        client.Proxy = new WebProxy(proxyUri);
        client.Proxy.Credentials = CredentialCache.DefaultCredentials;
        try{
            client.DownloadFile(uri, full_path);
        }
        catch(Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
    Console.WriteLine("The result file: {0}", full_path);
    Console.WriteLine("Press any key for exit.");
    Console.ReadKey();
}



C#: скачиваем файлы из Интернет


Пример кода для простого скачивания файлов из Интернет (например файла http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h). Сетевые настройки при этом считываются из настроек Internet Explorer.




static voidMain(string[] args) {
    String file_name = Path.GetRandomFileName();
    String full_path = Environment.ExpandEnvironmentVariables(
        Path.Combine(@"%LocalAppData%\Temp", file_name));

    using (WebClientclient = new WebClient()) {
        String uri = "http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h";
        var proxyUri = WebRequest.GetSystemWebProxy()
            .GetProxy(new Uri(uri));
        client.Proxy = new WebProxy(proxyUri);
        client.Proxy.Credentials = CredentialCache.DefaultCredentials;
        try{
            client.DownloadFile(uri, full_path);
        }
        catch(Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
    Console.WriteLine("The result file: {0}", full_path);
    Console.WriteLine("Press any key for exit.");
    Console.ReadKey();
}



На BitBucket опубликованы исходники проекта по работе с proxy в AutoCAD

Закинул в свой профиль на BitBucket исходники проекта по работе с прокси в AutoCAD. Проект в открытом доступе. Там же опубликован и результат компиляции.

UPD (27.06.2016) Программа переведена из категории открытой в категорию бесплатной. Отныне доступны MSI-инсталляторы, но не исходный код. Подробнее здесь.

Управляемая альтернатива ExplodeAllProxy и RemoveAllProxy

В данной заметке даётся ссылка на полный (т.е. без "цензуры" того или иного форума) исходный код управляемой библиотеки, реализующей функционал, аналогичный командам ExplodeAllProxy и RemoveAllProxy от Александра Ривилиса. Обозначенный исходный код может использоваться не только в AutoCAD, но и в nanoCAD, BricsCAD, а так же в любом приложении, работающем на базе платформы Teigha.

Некоторое время назад А.Н. Ривилис опубликовал исходный код своего ARX расширения (за что я ему весьма признателен). Ознакомившись с исходниками А.Н. Ривилиса я написал схожее по функционалу .NET расширение. Код писался сразу с прицелом на то, чтобы он мог успешно компилироваться под:
  • все версии AutoCAD не старее чем 2009-я (в более старых не тестировал) 
  • nanoCAD 6.0 (и любые более новые версии)
  • BricsCAD 14.2 (и любые более новые версии)
  • любое автономное приложение, использующее в своей работе платформу Teigha.
В принципе, возможно, что код мог бы работать и в nanoCAD 5.0, но во первых, эта версия у меня отсутствует, а во вторых, потребуется, чтобы разработчики выпустили патч для nanoCAD 5.0, устраняющий баг реализации управляемой обёртки для класса OpenCloseTransaction. Для версии nanoCAD 6.0 такой патч существует. Скачать его можно, например отсюда. Кстати, без этого патча код данного расширения не сможет работать в nanoCAD 6.0, так что патч нужно устанавливать обязательно.

В ходе тестирования выяснилось, что команда rmScales аварийно завершает работу BricsCAD. Я задал вопрос в службу технической поддержки BricsCAD и достаточно оперативно получил ответ:
Я подтверждаю, что BricsCAD аварийно завершает работу в результате выполнения прилагаемого кода. Нулевой указатель передается в панель Свойств объектов (свойство "Annotative"). Проблема устранена в версии v15.1.02 и всех последующих версиях.
Аварийного завершения работы можно избежать двумя способами:
1. закрыть панель Свойств;
2. в методе GetFreeAnnotativeScaleIds() удалять все AnnotationScale объекты, кроме текущего (определен в переменной CANNOSCALE)
При дальнейшем изучении проблемы выяснилось, что AcDbDatabase::purge(AcDbObjectIdArray&) из ObjectARX не возвращает id текущего именованного масштаба (задается переменной CANNOSCALE). В то же время, этот id возвращается методом OdDbDatabase::purge(OdDbObjectIdArray&) в Teigha. Баг репорт с этой проблемой был направлен в Open Design Alliance. 

Мною были внесены предложенные изменения в исходный код метода GetFreeAnnotativeScaleIds и проблема с работой команды rmScales исчезла.
Дополнительно, обозначенный в этой заметке код был задействован мною в моём же автономном консольном exe приложении, предназначенном для программной пакетной обработки чертежей. Это приложение использует платформу Teigha 4.0. Поскольку код совместим с Teigha, то портировать его на любое др. приложение, использующее эту платформу, не должно составлять особого труда.

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

В коде определены следующие команды:
  • proxy - вывести в консоль информацию о количестве объектов ProxyEntity и ProxyObject, имеющихся в текущей базе данных чертежа.
  • xProxy - расчленить все объекты ProxyEntity имеющиеся в текущей базе данных чертежа.
  • rmProxy - удалить из текущей базы данных чертежа все объекты ProxyEntity и ProxyObject.
  • rmScales - удалить из текущей базы данных чертежа все неиспользуемые аннотативные масштабы из общего списка аннотативных масштабов.
Обозначенный код тестировался в:
  • AutoCAD 2009 SP3 x64 Enu
  • AutoCAD 2015 SP1 x64 Enu
  • nanoCAD 6.0 x64 Rus (при этом необходимо установить обновление hostdbmgd.zip)
  • BricsCAD 14.2.17 x64 Enu
  • собственное приложение, работающее на основе платформы Teigha 4.0.

Откомпилированная версия для AutoCAD 2009-2016 - здесь (см. файл readme.txt), исходники выложены в открытый доступ на BitBucket.