导出图层的实现:
static void qxzyOperateLayer_ExportLayer(void) { CStdioFile f; CFileException e; char *pFileName = "C:\\layers.txt"; if(!f.Open((LPCTSTR)pFileName, CFile::modeCreate|CFile::modeWrite, &e)) { acutPrintf(_T("\n创建导出文件失败!")); return; } AcDbLayerTable *pLayerTbl; AcDbLayerTableRecord *pLayerTblRcd; acdbHostApplicationServices()->workingDatabase() ->getLayerTable(pLayerTbl, AcDb::kForRead); AcDbLayerTableIterator *pItr; pLayerTbl->newIterator(pItr); for(pItr->start();!pItr->done();pItr->step()) { pItr->getRecord(pLayerTblRcd, AcDb::kForRead); CString strLayerInfo; ACHAR *layerName; pLayerTblRcd->getName(layerName); strLayerInfo = layerName; free(layerName); strLayerInfo += ","; CString strColor; AcCmColor color = pLayerTblRcd->color(); strColor.Format(_T("%d"), color.colorIndex()); strLayerInfo += strColor; strLayerInfo += ","; CString strLinetype; AcDbLinetypeTableRecord *pLinetypeTblRcd; acdbOpenObject(pLinetypeTblRcd, pLayerTblRcd->linetypeObjectId(), AcDb::kForRead); ACHAR *linetypeName; pLinetypeTblRcd->getName(linetypeName); pLinetypeTblRcd->close(); strLinetype = linetypeName; free(linetypeName); strLayerInfo += strLinetype; strLayerInfo += ","; CString strLineWeight; AcDb::LineWeight lineWeight = pLayerTblRcd->lineWeight(); strLineWeight.Format(_T("%d"),lineWeight); strLayerInfo += strLineWeight; f.WriteString(strLayerInfo); f.WriteString(_T("\n")); pLayerTblRcd->close(); } delete pItr; pLayerTbl->close(); }
导入图层的实现:
static void qxzyOperateLayer_ImportLayer(void) { CStdioFile f; CFileException e; char *pFileName = "C:\\layers.txt"; if(!f.Open((LPCTSTR)pFileName, CFile::modeRead, &e)) { acutPrintf(_T("\n打开导入文件失败!")); return; } AcDbLayerTable *pLayerTbl; AcDbLayerTableRecord *pLayerTblRcd; acdbHostApplicationServices()->workingDatabase() ->getLayerTable(pLayerTbl, AcDb::kForWrite); CString strLineText; while(f.ReadString(strLineText)) { if(strLineText.IsEmpty()) continue; CStringArray layerInfos; if(!GetFieldText(strLineText, layerInfos)) continue; AcDbLayerTableRecord *pLayerTblRcd; AcDbObjectId layerTblRcdId; if(pLayerTbl->has(layerInfos.GetAt(0))) { pLayerTbl->getAt(layerInfos.GetAt(0), layerTblRcdId); } else { pLayerTblRcd = new AcDbLayerTableRecord(); pLayerTblRcd->setName(layerInfos.GetAt(0)); pLayerTbl->add(layerTblRcdId, pLayerTblRcd); pLayerTblRcd->close(); } acdbOpenObject(pLayerTblRcd, layerTblRcdId, AcDb::kForWrite); AcCmColor color; Adesk::UInt16 colorIndex = atoi((LPSTR)(LPCTSTR)layerInfos.GetAt(1)); color.setColorIndex(colorIndex); pLayerTblRcd->setColor(color); AcDbLinetypeTable *pLinetypeTbl; AcDbObjectId linetypeId; acdbHostApplicationServices()->workingDatabase() ->getLinetypeTable(pLinetypeTbl, AcDb::kForRead); if(pLinetypeTbl->has(layerInfos.GetAt(2))) { pLinetypeTbl->getAt(layerInfos.GetAt(2), linetypeId); } else { pLinetypeTbl->getAt(_T("Continous"), linetypeId); } pLayerTblRcd->setLinetypeObjectId(linetypeId); pLinetypeTbl->close(); AcDb::LineWeight lineWeight = (AcDb::LineWeight)atoi((LPSTR)(LPCTSTR)layerInfos.GetAt(3)); pLayerTblRcd->setLineWeight(lineWeight); pLayerTblRcd->close(); } pLayerTbl->close(); }
获取字段的一个方法:
static BOOL GetFieldText(CString strLineText, CStringArray &fields) { if(strLineText.Find(_T(","), 0) == -1) { return FALSE; } int nLeftPos = 0, nRightPos = 0; while((nRightPos = strLineText.Find(_T(","), nRightPos))!= -1) { fields.Add(strLineText.Mid(nLeftPos, nRightPos - nLeftPos)); nLeftPos = nRightPos + 1; nRightPos ++; } fields.Add(strLineText.Mid(nLeftPos)); return TRUE; }