Рассмотрим работу с выделением на примере размера в чертеже. В данном примере рассматривается выделение объекта пользователем, не кодом.
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 и все необходимые данные: