草草久久精品国产一区二区_日B在线播放视频_国产特黄1级毛片_日韩久久乱码AV一区二区三区_日韩精品一区二区久久不卡_精品熟女视频一区二区_精品妇女一区二区三区_久久6热视频这里有精品_亚洲久久日本_久久久久美女中文字幕

linuxf二次開發中 ->XData 問題

在生成的示例程序里,我是在void initApp()里新增了一個命令 acedRegCmds->addCommand(ACRX_T("ASDK_SAMPLES_HELLOARX"),
ACRX_T("ASDK_test"), ACRX_T("test"), ACRX_CMD_MODAL,
TestXData);

該命令的實現代碼為





AcDbObjectId appendEnt(AcDbEntity* _pEnt)

{

    AcDbDatabase* pAcDb=acdbHostApplicationServices()->workingDatabase();

    AcDbBlockTable* pBlkTbl;

    pAcDb->getBlockTable(pBlkTbl, AcDb::kForRead);

    AcDbBlockTableRecord* pBlkTblRec;

    pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRec, AcDb::kForWrite);

    pBlkTbl->close();



    AcDbObjectId id;

    Acad::ErrorStatus es = pBlkTblRec->appendAcDbEntity(id, _pEnt);

    if (es != Acad::eOk)

    {

        pBlkTblRec->close();

        delete _pEnt;

        _pEnt = NULL;

        return AcDbObjectId::kNull;

    }



    pBlkTblRec->close();

    _pEnt->close();



    actrTransactionManager->queueForGraphicsFlush();//刷新顯示

    actrTransactionManager->flushGraphics();

    acedUpdateDisplay();



    return id;

}



AcString _AC_STR_(QString qstr)

{

    return AcString((const char*)qstr.toUtf8(), AcString::Utf8);

}



AcString _AC_STR_(char* str)

{

    return AcString((const char*)str, AcString::Utf8);

}



QString _T_(ACHAR* str)

{

    return QString::fromStdWString(str);

}



char *_SZ_(QString _qstr)

{

    char *str;

    QByteArray ba = _qstr.toLocal8Bit() ;//不可以 _qstr.toLocal8Bit().data() ,如果這樣,可能會出錯

    str = ba.data();

    char *ret = new char[strlen(str) +1];

    strcpy(ret,str);

    return ret;

}



void TestXData()

{

    Acad::ErrorStatus es;



    AcGePoint3d pt1(0, 0, 0), pt2(100, 500, 0);

    AcDbLine* pLine = new AcDbLine(pt1, pt2);

    AcDbObjectId id = appendEnt(pLine);



    es = acdbOpenObject(pLine, id, AcDb::kForWrite);

    if (es != Acad::eOk)

    {

        acutPrintf(ACRX_T("\nError to acdbOpenObject"));

        return;

    }



    QString strRegApp = "appreg",

            strData1 = "Dat1",

            strData2 = "Dat2";

    acdbRegApp(_AC_STR_(strRegApp));

    struct resbuf* rb = acutBuildList(AcDb::kDxfRegAppName, _SZ_(strRegApp),

        AcDb::kDxfXdAsciiString, _SZ_(strData1),

        AcDb::kDxfXdAsciiString, _SZ_(strData2),

        RTNONE);

    pLine->setXData(rb);

    acutRelRb(rb);

    pLine->close();











    AcDbBlockTable *pBlkTbl_read;

    acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl_read, AcDb::kForRead);



    AcDbBlockTableRecord *pBlkTblRec_read;

    pBlkTbl_read->getAt(ACDB_MODEL_SPACE, pBlkTblRec_read, AcDb::kForRead);

    if(pBlkTbl_read)pBlkTbl_read->close();



    AcDbBlockTableRecordIterator *pltr;

    pBlkTblRec_read->newIterator(pltr);



    AcDbEntity *pEnt_read;

    for(pltr->start();!pltr->done();pltr->step())

    {

        pltr->getEntity(pEnt_read, AcDb::kForRead);

        if (pEnt_read->isKindOf(AcDbLine::desc()))// 符合條件的 多義線 作為判斷的依據

        {

                AcDbLine *pLine_read = AcDbLine::cast(pEnt_read);//whether it's a line

                if(pLine_read != NULL)

                {

                        QString  strData1_read, strData2_read;

                        struct resbuf *pRb_read = pEnt_read->xData(_AC_STR_(strRegApp));//獲取實體的擴展數據

                        if (pRb_read != NULL)

                        {

                            struct resbuf *pTemp_read = pRb_read; //使用臨時的結果緩沖區指針進行遍歷,pRb不修改便于釋放

                            if(pTemp_read)pTemp_read = pTemp_read->rbnext;

                            if(pTemp_read)strData1_read = _T_(pTemp_read->resval.rstring);

                            if(pTemp_read)pTemp_read = pTemp_read->rbnext;

                            if(pTemp_read)strData2_read = _T_(pTemp_read->resval.rstring);



                            QMessageBox::information(NULL,"info","acdbline::cast ok\r\ndata1=" + strData1_read +"\r\ndata2="+strData2_read);

                        }

                        else

                        {

                            QMessageBox::information(NULL,"info","acdbline::cast ok, but resbuf read return null");

                        }

                        acutRelRb(pRb_read);

                }

                else

                {

                    QMessageBox::information(NULL,"info","acdbline::cast error");

                }



                if(pLine_read)pLine_read->close();

        }

        if(pEnt_read)pEnt_read->close();

    }

    delete pltr;



    if(pBlkTblRec_read)pBlkTblRec_read->close();



    QMessageBox::information(NULL,"info","test over...");





}

當在cad里test命令時,總是得到 QMessageBox::information(NULL,"info","acdbline::cast ok, but resbuf read return null");不知道是什么原因導致讀取不到里面的數據,麻煩賜教,謝謝



已邀請:

浩辰軟件的糕糕

贊同來自:

您好,請私信一下我您的聯系方式。我來協調研發老師協助您確認問題。

該問題目前已經被鎖定, 無法添加新回復

91精品国产高清自在线看| 国产在线精品拍揄自揄免费| 久久激情婷婷国产av| 日韩精品资源91九色| 国产视频资源| 国产成人Av一区二区| 日本一区二区更新不卡| 久久亚洲蜜桃电影| 91蝌蚪影视| 国产黄片高清无码| 久久高清Av| 欧美一区二区在线| 91老熟女| 99自拍| 亚洲色欧美| 99久久久精品少妇| 91亚洲成人电影| 欧美一级品| 亚洲日韩在线素人丝袜| 欧美性爱一区| 天天干夜夜一操| 大美女禁视频www| 91久久偷偷做嫩草影院| 国产激情在线观看| 国产一级毛片视频| 制服丝袜综合| 亚洲经典无码| 91在线无码精品秘 蜜桃入口| 800av在线91亚洲无码打飞机九色| 色精品一精品二精品三| 久久免费视频2000| 99免费日韩大片| 91性爱大片| PORNY蝌蚪自拍成人| 999亚州综合| Www无码专区91| 91丨九色丨蝌蚪丨在线| 九色精品综合在线视频| 99精品免费电影| 六六久久小视频| 欧美性爱91在线高清|