ObjectArx学习笔记-导入导出图层列表

简介:

导出图层的实现:

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;
	}


转载:http://blog.csdn.net/foreverling/article/details/28266181

目录
相关文章
|
JavaScript
fastadmin表格列表内部自定义按钮
fastadmin表格列表内部自定义按钮
435 0
fastadmin表格列表内部自定义按钮
|
5月前
|
开发框架 前端开发 JavaScript
在Winform开发中,我们使用的几种下拉列表展示字典数据的方式
在Winform开发中,我们使用的几种下拉列表展示字典数据的方式
|
存储 C语言
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
ArcGIS:Excel/Txt 文件生成点图层、属性表编辑的基本方法、属性表之间的连接(合并)和关联的操作、属性表的字段计算器的使用
374 0
|
8月前
|
存储 定位技术 数据格式
Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
Python中ArcPy读取Excel表格数据创建矢量要素图层并生成属性表字段与内容
|
8月前
|
编解码 定位技术 Python
Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置
Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置
215 1
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
在TableViewer中如何给表格的单元格增加其他组件的编辑功能
66 0
ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
277 0
ArcGIS:如何新建图层组并添加数据、切换数据视图和布局视图、修改符号系统?
|
定位技术 索引
ArcGIS数据编辑1 新要素的创建
🏆在本文中,作者讲解了ArcGIS要素创建了全流程,从面要素到线要素,分别以不同的方法补全了道路的缺失部分
281 0
|
Android开发
安卓中显示表格并将表格数据以excel格式导出
安卓中显示表格并将表格数据以excel格式导出
447 0
ArcGIS的批量操作值提取至点并批量导出到excel数据操作
ArcGIS的批量操作值提取至点并批量导出到excel数据操作
922 0
ArcGIS的批量操作值提取至点并批量导出到excel数据操作