ObjectArx2010图层操作总结

2012-04-13 22:36:00|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:ObjectArx, C/C++, AutoCAD|来源:唯设编程网

6.加载图层到图形数据库

//加载图层到图形数据库
void CLayerOperator::LoadLayer(const LayerInfo& layerInfo,
        AcDbDatabase* pDb){
    //获得层表指针
    AcDbLayerTable *pLayerTbl;
    AcDbLayerTableRecord *pLayerTblRcd;
    pDb->getLayerTable(pLayerTbl,AcDb::kForWrite);
    //1.创建新的层表记录,或者打开已经存在的层表表记录
    AcDbObjectId layerTblRcdId;
    if(pLayerTbl->has(layerInfo.layerName.c_str())){
        pLayerTbl->getAt(layerInfo.layerName.c_str(),layerTblRcdId);
    }else{
        pLayerTblRcd=new AcDbLayerTableRecord();
        pLayerTblRcd->setName(layerInfo.layerName.c_str());
        pLayerTbl->add(layerTblRcdId,pLayerTblRcd);
        pLayerTblRcd->close();
    }

    acdbOpenObject(pLayerTblRcd,layerTblRcdId,AcDb::kForWrite);

    //2.设置层表记录的颜色
    AcCmColor color;
    Adesk::UInt16 colorIndex=layerInfo.colorIndex;
    color.setColorIndex(colorIndex);
    pLayerTblRcd->setColor(color);
    //3.设置线型
    AcDbObjectId lineTypeId;        
    lineTypeId=LoadLineType(layerInfo.typeName.c_str());        
    pLayerTblRcd->setLinetypeObjectId(lineTypeId);
    //4.设置线宽
    pLayerTblRcd->setLineWeight(layerInfo.weight);

    pLayerTblRcd->close();
    pLayerTbl->close();
}

7. 测试代码

读者可以使用ObjectArx的AddIn工具栏添加测试命令,下面是对图层操作类CLayerOperator进行测试的相关代码,前面的文章已经详细介绍了添加命令函数的方法,本文不再赘述。

    // - CHAP4._NewLayer command (do not rename)
    static void CHAP4_NewLayer(void)
    {
        //提示用户输入新建图层的名称
        ACHAR layerName[BUFSIZ]={0};
        if(acedGetString(Adesk::kFalse,_T("
输入新图层的名称:"),
            layerName)!=RTNORM){
            return;
        }

        CLayerOperator::NewLayer(layerName);        
    }

    // - CHAP4._LayerColor command (do not rename)
    static void CHAP4_LayerColor(void)
    {
        //提示用户输入要修改的图层名称
        ACHAR layerName[BUFSIZ];
        if(acedGetString(Adesk::kFalse,_T("
输入图层的名称:"),
            layerName)!=RTNORM){
            return;
        }

        CLayerOperator::SetLayerColor(layerName);        
    }

    // - CHAP4._DelLayer command (do not rename)
    static void CHAP4_DelLayer(void)
    {
        //提示用户输入要修改的图层名称
        ACHAR layerName[BUFSIZ];
        if(acedGetString(Adesk::kFalse,_T("
输入图层的名称:"),
            layerName)!=RTNORM){
            return;
        }

        CLayerOperator::DelLayer(layerName);        
    }

    // - CHAP4._ExportLayer command (do not rename)
    static void CHAP4_ExportLayer(void)
    {
        CFileDialog dlgFile(FALSE,
            _T(".lay"),
            _T("layer"),
            OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
            _T("layer files(*.lay)|*.lay||"));
        if(dlgFile.DoModal()==IDOK){
            CString flilePath=dlgFile.GetPathName();
            CLayerOperator::ExportLayers(flilePath.GetBuffer());
            flilePath.ReleaseBuffer();
        }
        
    }

    // - CHAP4._ImportLayer command (do not rename)
    static void CHAP4_ImportLayer(void)
    {
        CFileDialog dlgFile(TRUE,
            _T(".lay"),
            _T("layer"),
            OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
            _T("layer files(*.lay)|*.lay||"));
        if(dlgFile.DoModal()==IDOK){
            CString flilePath=dlgFile.GetPathName();
            CLayerOperator::ImportLayers(flilePath.GetBuffer());
            flilePath.ReleaseBuffer();
        }
    }

    // - CHAP4._LoadLineType command (do not rename)
    static void CHAP4_LoadLineType(void)
    {
        //提示用户输入要修改的图层名称
        ACHAR lineType[BUFSIZ];
        if(acedGetString(Adesk::kFalse,_T("
输入线型的名称:"),
            lineType)!=RTNORM){
            return;
        }

        CLayerOperator::LoadLineType(lineType);
    }
};

好了,使用ObjectArx2010对AutoCAD2010图层进行操作就介绍完了,本程序的所有代码在Win7+VC2008 SP1+ObjectArx2010+AutoCAD2010编译并运行通过,如果你还有补充和意见,欢迎在留言区进行讨论。

发表评论0条 】
网友评论(共?条评论)..
ObjectArx2010图层操作总结