Работа с выделенными объектами (размер)

Рассмотрим работу с выделением на примере размера в чертеже. В данном примере рассматривается выделение объекта пользователем, не кодом.

IDisplayDimension swDispDim;
ISelectionMgr swSelMgr = swModel.ISelectionManager;
IDimension DP;
IDimensionTolerance swDimensionTolerance;
string Prefix, Suffix, CalloutBelow, TextAll;
double DPValue, maxValueTolerance, minValueToleranse;
int DimPrec;
 
            if (swSelMgr.GetSelectedObjectCount2(0) == 1) //определяем, что выделен только один объект
            {
                int selType = swSelMgr.GetSelectedObjectType3(1,-1); //узнаем тип выделенного объекта
                if (selType == (int)swSelectType_e.swSelDIMENSIONS) //если размер, то работаем дальше
                {
                    label1.Text = string.Empty; //очищаем текст всех лейблов
                    label2.Text = string.Empty;
                    label3.Text = string.Empty;
                    label5.Text = string.Empty;
                    label6.Text = string.Empty;
                    swDispDim = (IDisplayDimension)swSelMgr.GetSelectedObject6(1,-1); //получаем выделенный объект
                    Prefix = swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextPrefix); //префикс
                    label1.Text = Prefix;
                    Suffix = swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextSuffix); //суффикс
                    label2.Text = Suffix;
                    CalloutBelow = swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextCalloutBelow); //вторая строка
                    label3.Text = CalloutBelow;
                    DP = swDispDim.IGetDimension();
                    DPValue = DP.GetValue2(""); //значение размера
                    label5.Text = DPValue.ToString(); //стандартное преобразование в строку
                    DimPrec = swDispDim.GetPrimaryPrecision2(); //точность размера
                    swDimensionTolerance = DP.Tolerance; //получаем от размера его объект допуска
                    maxValueTolerance = swDimensionTolerance.GetMaxValue(); //максимальное значение допуска
                    label13.Text = (maxValueTolerance * 1000).ToString();
                    minValueToleranse = swDimensionTolerance.GetMinValue();//минимальное значение допуска
                    label14.Text = (minValueToleranse * 1000).ToString();
                    label6.Text = DimPrec.ToString();
                }
                else
                {
                    MessageBox.Show("Выберите размер");
                    swDispDim = null;
                }
            }
IDisplayDimension swDispDim;
ISelectionMgr swSelMgr = swModel.ISelectionManager;
IDimension DP;
IDimensionTolerance swDimensionTolerance;
string Prefix, Suffix, CalloutBelow, TextAll;
double DPValue, maxValueTolerance, minValueToleranse;
int DimPrec;
 
            if (swSelMgr.GetSelectedObjectCount2(0) == 1) //определяем, что выделен только один объект
            {
                int selType = swSelMgr.GetSelectedObjectType3(1,-1); //узнаем тип выделенного объекта
                if (selType == (int)swSelectType_e.swSelDIMENSIONS) //если размер, то работаем дальше
                {
                    label1.Text = string.Empty; //очищаем текст всех лейблов
                    label2.Text = string.Empty;
                    label3.Text = string.Empty;
                    label5.Text = string.Empty;
                    label6.Text = string.Empty;
                    swDispDim = (IDisplayDimension)swSelMgr.GetSelectedObject6(1,-1); //получаем выделенный объект
                    Prefix = swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextPrefix); //префикс
                    label1.Text = Prefix;
                    Suffix = swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextSuffix); //суффикс
                    label2.Text = Suffix;
                    CalloutBelow = swDispDim.GetText((int)swDimensionTextParts_e.swDimensionTextCalloutBelow); //вторая строка
                    label3.Text = CalloutBelow;
                    DP = swDispDim.IGetDimension();
                    DPValue = DP.GetValue2(""); //значение размера
                    label5.Text = DPValue.ToString(); //стандартное преобразование в строку
                    DimPrec = swDispDim.GetPrimaryPrecision2(); //точность размера
                    swDimensionTolerance = DP.Tolerance; //получаем от размера его объект допуска
                    maxValueTolerance = swDimensionTolerance.GetMaxValue(); //максимальное значение допуска
                    label13.Text = (maxValueTolerance * 1000).ToString();
                    minValueToleranse = swDimensionTolerance.GetMinValue();//минимальное значение допуска
                    label14.Text = (minValueToleranse * 1000).ToString();
                    label6.Text = DimPrec.ToString();
                }
                else
                {
                    MessageBox.Show("Выберите размер");
                    swDispDim = null;
                }
            }

Основная цель: получить объект IDisplayDimension. Именно с помощью него можно вытянуть все значения размера.

Создаём новый проект: форма, кнопка и 7 лейблов. В обработчике нажатия кнопки пишем такой код:

Начнем с того, что надо вычислить количество выделенных объектов с помощью метода GetSelectedObjectCount2Это нужно для того, чтобы при преобразовании не возникли ошибки, когда выделено несколько объектов. Узнаём тип выделенного объекта с помощью функции GetSelectedObjectType3, если он соответствует размеру — получаем объект IDisplayDimension и все необходимые данные: