返回介绍

图片

发布于 2023-08-09 23:10:33 字数 3107 浏览 0 评论 0 收藏 0

图片在MxDrawCAD控件下为一个实体类:

// -------------------------------------------------------------------------
// Summary:
//  光栅图形定义类型
// -------------------------------------------------------------------------
class ARXDLL McDbRasterImageDef : public McDbObject
// -------------------------------------------------------------------------
// Summary:
//  光栅图片类,该类用于在CAD中显示光栅图形
// -------------------------------------------------------------------------
class ARXDLL McDbRasterImage : public McDbImage
class ARXDLL McDbImage : public McDbEntity

我们通过如下的方式将图片显示至视区:

 	wchar_t sFileName[200] = {};
 	{
 		wchar_t pTempPath[200] = {};
 		auto sPath = GetCommandLine();
 		sPath++;
 		size_t iRank(wcslen(sPath));
 		for (; iRank > 0; iRank--)
 		{
 			if (L'/' == sPath[iRank] || L'\\' == sPath[iRank])
 			{
 				wmemcpy(pTempPath, sPath, iRank);
 				break;
 			}
 		}
 		//获取路径
 		wsprintf(sFileName, L"%s%s", pTempPath, L"\\Watermark.png");
 	}

	double dW = 10;
	double dH = 10;

	{
		// 得到相关图片消息
		Gdiplus::Image tmpImage(sFileName);
		if (tmpImage.GetLastStatus() != Gdiplus::Ok)
		{
			acutPrintf(_T("n 图片文件不能打开"));
			return;
		}
		dW = tmpImage.GetWidth() / 10.0;
		dH = tmpImage.GetHeight() / 10.0;
	}

	CString sName = sFileName;
	if (sName.IsEmpty())
	{
		return;
	}

	// 在字典对对象中创建图片定义对象。
	McDbDatabase* pDatabase = Mx::mcdbHostApplicationServices()->workingDatabase();
	McDbDictionary* pDict = NULL;
	pDatabase->getNamedObjectsDictionary(pDict, McDb::kForWrite);
	if (pDict == NULL)
		return;
	//


	McDbObjectId imageDictId;
	if (pDict->getAt(MCAD_IMAGE_DICT_NAME, imageDictId) != Mcad::eOk)
	{
		// 创建该字典.
		McDbDictionary* pImageDict = new McDbDictionary;
		if (pDict->setAt(MCAD_IMAGE_DICT_NAME,
			pImageDict, imageDictId) != Mcad::eOk)
		{
			delete pImageDict;
			pImageDict = NULL;
		}
		else
		{
			pImageDict->close();
		}
	}

	pDict->close();

	McDbObjectId imageDefId;
	if (!imageDictId.isNull())
	{
		McDbObjectPointer<McDbDictionary> spImageDict(imageDictId, McDb::kForWrite);
		if (spImageDict.openStatus() == Mcad::eOk)
		{
			if (spImageDict->getAt(sName, imageDefId) != Mcad::eOk)
			{
				//添加图象定义.
					McDbRasterImageDef* pNewImageDef = new McDbRasterImageDef;
				pNewImageDef->setSourceFileName(sFileName);

				if (spImageDict->setAt(sName,
					pNewImageDef, imageDefId) != Mcad::eOk)
				{
					delete pNewImageDef;
					pNewImageDef = NULL;
				}
				else
				{
					pNewImageDef->close();
				}
			}
		}
	}

	if (!imageDefId.isNull())
	{
		// 创建Image实例。
		McDbRasterImage* pImage = new McDbRasterImage;
		McGeVector3d uCorner = McGeVector3d::kXAxis * dW;
		McGeVector3d vOnPlane = McGeVector3d::kYAxis * dH;

		pImage->setOrientation(McGePoint3d(0, 0, 0), uCorner, vOnPlane);
		pImage->setImageDefId(imageDefId);

		auto mLayerID = CreateLayer(pImage);
		pImage->setLayer(mLayerID);

		MrxDbgUtils::addToCurrentSpaceAndClose(pImage);
	}

上端代码即为将bin目录下的水印显示至视区

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文