/// <summary> /// Конструктор - основной (с параметрами) /// </summary> /// <param name="blockName">Наименование блока-владельца</param> /// <param name="name">Наименование сущности</param> public KEY_ENTITY(/*string blockName, */ Settings.MSExcel.COMMAND_ENTITY command, int indx, string name) : base(/*blockName, */ command, indx, name) { if (!(Valid < 0)) { m_type = MSExcel.GetTypeEntity(command); m_nameCreateMethod = MSExcel.GetNameCreateMethodEntity(command); m_nameSolidType = MSExcel.GetNameSolidTypeEntity(command); } else { m_type = Type.Missing as Type; m_nameCreateMethod = m_nameSolidType = string.Empty; } }
/// <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); } }
//protected void export(string nameFileSettings, MSExcel.FORMAT format) //{ // // получаем текущий документ и его БД // Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; // Database db = doc.Database; // // начинаем транзакцию // using (Transaction tr = db.TransactionManager.StartTransaction()) { // // получаем ссылку на пространство модели (ModelSpace) // // открываем таблицу блоков документа // BlockTable acBlkTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; // // открываем пространство модели (Model Space) - оно является одной из записей в таблице блоков документа // BlockTableRecord ms = tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // // "пробегаем" по всем объектам в пространстве модели // foreach (ObjectId id in ms) { // // приводим каждый из них к типу object // object entity = (object)tr.GetObject(id, OpenMode.ForRead); // MSExcel.AddToExport(entity); // // выводим в консоль слой (entity.Layer), тип (entity.GetType().ToString()) и цвет (entity.Color) каждого объекта // doc.Editor.WriteMessage( // string.Format("\nПодготовлен для экспорта: слой:{0}; тип:{1}; цвет: [{2},{3},{4}]\n", // (entity is Entity ? entity as Entity : entity is Solid3d ? entity as Solid3d : null).Layer // , (entity is Entity ? entity as Entity : entity is Solid3d ? entity as Solid3d : null).GetType().ToString() // , (entity is Entity ? entity as Entity : entity is Solid3d ? entity as Solid3d : null).Color.Red.ToString() // , (entity is Entity ? entity as Entity : entity is Solid3d ? entity as Solid3d : null).Color.Green.ToString() // , (entity is Entity ? entity as Entity : entity is Solid3d ? entity as Solid3d : null).Color.Blue.ToString()) // ); // } // tr.Commit(); // } // MSExcel.Export(nameFileSettings, format); //} #endregion /// <summary> /// Добавить примитивы в блок из коллекции /// </summary> /// <param name="blockName">Наименования блока - владельца прмитива</param> protected void entitiesAdd(string blockName) { Database dbCurrent = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database; BlockTable btCurrSpace; BlockTableRecord btrCurrent; ObjectId oidBrecord , oidEntity; // для трансформации в исходное положение и извлесения значений параметров при создании примитива //Entity entityTransformCopy; string message = string.Format(@"Добавление примитивов для блока {0}..." , blockName); 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; } foreach (KEY_ENTITY key in MSExcel.GetBlock(blockName).Keys) { if (MSExcel.GetEntityCtor(blockName, key).m_entity.Id.IsValid == false) { 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 { ; } } else { ; // уже добавлен } } trCurrent.Commit(); } Logging.AcEditorWriteMessage(message); } catch (System.Exception e) { Logging.AcEditorWriteException(e, message); Logging.ExceptionCaller(MethodBase.GetCurrentMethod(), e); } }