Код материала

Автор Kredo, 11.07.05, 02:12:39

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

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

Kredo

Как можно получить код материала или экземпляра сортамента из основной надписи чертежа, выбранного из справочника МиС.

Kredo

Обнаружил, вернее прочитал, что код материала содержится в атрибуте документа. А как его можно передать в спецификацию? Или вытащить через объект спецификации?

сhelkаr

Можно получить файлы у объекта спецификации через ksDocAttachedSpcParam и пройти итератором ksIterator::ksCreateAttrIterator (obj = 0). Дальше получить значение нужного атрибута.

Kredo

Не могу сделать перемещение по атрибутам через ksMoveAttrIterator(’F’,0). Ругается на несоответсвие типов.

333

В спецификации код материала пишется в дополнительные колонки

Kredo

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

333

// Получить атрибут с location текущего материала
ksIteratorPtr iter( kompas->GetIterator() );
BOOL res = iter->ksCreateAttrIterator( docReference, 0, 0, 0, 0, MATERIAL_ATTR_ID );
   long resOld = iter->ksMoveAttrIterator( "F", NULL );

   if ( pAttr )
  {
      ksAttributeObjectPtr attrObj( kompas->GetAttributeObject() );

      // Инициализировать структуру массива для атрибута
      ksUserParamPtr values( kompas->GetParamStruct( ko_UserParam ) );
      values->Init();
      ksDynamicArrayPtr array( kompas->GetDynamicArray( LTVARIANT_ARR ) );
      ksLtVariantPtr val( kompas->GetParamStruct( ko_LtVariant ) );
      val->Init();
      val->strVal = "";
      array->ksAddArrayItem( -1, val );
      values->SetUserArray( array );

      // Считать атрибут
      attrObj->ksGetAttrRow( pAttr, 0L, NULL, NULL, values );
      array->ksGetArrayItem( 0, val );
      m_sLocation = (char*)val->strVal;
   }