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


目录
相关文章
|
算法
两个小模型互相验证,直接比肩大模型?微软的rStar甚至没用CoT和微调
【9月更文挑战第10天】微软研究院亚洲院与哈佛大学研究团队提出了rStar,一种创新的方法,旨在提升小型语言模型(SLMs)的推理能力。rStar采用自我对弈的相互生成-判别过程,利用增强版蒙特卡洛树搜索(MCTS)算法生成高质量推理轨迹,并由另一个相似能力的SLM验证这些轨迹的一致性。这种方法在多个模型与任务中显著提升了推理准确率,如在GSM8K上,LLaMA2-7B的准确率从12.51%跃升至63.91%。rStar的独特之处在于无需微调或依赖更强大的模型即可提升推理能力。然而,其计算成本和对SLM自身能力的依赖仍是挑战。
354 7
|
8月前
|
监控 负载均衡 安全
静态IP代理与动态IP代理:提升速度与保障隐私的技术解析
本文探讨了静态IP代理和动态IP代理的特性和应用场景。静态IP代理通过高质量服务提供商、网络设置优化、定期更换IP与负载均衡及性能监控提升网络访问速度;动态IP代理则通过隐藏真实IP、增强安全性、绕过封锁和提供独立IP保障用户隐私。结合实际案例与代码示例,展示了两者在不同场景下的优势,帮助用户根据需求选择合适的代理服务以实现高效、安全的网络访问。
269 1
|
11月前
|
域名解析 缓存 网络协议
Web基础与HTTP协议
通过掌握这些基础知识和技术,开发者可以更加高效地构建和优化Web应用,提供更好的用户体验和系统性能。
226 15
|
12月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
361 3
|
12月前
|
机器学习/深度学习 自然语言处理 算法
智能语音助手的未来:从技术到伦理的探索
【10月更文挑战第21天】 本文探讨了智能语音助手的发展历程、当前技术现状以及面临的伦理挑战。通过对现有技术的深入分析,文章揭示了智能语音识别和自然语言处理技术的进步对日常生活的影响,同时指出了数据隐私、算法偏见和人机交互等方面的伦理问题。最后,文章提出了对未来智能语音助手发展的展望,强调了在技术创新的同时,必须考虑到伦理和社会影响的重要性。
647 0
|
数据采集 搜索推荐 机器人
|
机器学习/深度学习 缓存 架构师
十年技术进阶路,让我明白了三件要事(8000字长文)
8000字长文,大概花费您10分钟的阅读时间,我将以十年成长道路与八年写博经历分享与你,希望能给予各位读者或多或少的建议与提醒
703 1
十年技术进阶路,让我明白了三件要事(8000字长文)
|
弹性计算 固态存储 Linux
【ECS测评拓展】横向对比其他服务器 unixbench测试
一时兴起用手头上不同的三种云/虚拟服务器简单跑个分数,纯当娱乐大师了哈!
1864 2
【ECS测评拓展】横向对比其他服务器 unixbench测试
|
数据安全/隐私保护 UED
无影云桌面,yyds!!!
无影云桌面,带来的不仅仅是方便,更是云桌面的里程碑。
35027 2
无影云桌面,yyds!!!
|
安全 开发者
新能力|分账明白,账本清楚,商家超轻松
目前,商家分账 功能已经全面开放给企业商户,快来了解一下吧。
2907 12
新能力|分账明白,账本清楚,商家超轻松