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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > При добавлении XData, блок перестает редактироваться командой _REFEDIT

При добавлении XData, блок перестает редактироваться командой _REFEDIT

Ответ
Поиск в этой теме
Непрочитано 04.11.2011, 16:22 #1
При добавлении XData, блок перестает редактироваться командой _REFEDIT
oktilon
 
Регистрация: 17.02.2010
Сообщений: 3

Программирую на .NET 1.1 для AutoCAD 2005 в среде SharpDeveloper 2.2.1
Мне необходимо к создаваемому блоку добавить дополнительные параметры XData.
Пока я их не добавлял, создаваемый блок редактировался коммандой _REFEDIT.

Вот моя функция прорисовки блока
Код:
[Выделить все]
public void Draw(Point3d pt)
{
	Database db = AcAp.Application.DocumentManager.MdiActiveDocument.Database;
	Handle hSpace = new Handle();
	hSpace.Value = 0;
	
	Transaction tr = db.TransactionManager.StartTransaction();
	using(tr)
	{
		// Создаю XData
		string XDAppName = "AREATABLE";
		TypedValue[] tv = new TypedValue[2];
		tv[0] = new TypedValue(1001, XDAppName);
		tv[1] = new TypedValue(1070, this.iMode);
		ResultBuffer rb = new ResultBuffer(tv);
		// Регистрирую, если нужно новое RegApp имя
		RegAppTable XdTbl = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForWrite);
		if (!XdTbl.Has(XDAppName))
		{
			RegAppTableRecord xdRec = new RegAppTableRecord();
			xdRec.Name = XDAppName;
			XdTbl.Add(xdRec);
			tr.TransactionManager.AddNewlyCreatedDBObject(xdRec, true);
		}
		// Ищу в таблице блоков текущее пространство
		BlockTable bt = (BlockTable)db.BlockTableId.Open(OpenMode.ForRead);
		string sName = GetNextName(ref bt);
		string sSpace = db.TileMode ? "*MODEL_SPACE" : "*PAPER_SPACE";
		// Эта функция (MakeBlock) создает сам блок в памяти
		BlockTableRecord bbtr = MakeBlock(sName);
		if(bt.Has(sSpace)) hSpace = bt[sSpace].Handle;
		bt.UpgradeOpen();
		// Добавляю описание блока в БД
		ObjectId bid = bt.Add(bbtr);
		tr.TransactionManager.AddNewlyCreatedDBObject(bbtr, true);
		bt.DowngradeOpen();
		bt.Close();
		// Создаю вставку блока	
		BlockReference bref = new BlockReference(pt, bid);
		
		if(hSpace.Value != 0)
		{
			// Добавляю вставку блока в БД
			ObjectId oSpc = db.GetObjectId(false,hSpace,0);
			BlockTableRecord btr = (BlockTableRecord)tr.GetObject(oSpc, OpenMode.ForWrite);
			// без этой строчки, все ок, а если добавляю XData
			// получаю при попытке редактирования _REFEDIT ошибку
			// 
			// Command: _refedit
			// Select reference:
			// Errors found in references to other objects:
			// ** Application reference missing: AREATABLE, to AcDbBlockReference.
			// 
			bref.XData = rb;
			ObjectId oNew = btr.AppendEntity(bref);
			tr.TransactionManager.AddNewlyCreatedDBObject(bref, true);
		}
		tr.Commit();
	}
}
Кто может подсказать, как создать этот недостающий Application reference AREATABLE, to AcDbBlockReference ?
Просмотров: 2850
 
Непрочитано 05.11.2011, 09:43
#2
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


В 2008 + NET2 - работает. Только добавил блокировку документа и убрал hSpace.Value = 0;
Vildar вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > При добавлении XData, блок перестает редактироваться командой _REFEDIT

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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