返回介绍

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

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

class  ARXDLL McDbBlockReference : public McDbEntity

通过调用

// -------------------------------------------------------------------------
// Summary:
//  构造函数
// -------------------------------------------------------------------------
McDbBlockReference();
 
 
// -------------------------------------------------------------------------
// Summary:
//  构造函数
// Parameters:
//  position  - 块引用插入点
//  blockTableRec - 引用的块表记录id
// -------------------------------------------------------------------------
McDbBlockReference(const McGePoint3d&  position,
McDbObjectId  blockTableRec)

进行实例化,在此实例中,我们通过导入图纸的方式来添加图块,代码如下:

	Mcad::ErrorStatus sErrorStu(Mcad::eOk);
	//获取当前数据库
	auto  pCurDatabase = MxDraw::GetDatabase(MxDraw::GetCurOcxHandle());
	//引入一些块,供使用
	{
		//获取准备好的文件,将该文件中所有图块插入到当前数据库
		McDbDatabase mBlockBase;
		wchar_t pBlockPath[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(pBlockPath, L"%s%s", pTempPath, L"\\管道安装大样图.dwg");
			//插入当前该你数据库
			sErrorStu = mBlockBase.readDwgFile(pBlockPath);
		}

		if (Mcad::eOk == sErrorStu)
		{
			McDbObjectId mID;
			sErrorStu = pCurDatabase->insert(mID, nullptr, &mBlockBase);
			if (Mcad::eOk != sErrorStu)
			{
				MxDraw::MxMessageBox(L"导入图块成功!");
			}
		}
	}

在导入之前,我们可以看到的是“插入图块”界面没有任何可用图块,如下图:

blob.png

我们点击“块”按钮,代码执行到此处:

blob.png

可以看到的是我们读取到了“pBlockPath”该路径中的一张dwg图纸,即为此图纸:

blob.png

我们继续执行,可以看到视区会出现如下图块,这便是我们下段代码添加的第一个图块,

blob.png

代码如下:

	//插入一个图块
	{
		McDbBlockTable * pTable;
		pCurDatabase->getBlockTable(pTable, McDb::kForRead);

		McDbBlockTableIterator * pIterator;
		pTable->newIterator(pIterator);
		std::auto_ptr<McDbBlockTableIterator> spIterator(pIterator);//该迭代器的生命周期绑定到智能指针

		if (pIterator)
		{
			McDbObjectId mBlockTableID;
			//遍历所有记录
			for (; !pIterator->done(); pIterator->step())
			{
				//获取ID
				pIterator->getRecordId(mBlockTableID);

				McDbObjectPointer<McDbBlockTableRecord> spBlockRec(mBlockTableID, McDb::kForRead);
				auto d = spBlockRec.openStatus();
				if (Mcad::eOk == spBlockRec.openStatus())
				{
					McDbBlockReference* pBlock = new McDbBlockReference;
					auto mLayerID = CreateLayer(pBlock);

					pBlock->setBlockTableRecord(spBlockRec->objectId());
					pBlock->setPosition(McGePoint3d(0, 0, 0));
					pBlock->setScaleFactors(1.0);
					pBlock->setRotation(1.0);
					pBlock->setLayer(mLayerID);

					AddToSpaceAndPutToView(pBlock);

					break;
				}
			}
		}
	}

我们再次打开“插入图块”界面:

blob.png

可以看到的是添加了一些图块,这些图块真是我们添加的bin目录下的图纸里的图块

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

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

发布评论

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