/// <summary> /// 删除文字样式 /// </summary> /// <param name="db">数据库对象</param> /// <param name="styleName">文字样式名</param> /// <returns>如果删除成功返回true,否则返回false</returns> public static bool DeleteTextStyle(this Database db, string styleName) { var trans = db.TransactionManager; //打开文字样式表 TextStyleTable st = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForRead); //如果不存在名为styleName的文字样式,则返回 if (!st.Has(styleName)) { return(false); } //获取名为styleName的文字样式表记录的Id ObjectId styleId = st[styleName]; //如果要删除的文字样式为当前文字样式,则返回(不能删除当前文字样式) if (styleId == db.Textstyle) { return(false); } //以写的方式打开名为styleName的文字样式表记录 TextStyleTableRecord str = (TextStyleTableRecord)trans.GetObject(styleId, OpenMode.ForWrite); //删除名为styleName的文字样式 str.Erase(true); return(true);//删除文字样式成功 }
public static void RemoveTextStyle(string styleName) { Document document = Active.Document; Database database = document.Database; try { TextStyleTable textStyleTable = GetTextStyleTable(); using (Transaction transaction = database.TransactionManager.StartTransaction()) { foreach (ObjectId textStyleTableRecordId in textStyleTable) { TextStyleTableRecord textStyleTableRecord = transaction.GetObject <TextStyleTableRecord>(textStyleTableRecordId, OpenMode.ForRead); if (textStyleTableRecord.Name == styleName) { textStyleTableRecord.UpgradeOpen(); textStyleTableRecord.Erase(); } } transaction.Commit(); }//using } catch (Exception ex) { Active.WriteMessage(ex.Message); throw; } }
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(); } }