• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Регистрация будет доступна с 8:00 (мск) 12 января.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Проблемы с заполнением штампа

Автор abvgdeyka, 26.02.26, 17:42:25

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

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

Михаил88

А если так заполнять какая высота шрифта будет у обозначения.

lexz21

Цитата: p3452 от 27.02.26, 15:44:18Если код правильный (с учетом разного id ячейки и понимания структуры IText), то ВСЕ работает(!), не зависимо от стандарта - СПДС или ЕСКД
Шрифт:
1 стр. - 7
2 стр. - 5
3 стр. - 3.5
Штамп3.png


Тут должно быть три картинки. С однострочным текстом шрифт 7, с двустрочным - обе строки шрифт 5, трехстрочным - все три  шрифт 3,5.
Эта ячейка штампа имеет стиль текста Наименование и такие параметры прописаны для это стиля в стилях текста в библиотеке Lighting.lts и применяются автоматически, в принципе как остальные ячейки.
А там уже можно его менять, как захочется.

p3452

Что Вы все зациклились на "стилях"?!
Есть другие способы форматирования текста (скрыл то, что к ТЕМЕ не относится)...
Штамп4.png

Михаил88

При выборе высоты шрифта 3.5 высота меняется на значение автоподбора.

p3452

Работающий код (пост №21 и др) почти аналогичен, за исключением двух расхождений:
- использую шрифт GOST type B,
- TextLine не редактирую, а добавляю, т.е
...
Text t;
TextLine tln = t.Add();
...

p/s: Т.к. от ТС так и не добился, скажу за себя:
- Компас v20,
- стиль оформления листа - пробовал разные (работает!)

Михаил88

#25
С добавлением такая же ерунда. С GOST type B аналогично.


p3452

Нууу, не знаю что сказать...
Как, уже не однократно, показывал на v20 все работает, может быть БАГ конкретной версии API?
(надо будет попробовать на v24, но не сегодня)

abvgdeyka

Цитата: p3452 от 28.02.26, 13:36:22Работающий код (пост №21 и др) почти аналогичен, за исключением двух расхождений:
- использую шрифт GOST type B,
- TextLine не редактирую, а добавляю, т.е
...
Text t;
TextLine tln = t.Add();
...

p/s: Т.к. от ТС так и не добился, скажу за себя:
- Компас v20,
- стиль оформления листа - пробовал разные (работает!)
Я писал в #5 сообщении, Компас 23 стиль основной надписи свой Gost type B 5, но я пробовал и на других чертежах с другими стилями на других ПК результат тот же.

abvgdeyka

Цитата: Михаил88 от 27.02.26, 17:23:29А если так заполнять какая высота шрифта будет у обозначения.
При выполнении вашего кода, все строки 5.

p3452

Уж не знаю, что и как Вы там делаете...

Проверил работоспособность на v24 - работает!
Вот код тестовой функции на C#
// 0022_2, 0022_3    ШТАМП - Наименование
// bool pSPDS - обрабатываем ячеку 303, иначе - ячейку 1
bool initShtampCellName(ref LayoutSheet _lsh, bool pSPDS)
{   
    if (_lsh == null )
    {    this.sEr = "_lsh == null";        return false;    }   
   
    _Stamp _sht = _lsh.Stamp;
    if (_sht == null )
    {    this.sEr = "_sht == null";        return false;    }   
   
    int nom = pSPDS ? 303 : 1;
   
    Text t = _sht.Text[nom];   
    if (t == null)    {    this.sEr = "t == null для nom = ["+ nom.ToString()+ "]";    return false;    }
   
    t.Clear();
    if (nom == 1)    // ЕСКД
    {
        TextLine tln1 = t.Add();
        TextItem tin1 = tln1.TextItem[0];
        ITextFont tin1_f = tin1 as ITextFont;
        tin1_f.Height = 7;   
        tin1.Str = "Первая";
        tin1.Update();
       
        TextLine tln2 = t.Add();
        TextItem tin2 = tln2.TextItem[0];
        ITextFont tin2_f = tin2 as ITextFont;
        tin2_f.Height = 5;   
        tin2.Str = "\nВторая";
        tin2.Update();
       
        TextLine tln3 = t.Add();
        TextItem tin3 = tln3.TextItem[0];
        ITextFont tin3_f = tin3 as ITextFont;
        tin3_f.Height = 3.5;   
        tin3.Str = "\nТретья";
        tin3.Update();
       
        TextLine tln4 = t.Add();
        TextItem tin4 = tln4.TextItem[0];
        ITextFont tin4_f = tin4 as ITextFont;
        tin4_f.Height = 2.5;   
        tin4.Str = "\nЧетвертая";
        tin4.Update();
    }
    if (nom == 303)        // СПДС
    {
        TextLine tln1 = t.Add();
        TextItem tin1 = tln1.TextItem[0];
        ITextFont tin1_f = tin1 as ITextFont;
        tin1_f.Height = 5;   
        tin1.Str = "Первая";
        tin1.Update();
       
        TextLine tln2 = t.Add();
        TextItem tin2 = tln2.TextItem[0];
        ITextFont tin2_f = tin2 as ITextFont;
        tin2_f.Height = 3.5;   
        tin2.Str = "\nВторая";
        tin2.Update();
       
        TextLine tln3 = t.Add();
        TextItem tin3 = tln3.TextItem[0];
        ITextFont tin3_f = tin3 as ITextFont;
        tin3_f.Height = 2.5;   
        tin3.Str = "\nТретья";
        tin3.Update();
    }

    _sht.Update();

    _lsh.Update();
    return true;
}

abvgdeyka

#30
Цитата: p3452 от 02.03.26, 10:57:43Уж не знаю, что и как Вы там делаете...

Проверил работоспособность на v24 - работает!
Вот код тестовой функции на C#
// 0022_2, 0022_3    ШТАМП - Наименование
// bool pSPDS - обрабатываем ячеку 303, иначе - ячейку 1
bool initShtampCellName(ref LayoutSheet _lsh, bool pSPDS)
{   
    if (_lsh == null )
    {    this.sEr = "_lsh == null";        return false;    }   
   
    _Stamp _sht = _lsh.Stamp;
    if (_sht == null )
    {    this.sEr = "_sht == null";        return false;    }   
   
    int nom = pSPDS ? 303 : 1;
   
    Text t = _sht.Text[nom];   
    if (t == null)    {    this.sEr = "t == null для nom = ["+ nom.ToString()+ "]";    return false;    }
   
    t.Clear();
    if (nom == 1)    // ЕСКД
    {
        TextLine tln1 = t.Add();
        TextItem tin1 = tln1.TextItem[0];
        ITextFont tin1_f = tin1 as ITextFont;
        tin1_f.Height = 7;   
        tin1.Str = "Первая";
        tin1.Update();
       
        TextLine tln2 = t.Add();
        TextItem tin2 = tln2.TextItem[0];
        ITextFont tin2_f = tin2 as ITextFont;
        tin2_f.Height = 5;   
        tin2.Str = "\nВторая";
        tin2.Update();
       
        TextLine tln3 = t.Add();
        TextItem tin3 = tln3.TextItem[0];
        ITextFont tin3_f = tin3 as ITextFont;
        tin3_f.Height = 3.5;   
        tin3.Str = "\nТретья";
        tin3.Update();
       
        TextLine tln4 = t.Add();
        TextItem tin4 = tln4.TextItem[0];
        ITextFont tin4_f = tin4 as ITextFont;
        tin4_f.Height = 2.5;   
        tin4.Str = "\nЧетвертая";
        tin4.Update();
    }
    if (nom == 303)        // СПДС
    {
        TextLine tln1 = t.Add();
        TextItem tin1 = tln1.TextItem[0];
        ITextFont tin1_f = tin1 as ITextFont;
        tin1_f.Height = 5;   
        tin1.Str = "Первая";
        tin1.Update();
       
        TextLine tln2 = t.Add();
        TextItem tin2 = tln2.TextItem[0];
        ITextFont tin2_f = tin2 as ITextFont;
        tin2_f.Height = 3.5;   
        tin2.Str = "\nВторая";
        tin2.Update();
       
        TextLine tln3 = t.Add();
        TextItem tin3 = tln3.TextItem[0];
        ITextFont tin3_f = tin3 as ITextFont;
        tin3_f.Height = 2.5;   
        tin3.Str = "\nТретья";
        tin3.Update();
    }

    _sht.Update();

    _lsh.Update();
    return true;
}

Попробуйте выставить 3.5 всем строкам, что получится? Либо первой строке указать высоту 3.5. Так же как я понял вы добавляете 3 строки за раз, я хочу заводить текст построчно.

p3452

Повод для обсуждения исчерпан - РАБОТАЕТ, в любых сочетаниях!

abvgdeyka

    iText = IStamp.Text(Cell_Id)

    iText.Clear()
    iTextLine= iText.Add()

##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    iTextItem = iTextLine.Add()
    iTextFont = kompas_api7_module.ITextFont(iTextItem)

    iTextFont.Bold          = Text_Bold
    iTextFont.FontName      = Text_FontName
    iTextFont.Height        = 7
    iTextFont.Italic        = Text_Italic
    iTextFont.WidthFactor   = Text_WidthFactor

    iTextItem.Str = 'Наим1'
##    iTextItem.Update()
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    iTextItem = iTextLine.Add()
    iTextFont = kompas_api7_module.ITextFont(iTextItem)

    iTextFont.Bold          = Text_Bold
    iTextFont.FontName      = Text_FontName
    iTextFont.Height        = 5
    iTextFont.Italic        = Text_Italic
    iTextFont.WidthFactor   = Text_WidthFactor

    iTextItem.Str = '\nНаим2'
##    iTextItem.Update()
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    iTextItem = iTextLine.Add()
    iTextFont = kompas_api7_module.ITextFont(iTextItem)

    iTextFont.Bold          = Text_Bold
    iTextFont.FontName      = Text_FontName
    iTextFont.Height        = 3.5
    iTextFont.Italic        = Text_Italic
    iTextFont.WidthFactor   = Text_WidthFactor

    iTextItem.Str = '\nНаим3'
##    iTextItem.Update()

    IStamp.Update()

Попытался сделать аналог вашего кода на питоне, как и писал выше если первой строке задать 3.5 или всем задать 3.5 то все строки становятся высотой 5 и еще интересная особенность если обновлять все компоненты текста после присвоения значения, то строки 2 и 3 меняются местами, но опять же такой формат мне не интересен, я хочу заводить текст построчно, сделать функцию универсальной, что бы можно было передавать номер строки. 

p3452

Ваш код - НЕ аналог!
Не добавляйте TextItem, добавляйте TextLine...

abvgdeyka

    iText = IStamp.Text(Cell_Id)

    iText.Clear()
    iTextLine= iText.Add()

##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    iTextLine= iText.Add()

    iTextItem = iTextLine.TextItem(0)

    iTextFont = kompas_api7_module.ITextFont(iTextItem)
    iTextFont.Height        = 7

    iTextItem.Str = 'Наим1'
    iTextItem.Update()
##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    iTextLine= iText.Add()

    iTextItem = iTextLine.TextItem(0)

    iTextFont = kompas_api7_module.ITextFont(iTextItem)
    iTextFont.Height        = 5

    iTextItem.Str = 'Наим2'
    iTextItem.Update()

##~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    iTextLine= iText.Add()

    iTextItem = iTextLine.TextItem(0)

    iTextFont = kompas_api7_module.ITextFont(iTextItem)
    iTextFont.Height        = 3.5

    iTextItem.Str = 'Наим3'
    iTextItem.Update()

    IStamp.Update()

Поправил, добавляет строки, но на 3.5 все равно сбрасывает в 5.