1. //获取文字样式,有则返回文字样式ObjectId,没有则创建并返回文字样式ObjectId
    2. public static ObjectId GetTextStyleTableId(string tbname)
    3. {
    4. ObjectId txtstyle = ObjectId.Null;
    5. using (Transaction tr = db.TransactionManager.StartTransaction())
    6. {
    7. TextStyleTable tst = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForWrite);
    8. //foreach (ObjectId item in tst)
    9. //{
    10. // TextStyleTableRecord tstr = (TextStyleTableRecord)tr.GetObject(item, OpenMode.ForWrite);
    11. // if (tbname.Equals(tstr.Name)) txtstyle = item;
    12. //}
    13. if (tst.Has(tbname)) txtstyle = tst[tbname];
    14. else
    15. {
    16. TextStyleTableRecord tstr = new TextStyleTableRecord
    17. {
    18. Name = tbname,
    19. TextSize = 3,
    20. PriorSize = 3,
    21. XScale = 0.7,
    22. Font = new FontDescriptor("宋体", false, false, 134, 2)
    23. };
    24. tst.UpgradeOpen();//切换的文字样式表的状态为写以添加新的的文字样式
    25. tst.Add(tstr);//将新建的文字样式表记录的信息添加到文字样式表中
    26. //把的文字样式表记录添加到事务处理中
    27. tr.AddNewlyCreatedDBObject(tstr, true);
    28. tst.DowngradeOpen();//为了安全,将文字样式表的状态切换为读
    29. tr.Commit();
    30. txtstyle = tstr.ObjectId;
    31. }
    32. }
    33. return txtstyle;
    34. }
    35. //CAD 数据库包含以下9个符号表及符号表记录:
    36. // BlockTable(块表)-BlockTableRecord(块表记录)
    37. // LayerTable(图层表)-LayerTableRecord(图层表记录)
    38. // TextStyleTable(文字样式表)-TextStyleTableRecord(文字样式表记录)
    39. // DimStyleTable(尺寸样式表)-DimStyleTableRecord(尺寸样式表记录)
    40. // LinetypeTable(线型表)-LinetypeTableRecord(线型表记录)
    41. // UcsTable(用户坐标系表)-UcsTableRecord用户坐标系表记录)
    42. // ViewTable(视图表)-ViewTableRecord(视图表记录)
    43. // ViewportTable(视口表)-ViewportTableRecord(视口表记录)
    44. // RegAppTable(应用程序注册表)-RegAppTableRecord(应用程序注册表记录)
    45. /// <summary>
    46. /// 获取符合过滤条件的符号表记录名字集合
    47. /// </summary>
    48. /// <typeparam name="TTable">符号表</typeparam>
    49. /// <typeparam name="TRecord">符号表记录</typeparam>
    50. /// <param name="tableid"></param>
    51. /// <returns>记录的名字集合</returns>
    52. public static List<string> GetRecordNames<TTable, TRecord>(ObjectId tableid) where TTable : SymbolTable where TRecord : SymbolTableRecord
    53. {
    54. List<string> lst = new List<string>();
    55. bool filter(TRecord tstr)
    56. {
    57. return !string.IsNullOrEmpty(tstr.Name) && !Regex.IsMatch(tstr.Name, "(\\*.*|.*\\|.*)") && (!(tstr is LayerTableRecord tstrl) || !tstrl.IsLocked);
    58. }
    59. using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
    60. {
    61. TTable tst = (TTable)tr.GetObject(tableid, OpenMode.ForWrite);
    62. lst.AddRange(from ObjectId id in tst
    63. let record = (TRecord)tr.GetObject(id, OpenMode.ForWrite)
    64. where filter(record)
    65. select record.Name);
    66. }
    67. return lst;
    68. }
    69. =======================================================================================================================================================
    70. /// <summary>
    71. /// 获取符合过滤条件的符号表记录名字集合
    72. /// </summary>
    73. /// <typeparam name="TTable">符号表</typeparam>
    74. /// <typeparam name="TRecord">符号表记录</typeparam>
    75. /// <param name="tableid"></param>
    76. /// <returns>记录的名字集合</returns>
    77. public static IEnumerable<string> GetRecordNames<TTable, TRecord>(ObjectId tableid) where TTable : SymbolTable where TRecord : SymbolTableRecord
    78. {
    79. bool filter(TRecord tstr)
    80. {
    81. return !string.IsNullOrEmpty(tstr.Name) && !Regex.IsMatch(tstr.Name, "(\\*.*|.*\\|.*)") && (!(tstr is LayerTableRecord tstrl) || !tstrl.IsLocked);
    82. }
    83. using (Transaction tr = db.TransactionManager.StartTransaction())
    84. {
    85. TTable tst = (TTable)tr.GetObject(tableid, OpenMode.ForWrite);
    86. foreach (ObjectId id in tst)
    87. {
    88. TRecord record = (TRecord)tr.GetObject(id, OpenMode.ForWrite);
    89. if (filter(record))
    90. {
    91. yield return record.Name;
    92. }
    93. }
    94. }
    95. }