ObjectARX 2014

Автор Тема: ObjectARX 2014  (Прочитано 28498 раз)

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

Оффлайн AgensАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
ObjectARX 2014
« : 22-05-2014, 11:18:56 »
Подскажте знатоки про ObjectARX 2014.
Скопировал из 2012 версии
Цитировать
    Public ReadOnly Property ThisDrawing() As AcadDocument
        Get
            Return Autodesk.AutoCAD.ApplicationServices.Application.
                _DocumentManager.MdiActiveDocument.AcadDocument
        End Get
    End Property
Вылетает ошибка, что-то поменялось в 2014?
---
Вот "нарыл":
Цитировать
I was struggling wit this too. You have to add references from your autocad program folder (X:\Program files\Autodesk\Autocad 2014\). Find Autodesk.AutoCAD.Interop.dll and Autodesk.AutoCAD.Interop.Common.dll . After that, magically appeared for me, but see if you are missing from ObjectARX2014 or 2013 folder and if so then add the following: AcCoreMgd.dll ; AcDx.dll. Then you can use the following:
Цитировать
Code:
Public ReadOnly Property ThisDrawing As AcadDocument
        Get
            Return Application.DocumentManager.MdiActiveDocument.GetAcadDocument()
        End Get
    End Property
но хотелось бы услышать тут и на русском :)
« Последнее редактирование: 22-05-2014, 11:29:40 от Agens »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: ObjectARX 2014
« Ответ #1 : 22-05-2014, 11:23:23 »
вылетает куда? если в форточку, то это к врачам.

Даю подсказку: ошибка, как правило, о чём-то матерится текстом...

Не следует забывать, что API меняется от версии к версии. Например, часть методов выносится в отдельные статические классы: некоторые методы, ранее присутствовавшие в Document вынесены в статический класс DocumentExtension:
Код - C# [Выбрать]
  1. namespace Autodesk.AutoCAD.ApplicationServices {
  2.   public static class DocumentExtension {
  3.     public static System.Drawing.Bitmap CapturePreviewImage(this Document doc, uint width, uint height);
  4.     public static void CloseAndDiscard(this Document doc);
  5.     public static void CloseAndSave(this Document doc, string fileName);
  6.     public static Document FromAcadDocument(object acadDocument);
  7.     public static object GetAcadDocument(this Document doc);
  8.     public static StatusBar GetStatusBar(this Document doc);
  9.   }
  10. }
Из этого следует, что если у тебе нэймспейсы объявлены как-то так:
Код - C# [Выбрать]
  1. using Ap = Autodesk.AutoCAD.ApplicationServices;
  2.  
то для того, чтобы ты смог прописать нечто подобное:
Код - C# [Выбрать]
  1. doc.CloseAndSave(file_name); // doc is a Document instance
тебе нужно добавить следующий юзинг:
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
В противном случае, тебе придётся использовать такой вариант вызова:
Код - C# [Выбрать]
  1. Ap.DocumentExtension.CloseAndSave(doc, file_name); // doc is a Document instance

Оффлайн AgensАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: ObjectARX 2014
« Ответ #2 : 22-05-2014, 11:31:05 »
Андрей, я понимаю, что для Вас это все просто. Я не программист и еще не до конца все понимаю.
Может лучше кинете готовый метод и какие библиотеки подключать? Спасибо.
У меня получилось, но с возможностью ошибки сл. код:
Цитировать
    Public ReadOnly Property ThisDrawing As AcadDocument
        Get
            Return Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
        End Get
    End Property
---
Я не пишу на С#, я пользуюсь VB.NET, C# для меня темный лес :)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: ObjectARX 2014
« Ответ #3 : 22-05-2014, 11:32:03 »
я выше откорректировал свой ответ, приведя пример.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: ObjectARX 2014
« Ответ #4 : 22-05-2014, 11:38:32 »
Я не пишу на С#, я пользуюсь VB.NET, C# для меня темный лес
Обозначенный мною выше код достаточно прост. Я думаю, что и без знания C# его можно понять. Если что-то не ясно, то поясню. Касательно VB.NET: когда-то я писал на VBA, но после C# для меня VBA\VB[.NET] напоминает клинопись гоблинов, которую даже читать больно. Выбирая, на что переходить с VBA - на VB.NET или на C#, я выбрал C# и не разу ни пожалел об этом. Наоборот, ужасаюсь, как меня в прошлом угораздило вляпаться в VBA... Синтаксис C#, на самом деле достаточно просто и легок в освоении.

Оффлайн AgensАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: ObjectARX 2014
« Ответ #5 : 22-05-2014, 11:43:07 »
Может быть. Но это не моя осноная работа. Пришло время считать спецификацию, а макрос, написанные для 2012, не работает на 2014 автокаде.
Нужно быстро что-то поменять. Хотелось бы просто вставить кусок кода с методом получения ThisDrawing и забыть :)
---
Неужели все для Автодеска все пишут только русские, потому что ответы на англоязыных форумах только от них :)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectARX 2014
« Ответ #6 : 22-05-2014, 11:45:17 »
Вылетает ошибка, что-то поменялось в 2014?
Да. И довольно много.
P.S.: ObjectARX - это чистый C++ без использования .NET (C#/VB.NET). Ты же пользуешься не ObjectARX, а AutoCAD .NET API. В будущем постарайся их не путать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AgensАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: ObjectARX 2014
« Ответ #7 : 22-05-2014, 11:47:23 »
Поменялось много, а найти ничего нельзя... Надо откатываться на 2010 автокад :)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: ObjectARX 2014
« Ответ #8 : 22-05-2014, 11:51:49 »
ObjectARX - это чистый C++ без использования .NET (C#/VB.NET).
Несмотря на то, что Автодеск везде усиленно пишет об обратном:
Цитировать
The ObjectARX® programming environment provides object-oriented C++, C#, and VB .NET application programming interfaces for developers to use, customize, and extend AutoCAD® software and AutoCAD-based products, such as AutoCAD® Architecture, AutoCAD® Mechanical, and AutoCAD® Civil 3D® software. A version of ObjectARX for AutoCAD® for Mac® software is also available, though not all APIs are available in the Mac version.

Источник: http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=773204

Дополнительно в п.4 здесь: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=773128

The following publications are included with the ObjectARX SDK:
- Managed Class Reference
- ObjectARX Developer’s Guide
- ObjectARX Reference
- Application Interoperability Guidelines
- ObjectARX 64-bit Migration Guide
Links to other valuable developer reference materials are listed at www.autodesk.com/developautocad.
Т.о. на сегодняшний день Autodesk вносит существенную путанницу, заявляя, что под словом "ObjectARX" подразумевает не только C++, но и .NET языки (возможно, что сейчас к этому набору они относят и JavaScript, хотя в этом я пока не уверен). Хотя на практике всё с точностью до наоборот.

Оффлайн AgensАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: ObjectARX 2014
« Ответ #9 : 22-05-2014, 11:55:59 »
Ребята, я все понимаю. Опуститесь пожалуйста на землю :)
Как для 2014 автокада и VB.NET получить свойство ThisDrawing, какие библиотеки подлючить для 64битной платформы?
Какой Framework ставить в проекте?
Спасибо.
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectARX 2014
« Ответ #10 : 22-05-2014, 12:00:11 »
Какой Framework ставить в проекте?
Желательно 4.0
какие библиотеки подлючить для 64битной платформы?
AcMgd.dll
AcDbMgd.dll
AcCoreMgd.dll
Autodesk.AutoCAD.Interop.dll
Autodesk.AutoCAD.Interop.Common.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AgensАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: ObjectARX 2014
« Ответ #11 : 22-05-2014, 12:01:44 »
Версия Студии имеет значение? У меня 2012.
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectARX 2014
« Ответ #12 : 22-05-2014, 12:03:36 »
Версия Студии имеет значение? У меня 2013.
Для кода значения не имеет. Но для сведения сам AutoCAD 2014 написан на VS2010 и VS2012.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: ObjectARX 2014
« Ответ #13 : 22-05-2014, 12:06:14 »
Я, блин, выше кому код показывал? Внимательней посмотри на 7-ю строчку кода. Т.е. тебе нужно писать так:
Код - C# [Выбрать]
  1. using Ap = Autodesk.AutoCAD.ApplicationServices;
  2. ...
  3. AcadDocument acadDoc = Ap.DocumentExtension.GetAcadDocument(doc) as AcadDocument;;// doc is a Document instance
Не ленись и будь внимательней...

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectARX 2014
« Ответ #14 : 22-05-2014, 12:07:29 »
Андрей спокойнее. Agens тебе объяснил, что для него C# - китайская грамота.
Код на VB.NET который ему нужен для ThisDrawing им же приведен в первом сообщении.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение