Тема: Изменение базы данных текущего рисунка на базу данных другого рисунка

Здравствуйте,
Уважаемые помогите пожалуйста - есть проблема.
У меня есть файл с рисунком в котором к примеру нарисован круг и квадрат( файл сохранен на диске). Я запускаю Автокад и мне надо из Автокада прочитать рисунок, хранящийся на диске, причем мне надо выбрать сущности только ф-ей acedSSGet, но она не хочет работать. Делаю так:

    AcDbObjectId id;
    AcDbObjectIdArray list;
    AcDbDatabase extDatabase(Adesk::kFalse);
   pCur = acdbHostApplicationServices()->workingDatabase();
    
    if (Acad::eOk != extDatabase.readDwgFile("C:\\ArxProgram\\1.dwg",_SH_DENYRW))
    {
                return FALSE;
    }
    if (Acad::eOk != extDatabase.getSymbolTable(m_pBlockTable, AcDb::kForRead))
    {
                return FALSE;
    }
    
    acdbHostApplicationServices()->setWorkingDatabase(&extDatabase);
        
    ads_point pt1, pt2,pt3, pt4;
    pt1[X] = 0;
    pt1[Y] = 0;
    pt1[Z] = 0;
    pt2[X] = 100000;
    pt2[Y] = 100000;
    pt2[Z] = 0.0;
    pt3[X] = 50;
    pt3[Y] = 50;
    pt3[Z] = 0;
    pt4[X] = 0;
    pt4[Y] = 50;
    pt4[Z] = 0;
    
    ads_name ssname;
    long len;
    
    acedSSGet("X", NULL, NULL, NULL, ssname);
    acedSSLength(ssname, &len);
    
    for(int i = 0; i < len; i++)
    {
        ads_name ent;
        acedSSName(ssname, i,ent);
        AcDbObjectId id;
        AcDbLine *pEnt;
        acdbGetObjectId(id, ent);
        list.append(id);
    }
    acdbHostApplicationServices()->setWorkingDatabase(pCur);
    if (list.isEmpty()) {
                return FALSE;
    }
    if (Acad::eOk != extDatabase.wblock(pTempDb, list, AcGePoint3d(0,0,0)))
    {
               return FALSE;
    }
    
    if (Acad::eOk != acdbHostApplicationServices()->workingDatabase()
        ->insert(AcGeMatrix3d::kIdentity, pTempDb))
    {
        
        return FALSE;
    }

В итоге ничено не получается.
Спасибо.

Re: Изменение базы данных текущего рисунка на базу данных другого рисунка

Маленькое уточнение вместо acedSSGet("X", NULL, NULL, NULL, ssname); надо
acedSSGet("W", pt1, pt2, NULL, ssname);

Re: Изменение базы данных текущего рисунка на базу данных другого рисунка

Опция ?W?  функции acedSSGet работает только для видимой части чертежа. Надо, наверное,  нужные ?сущности?  выбирать по-другому.

Re: Изменение базы данных текущего рисунка на базу данных другого рисунка

Mожет я чего не понял, но зачем

 if (Acad::eOk != extDatabase.getSymbolTable(m_pBlockTable, AcDb::kForRead))
    {
                return FALSE;
    }

С xref-ми у меня такое работало, но исключительно с "X".
А вообще, при всем кажущемся удобстве acedSSGet(), на мой взгляд лучше использовать итераторы.

Re: Изменение базы данных текущего рисунка на базу данных другого рисунка

Я думаю, что проше открыть ModelSpace и проитерироватся по нему, выбирая entity нужного типа. Ну, а потом wblockClone.