В данной заметке показан подробный пример по созданию и настройке размерного стиля в AutoCAD. Рассмотрена программная настройка каждой опции каждой вкладки диалогового окна редактирования размерных стилей.
Результат работы обозначенного ниже кода (команда CreateDimStyle) будет выглядеть следующим образом:
В коде каждая изменяемая нами опция настроек помечена комментарием, содержащим наименование этой опции в англоязычной версии AutoCAD.
Результат работы обозначенного ниже кода (команда CreateDimStyle) будет выглядеть следующим образом:
В коде каждая изменяемая нами опция настроек помечена комментарием, содержащим наименование этой опции в англоязычной версии AutoCAD.
/* DimStyleSample.cs * © Андрей Бушман, 2014 * Пример создания и настройки размерного стиля. */ using System; using cad = Autodesk.AutoCAD.ApplicationServices .Application; using Ap = Autodesk.AutoCAD.ApplicationServices; using Db = Autodesk.AutoCAD.DatabaseServices; using Ed = Autodesk.AutoCAD.EditorInput; using Rt = Autodesk.AutoCAD.Runtime; using Clr = Autodesk.AutoCAD.Colors; //************************************ [assembly: Rt.CommandClass(typeof(Bushman.CAD .Samples.Styles.DimStyleSample))] namespace Bushman.CAD.Samples.Styles { public class DimStyleSample { [Rt.CommandMethod("CreateDimStyle", Rt.CommandFlags.Modal)] public void CreateDimStyle() { Ap.Document doc = cad.DocumentManager .MdiActiveDocument; if(doc == null) return; Ed.Editor ed = doc.Editor; Db.Database db = doc.Database; using(Db.Transaction tr = db.TransactionManager.StartTransaction()) { // Создадим новый текстовый стиль для // использования его в наших размерных // стилях Db.TextStyleTable tst = (Db.TextStyleTable)tr.GetObject( db.TextStyleTableId, Db.OpenMode.ForWrite); Db.TextStyleTableRecord textStyle = new Db.TextStyleTableRecord(); textStyle.Name = "Тип А прямой"; textStyle.FileName = "Arial.ttf"; textStyle.XScale = 0.75; tst.Add(textStyle); tr.AddNewlyCreatedDBObject(textStyle, true); // Создаём новый размерный стиль... Db.DimStyleTable dst = (Db.DimStyleTable)tr.GetObject( db.DimStyleTableId, Db.OpenMode.ForWrite); Db.DimStyleTableRecord dimStyle = new Db.DimStyleTableRecord(); dimStyle.Name = "Основной без допусков"; // Откройте диалоговое окно "Modify // Dimension Style" (команда _DIMSTYLE) и // нажмите кнопку "Modify.." - мы будем // программно изменять эти настройки. // Наименования вкладок, групп настроек и // конкретных опций будут приводиться для // английской версии AutoCAD. // *** Вкладка LINES *** // Группа настроек "Dimension lines": Db.ObjectId lineTypeId = // db.ContinuousLinetype; // или по блоку: db.ByBlockLinetype; // цвет "ByLayer" Clr.Color colorByLayer = Clr.Color .FromColorIndex(Clr.ColorMethod .ByLayer, 256); // Размерным линиям назначаем цвет // "ByLayer" dimStyle.Dimclrd = colorByLayer; // Color // Linetype dimStyle.Dimltype = lineTypeId; // Lineweight dimStyle.Dimlwd = Db.LineWeight .ByLineWeightDefault; // Extend Beyond Ticks dimStyle.Dimdle = 2; dimStyle.Dimdli = 7; // Baseline Spacing // Suppress dim line 1 dimStyle.Dimsd1 = false; // Suppress dim line 2 dimStyle.Dimsd2 = false; // Группа настроек "Extension Lines": dimStyle.Dimclre = colorByLayer; // Color // Linetype Ext 1 dimStyle.Dimltex1 = lineTypeId; // Linetype Ext 2 dimStyle.Dimltex2 = lineTypeId; dimStyle.Dimlwe = Db.LineWeight .ByLineWeightDefault; // Lineweight // Suppress Ext line 1 dimStyle.Dimse1 = false; // Suppress Ext line 2 dimStyle.Dimse2 = false; // Extend Beyond Dim Lines dimStyle.Dimexe = 2.0; // Offset From Origin dimStyle.Dimexo = 0; // Fixed Length Extension Lines dimStyle.DimfxlenOn = false; dimStyle.Dimfxlen = 1; // Length // *** Вкладка SYMBOL AND ARROWS *** // Группа "Arrowheads": // Внимание: Аннотативные блоки не могут // быть использованными в качестве // пользовательского варианта для опций // First, Second и Leader. В обозначенных // опциях пользовательский вариант // представлен в виде элемента "User // Arrow..." в самом низу раскрывающегося // списка. Db.BlockTable bt = (Db.BlockTable)tr .GetObject(db.BlockTableId, Db.OpenMode.ForRead); // Получаем идентификаторы интересующих // нас определений блоков Db.ObjectId id1 = GetArrowObjectId_dim( "DIMBLK1", "_DOT"); Db.ObjectId id2 = GetArrowObjectId_dim( "DIMBLK2", "_CLOSED"); Db.ObjectId id3 = GetArrowObjectId_dim( "DIMBLK2", "_Oblique"); // Убедитесь, что вы установили в true // значение свойства "Dimsah", если вам // нужно назначить опциям First и Second // разные значения! dimStyle.Dimsah = true; // В качестве значения опций группы // Arrowheads вы можете назначить // Db.ObjectId.Null - в этом случае будет // использоваться маркер по умолчанию. // Опция "First" на вкладке "Symbols and // Arrows" (системная переменная Dimblk1) dimStyle.Dimblk1 = id3; // Опция "Second" на вкладке "Symbols and // Arrows" (системная переменная Dimblk2) dimStyle.Dimblk2 = id3; // При желании, вы можете изменить оба // параметра (First и Second) // одновременно, задав значение свойству // Dimblk. Но в этом случае вы не должны // в коде назначать значения для свойств // 'Dimblk1' и 'Dimblk2': // dimStyle.Dimblk = id3; // Опция Leader. Если в качестве значения // указать ObjectId.Null, то будет // использоваться вариант 'Closed filled' dimStyle.Dimldrblk = Db.ObjectId.Null; dimStyle.Dimasz = 3; // Arrow Size // Группа "Center marks": // Значения, допустимые для свойства // 'Dimcen': // 0 - None; // 1 - Mark; // -1 - Line Int32 centerMarks = -1; Double centerMarksSize = 2.0; // Размер центрального маркера или // центральной линии dimStyle.Dimcen = centerMarks * centerMarksSize; // Значение опции "Dimension Break" // хранится в расширенных данных (XData) // размерного стиля. Давайте доберёмся до // него... // Для начала, получаем таблицу имён // зарегистрированных приложений Db.RegAppTable regTable = (Db.RegAppTable)tr.GetObject( db.RegAppTableId, Db.OpenMode.ForRead); String xName = "cad_DSTYLE_DIMBREAK"; // Если нужный нам элемент не // зарегистрирован - выполняем его // регистрацию if(!regTable.Has(xName)) { regTable.UpgradeOpen(); Db.RegAppTableRecord app = new Db.RegAppTableRecord(); app.Name = xName; regTable.Add(app); tr.AddNewlyCreatedDBObject(app, true); } Db.ResultBuffer rb = new Db.ResultBuffer( new Db.TypedValue((Int32)Db.DxfCode .ExtendedDataRegAppName, xName), new Db.TypedValue((Int32)Db.DxfCode .ExtendedDataInteger16, 391), new Db.TypedValue((Int32)Db.DxfCode .ExtendedDataReal, 0.0 /* Наше значение свойства "Dimension * Break" */)); dimStyle.XData = rb; // Группа (опция) "Arc Length Symbol": // Значения, допустимые для свойства // 'Dimarcsym' (три переключателя): // 0 - Precending dimension text // 1 - Above dimension text // 2 - None // Опция "Arc Length Symbol" dimStyle.Dimarcsym = 1; // Группа "Radius Jog Dimensions": // Jog Angle dimStyle.Dimjogang = 45 * Math.PI / 180; // Группа "Linear Jog Dimensions": // Значение "Linear Jog Size" хранится в // расширенных данных (XData) размерного // стиля. xName = "cad_DSTYLE_DIMJAG"; if(!regTable.Has(xName)) { regTable.UpgradeOpen(); Db.RegAppTableRecord app = new Db.RegAppTableRecord(); app.Name = xName; regTable.Add(app); tr.AddNewlyCreatedDBObject(app, true); } rb = new Db.ResultBuffer( new Db.TypedValue((Int32)Db.DxfCode .ExtendedDataRegAppName, xName), new Db.TypedValue((Int32)Db.DxfCode .ExtendedDataInteger16, 388), new Db.TypedValue((Int32)Db.DxfCode .ExtendedDataReal, 1.4995 /* Значение для свойства "Linear Jog * Size" */)); dimStyle.XData = rb; // *** Вкладка TEXT *** // Группа "Text Appearance": // Text Style dimStyle.Dimtxsty = textStyle.ObjectId; dimStyle.Dimclrt = Clr.Color .FromColorIndex(Clr.ColorMethod.ByAci, 210); // Text Color // Свойство 'Dimtfill' влияет на // поведение опции "Fill Color" и // принимает одно из следующих значений: // 0 - Фон отсутствует // 1 - Использовать текущий фон чертежа // 2 - Фон, указанный в свойстве // Dimtfillclr. dimStyle.Dimtfill = 0; dimStyle.Dimtfillclr = Clr.Color .FromColorIndex(Clr.ColorMethod.ByAci, 256); // Fill Color (см. Dimtfill выше) dimStyle.Dimtxt = 3.5; // Text Height // Fraction Height Scale dimStyle.Dimfrac = 2; // Включить\Отключить опцию "Draw Frame // Around Text" Boolean drawFrameAroundText = false; // Группа "Text Placement": // Опция Vertical (свойство 'Dimtad') // может принимать только следующие // значения: // 0 - Centered: центрировать размерный // текст между выносными линиями. // 1 - Above: разместить размерный текст // над размерной линией, за // исключением случаев, когда // размерная линия не горизонтальна и // текст внутри выносных линий рамещён // горизонтально (DIMTIH = 1). // Расстояние от размерной линии до // самой нижней строки текста // определяется значением переменной // DIMGAP (свойство Dimgap). // 2 - Outside: разместить размерный // текст в стороне от размерной линии, // подальше от определённых точек. // 3 - JIS: разместить размерный текст в // соответствии с Японским // Индустриальным Стандартом. dimStyle.Dimtad = 1; // Vertical // Опция Horizontal (свойство 'Dimjust') // принимает только следующие значения: // 0 - Centered // 1 - At Ext Line 1 // 2 - At Ext Line 2 // 3 - Over Ext Line 1 // 4 - Over Ext Line 2 dimStyle.Dimjust = 0; // Horizontal // View Direction #if NEWER_THAN_2009 dimStyle.Dimtxtdirection = true; #endif // Offset from Dim Line dimStyle.Dimgap = 1 * (drawFrameAroundText ? -1 : 1); // Группа "Text Alignment": // Для того, чтобы выбрать один из трёх // доступных вариантов, следует назначить // значение сразу двум свойствам: Dimtih // и Dimtoh. // // Horizontal: // Dimtih = true; // Dimtoh = true; // // Aligned with Dimension Line: // Dimtih = false; // Dimtoh = false; // // ISO Standard: // Dimtih = false; // Dimtoh = true; // // Text Alignment dimStyle.Dimtih = false; dimStyle.Dimtoh = false; // *** Вкладка FIT *** // Группа "Fit Options": // Свойство 'Dimatfit' может принимать // только следующие значения: // 0 - Выбрать опцию Both text and arrows // 1 - Выбрать опцию Arrows // 2 - Выбрать опцию Text // 3 - Выбрать опцию "Either text or // arrows (best fit)" // Для того, чтобы назначить свойству // 'Dimatfit' нужное значение 0-3, нужно // сначала назначить false свойству // Dimtix. Если Dimtix назначить true, то // будет выбрана опция "Always Keep Text // Between Ext Lines". // Опция "Always Keep Text Between Ext // Lines" dimStyle.Dimtix = false; // Не забываем предварительно установить // 'Dimtix' в false dimStyle.Dimatfit = 3; // Suppress Arrows If They Don't Fit // Inside Extension Lines dimStyle.Dimsoxd = false; // Группа "Text placement" group: // Свойство Dimtmove может принимать // только следующие значения: // 0 - Выбрана опция "Beside the // dimension line" // 1 - Выбрана опция "Over dimension // line, with leader" // 2 - Выбрана опция "Over dimension // line, without leader" dimStyle.Dimtmove = 1; // Группа"Scale for Dimension Features": dimStyle.Annotative = Db.AnnotativeStates.True; // Annotative dimStyle.Dimscale = 1.0; // Dimscale // Для того, чтобы установить опцию // "Scale Dimensions To Layout" нужно // свойству Dimscale присвоить 0: // dimStyle.Dimscale = 0; // Группа "Fine Tuning": // Place Text Manually dimStyle.Dimupt = false; // Draw Dim Line Between Ext Lines dimStyle.Dimtofl = false; // *** Вкладка Primary Units *** // Группа "Leader dimensions" // Опция "Unit format" (свойство // 'Dimlunit') может принимать только // следующие значения: // 1 - Scientific // 2 - Decimal // 3 - Engineering // 4 - Architectural // 5 - Fractional // 6 - Windows Desktop // Unit format dimStyle.Dimlunit = 2; // Масштабный коэффициент высоты // текста, записанного в виде дроби. Эта // высота расчитывается путём умножения // указанного в свойстве Dimtfac коэффи- // циента на высоту текста, указанную в // свойстве Dimtxt. dimStyle.Dimtfac = 0.5; // Количество знаков после запятой: dimStyle.Dimdec = 0; // Precision // Опция "Fraction format" (свойство // 'Dimfrac') принимает одно из следующих // значений: // 0 - Horizontal // 1 - Diagonal // 2 - Not stacked (например 1/2) dimStyle.Dimfrac = 0; // Fraction Format // Если опции "Unit format" в качестве // значения назначен 'Decimal', то в тек- // сте размеров, вместо точки, в качестве // разделителя десятичной части будет // использоваться иной разделитель, кото- // рый указывается при помощи свойства // 'Dimdsep'. Если свойству 'Dimdsep' // присвоить NULL в качестве значения, то // в качестве десятичного разделителя // будет использоваться точка. // Опция "Decimal separator" (свойство // 'Dimdsep') может принимать только // следующие значения: // '.' - Точка // ',' - Запятая // ' ' - Пробел // Decimal Separator dimStyle.Dimdsep = ','; dimStyle.Dimrnd = 0.0; // Round Off // Prefix (префикс) и Suffix (суффикс) // Префикс и суффикс указываются в // составе строкового значения, // присваиваемого свойству Dimpost. // Пример: "L = <> m" // Где: // "L = " - префикс // <> - вычисленное числовое значение // " m" - суффикс dimStyle.Dimpost = "<>"; // Группа "Measurement Scale": dimStyle.Dimlfac = 1; // Scale Factor // Выделить или снять выделение опции // "Apply to Layout Dimensions Only" на // вкладке "Primary Units": Boolean applyToLayoutDimensionsOnly = false; // Если свойству 'Dimfrac' назначить // отрицательное значение, то опция // "Apply to Layout Dimensions Only" // будет включена: dimStyle.Dimlfac = applyToLayoutDimensionsOnly ? -1 * Math.Abs(dimStyle.Dimlfac) : Math.Abs(dimStyle.Dimlfac); // Подгруппа "Zero Suppression" группы // "Leader dimensions": // Свойству 'Dimzin' property' следует // назначать одно из следующих значений: // 0 - Подавляет нулевые значения для // футов и дюймов // 1 - Записывает нулевые значения для // футов и дюймов // 2 - Записывает нулевые значения для // футов и подавляет нулевые значения // для дюймов // 3 - Записывает нулевые значения для // дюймов и подавляет нулевые значения // для футов // 4 - Подавляет ведущие нули в десятич- // ных размерах (например, 0,5000 // записывается как ,5000) // 8 - Подавляет замыкающие нули в деся- // тичных размерах (например, 12,5000 // записывается как 12,5) // 12 - Подавляет и ведущие, и замыкающие // нули (например, 0,5000 записывается // как ,5) dimStyle.Dimzin = 8; // Если включено подавление ведущих ну- // лей, то становятся доступными для // редактирования опции "Sub-units // factor" и "Sub-units suffix". #if NEWER_THAN_2009 // TODO: Автору кода не удалось программ- // но добраться до этих свойств, т.к. // не существует переменных и свойств // размерного стиля с именами "DIMMZF" и // "DIMMZS" #endif // Группа "Angular Dimensions": // Опции "Units format" (свойство // 'Dimaunit) следует назначать одно из // следующих значений: // 0 - Decimal degrees // 1 - Degrees/minutes/seconds // 2 - Gradians // 3 - Radians dimStyle.Dimaunit = 1; // Units Format // Опция Precision (свойство 'Dimadec') // должно содержать одно из следующих // значений: // -1 - В угловых размерах отображается // количество знаков после запятой, // указанных с помощью переменной // DIMDEC. // 0-8 - Указывает количество знаков // после запятой, отображаемых в // угловых размерах (независимо от // переменной DIMDEC) dimStyle.Dimadec = 4; // Precision // Подгруппа "Zero Suppression" в составе // группы "Angular Dimensions" управляет // подавлением нулей для всех угловых // размеров. // Свойство 'Dimazin' должно содержать // одно из следующих значений: // 0 - Отображает все ведущие и замыкаю- // щие нули. // 1 - Подавляет ведущие нули в десятич- // ных размерах (например, 0,5000 // записывается как ,5000) // 2 - Подавляет замыкающие нули в // десятичных размерах (например, // 12,5000 записывается как 12,5) // 3 - Подавление ведущих и замыкающих // нулей (например, 0,5000 записывает- // ся как ,5) dimStyle.Dimazin = 2; // *** Вкладка ALTERNATIVE UNITS *** // Display Alternate Units dimStyle.Dimalt = false; // Группа "Alternate Units": // Опция "Unit Format" (свойство // 'Dimaltu') должна содержать одно из // следующих значений: // 1 - Scientific // 2 - Decimal // 3 - Engineering // 4 - Architectural Stacked // 5 - Fractional Stacked // 6 - Architectural // 7 - Fractional // 8 - Windows Desktop dimStyle.Dimaltu = 2; // Unit Format dimStyle.Dimaltd = 0; // Precision // Multiplier for Alternate Units dimStyle.Dimaltf = 25.4; // Round Distances To dimStyle.Dimaltrnd = 0; // Prefix (префикс) и Suffix (суффикс) // Префикс и суффикс указываются в // составе строкового значения, // присваиваемого свойству Dimapost. // Пример: "L = <> m" // Где: // "L = " - префикс // <> - вычисленное числовое значение // " m" - суффикс dimStyle.Dimapost = "<>"; // Группа "Zero Suppression": // Свойству 'Dimaltz' property' следует // назначать одно из следующих значений: // 0 - Подавляет нулевые значения для // футов и дюймов // 1 - Записывает нулевые значения для // футов и дюймов // 2 - Записывает нулевые значения для // футов и подавляет нулевые значения // для дюймов // 3 - Записывает нулевые значения для // дюймов и подавляет нулевые значения // для футов // 4 - Подавляет ведущие нули в десятич- // ных размерах (например, 0,5000 // записывается как ,5000) // 8 - Подавляет замыкающие нули в деся- // тичных размерах (например, 12,5000 // записывается как 12,5) // 12 - Подавляет и ведущие, и замыкающие // нули (например, 0,5000 записывается // как ,5) dimStyle.Dimaltz = 0; // Zero Suppression // Если включено подавление ведущих ну- // лей, то становятся доступными для // редактирования опции "Sub-units // factor" и "Sub-units suffix". #if NEWER_THAN_2009 // TODO: Автору кода не удалось программ- // но добраться до этих свойств, т.к. // не существует переменных и свойств // размерного стиля с именами "DIMALTMZF" // и "DIMALTMZS". #endif // Группа "Placement": const String bpv = @"\X"; // Переключение опций данной группы // выполняетя при помощи добавления или // удаления суффикса "\X" в значении // свойства Dimpost: // Если нужно выбрать опцию "Below // primary value": // dimStyle.Dimpost = dimStyle.Dimpost // .EndsWith(bpv) ? dimStyle.Dimpost : // dimStyle.Dimpost + bpv; // Если нужно выбрать опцию "After // primary value": dimStyle.Dimpost = !dimStyle.Dimpost .EndsWith(bpv) ? dimStyle.Dimpost : dimStyle.Dimpost.Substring(0, dimStyle.Dimpost.Length - bpv.Length); // *** Вкладка Tolerances *** // Группа "Tolerance Format": // Dimtol = true, Dimlim = true - // 'Limits', but don't set this // combinations(!!!), or you will get // "Style Overrides" for Dimension // Style name. For getting the // 'Limits' value, look below. // // Symmetrical: // Dimtol = true // Dimlim = false // // Limits (рекомендуемый вариант): // Dimtol = false // Dimlim = true // // None: // Dimtol = false // Dimlim = false // // Basic: // dimStyle.Dimgap = -1 * Math.Abs( // dimStyle.Dimgap); // // Deviation: // Dimtol = true // Dimtm = 1.0e-009 dimStyle.Dimtol = false; dimStyle.Dimlim = false; dimStyle.Dimtdec = 0; // Precision dimStyle.Dimtp = 1; // Upper Value dimStyle.Dimtm = 0; // Lower Value // Scaling for Height dimStyle.Dimtfac = 0.5; // Опция "Vertical Position" (свойство // 'Dimtolj') должно принимать одно из // следующих значений: // 0 - Bottom // 1 - Middle // 2 - Top // Vertical Position dimStyle.Dimtolj = 1; // Группа "Tolerance Alignment": // TODO: Автору кода не удалось изменить // состояние переключателей "Align // Decimal Separators" и "Align // Operational Symbols" // Подгруппа "Zero Suppression" в группе // "Tolerance Format": // 'Dimtzin' property's allowed values: // 0 - Подавляет нулевые значения для // футов и дюймов // 1 - Записывает нулевые значения для // футов и дюймов // 2 - Записывает нулевые значения для // футов и подавляет нулевые значения // для дюймов // 3 - Записывает нулевые значения для // дюймов и подавляет нулевые значения // для футов // 4 - Подавляет ведущие нули в десятич- // ных размерах (например, 0,5000 // записывается как ,5000) // 8 - Подавляет замыкающие нули в деся- // тичных размерах (например, 12,5000 // записывается как 12,5) // 12 - Подавляет и ведущие, и замыкающие // нули (например, 0,5000 записывается // как ,5) dimStyle.Dimtzin = 8; // Zero Suppression // Группа "Alternate Unit Tolerance": dimStyle.Dimalttd = 0; // Precision // Подгруппа "Zero Suppression" в составе // группы "Alternate Unit Tolerance": // 'Dimalttz' property's allowed values: // 0 - Подавляет нулевые значения для // футов и дюймов // 1 - Записывает нулевые значения для // футов и дюймов // 2 - Записывает нулевые значения для // футов и подавляет нулевые значения // для дюймов // 3 - Записывает нулевые значения для // дюймов и подавляет нулевые значения // для футов // // Для подавления ведущих или замыкающих // нулей к выбранному значению может быть // добавлено: // // 4 - Подавление ведущих нулей // 8 - Подавление замыкающих нулей. // Zero Suppression dimStyle.Dimalttz = 0; // *** // Сохраняем выполненные изменения dst.Add(dimStyle); tr.AddNewlyCreatedDBObject(dimStyle, true); // Устраняем потенциально возможную // проблему появления в перечне размерных // стилей дополнительного элемента, // именованного как "Style Overrides": db.Dimstyle = dimStyle.ObjectId; db.SetDimstyleData(dimStyle); // Теперь, на базе созданного нами основ- // ного размерного стиля, можно создавать // его деталлизированные варианты для: // - радиальных размеров // - угловых размеров // - линейных размеров // - и т.д. // Для дополнительной информации можно // почитать раздел документации: // ObjectARX Reference Guide > Additional // Information > Dimension Styles > // Dimension Style Families. // Дочерние размерные стили создаются на // основе базового. Имена формируются по // правилу: ИмяБазовогоСтиля + Суффикс. // В качестве суффиксов используется один // из следующих вариантов: String[] names = new String[] { "$0", // Линейный "$2", // Угловой "$3", // Диаметральный "$4", // Радиальный "$6", // Ординатный "$7" // Выноски }; foreach(String item in names) { Db.DimStyleTableRecord childStyle; String childName = dimStyle.Name + item; if(dst.Has(childName)) { childStyle = (Db.DimStyleTableRecord)tr .GetObject(dst[childName], Db.OpenMode.ForWrite); } else { childStyle = (Db.DimStyleTableRecord)dimStyle .Clone(); childStyle.Name = childName; dst.Add(childStyle); tr.AddNewlyCreatedDBObject( childStyle, true); } } // Далее можно выполнять настройку // унаследованных размерных стилей, // выполняя тем самым необходимую // деталлизацию для конкретных типов // размеров. // Редактирование выполняется точно так // же, как мы это проделали выше с базо- // вым стилем, поэтому в нашем примере // не будем повторяться и на этом // завершим работу. tr.Commit(); } } static Db.ObjectId GetArrowObjectId_dim( string arrow, string newArrName) { Db.ObjectId arrObjId = Db.ObjectId.Null; Ap.Document doc = cad.DocumentManager .MdiActiveDocument; Db.Database db = doc.Database; string oldArrName = cad.GetSystemVariable( arrow) as string; // (эта операция может создать в чертеже // новое определение блока) cad.SetSystemVariable(arrow, newArrName); // Восстанавливаем предыдущее значение if(oldArrName.Length != 0) cad.SetSystemVariable(arrow, oldArrName); // Получаем идентификатор блока Db.Transaction tr = db.TransactionManager .StartTransaction(); using(tr) { Db.BlockTable bt = (Db.BlockTable)tr .GetObject(db.BlockTableId, Db.OpenMode .ForRead); arrObjId = bt[newArrName]; tr.Commit(); } return arrObjId; } } }
Комментариев нет:
Отправить комментарий