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

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

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

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

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

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

Обозначение сечения: проблема с положением букв

Автор Pavor, 28.04.11, 08:57:03

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

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

Pavor

Приветствую всех!

Столкнулся с такой проблемой: если программно ставить обозначение сечения, при размещении стрелок справа буквы отображаются таким образом:

Причем, положение это не зависит от введенных координат надписи возле первого и второго участков.
Если сменить параметр размещения на "стрелки слева", то буквы занимают положение по умолчанию (что и нужно, в принципе):


Сталкивался кто-нибудь? В чем причина такой непредсказуемости?

Компас 12 SP1, Delphi 7
Код практически идентичен примеру из SDK:

//Сечение В-В

  cut        := ksCutLineParam( kompas.GetParamStruct(ko_CutLineParam) );
  tLinePar   := ksTextLineParam( kompas.GetParamStruct(ko_TextLineParam) );
  ItemPar    := ksTextItemParam( kompas.GetParamStruct(ko_TextItemParam) );
  tMathPoint := ksMathPointParam( kompas.GetParamStruct(ko_MathPointParam) );
  if ItemPar = nil then
    Exit;
  ItemPar.Init;
  tFont := ksTextItemFont( ItemPar.GetItemFont );
  if ( (cut <> nil) And (tLinePar <> nil) And (tFont <> nil) And (tMathPoint <> nil) ) then begin
    cut.Init;
    tLinePar.Init;
    tFont.Init;
    tMathPoint.Init;

    cut.style:=11;//стиль текста - Для линии разреза
    cut.type_ := 0;
cut.x1    := Main_x+BendBegin1+CutOutSpace+3;//координаты надписи у первого участка
cut.y1    := Main_y-n*bprnois-3;
cut.x2    := Main_x+BendBegin1+CutOutSpace+3;//координаты надписи у второго участка
cut.y2    := Main_y+3+100;
cut.right := 0;
cut.str   := 'В';
pMathPoint := ksDynamicArray( cut.GetpMathPoint );

    tMathPoint.x := Main_x+3; //первая точка разреза
  tMathPoint.y := Main_y+3;
  pMathPoint.ksAddArrayItem( -1, tMathPoint );


  tMathPoint.x := Main_x+3;//вторая точка разреза
  tMathPoint.y := Main_y-30;
  pMathPoint.ksAddArrayItem( -1, tMathPoint );

    obj:= doc.ksCutLine(cut);
end;





Pavor

Народ, ну не молчите!
У кого это нормально проходит - напишите, может поможет разобраться.

Попробуйте поменять

cut.str   := 'В';  на  cut.str   := 'В$;1$';

Pavor

Увы, эффект тот же:

Вы когда привязку размерной надписи делаете не учитываете ширину текста.

Pavor

Я, видимо, недопонимаю.. Как здесь можно учесть ширину? Это связано с координатами x1, y1, x2, y2?

#6
Взгляните на картинку текст четко начинается на конце стрелки слева и справа . У текста ноль в нижнем левом углу.

Pavor

Текст наверное все же привязывается за левый нижний угол, однако Вы правы: в обоих случаях координаты привязки текста совпадают с концами отрезков без стрелок. Почему так происходит? Я уже эти координаты совсем произвольно задавал: 0, 100, -5 - текст положения не меняет. Может дело в чем-то еще? Почему нет никакой реакции?

Возможно Компас хочет текст в виде динамического массива.
Согласно справке:
ksCutLineParam::SetpTextline
Интерфейс...

Установить указатель на интерфейс динамического массива компонент текта ksDynamicArray типа TEXT_ITEM_ARR.

Синтаксис Automation:

BOOL SetpTextline (LPDISPATCH pTextline);

Входной параметр:

pTextline
- указатель на интерфейс динамического массива ksDynamicArray компонент текста типа TEXT_ITEM_ARR.


Возвращаемое значение:

TRUE
- в случае удачного завершения.


Примечание:

Массив используется при ksCutLineParam::type = 1 (т.е. при способе задания надписи на линии).

Смотрите также

TextItemParam

Pavor

Да, да, мне тоже пришло это в голову и вариант с массивом я только что проработал. К сожалению, результат все тот же, что-то мы упускаем, как будто не включено управление размещением текста, но где это посмотреть?

Можно попробовать со стилями текста поиграть остальное вроде все перепробовали. Хотя у Вас cut.style:=11;//стиль текста - Для линии разреза

Pavor

Тоже пробовал, пока никак.. Спасибо Вам за участие. Может, из Аскона кто прочитает и подскажет?