Форматирование таблицы nanoCAD

Здравствуйте,
подскажите пожалуйста по коду ниже, как выполнить следующую задачу: Для таблицы-NanoCAD задать всем ячейкам отступы=0, сжатие=1

Код (проба):

using System;
using System.Runtime.Serialization;

using Multicad;
using Multicad.DatabaseServices;
using Multicad.Symbols.Tables;

using Multicad.AplicationServices;
using Multicad.Runtime;
using Multicad.Geometry;
using Multicad.DatabaseServices.StandardObjects;

using Teigha.DatabaseServices;
using Teigha.Runtime;

using HostMgd.ApplicationServices;
using HostMgd.EditorInput;
using HostMgd.PlottingServices;
using OdaX;
using System.Collections.Generic;
using System.Data.Common;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Transactions;
using Teigha.Geometry;
using Teigha.GraphicsInterface;
using Teigha.LayerManager;
using static System.Net.Mime.MediaTypeNames;

namespace TableFormatter
{
public partial class TableFormatting
{
[Teigha.Runtime.CommandMethod(“TableFormatting”)]
public void FormatTableCells()
{
Document doc = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;

        // Выбор таблицы
        McObjectId tableId = McObjectManager.SelectObject("Выберите таблицу для форматирования");
        if (tableId.IsNull)
        {
            //HostApplication.Services.MessageService.ShowMessage("Таблица не выбрана");
            ed.WriteMessage("\nТаблица не выбрана");
            return;
        }

        //McObject tableObj = McObjectManager.GetObject(tableId);
        McTable tableObj = McObjectManager.GetObject(tableId);
        McTable table = tableObj as McTable;

        //if (table == null)
        //{
        //    HostApplication.Services.MessageService.ShowMessage("Выбранный объект не является таблицей");
        //    return;
        //}

        // Форматирование всех ячеек таблицы
        FormatAllTableCells(table);

        //HostApplication.Services.MessageService.ShowMessage(
        //    $"Таблица отформатирована!\nСтрок: {table.Rows.Count}\nСтолбцов: {table.Columns.Count}");
    }

    private static void FormatAllTableCells(McTable table)
    {
        //using (McUndoPoint undo = new McUndoPoint())
        //{
            //undo.Start();

            // Цикл по всем строкам и столбцам
            for (int row = 0; row < table.Rows.Count; row++)
            {
                for (int col = 0; col < table.Columns.Count; col++)
                {
                    FormatTableCell(table, row, col);
                }
            }

            //table.Update();
            //undo.Commit();
        //}
    }

    private void FormatTableCell(McTable table, int row, int col)
    {
        Document doc = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        Database db = doc.Database;
        Editor ed = doc.Editor;

        try
        {
            // Получаем ячейку
            McTableCell cell = table[row, col]; //ошибка?
            if (cell == null) return;

            // Получаем формат ячейки
            McTableCellFormat format = cell.Format;  //ошибка?
            if (format == null) return;

            // Устанавливаем параметры форматирования
            format.HorzCellMargin = 0; // Горизонтальный отступ = 0
            format.VertCellMargin = 0; // Вертикальный отступ = 0
            format.ObliqueAngle = 0; // Наклон = 0
            format.HorzFit = 1; // Сжатие по горизонтали = 1

            // Дополнительные настройки для лучшего отображения
            format.VertFit = 1; // Сжатие по вертикали = 1
            format.TextWrap = false; // Без переноса текста
            //format.TextStyle = "Standard"; // Стандартный стиль текста

            // Обновляем ячейку
            cell.Format = format;
        }
        catch (Teigha.BoundaryRepresentation.Exception ex)
        {
            //HostApplication.Services.MessageService.ShowMessage(
            //    $"Ошибка форматирования ячейки [{row},{col}]: {ex.Message}");
            ed.WriteMessage("\nError: " + ex.Message);

        }
    }
}

}

ты жэж наноSDK скачивала?
справку отчего не читала?


а в SDK есть много полезного

            McTable table = new McTable();

            table.Columns.AddRange(0, 10);
            foreach (McTable.Column col in table.Columns)
            {
                col.Width = 50;
            }

            table.Rows.AddRange(0, 10);
            foreach (McTable.Row row in table.Rows)
            {
                row.Height = 40;
                foreach (Cell cell in row.Cells)
                {
                    cell.Value = "test";
                    cell.TextXScale = 2;//add dRz
                    cell.TextIndent = 10;//add dRz
                }
            }


уот так получится

Нет у меня sdk

Спасибо, посмотрю. Хороших выходных Вам!!

ни на чем не настаиваю, но пилу точить придется

1 лайк

Дело твое, но

Вступив в клуб и получив доступ к SDK с учетом пытливости твоего ума и разнообразия задач которые ты пытаешься решить, у тебя произойдет качественный скачок на порядок или больше, что и как будет понятнее
Члены клуба при желании, но это не точно смогут отвечать тебе более предметно не нарушая еулу
Если повезет, разработчики то же ответят на твои вопросы..

Формально приведя фрагмент кода из SDK хоть и со своими дополнениями я уже нарушил еулу которая тебя так страшит, но
Нет кара огненная меня не настигла.

Короче, в клуб вступишь будут ответы на твои вопросы (которых станет сильно меньше когда получишь доступ к всей инфе)

3 лайка

Спасибо большое за пояснения (да, я читала правила нового участника клуба, думаю, поставила в известность свое руководство). Также спасибо и за то что Вы сказали про меня, приятно слышать.

Хорошего Вам вечера!

1 лайк

Два свойства текста ячейки (которые Вы выслала в описании) из 4-х свойств получилось сделать. Вертикальный отступ и Наклон пока не знаю, видимо вообще не поменять программно либо через стиль таблицы или еще как-то надо делать.

TextOblique только чтение, но наклон текста легко можно установить через стиль текста
вертикального отступа в API по видимому нет, это свойство в GUI появилось сравнительно недавно

Здравствуйте,

можно Вас попросить посмотреть в новом API (nCAD 26), появились ли эти недостающие свойства (Вертикальный отступ и Наклон)?

Попросить можно, но что тебе мешает это сделать самой?

Интересующую библиотеку открываешь в IlSPy

и смотришь интересующие свойства методы

подключаешь нужные библиотеки к проекту в студии
и смотришь

в обозревателе объектов

или из кода по F12

Спойлер

Если SDK недоступен, то остается реверс инжиниринг, благо документация по Multicad API идет в составе nanoCAD. (по крайней мере пока)

Ответ: не добавили

Спасибо большое, буду изучать!!