Масштабирование показателей размерной линии

Автор Kuvilda, 17.09.25, 15:53:21

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

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

Kuvilda

Добрый день или вечер. Столкнулся с такой проблемой. Имеется программа, которая рисует отверстия в определенной области.  Затем между всеми отверстиями автоматически проставляются размеры. Проблема в том, что размеры проставляются фактические, а деталь имеет масштабирована (1:5). Можно ли как-то увеличить проставленные размеры в 5 раз, или есть другие способы проставить адекватные размеры? Ниже представлен метод для отрисовки.
static void DrawLinearDimension(ksDocument2D document, KompasObject kompas,
               double x1, double y1, double x2, double y2, short orientation,
               int rowIndex = 0) // Добавляем параметр для номера ряда
{
    Console.WriteLine($"Рисование размера: от ({x1}, {y1}) до ({x2}, {y2}), ориентация: {orientation}, ряд: {rowIndex}");

    const int TextPositionCenter = 0;
    const int FirstPoint = 1;
    const int DimensionLength = 0;
    int offset = -35; // Базовое смещение

    try
    {
        ksLDimParam DimParam = (ksLDimParam)kompas.GetParamStruct((short)StructType2DEnum.ko_LDimParam);
        if (DimParam == null)
        {
            Console.WriteLine("Ошибка: Не удалось получить структуру параметров DimParam");
            return;
        }

        ksDimDrawingParam drawingParams = (ksDimDrawingParam)DimParam.GetDPar();
        ksLDimSourceParam sourceParams = (ksLDimSourceParam)DimParam.GetSPar();
        ksDimTextParam textParams = (ksDimTextParam)DimParam.GetTPar();

        if (drawingParams == null || sourceParams == null || textParams == null)
        {
            Console.WriteLine("Ошибка: Не удалось получить параметры размеров");
            return;
        }

        // Настройка параметров текста
        textParams.stringFlag = true;
        textParams.bitFlag = 1;

        // Настройка параметров отрисовки
        drawingParams.Init();
        drawingParams.textPos = TextPositionCenter;
        drawingParams.textBase = 0;
        drawingParams.pt1 = 1;
        drawingParams.pt2 = 1;
        drawingParams.ang = 0;
        drawingParams.lenght = DimensionLength;

        // Настройка параметров источника
        sourceParams.Init();
        sourceParams.x1 = x1;
        sourceParams.y1 = y1;
        sourceParams.x2 = x2;
        sourceParams.y2 = y2;
        sourceParams.basePoint = FirstPoint;

        // Определяем смещение в зависимости от ориентации и номера ряда
        if (orientation == 0) // Горизонтальные размеры
        {
            sourceParams.basePoint = 2;
            sourceParams.ps = 0;
            sourceParams.dx = 0;
            if (rowIndex == 0)
            {
                // Для второго ряда меняем знак offset на противоположный
                int finalOffset = offset;
                sourceParams.dy = finalOffset;
                Console.WriteLine($"Горизонтальный размер, смещение Y: {sourceParams.dy}, ряд: {rowIndex}");
            }
            else
            {
                int finalOffset = -offset;
                sourceParams.dy = finalOffset + 3;
                Console.WriteLine($"Горизонтальный размер, смещение Y: {sourceParams.dy}, ряд: {rowIndex}");
            }
        }
        else // Вертикальные размеры
        {
            sourceParams.basePoint = 2;
            sourceParams.ps = 1;
            if (rowIndex == 0)
            {
                // Для вертикальных размеров от NewBottom убираем дополнительное смещение +15
                int finalOffset = offset;
                sourceParams.dx = finalOffset + 25;
                sourceParams.dy = 0;
                Console.WriteLine($"Вертикальный размер, смещение X: {sourceParams.dx}, ряд: {rowIndex}");
            }
            else
            {
                int finalOffset = offset;
                sourceParams.dx = finalOffset + 15;
                sourceParams.dy = 0;
                Console.WriteLine($"Вертикальный размер, смещение X: {sourceParams.dx}, ряд: {rowIndex}");
            }
        }

        // Пробуем нарисовать размер
        document.ksLinDimension(DimParam);
        Console.WriteLine($"Успешно нарисован размер от ({x1}, {y1}) до ({x2}, {y2})");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Ошибка при рисовании размера: {ex.Message}");
        Console.WriteLine($"StackTrace: {ex.StackTrace}");
    }
}

Miroshnyk

Проблема, фактические значения умножить на масштаб вида.

Kuvilda

Проблема, чтобы достать эти фактические значения, а даже если и достать, непонятно, как задать текст для размерной надписи вручную. Документация в Компасе очень понятно и доходчиво написана просто.

lavgirb

Цитата: Kuvilda от 18.09.25, 09:08:49Проблема, чтобы достать эти фактические значения, а даже если и достать, непонятно, как задать текст для размерной надписи вручную. Документация в Компасе очень понятно и доходчиво написана просто.
Там надо через вкладку Параметры.
Можно поменять значение размера в нескольких местах. И вручную и программно.
[/url]
+ Благодарностей: 1

p3452

Kuvilda, Вы в курсе, что в SDK есть примеры кода (\SDK\Samples), в том числе и по размерам - Step2_API7_2D?