Тема: Выбор объектов рисунка с помощью метода acedSSGet

Добрый день.
Не получается выбрать блоки одинаковым атрибутом.

    long i = 0;
    ads_name  m_ssname;
    struct resbuf** resBufTemp;
    struct resbuf* resBufEntityFilter = NULL;

    // 1. сформировать строку фильтра

    // 1.1 по названиям примитивов
    resBufTemp = &resBufEntityFilter;

    if( entNamesVec.size() ){
        *resBufTemp = acutBuildList( AcDb::kDxfOperator, _T( "<OR" ), 0 );
        resBufTemp = &(*resBufTemp)->rbnext;
        for( i = 0; i < (int)entNamesVec.size(); i++){
            *resBufTemp = acutBuildList( RTDXF0, entNamesVec[i], 0 );
            resBufTemp = &(*resBufTemp)->rbnext;
        }        
        *resBufTemp = acutBuildList( AcDb::kDxfOperator, _T( "OR>" ), 0 );
        resBufTemp = &(*resBufTemp)->rbnext;
    }

    // 1.3 по названию слоя
    if( !info.m_Layer.IsEmpty() ){
        *resBufTemp = acutBuildList( AcDb::kDxfLayerName, BlockLayer, RTNONE );
        resBufTemp = &(*resBufTemp)->rbnext;
    }

    if( !info.m_Name.IsEmpty() ){
        *resBufTemp = acutBuildList( AcDb::kDxfBlockName, BlockName, RTNONE );
        resBufTemp = &(*resBufTemp)->rbnext;
    }

    if( !info.m_Attribute.IsEmpty() ){
        *resBufTemp = acutBuildList( AcDb::kDxfAttributeTag, BlockAttributeTag, RTNONE );
        resBufTemp = &(*resBufTemp)->rbnext;
    }

    // 2. получить примитивы с чертежа
    int nDoneSS = acedSSGet( _T("_X"), NULL, NULL, resBufEntityFilter, m_ssname );
    acutRelRb( resBufEntityFilter );

    if( nDoneSS != RTNORM ) return false;

    // 3. сформировать массив AcDbObjectIdArray
    long len; ads_name ent; AcDbObjectId objId;
    if( acedSSLength( m_ssname, &len ) == RTNORM ){
        for( i=0; i < len; i++) {
            if(acedSSName( m_ssname, i, ent ) != RTNORM)      continue;
            if(acdbGetObjectId( objId, ent ) != Acad::eOk)  continue;        
            objIdArr.append( objId );
        }
    }
    acedSSFree( m_ssname );


    return true;

Посоветуйте что делать.

Re: Выбор объектов рисунка с помощью метода acedSSGet

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

Re: Выбор объектов рисунка с помощью метода acedSSGet

У меня получилось когда я убрал RTNONE с

   if( !info.m_Attribute.IsEmpty() ){ 
      *resBufTemp = acutBuildList( AcDb::kDxfAttributeTag, BlockAttributeTag, RTNONE ); 
      resBufTemp = &(*resBufTemp)->rbnext; 
   } 

то есть от так

   if( !info.m_Attribute.IsEmpty() ){ 
      *resBufTemp = acutBuildList( AcDb::kDxfAttributeTag, BlockAttributeTag ); 
      resBufTemp = &(*resBufTemp)->rbnext; 
   } 

но правильно ли он выберет?

Re: Выбор объектов рисунка с помощью метода acedSSGet

Тарас Яджак пишет:

но правильно ли он выберет?

Нет. Прочитай еще раз то, что я написал выше.

Re: Выбор объектов рисунка с помощью метода acedSSGet

Спасибо.