В данной заметке показан подробный пример по созданию и настройке размерного стиля в 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;
}
}
}