private ObjectId createMleaderStyleAndSetCurrent() { var styleName = "COORDS"; var mLeaderStyle = ObjectId.Null; using (Active.Document.LockDocument()) using (Transaction tr = Active.Database.TransactionManager.StartTransaction()) { var mlStyles = tr.GetObject(Active.Database.MLeaderStyleDictionaryId, OpenMode.ForRead) as DBDictionary; if (!mlStyles.Contains(styleName)) { var newStyle = new MLeaderStyle { Annotative = AnnotativeStates.True, LeaderLineType = LeaderType.StraightLeader, LandingGap = 2, EnableDogleg = true, DoglegLength = 2, ArrowSize = 2, BreakSize = 2, ContentType = ContentType.MTextContent }; mLeaderStyle = newStyle.PostMLeaderStyleToDb(Active.Database, styleName); tr.AddNewlyCreatedDBObject(newStyle, true); } else { mLeaderStyle = mlStyles.GetAt(styleName); } Active.Database.MLeaderstyle = mLeaderStyle; tr.Commit(); } return(mLeaderStyle); }
public void Union(Dictionary <string, ObjectId[]> dicDeleteTextStyles, TextStyleTableRecord resultStyleName) { using (Transaction tr = targetDB.TransactionManager.StartTransaction()) { foreach (var style in dicDeleteTextStyles) { AttributeDefinition[] attdefs = style.Value.Where(n => tr.GetObject(n, OpenMode.ForRead) is AttributeDefinition).Select(n => (AttributeDefinition)tr.GetObject(n, OpenMode.ForWrite)).ToArray(); foreach (AttributeDefinition attdef in attdefs) { attdef.TextStyleId = resultStyleName.ObjectId; // attdef.UpdateMTextAttributeDefinition(); } foreach (var _x in style.Value) { DBObject item = tr.GetObject(_x, OpenMode.ForWrite); //Если это размерный стиль if (item is DimStyleTableRecord) { DimStyleTableRecord dstr = (DimStyleTableRecord)item; dstr.Dimtxsty = resultStyleName.ObjectId; } //Если это стиль мультивыноски else if (item is MLeaderStyle) { MLeaderStyle mls = (MLeaderStyle)item; mls.TextStyleId = resultStyleName.ObjectId; } //Если это табличный стиль else if (item is TableStyle) { TableStyle ts = (TableStyle)item; //В цикле проверяем текстовый стиль каждой ячейки таблицы foreach (string cellStyle in ts.CellStyles) { if (ts.TextStyle(cellStyle).Database == null) { continue; } if (dicDeleteTextStyles.Keys.Contains(GetStyle(ts.TextStyle(cellStyle)) .Name.Trim().ToUpper())) { ts.SetTextStyle(resultStyleName.ObjectId, cellStyle); } } } //Если это однострочный текст, не являющийся при этом атрибутом //определения блока else if ((item is DBText) && !(item is AttributeDefinition)) { DBText txt = (DBText)item; txt.TextStyleId = resultStyleName.ObjectId; txt.Oblique = 0; //if (txt is AttributeReference) // ((AttributeReference)txt).UpdateMTextAttribute(); } //Если это многострочный текст else if (item is MText) { MText txt = (MText)item; txt.TextStyleId = resultStyleName.ObjectId; } //Если это таблица else if (item is Table) { Table table = (Table)item; string[] styleNames = dicDeleteTextStyles.Keys.ToArray(); //Сначала проверяю, какие стили текста назначены столбцам for (int i = 0; i < table.NumColumns; i++) { if (styleNames.Contains(table.GetCellStyle(-1, i).ToUpper().Trim())) { try { table.SetCellStyle(-1, i, resultStyleName.Name); } catch { } } } //Теперь проверяю, какие стили текста назначены строкам for (int i = 0; i < table.NumRows; i++) { if (styleNames.Contains(table.GetCellStyle(i, -1).ToUpper().Trim())) { try { table.SetCellStyle(i, -1, resultStyleName.Name); } catch { } } } //Анализируем каждую ячейку таблицы //Цикл по столбцам for (int i = 0; i < table.NumColumns; i++) { //Цикл по строкам for (int k = 0; k < table.NumRows; k++) { //Анализируем конкретную ячейку таблицы if (styleNames.Contains(table.GetCellStyle(k, i).ToUpper().Trim())) { try { table.SetCellStyle(k, i, resultStyleName.Name); } catch { } } } } } } if (CanBeRemoved(style.Key)) { TextStyleTableRecord tsr = (TextStyleTableRecord)tr.GetObject(GetStyleByName(style.Key), OpenMode.ForWrite, true); tsr.Erase(); } } tr.Commit(); } }
internal int PrepareBeforeWrite() { // Remove must-not elements m_Linetypes.Remove("ByBlock"); m_Linetypes.Remove("ByLayer"); m_Linetypes.Remove("Continuous"); // Add must-have elements if (!m_Layers.ContainsKey("0")) { m_Layers["0"] = new LayerData(); } if (!m_TextStyles.ContainsKey("Standard")) { m_TextStyles["Standard"] = new TextStyleData(); } if (!m_DimStyles.ContainsKey("ISO-25")) { m_DimStyles["ISO-25"] = new DimStyleData(0); } if (!m_MLeaderStyles.ContainsKey("Standard")) { m_MLeaderStyles["Standard"] = new MLeaderStyle(); } if (!m_MLeaderStyles.ContainsKey("Annotative")) { m_MLeaderStyles["Annotative"] = new MLeaderStyle(); m_MLeaderStyles["Annotative"].m_IsAnnotative = true; } if (!m_TableStyles.ContainsKey("Standard")) { m_TableStyles["Standard"] = new TableStyle(); } // Generate blocks for dimensions string blockName = null; GenerateBlockNameFn GenerateBlockName = (int blockNo) => { blockName = String.Format("*D{0}", blockNo); }; foreach (var ent in m_Objects) { AcadDim pDim = ent as AcadDim; if (pDim != null && String.IsNullOrEmpty(pDim.m_BlockName)) { GenerateBlockName(++m_TmpBlockNo); pDim.GenerateBlock(this, blockName); } } foreach (var pair in m_RealBlockDefs) { foreach (var ent in pair.Value.m_Objects) { AcadDim pDim = ent as AcadDim; if (pDim != null && String.IsNullOrEmpty(pDim.m_BlockName)) { GenerateBlockName(++m_TmpBlockNo); pDim.GenerateBlock(this, blockName); } } } foreach (var ld in m_Layouts) { foreach (var ent in ld.Value.m_Objects) { AcadDim pDim = ent as AcadDim; if (pDim != null && String.IsNullOrEmpty(pDim.m_BlockName)) { GenerateBlockName(++m_TmpBlockNo); pDim.GenerateBlock(this, blockName); } } } // Assign handle to entities. Start from 10000, it should be enough to hold other handles. int handle = 10000; // It is harmless to assign handle to entities even if it is not exported to DXF. foreach (var pb in DxfWriter.s_PredefinedBlocks) { foreach (var ent in pb) { ent.AssignHandle(ref handle); } } foreach (var ent in m_Objects) { ent.AssignHandle(ref handle); } foreach (var pair in m_RealBlockDefs) { foreach (var ent in pair.Value.m_Objects) { ent.AssignHandle(ref handle); } } // Add must-have layout if (m_Layouts.Count == 0) { var pLayout = new LayoutData(); m_Layouts["Layout1"] = pLayout; } int i = -1; foreach (var ld in m_Layouts) { // Assign block name to layouts if (i == -1) { ld.Value.m_BlockName = "*Paper_Space"; } else { ld.Value.m_BlockName = String.Format("*Paper_Space{0}", i); } ld.Value.m_LayoutOrder = i + 2; ++i; foreach (var ent in ld.Value.m_Objects) { ent.AssignHandle(ref handle); } } return(handle); }
private void Fill(ObjectId id, Dictionary <string, List <ObjectId> > dict) { using (Transaction t = targetDB.TransactionManager.StartTransaction()) { DBObject item = t.GetObject(id, OpenMode.ForRead); //Если это размерный стиль if (item is DimStyleTableRecord) { DimStyleTableRecord x = (DimStyleTableRecord)item; //try //{ string styleName = ((TextStyleTableRecord)t.GetObject(x.Dimtxsty, OpenMode.ForRead)).Name.Trim().ToUpper(); if (dict.Keys.Contains(styleName)) { dict[styleName].Add(item.ObjectId); } //} //catch { } return; } //Если это стиль мультивыноски else if (item is MLeaderStyle) { MLeaderStyle x = (MLeaderStyle)item; string styleName = ((TextStyleTableRecord)t.GetObject(x.TextStyleId, OpenMode.ForRead)).Name.Trim().ToUpper(); if (dict.Keys.Contains(styleName)) { dict[styleName].Add(item.ObjectId); } return; } //Если это стиль таблиц else if (item is TableStyle) { TableStyle ts = (TableStyle)item; //По умолчанию каждый табличный стиль определяет в своём составе три стиля ячеек: //_TITLE, _HEADER и _DATA. В дополнение к этим стилям, пользователь может определить //свои. Каждый из стилей ячеек определяет в своём составе (помимо всего прочего) то, //какой ТЕКСТОВЫЙ СТИЛЬ должен использоваться в ячейках, использующих этот СТИЛЬ //ЯЧЕЕК. //Проверяем каждый имеющийся стиль ячеек на предмет того, какой текстовый стиль //обозначен в их настройках к использованию для ячеек таблицы foreach (string cellStyle in ts.CellStyles) { string styleName = GetStyle(ts.TextStyle(cellStyle)).Name.Trim().ToUpper(); if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId)) { dict[styleName].Add(item.ObjectId); return; } } } //Если это однострочный текст else if (item is DBText) { DBText txt = (DBText)item; string styleName = ((TextStyleTableRecord)t.GetObject(txt.TextStyleId, OpenMode.ForRead)).Name.Trim().ToUpper(); if (dict.Keys.Contains(styleName)) { dict[styleName].Add(item.ObjectId); } return; } //Если это многострочный текст else if (item is MText) { MText txt = (MText)item; string styleName = ((TextStyleTableRecord)t.GetObject(txt.TextStyleId, OpenMode.ForRead)).Name.Trim().ToUpper(); if (dict.Keys.Contains(styleName)) { dict[styleName].Add(item.ObjectId); } return; } else if (item is Table) { Table table = (Table)item; //Сначала проверяю, какие стили текста назначены столбцам. ПОЧЕМУ-ТО ВСЕГДА //ПОЛУЧАЮ "", НЕ СМОТРЯ НА ТО, ЧТО СТОЛБЦУ МОЖЕТ БЫТЬ НАЗНАЧЕН КОНКТЕТНЫЙ СТИЛЬ ТЕКСТА for (int i = 0; i < table.NumColumns; i++) { string styleName = table.GetCellStyle(-1, i).ToUpper().Trim().ToUpper(); if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId)) { dict[styleName].Add(item.ObjectId); return; } } //Теперь проверяю, какие стили текста назначены строкам. ПОЧЕМУ-ТО ВСЕГДА //ПОЛУЧАЮ "", НЕ СМОТРЯ НА ТО, ЧТО СТРОКЕ МОЖЕТ БЫТЬ НАЗНАЧЕН КОНКТЕТНЫЙ СТИЛЬ ТЕКСТА for (int i = 0; i < table.NumRows; i++) { string styleName = table.GetCellStyle(i, -1).ToUpper().Trim().ToUpper(); if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId)) { dict[styleName].Add(item.ObjectId); return; } } //Анализируем каждую ячейку таблицы //Цикл по столбцам for (int i = 0; i < table.NumColumns; i++) { //Цикл по строкам for (int k = 0; k < table.NumRows; k++) { //Анализируем конкретную ячейку таблицы string styleName = table.GetCellStyle(k, i).ToUpper().Trim().ToUpper(); if (dict.Keys.Contains(styleName) && !dict[styleName].Contains(item.ObjectId)) { dict[styleName].Add(item.ObjectId); return; } } } } else { throw new NotImplementedException(); } } }