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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Доступ к AutoCad средствами COM

Доступ к AutoCad средствами COM

Ответ
Поиск в этой теме
Непрочитано 25.03.2009, 12:16 #1
Доступ к AutoCad средствами COM
RomAnKin
 
Регистрация: 25.03.2009
Сообщений: 4

Здравствуйие.
Есть внешнее приложение, которое должно считывать штамп с чертежа.. Подскажите возможен ли доступ к аттрибутам блока только средствами COM?(например из C++\CLI или C#)
Просмотров: 3131
 
Непрочитано 25.03.2009, 13:56
#2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Смотрим acadauto.chm и изучаем. Там вся объектная модель. Ответ на вопрос "возможен ли" - да, возможен. Есть объекты BlockReference, AttributeReference.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 25.03.2009, 15:19
#3
RomAnKin


 
Регистрация: 25.03.2009
Сообщений: 4


Хотелось бы увидеть рабочий пример. Проблема с обращением к атрибутам: не удается приведение типа:
safe_cast<AcadAttributeReference^>(bl->item(i)), где bl - текущий блок.
И так: safe_cast<AcadAttribute^>(bl->item(i)) тоже не получается.
RomAnKin вне форума  
 
Автор темы   Непрочитано 26.03.2009, 17:53 Добил!
#4
RomAnKin


 
Регистрация: 25.03.2009
Сообщений: 4


Привожу свое решение на C++ так как использую именно этот язык.. Думаю для многих перевод на VB или C# не составит труда

Код:
[Выделить все]
// test_autocad.cpp : main project file.
// компилируем с опцией /clr или /clr:pure

#include "stdafx.h"

using namespace System;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
using namespace Autodesk::AutoCAD::Interop;
using namespace Autodesk::AutoCAD::Interop::Common;

AcadApplication^ GetOrCreateAcadInstance()
{
	AcadApplication^ acad = nullptr;
	try {
			acad = safe_cast<AcadApplication^>(Marshal::GetActiveObject("AutoCAD.Application"));
		} 
	catch (...)
	{
		try 
		{
			acad = gcnew AcadApplication();
		} 
		catch (...) {}
	} finally {}
	
	return acad;
}

	void ViewAttributes(AcadBlockReference^ blkref)
	{
		array<Object^>^ bProps;
			
		// атрибуты возвращаются функцией AcadBlockReference::GetAttributes() 
		// в виде массива дескрипторов Object^, зная это 
		// использую быстрое приведение типов static_cast<>
		bProps = static_cast<array<Object^>^>(blkref->GetAttributes());
			
		for (int n = 0; n < bProps->Length; n++) 
		{
			AcadAttributeReference^ curProp;
			curProp = (AcadAttributeReference^)bProps[n];
										          // имя атрибута  // его значение
			System::Console::WriteLine("TagString: {0}, TextString: {1}", curProp->TagString, curProp->TextString);
			System::Console::ReadKey(true);
		}
	}

	int main(array<System::String ^> ^args)
	{
		AcadApplication^ acad = GetOrCreateAcadInstance();

		if (!(acad == nullptr)) 
		{
			acad->Visible = true;
			AcadDocument^ adoc;

			adoc = acad->Documents->Open("C:\\temp\\Чертеж1.dwg", nullptr, nullptr);

			// если SelectionSets - не пустой набор, то очищаем его..
			while (adoc->SelectionSets->Count > 0) 
			{
				adoc->SelectionSets->Item( static_cast<Object^>(0) )->Delete();
			}
				
			AcadSelectionSet^ AllSet;
			array<short>^ ftype = gcnew array<short>(1);
			array<Object^>^ fdata = gcnew array<Object^>(1);
			ftype[0] = 0;
			fdata[0] = "INSERT";
			AllSet = adoc->SelectionSets->Add("AllSet");
			AllSet->Select(AcSelect::acSelectionSetAll, nullptr, nullptr, ftype, fdata);
				
			AcadEntity^ ent;
			AcadBlockReference^ blkref;
	
			for each (ent in AllSet) 
			{
				blkref = safe_cast<AcadBlockReference^>(ent);
				// Находим нужный блок 
				if (blkref->Name == "NameBlock") 
				{
					ViewAttributes(blkref);
				}
			}
		}
    return 0;
}
RomAnKin вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Доступ к AutoCad средствами COM



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
Создание плакатов средствами AutoCad Fag AutoCAD 24 27.06.2009 20:29
Доступ к палитре инструментов AutoCAD через объектную модель remlin Программирование 4 14.05.2008 22:14
Особенности чертежей КМ средствами AutoCad Анкона AutoCAD 9 10.01.2008 00:40
AUTOCAD 2006 Aragorn AutoCAD 14 01.04.2005 00:55