значёк градуса º

Автор new, 18.03.05, 21:33:15

« предыдущая - следующая »

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

new

Привет всем!!! Не могли бы вы мне помочь. Пишу библиотеку на C++ Builder, на некоторых размерах детали необходимо проставить, к примеру, 0.6х45º. Как можно поставить вот эти 45º ??????

333

В компасе есть понятие спецсимвола.
Градус является спецсимволом с кодом 001
Для вывода спецсимвола используется комбинация.
"@трехзначный_код_спецсимвола" т.е.
45º это "45@001"
В компас 5 кстате было "45&01"
Текст размера придется формировать самостоятельно.
Для этого нужно снять признак автоформат и наполнить массив текста.

new

не получается почему - то, посмотри, пожалуйста, в чём ошибка
        pAT->ksClearArray();
        pDTP_L->Init(0);
        pDTP_L->SetBitFlagValue(_AUTONOMINAL,false);
        pStr->str=StringToOleStr(Myvl.c+"x45@001");
        pAT->ksAddArrayItem(-1,pStr);
        pStr->str=StringToOleStr(" 2 фаски ");
        pAT->ksAddArrayItem(-1,pStr);
        pDDP_L->Init();
        pDDP_L->pt1=2;
        pDDP_L->pt2=2;
        pDSP_L->Init();
        pDSP_L->x1=d/2-c;
        pDSP_L->y1=0;
        pDSP_L->x2=d/2-c;
        pDSP_L->y2=c;
        pDSP_L->dx=30;
        pDSP_L->dy=30;
        pDSP_L->basePoint=1;
        dimRef=pDoc->ksLinDimension(pDP_L);

333

Вопрос под какой Компас это нужно
В Компас 5 и Компас 6 в API спец символы были двухзначными и передавались только через &
т.е. так "x45&01"

Посмотри Step9  функцию DrawLinDim( ksDocument2D * doc )
там есть такая строчка:
str->set_str( StringToOleStr("pp&04ww&01oo") );

333

Кстате спец символы можно использовать не во всех полях.
А тексты нужно наполнять в определенной последовательности в зависимости от бит флагов

_Dmitry___

ЦитироватьКстате спец символы можно использовать не во всех полях.
А тексты нужно наполнять в определенной последовательности в зависимости от бит флагов
Всем привет.
у меня подобный вопрос
если нужно в угловом размере принудительно поставить 12?11’10’ то эти спец символы вроде не срабатывают, что делать?

_Dmitry___

P.S.
проблема с символами и здесь, я спрашивал как принудительно поставить в угловом размере 12(градусов)11(минут)10(секунд) да так чтоб при редактировании размера в ручную Компас все правильно понял

new

ЦитироватьКстате спец символы можно использовать не во всех полях.
А тексты нужно наполнять в определенной последовательности в зависимости от бит флагов
Не во всех полях ? а в каких можно, я знаю, что тексты размеров можно задавать как-то двумя способами, может быть тем способом, как я задаю нельзя ставить спецсимволы?

333

В компасе есть две возможности использовать автономинал и тогда Компас сам определяет, что выводить.
Точность задается в настройках документа.
Второй способ автономинал не использовать.
В этом случае все тексты в размере это просто тексты.  
Кстати чтобы вывести данные числа текстом нужно использовать такую комбинацию (В Компас 7 это работает):
"12&01~11\’10\"" или "12@01~11\’10\""
Здесь ~ разделитель отделяет код спецсимвола от цифр которые идут после него.
Если после спецсимвола идут не цыфры то ~ не нужен
Насчет того в каких полях можно использовать спец символы а в каких нет это нужно посмотреть в диалоге параметров размера.
В поле значение например спец символы не вводятся,  а в тексте до
водятся т.е в префиксе

 tPar.SetBitFlagValue( _AUTONOMINAL, false );
 tPar.SetBitFlagValue( _PREFIX, true );

ksChar255 str( kompas.GetParamStruct(ko_Char255) );
ksDynamicArray arrText( tPar.GetTextArr() );

str.SetStr( "12&0111\’10\"" );
arrText.ksAddArrayItem( -1, str );

long obj = doc.ksLinDimension( param );

Здесь весь текст кидается в префикс но можно придумать и другой вариант.

 

333

Вот такой вариант в Компас 7 работает:
tPar->SetBitFlagValue( _AUTONOMINAL, false );
tPar->SetBitFlagValue( _PREFIX, true );

ksChar255 * str = (ksChar255*)kompas->GetParamStruct(ko_Char255);
ksDynamicArray * arrText = (ksDynamicArray*)tPar->GetTextArr();
str->set_str( StringToOleStr("") );
  arrText->ksAddArrayItem( -1, str );

str.SetStr( "x45&01" );
arrText.ksAddArrayItem( -1, str );

long obj = doc.ksLinDimension( param );
Но можно придумать и другой вариант.

_Dmitry___

ЦитироватьВ компасе есть две возможности использовать автономинал и тогда Компас сам определяет, что выводить.......
........
Здесь весь текст кидается в префикс но можно придумать и другой вариант.
 

Спасибо за ответ но можно подробней о другом варианте
в префиксе градус ставит а в поле предназначенном для размера упорно не хочет т.к. "поле значений",
 как быть с отклонениями автономинал не сработает,
знаю что и размер и отклонения можно описать в префиксе как форматированный тест но потом как его редактировать?
форматированный текст в префиксе или суффиксе - единственный выход или есть что поудобней?

new


new

Ура!!!!!!!!!!!! Действительно работает!!!!! 333, ты красавчик (красавица)!!!!

333

Там кажется не было символа ~
Надо пробовать.

_Dmitry___

вопрос от 12.04.2005 21:32:48
еще актуален,   выхода пока не вижу, кто с допусками угловых размеров работал поделитесь опытом

333

Выложите пример размера который нужно создать.
т.е. в ручную создайте во фрагменте.

333

После того как вручную сздадите размер получите его параметры спомощью GetObjParam и посмотрите в каком виде вернется текст.
В такомже виде его нужно задать при создании размера програмно.  

_Dmitry___

333 спасибо, просто и доходчиво, буду юзать (угнетает то что сам не додумался)