public static EntityCtor.ProxyEntity GetEntityCtor(string blockName, KEY_ENTITY key) { return(GetBlock(blockName).GetItem(key)); }
//public KEY_ENTITY GetKeyEntity(EntityCtor.ProxyEntity pEntity) //{ // KEY_ENTITY keyEntityRes; // MAP_KEY_ENTITY mapKeyEntity = s_MappingKeyEntity.Find(item => ( // (item.m_type.Equals(pEntity.m_entity.GetType()) == true) // && (item.m_command == pEntity.Command)) // ); // keyEntityRes = new KEY_ENTITY(mapKeyEntity // , ((entity is Solid3d) == true) ? (entity as Solid3d).BlockName : ((entity is Entity) == true) ? (entity as Entity).BlockName : string.Empty // , GetCount(entity)); // return keyEntityRes; //} public EntityCtor.ProxyEntity GetItem(KEY_ENTITY key) { return(m_dictEntityCtor[key]); }
/// <summary> /// Добавить примитив из коллекции /// </summary> /// <param name="blockName">Наименования блока - владельца прмитива</param> /// <param name="key">Ключ примитива из коллекции</param> protected void entityAdd(string blockName, KEY_ENTITY key) { Database dbCurrent = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database; BlockTable btCurrSpace; BlockTableRecord btrCurrent; ObjectId oidBrecord , oidEntity; // для трансформации в исходное положение и извлесения значений параметров при создании примитива //Entity entityTransformCopy; string message = string.Format(@"Добавление примитива {0}, ИД={1}, имя={2}..." , MSExcel.GetEntityCtor(blockName, key).GetType().Name , key.Id , key.Name); try { using (Transaction trCurrent = dbCurrent.TransactionManager.StartTransaction()) { // открываем таблицу блоков на запись btCurrSpace = trCurrent.GetObject(dbCurrent.BlockTableId, OpenMode.ForWrite) as BlockTable; if (blockName.Equals(string.Empty) == false) { // найти блок; при отсутствии создать if (btCurrSpace.Has(blockName) == true) { // найден блок //oidBrecord = btCurrSpace[MSExcel.s_dictEntity[key].m_BlockName]; btrCurrent = trCurrent.GetObject(btCurrSpace[blockName] , OpenMode.ForWrite) as BlockTableRecord; } else { // создаем новое определение блока, задаем ему имя btrCurrent = new BlockTableRecord(); btrCurrent.Name = blockName; // добавляем созданное определение блока в таблицу блоков, сохраняем его ID //oidBrecord = btCurrSpace.Add(btrCurrent); // добавляем созданное определение блока в транзакцию trCurrent.AddNewlyCreatedDBObject(btrCurrent, true); } } else { btrCurrent = trCurrent.GetObject(dbCurrent.CurrentSpaceId , OpenMode.ForWrite) as BlockTableRecord; } oidEntity = btrCurrent.AppendEntity(MSExcel.GetEntityCtor(blockName, key).m_entity); trCurrent.AddNewlyCreatedDBObject(MSExcel.GetEntityCtor(blockName, key).m_entity as DBObject, true); if (!(MSExcel.GetEntityCtor(blockName, key).m_ptDisplacement == Point3d.Origin)) { MSExcel.GetEntityCtor(blockName, key).m_entity.TransformBy( Matrix3d.Displacement(MSExcel.GetEntityCtor(blockName, key).m_ptDisplacement - Point3d.Origin) ); } else { ; } #region для трансформации в исходное положение и извлесения значений параметров при создании примитива //if (MSExcel.s_dictEntity[key].m_entity is Solid3d) // acdictExt = ((Acad3DSolid)MSExcel.s_dictEntity[key].m_entity.AcadObject).GetExtensionDictionary(); //else // ; //MSExcel.s_dictBlock[blockName].m_dictEntity[key].m_entity.TransformBy(Matrix3d.Rotation(1.57F, new Vector3d(0, 1, 0), Point3d.Origin)); //entityTransformCopy = MSExcel.s_dictBlock[blockName].m_dictEntity[key].m_entity.GetTransformedCopy(Matrix3d.PlaneToWorld(new Vector3d(0, 0, 1))); #endregion trCurrent.Commit(); } Logging.AcEditorWriteMessage(message); } catch (System.Exception e) { Logging.AcEditorWriteException(e, message); Logging.ExceptionCaller(MethodBase.GetCurrentMethod(), e); } }