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

简介: 导出图层的实现: static void qxzyOperateLayer_ExportLayer(void) { CStdioFile f; CFileException e; char *pFileName = "C:\\layers.txt"; if(!f.Open((LPCTSTR)pFileName, CFile::modeCreate|CFile::mod

导出图层的实现:

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


目录
相关文章
Altium Designer导出Gerber文件的步骤
在设计好PCB之后就需要发出去制作,一般我们都会选择发送Gerber文件。当然也可以发送PCB原文件,只不过这样没有保密性,这个根据自己的实际情况来选择。如果PCB对于保密性没有要求,自己对工艺又不是很了解的话,为了方便可以直接发送PCB原文件。这里还是建议大家导出Gerber文件做比较好,下面我们就来看一下Altium Designer如何导出Gerber文件。
295 0
|
JavaScript
Fastadmin列表的多图预览(一行代码)
Fastadmin列表的多图预览(一行代码)
380 0
|
4月前
Axure Axhub Charts 数据编辑、显示
Axure Axhub Charts 数据编辑、显示
55 0
|
7月前
|
Python
ArcGIS中ArcMap通过Python程序脚本新建工具箱与自定义工具的方法
ArcGIS中ArcMap通过Python程序脚本新建工具箱与自定义工具的方法
103 1
|
7月前
在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF
在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF
【ArcGIS教程】ArcMap中如何导入外部Excel属性数据呢?
【ArcGIS教程】ArcMap中如何导入外部Excel属性数据呢?
【ArcGIS教程】ArcMap中如何导入外部Excel属性数据呢?
|
存储 数据可视化 Java
NVRAM Editor 工具使用记录
NVRAM Editor 工具使用记录
471 0
|
前端开发 C语言 C++
Python Tkinter Gui 窗口图标,标签,输入,单复选,文件导入,按钮,日志 等常用组件 基本使用
tkinter是什么? 我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口; Tk是一个图形库,支持多个操作系统,使用Tcl语言开发; Tk会调用操作系统提供的本地GUI接口,完成最终的GUI;
1259 0
Python Tkinter Gui 窗口图标,标签,输入,单复选,文件导入,按钮,日志 等常用组件 基本使用
点击abap的选择屏幕工具栏按钮下载excel模板
自己编写一个report,分配了事务码以后,执行该事务码,在选择屏幕界面看到一个按钮,点击这个按钮,就可以将预先上传至sap服务器的excel文件下载到本地。服务器上的excel文件是预先通过事务码SMW0上传到SAP服务器系统的:选择包,然后执行,看看里面有什么如下图,就是目前SAP系统中存在的e.
2820 0