не правильное считывание API границ таблицы чертежа ICellBoundaries ITableCell

Автор GRANTDENT, 12.06.25, 17:44:55

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

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

GRANTDENT

Вопрос в реализации считывания границ ячейки таблицы в чертеже. Таблица выбирается пользователем. Язык программирования C#.

            IKompasDocument IKD = ((IApplication)KO5.ksGetApplication7()).ActiveDocument;
            IDrawingDocument IDD = (IDrawingDocument)((IApplication)KO5.ksGetApplication7()).ActiveDocument;// QueryInterface

            IKompasDocument2D IKD2D = (IKompasDocument2D)IKD;
            //IDrawingDocument IDD = (IDrawingDocument)IKD2D;
            //IDrawingObjects IDOs = (IDrawingObjects)IDD;
            IKompasDocument2D1 IKD2D1 = (IKompasDocument2D1)IKD2D;
            ISelectionManager ISM = IKD2D1.SelectionManager;

                ITable Tbl = (ITable)ISM.SelectedObjects;
                IDrawingTable DTbl = (IDrawingTable)Tbl;//?

                    int cellRow = 1; // строка ячейки таблицы
                    int cellCol = 6; // столец ячейки таблицы

                    ITableCell TC = Tbl.Cell[cellRow, cellCol];

                    ICellBoundaries CB = (ICellBoundaries)TC;

                    bool _ksCBAllBorders = CB.LineVisible[ksCellBoundariesEnum.ksCBAllBorders]; //Групповые границы Все границы
                    bool _ksCBBottomBorder = CB.LineVisible[ksCellBoundariesEnum.ksCBBottomBorder];                // Нижняя граница
                    bool _ksCBExternalBorders = CB.LineVisible[ksCellBoundariesEnum.ksCBExternalBorders]; //Групповые границы Внешние границы
                    bool _ksCBHorisontMidleBorder = CB.LineVisible[ksCellBoundariesEnum.ksCBHorisontMidleBorder]; //Групповые границы Внутренняя горизонтальная граница
                    bool _ksCBInternalBorders = CB.LineVisible[ksCellBoundariesEnum.ksCBInternalBorders]; //Групповые границы Нет границ
                    bool _ksCBLeftBorder = CB.LineVisible[ksCellBoundariesEnum.ksCBLeftBorder];                    // Левая граница
                    bool _ksCBNoBorders = CB.LineVisible[ksCellBoundariesEnum.ksCBNoBorders]; //
                    bool _ksCBRightBorder = CB.LineVisible[ksCellBoundariesEnum.ksCBRightBorder];                  // Правая граница
                    bool _ksCBTopBorder = CB.LineVisible[ksCellBoundariesEnum.ksCBTopBorder];                      // Верхняя граница
                    bool _ksCBVerticalMidleBorder = CB.LineVisible[ksCellBoundariesEnum.ksCBVerticalMidleBorder]; //Групповые границы  Внутренняя вертикальная граница

                    ksCurveStyleEnum ksCurveStyleEnum_ksCBAllBorders = CB.LineStyle[ksCellBoundariesEnum.ksCBAllBorders];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBBottomBorder = CB.LineStyle[ksCellBoundariesEnum.ksCBBottomBorder];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBExternalBorders = CB.LineStyle[ksCellBoundariesEnum.ksCBExternalBorders];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBHorisontMidleBorder = CB.LineStyle[ksCellBoundariesEnum.ksCBHorisontMidleBorder];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBInternalBorders = CB.LineStyle[ksCellBoundariesEnum.ksCBInternalBorders];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBLeftBorder = CB.LineStyle[ksCellBoundariesEnum.ksCBLeftBorder];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBNoBorders = CB.LineStyle[ksCellBoundariesEnum.ksCBNoBorders];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBRightBorder = CB.LineStyle[ksCellBoundariesEnum.ksCBRightBorder];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBTopBorder = CB.LineStyle[ksCellBoundariesEnum.ksCBTopBorder];
                    ksCurveStyleEnum ksCurveStyleEnum_ksCBVerticalMidleBorder = CB.LineStyle[ksCellBoundariesEnum.ksCBVerticalMidleBorder];

1 Снимок.PNG2 Снимок.PNG

lavgirb

+ Благодарностей: 1

GRANTDENT

Ячейки 0,6 , 0,5 , 0,4 , 0,3 объединены с ячейкой 0,2 . Цель этой темы донести, что средства разработки апи не корректны по части считывания границ ячейки таблицы чертежа и найти средство считывания границ ячейки таблицы чертежа. Граница имеет линию определенной толщины и видимость линии (объединение ячеек). Нет адекватного средства считывания таблицы из чертежа программно

Vi2

Вроде бы всё понятно. Ячейки [0,7] и [1,7]: видно, что у [0,7] границы видимы, а у [1,7] границы невидимы. Переходим к интерфейсу ICellFormat и рисуем границы по ширине и высоте ячейки. То же самое и про [0,6] и [1,6]. А для [0,6] границы определяет, похоже, [0,2].

У Ворда были свойства merge, которые показывали объединённую область. Я не знаю как с этим у Компаса. Но нарисовать-то можно.

ps
Скорее всего, у Компаса для ячейки работают Left, Right, Top и Bottom границы, всех остальных просто нет или их значения неважны. А вот для реальной группы ячеек работают и остальные.
+ Благодарностей: 1

p3452

+ Благодарностей: 1

GRANTDENT

По задаче выше реализовано СЧИТЫВАНИЕ выделенной ранее таблицы из перечня выделенных объектов ISelectionManager. Именно на считывании. ICellFormat границы ячейки не обеспечивает методами и свойствами, его реализовывал наряду с ITableCell

Vi2

Цитата: GRANTDENT от 13.06.25, 14:48:30ICellFormat границы ячейки не обеспечивает методами и свойствами
У интерфейса ICellFormat есть "Height - Высота строки" и "Width - Ширина столбца". Этого достаточно, чтобы нарисовать таблицу.
+ Благодарностей: 1