ObjectARX с нуля
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > ObjectARX с нуля

ObjectARX с нуля

Ответ
Поиск в этой теме
Непрочитано 31.07.2024, 09:07 #1
ObjectARX с нуля
Сет
 
Регистрация: 19.11.2014
Сообщений: 2,606

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Дык ета... Сергей же ссылку дал - вот и вперед, с песнями ))
Эта ссылка не на азы.

---
Тема отделена от Научите лиспу на примере... kpblc

Последний раз редактировалось Кулик Алексей aka kpblc, 01.08.2024 в 10:02.
Просмотров: 2269
 
Непрочитано 31.07.2024, 10:03
1 | #2
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от Сет Посмотреть сообщение
Эта ссылка не на азы.
Азы в справке по ObjectARX, в описании класса AcEdJig. Расписана теория и дан пример кода ("Using AcEdJig") - я по ней делал. На плюсах, правда. Но на шарпах отличия только в синтаксисе должны быть, а идея останется: отнаследоваться и несколько методов переопределить по правилам из справки.
Нубий-IV вне форума  
 
Автор темы   Непрочитано 31.07.2024, 10:14
#3
Сет


 
Регистрация: 19.11.2014
Сообщений: 2,606


Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Азы в справке по ObjectARX
Ну ясно. Я хоть на С++ и пишу, но пока не созрел для ObjectArx
Сет вне форума  
 
Автор темы   Непрочитано 31.07.2024, 15:25
#4
Сет


 
Регистрация: 19.11.2014
Сообщений: 2,606


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
азы - это основы языка
Я под азами в данном случае имел ввиду этап организации взаимодействия программы со средой Автокад. То есть реализация, для начала, банальной вещи. Например такой, как вывод в командную строку автокада сообщения "Hello, World!". Этот этап описан в справке по ObjectArx. Я думал Jig - это нечто другое, но нет, это часть ObjectArx, значит азы там смотреть и нужно. Там, правда, все довольно лаконично. Русскоязычных ресурсов с более подробным разжевыванием азов не нашел в свое время.
Сет вне форума  
 
Непрочитано 01.08.2024, 07:38
#5
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от Сет Посмотреть сообщение
но пока не созрел для ObjectArx
ObjectArx - это очень древние плюсы. Фактически, это "Cи с классами". Одной книжки типа "От чайника до профи за 24часа" хватает, чтобы справиться.
Цитата:
Сообщение от Сет Посмотреть сообщение
Там, правда, все довольно лаконично
А собственно, больше и не нужно. Расширение путем наследования с переопределением - древняя и широко известная идея. В WinApi так окна создаются, на чистом Си. В вижуальном бейсике так обработка событий работает. Так пишутся плагины - к винампу, тотал коммандеру и т.п. Потому и подробностей в справке нет, только список методов и указание, к каком что сделать надо. Очевидно, считается, что этого хватает, чтобы сказать: "а, все понятно".
Цитата:
Сообщение от Сет Посмотреть сообщение
Русскоязычных ресурсов с более подробным разжевыванием азов не нашел в свое время.
Есть книга "Программирование для AutoCAD 2013–2015. Полещук Н.Н." - на русском. Есть старое руководство "ObjectARX Developers Guide. Autocad 2000" - на английском. В обеих есть примеры про бжик. Оба примера - практически копипаста теории из справки, разве что Полещук не поленился свой код написать. И обе фактически мало что добавляют к справке, разве что их читать последовательно легче.

По моему опыту, пользовательские языки - VBA и LISP - сильно быстрее в плане разработки, чем плюсы, в которых из-за многословности и ручного контроля ошибок/памяти программирование в несколько раз медленнее выходит. У плюсов один плюс - теоретически можно дотянуться куда угодно. Но практически лично я мало куда дотянулся, именно из-за высокой трудоемкости.

Еще, чисто технически в ObjectARX можно создавать LISP-совместимые функции, которые будут работать из-под LISPа. В них можно оборачивать что-то слишком хитрое. У меня так измерители углов и расстояний сделаны, чтобы их можно было прозрачно вызывать во время других команд, в которые забыли добавить запрос начальной точки или вершины угла. Но можно ли так обернуть создание объекта - не скажу.
Нубий-IV вне форума  
 
Автор темы   Непрочитано 01.08.2024, 09:46
#6
Сет


 
Регистрация: 19.11.2014
Сообщений: 2,606


Нубий-IV, вы используете VS для ObjectArx? Если да, то версию VS используете соответствующую версии ObjectArx? Для примера вот цитата из мануала по ObjectArx 2022:
Цитата:
Software Development Environment
Developing applications with ObjectARX for AutoCAD 2022 requires the following software:

Windows
Microsoft® Visual Studio® 2019 version 16.7
.NET Framework Version 4.8
А вот это для ObjectArx 2024:
Цитата:
Software Development Environment
Developing applications with ObjectARX for AutoCAD 2024 requires the following software:

Windows
Microsoft® Visual Studio® 2022 version 17.2.6
.NET Framework Version 4.8
Здесь нужно точное соответствие версии VS или не ниже?

А здесь описано как вообще создать проект для автокад (те самые азы):
Цитата:
Use the following settings for your project
Set the application type to DLL.
Specify the ObjectARX library and include file locations.
The easiest way to do this is to add the ObjectARX include and library directories to your MSVC++ environment settings (in the Microsoft Visual Studio menu under Tools Options Projects and Solutions VC++ Directories). You can also specify the locations in the Project Properties, but you'll need to include full paths to the files for every project you create.

For all configurations (debug and release), set the runtime library for linking to Multithreaded DLL (in your project’s Property Pages under Configuration Properties folder C/C++ folder Code Generation Runtime Library).
For all configurations (debug and release), set the Detect 64-bit Portability Issues option to No (in your project’s Property Pages under Configuration Properties C/C++ folder General Detect 64-bit Portability Issues). This setting suppresses compiler warning 4311 for pointer assignments that are not 64-bit compatible. Some ObjectARX header files contain such assignments.
If you prefer, you can control this warning instead by using #pragma warning statements. See the Microsoft documentation for more information about #pragma warning statements.

Set the output file name (in your project’s Property Pages under Configuration Properties Linker General Output File) to a name with an .arx extension. If you include a DEF file with a LIBRARY statement in your project, this name should match the LIBRARY value.
Note: LIBRARY statements are optional in DEF files.
Add the ObjectARX libraries necessary for your program (in your project’s Property Pages under Configuration Properties Linker Input Additional Dependencies).


Причем здесь описание привязано к среде VS. В других средах можно также создавать приложения для автокад или понадобятся танцы с бубном?
Сет вне форума  
 
Непрочитано 01.08.2024, 10:16
1 | #7
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Студия для ObjectARX обязательна, потому что там не исходники, а скомпилированные библиотеки. Каким компилятором их собрали авторы - таким же придется и линковаться с ними. Всякие GCC (или что там еще альтернативного) не смогут слинковаться, даже если скомпилируют. Она весит, конечно, как слон, но тут ничего не поделать.

Саму студию можно ставить последнюю - 2022, но установить дополнительно несколько версий компилятора, тогда из нее можно будет собираться под разные версии Акада/Нанокада. И ATL/MFC не забыть.
В моей установке 143 - родная для vs2022 версия, а 140-142 - от предыдущих студий (19-17-15), они зацепят и более ранние автокады, до 2017 вроде. На более ранние - предыдущие студии искать надо.
Миниатюры
Нажмите на изображение для увеличения
Название: VS.png
Просмотров: 810
Размер:	25.3 Кб
ID:	264040  

Последний раз редактировалось Нубий-IV, 01.08.2024 в 11:35.
Нубий-IV вне форума  
 
Непрочитано 01.08.2024, 10:45
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Offtop:
Цитата:
Сообщение от Нубий-IV Посмотреть сообщение
Студия для ObjectARX обязательна, потому что там не исходники, а скомпилированные библиотеки. Каким компилятором их собрали авторы - таким же придется и линковаться с ними. Всякие GCC (или что там еще альтернативного) не смогут слинковаться, даже если скомпилируют. Она весит, конечно, как слон, но тут ничего не поделать.

Саму студию можно ставить последнюю - 2022, но установить дополнительно несколько версий компилятора, тогда из нее можно будет собираться под разные версии Акада/Нанокада. И ATL/MFC не забыть.
либо перейти на C#) По сути .NetAPI акада - это обертки над вызовами ObjectARX, и тот же JIG в нем присутствует. Синтаксисы С++ и C# тоже похожи в базовых вещах. Плюс в .Net есть WPF - если в WinForms нужно для каких то нестандартных вещей придумывать велосипеды через вызов WinApi и т.п., в WPF зачастую достаточно стиль для контрола создать в XAML разметке (похожей на обычный XML). Если думаете об юзабелити программы - это тоже не маловажно)
Сергей812 вне форума  
 
Непрочитано 01.08.2024, 11:18
1 | #9
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Касательно установки студии. С сайта качается "сетевой установщик" - маленький файл весом три метра. Все нужное он забирает из сети, в зависимости от установленных галочек. Но можно его заставить скачать все на диск, и потом ставиться с него. Рядом с exe надо положить пару командых файлов - один на закачку, один на установку, и запустить по очереди. Скачанное зальется в папку VS2022 рядом с exe.

Код:
[Выделить все]
vs_community_2022.exe ^
--layout VS2022 ^
--add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--lang ru-RU

Код:
[Выделить все]
VS2022\vs_community_2022.exe ^
--noWeb ^
--nocache ^
--add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC


Код:
[Выделить все]
vs_community_2022.exe ^
--layout VS2022 ^
--add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 ^
--add Microsoft.VisualStudio.Component.VC.14.29.16.11.ATL ^
--add Microsoft.VisualStudio.Component.VC.14.29.16.11.MFC ^
--add Microsoft.VisualStudio.Component.VC.v141.x86.x64 ^
--add Microsoft.VisualStudio.Component.VC.v141.ATL ^
--add Microsoft.VisualStudio.Component.VC.v141.MFC ^
--add Microsoft.VisualStudio.Component.VC.140 ^
--add Microsoft.VisualStudio.Component.Windows10SDK.20348 ^
--lang ru-RU

Код:
[Выделить все]
VS2022\vs_community_2022.exe ^
--noWeb ^
--nocache ^
--add Microsoft.VisualStudio.Workload.NativeDesktop;includeRecommended ^
--add Microsoft.VisualStudio.Component.VC.ATLMFC ^
--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 ^
--add Microsoft.VisualStudio.Component.VC.14.29.16.11.ATL ^
--add Microsoft.VisualStudio.Component.VC.14.29.16.11.MFC ^
--add Microsoft.VisualStudio.Component.VC.v141.x86.x64 ^
--add Microsoft.VisualStudio.Component.VC.v141.ATL ^
--add Microsoft.VisualStudio.Component.VC.v141.MFC ^
--add Microsoft.VisualStudio.Component.VC.140 ^
--add Microsoft.VisualStudio.Component.Windows10SDK.20348

Минимальная содержит только последнюю версию компилятора, и подойдет под акады 2024-2025.
Более полная конфигурация закачает инсталляторов под 7 гигов, установленная займет еще 23 гига, и соберет все акады до 2017.

VC.140 - VS 2015 - ac2017,ac2018
VC.141 - VS 2017 - ac2019,ac2020
VC.142 - VS 2019 - ac2021,ac2022,ac2023
VC.143 - VS 2022 - ac2024,ac2025

Код:
[Выделить все]
Object	Visual	Autocad			Link
ARX	Studio

R14	5	R14			http://download.autodesk.com/Pub/developer/sdk/obarxsdk.exe
2000	6	2000, 2000i, 2002	http://download.autodesk.com/ProdSupp/autocad2000/ObjectARXSDK.exe
2000i	6	2000i, 2002		http://download.autodesk.com/pub/objectarx/acad2000i/objectarx.exe
2002	6	2002			http://download.autodesk.com/pub/objectarx/objectarx_2002/K030.arx.plus.all.zip
2004	2002	2004, 2005, 2006	http://download.autodesk.com/WebPub/autocad/oarx/arx_sdk.exe
2005	2002	2005, 2006		http://download.autodesk.com/WebPub/Developer/autocad/Arx_All2005.exe
2006	2002	2006			http://download.autodesk.com/WebPub/autocad/oarx2006/Arx_All.exe
2007	2005	2007, 2008, 2009	http://download.autodesk.com/esd/objectarx/2007/Arx_All.exe
2008	2005	2008, 2009		http://download.autodesk.com/esd/objectarx/2008/ObjectARX_2008_32Bit.exe
					http://download.autodesk.com/esd/objectarx/2008/ObjectARX_2008_64Bit.exe
2009	2005sp1	2009			http://download.autodesk.com/esd/objectarx/2009/ObjectARX_2009_Win_64_and_32Bit.exe
2010	2008sp1	2010, 2011, 2012	http://download.autodesk.com/akdlm/esd/dlm/objectarx/ObjectARX_2010_Win_64_and_32Bit.exe
2011	2008sp1	2011, 2012		http://download.autodesk.com/esd/objectarx/2011/ObjectARX_2011_Win_64_and_32Bit.exe
2012	2008sp1	2012			http://download.autodesk.com/esd/objectarx/2012/ObjectARX_2012_Win_64_and_32Bit.exe
2013	2010sp1	2013, 2014		http://download.autodesk.com/esd/objectarx/2013/ObjectARX_2013_Win_64_and_32Bit.exe
2014	2010sp1	2014			http://download.autodesk.com/esd/objectarx/2014/Autodesk_ObjectARX_2014_Win_64_and_32Bit.sfx.exe
2015	2012	2015, 2016		http://download.autodesk.com/esd/objectarx/2015/Autodesk_ObjectARX_2015_Win_64_and_32_Bit.exe
2016	2012	2016			http://download.autodesk.com/esd/objectarx/2016/Autodesk_ObjectARX_2016_Win_64_and_32_Bit.exe
2017	2015	2017, 2018		http://download.autodesk.com/esd/objectarx/2017/Autodesk_ObjectARX_2017_Win_64_and_32_Bit.sfx.exe
2018	2015u3	2018			https://download.autodesk.com/esd/objectarx/2018/Autodesk_ObjectARX_2018_Win_64_and_32_Bit.sfx.exe
2019	2017u2	2019			https://download.autodesk.com/esd/objectarx/2019/Autodesk_ObjectARX_2019_Win_64_and_32_Bit.sfx.exe
2020	2017u2	2019, 2020		https://download.autodesk.com/esd/objectarx/2020/objectarx_for_autocad_2020_win_64_bit.sfx.exe
2021	2019	2021			https://download.autodesk.com/esd/objectarx/2021/objectarx_for_autocad_2021_win_64bit_dlm.sfx.exe
2022	2019	2021, 2022		https://download.autodesk.com/esd/objectarx/2022/objectarx_for_autocad_2022_win_64bit_dlm.sfx.exe
2023	2019	2021, 2022, 2023	https://damassets.autodesk.net/content/dam/autodesk/files/objectarx/ObjectARX_for_AutoCAD_2023_Win_64bit_dlm.sfx.exe
2024	2022	2024			https://damassets.autodesk.net/content/dam/autodesk/files/esd/objectarx/2024/objectarx-for-autocad-2024-win-64bit-dlm.sfx.exe
2025	2022	2025			https://damassets.autodesk.net/content/dam/autodesk/files/esd/objectarx/2025/objectarx-for-autocad-2025-win-64bit-dlm.sfx.exe

Последний раз редактировалось Нубий-IV, 01.08.2024 в 11:33.
Нубий-IV вне форума  
 
Непрочитано 01.08.2024, 13:08
1 | #10
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,071


Цитата:
Сообщение от Сет Посмотреть сообщение
А здесь описано как вообще создать проект для автокад
Азы стандартны для плюсов: выбрать версию компилятора под нужный акад, указать тип сборки (DLL) и расширение (ARX), добавить пути поиска INCLUDE/LIB, да некоторые настройки (Многопоточная DLL) выставить в то же положение, что у разработчиков. В старых версиях дополнительно надо было Unicode активировать, да вручную все подключаемые LIB-файлы перечислить; на сегодня Unocode и так по умолчанию стоит, а LIB автоматом через прагмы в заголовках цепляются.

Вот простейшая лисп-команда на плюсах:

Код:
[Выделить все]
 
#include <windows.h>
#include <arxHeaders.h>

// Код команды
const int CMD_SUM = 0;

// Команда "Сумма"
int Sum()
{
	double result = 0.0;

	// Получение списка аргументов, переданных из лиспа
	struct resbuf* rb = acedGetArgs();

	// Перебор списка
	while (rb) {
		// Добавление очередного слагаемого
		switch (rb->restype) {
		case RTSHORT:
			result += rb->resval.rint;
			break;
		case RTLONG:
			result += rb->resval.rlong;
			break;
		case RTREAL:
			result += rb->resval.rreal;
			break;
		default:
			acutPrintf(_ACRX_T("; ошибка: неправильный тип аргумента"));
			acedRetVoid();
			return RTERROR;
		}
		// Следующий аргумент в списке
		rb = rb->rbnext;
	}

	// Возвращение результата
	acedRetReal(result);
	return RTNORM;
}

// Класс приложения
class CSum : public AcRxArxApp {
public:
	// Регистрация Лисп-команды при загрузке чертежа
	AcRx::AppRetCode On_kLoadDwgMsg(void* pkt) override
	{
		acedDefun(_ACRX_T("Sum"), CMD_SUM);
		return AcRx::kRetOK;
	}

	// Удаление регистрации Лисп-команды при выгрузке чертежа
	AcRx::AppRetCode On_kUnloadDwgMsg(void* pkt) override
	{
		acedUndef(_ACRX_T("Sum"), CMD_SUM);
		return AcRx::kRetOK;

	}

	// Обработка запроса на вызов команды из Лиспа
	AcRx::AppRetCode On_kInvkSubrMsg(void* pkt) override
	{
		if (acedGetFunCode() == CMD_SUM)
			Sum();
		return AcRx::kRetOK;
	}

	// ХЗ зачем, но надо
	void RegisterServerComponents() override {}
};

// Экспорт точки входа в DLL
IMPLEMENT_ARX_ENTRYPOINT(CSum)
Куда тыкать в студии - показано во вложении.
Вложения
Тип файла: pdf HowTo.pdf (439.4 Кб, 85 просмотров)
Нубий-IV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > ObjectARX с нуля

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расположение нуля МСК Автокада VladiT AutoCAD 82 22.06.2020 17:07
ObjectARX. Не запускается приложение по AutoCAD 2016 Сет Программирование 4 26.03.2016 00:36
Как установить ObjectARX for AutoCAD ? kurstep Программирование 7 24.12.2015 00:54
Использование std в ObjectArx 64 возможно ли ? alex-63 Программирование 2 23.01.2014 12:27
Есть ли ограничения на LoadLibrary из ObjectArx ? alex-63 Программирование 7 05.04.2012 11:30