Я пытаюсь написать метод, предлагающий пользователю выбрать все объекты, которые они хотят объединить, в блок, а затем объединить их в блок и вернуть ссылку на блок , Сейчас это выглядит так.Использование C# для присоединения объектов AutoCAD к блоку программно
/// <summary>
/// Returns all entities in an AutoCAD drawing in a list
/// </summary>
public static List<Entity> GetEntitiesInDrawing()
{
List<Entity> entitiesToReturn = new List<Entity>(); //Blocks that will be returned
Transaction tr = _database.TransactionManager.StartTransaction();
DocumentLock docLock = _activeDocument.LockDocument();
using (tr)
using (docLock)
{
BlockTableRecord blockTableRecord = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(_database), OpenMode.ForRead);
foreach (ObjectId id in blockTableRecord)
{
try
{
Entity ent = (Entity)tr.GetObject(id, OpenMode.ForWrite);
entitiesToReturn.Add(ent);
}
catch (InvalidCastException)
{
continue;
}
}
}
return entitiesToReturn;
}
/// <summary>
/// Prompts the user for a number of entities and then joins them into a block
/// </summary>
public static BlockReference JoinEntities()
{
BlockReference blkToReturn = null;
List<Entity> entitiesToJoin = PromptUserForEntities();
foreach (Entity ent in entitiesToJoin)
{
// ToDo: Join entities into blkToReturn
}
return blkToReturn;
}
Моя проблема заключается в том, что я понятия не имею, как или, если можно взять список лиц и присоединиться к ним в blockreference.
Я последовал за эту процедуру, и теперь его бросание ошибки eAlreadyInDb каждый раз, когда я пытаюсь добавить объект в новый БТР. Вы можете увидеть мой полный код здесь http://forums.autodesk.com/t5/net/joining-entities-into-a-block-programmatically/mp/5651349/highlight/false#M44682 на посту # 4 –
, который ожидается: вы не можете добавить и сущность в 2 записи таблицы блоков ... см. мое предложение выше, № 3, попробуйте с AssumeOwnershipOf также запись в блочной таблице не может содержать объекты до тех пор, пока она уже не находится в базе данных ... поэтому сначала добавьте BTR, затем переместите объекты на него. –