IArcDimension не удаётся изменить текст

Автор redfox, 13.09.19, 07:54:14

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

redfox

Добрый день

Столкнулся с проблемой в Компас V18.1.15, не могу изменить текст IArcDimension,  Update() возвращает false
Ниже привожу пример кода для воспроизведения проблемы


            IApplication api7 = kompas.ksGetApplication7() as IApplication;

            IKompasDocument doc = api7.Documents.Add(DocumentTypeEnum.ksDocumentFragment, true);
            IKompasDocument2D doc2D = doc as IKompasDocument2D;
            ViewsAndLayersManager ViewsMng = doc2D.ViewsAndLayersManager;
            IViews views = ViewsMng.Views;
            IView view = views.ActiveView;
            IDrawingContainer DrawContainer = view as IDrawingContainer;
            ISymbols2DContainer SymContainer = view as ISymbols2DContainer;

            //Рисуем дугу
            _Arc arc = DrawContainer.Arcs.Add();
            arc.Direction = true;
            arc.X1 = -20;   arc.Y1 = 0;
            arc.X2 = 0;     arc.Y2 = 10;
            arc.X3 = 20;    arc.Y3 = 0;
            arc.Update();

            //Рисуем линейный размер
            ILineDimension LineDim = SymContainer.LineDimensions.Add();
            LineDim.X1 = -20;   LineDim.Y1 = 0;
            LineDim.X2 = 20;    LineDim.Y2 = 0;
            LineDim.Y3 = 30;

            bool res1 = LineDim.Update();
            Console.WriteLine("Создать ILineDimension: {0}", res1);

            var LineDimText = LineDim as IDimensionText;
            LineDimText.AutoNominalValue = false;

            bool res2 = LineDim.Update();
            Console.WriteLine("Обновить ILineDimension: {0}", res2);

            //Рисуем размер длины дуги
            IArcDimension ArcDim = SymContainer.ArcDimensions.Add();
            ArcDim.Direction = false;
            ArcDim.DimensionType = true;
            // Базовый объект
            ArcDim.BaseObject = arc;
            // Координаты центра
            ArcDim.Xc = arc.Xc;
            ArcDim.Yc = arc.Yc;
            // Координаты первой точки дуги
            ArcDim.X1 = arc.X1;
            ArcDim.Y1 = arc.Y1;
            // Координаты второй точки дуги
            ArcDim.X2 = arc.X2;
            ArcDim.Y2 = arc.Y2;


            bool res3 = ArcDim.Update();
            Console.WriteLine("Создать IArcDimension: {0}", res3);

            var ArcDimText = ArcDim as IDimensionText;
            ArcDimText.AutoNominalValue = false;

            bool res4 = ArcDim.Update();
            Console.WriteLine("Обновить IArcDimension: {0}", res4);


Соответственно выдаёт


Создать ILineDimension: True
Обновить ILineDimension: True
Создать IArcDimension: True
Обновить IArcDimension: False


Где может ошибка закралась?
Может текст IArcDimension необходимо по другому изменять?

Slaviation

Да, действительно, похоже на ошибку в API.  :(

DesignЯR

А если так:?
Цитировать//Рисуем размер длины дуги
            IArcDimension ArcDim = SymContainer.ArcDimensions.Add();
            ArcDim.Direction = false;
            ArcDim.DimensionType = true;
            // Базовый объект
            ArcDim.BaseObject = arc;
            // Координаты центра
            ArcDim.Xc = arc.Xc;
            ArcDim.Yc = arc.Yc;
            // Координаты первой точки дуги
            ArcDim.X1 = arc.X1;
            ArcDim.Y1 = arc.Y1;
            // Координаты второй точки дуги
            ArcDim.X2 = arc.X2;
            ArcDim.Y2 = arc.Y2;
 
            var ArcDimText = ArcDim as IDimensionText;
            ArcDimText.AutoNominalValue = false;

            bool res3 = ArcDim.Update();

Vi2

Цитата: redfox от 13.09.19, 07:54:14
Где может ошибка закралась?
Может текст IArcDimension необходимо по другому изменять?

Цитата:  из документации
Если при создании размера задать опорный объект IArcDimension::BaseObject, то значе­ния свойств IArcDimension::Xc, IArcDimension::Yc, IArcDimension::X1, IArcDimension::Y1, IArcDimension::X2, IArcDimension::Y2, IArcDimension::Direction задавать не нужно. Данные свойства будут получены с исходных объектов. В качестве базового объекта может ис­пользоваться дуга окружности.

Чтобы разорвать связь с объектом, нужно установить значение свойства, равное NULL.
Может, дело в опорном объекте? Я не думаю, что при такой связи можно допустить свободный размер.

redfox

Цитата: DesignЯR от 13.09.19, 19:04:03
А если так:?

Так Update проходит, но смысл в том что первый Update при создании объекта проходит, а последующие уже нет

redfox

Цитата: Vi2 от 13.09.19, 20:06:41
Может, дело в опорном объекте? Я не думаю, что при такой связи можно допустить свободный размер.

Пробовал убирать ArcDim.BaseObject = arc, так же реакция