返回介绍

直线

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

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

class ARXDLL McDbLine : public McDbCurve

通过调用直线类的构造函数

	// -------------------------------------------------------------------------
	// Summary:
	// 		构造函数
	// -------------------------------------------------------------------------
	McDbLine();
	// -------------------------------------------------------------------------
	// Summary:
	// 		由两个点构造函数
	// Parameters:
	// 		start	 -	直线的开点
	// 		end		-	直线的结束
	// -------------------------------------------------------------------------
	McDbLine(const McGePoint3d& start, const McGePoint3d& end);

或使用如下的方式来初始化直线实体:

McDbLine * pLine = new McDbLine;

通过设置函数来改变它的属性,如下:

McDbLine * pLine = new McDbLine(McGePoint3d(0, 0, 0), McGePoint3d(1, 1, 1));

使用通用模板函数来进行设置,该函数代码如下:

template<typename T>
inline void CParamDrawDlg::SetEnt(unsigned short iColorIndex, LPCTSTR pszNewVal, T * pEnt,
	std::function<void(McDbObjectId)> SetLayer,
	std::function<void(T*)> SetEnt)
{
	//获取到设置的相关层
	auto mLayerID = CreateLayer(pEnt);

	//把实体设置成红色,且加入到新层中去
	pEnt->setColorIndex(iColorIndex);
	pEnt->setAlwaysShowLineWeight(true);
	pEnt->setLineWeight(McDb::kLnWt018);
	pEnt->setLinetype(pszNewVal);
	pEnt->setLayer(mLayerID);

	//对于层进行更多的设置
	if (SetLayer)
	{
		SetLayer(mLayerID);
	}
	//对于实体进行更多的设置
	if (SetEnt)
	{
		SetEnt(pEnt);
	}

	AddToSpaceAndPutToView(pEnt);
}

初始化“直线”并调用它:

 	{
 		McDbLine * pEnt = new McDbLine(McGePoint3d(0, 0, 0), McGePoint3d(1, 1, 0));
 		SetEnt(256, _T("ByLayer"), pEnt);//颜色随层,线型随层
 	}
 
 	{
 		McDbLine * pEnt = new McDbLine(McGePoint3d(0, 1, 0), McGePoint3d(1, 2, 0));
 		SetEnt(0, _T("ByBlock"), pEnt);//颜色随块,线型随块
 	}
 
 	{
 		McDbLine * pEnt = new McDbLine(McGePoint3d(0, 2, 0), McGePoint3d(1, 3, 0));
 		SetEnt(2, _T("BORDER"), pEnt);//黄色,BORDER线型
 	}

在上述代码中,在将直线实体放入模型空间之前,将直线设置为红色并将该实体类型放入新加入的图层中,在添加模型空间并关闭实体之后,便不能再修改它的属性,但可以通过以打开的方式来修改它,在参数化绘制“文字”时,我调用代码示例如下:

	{
		McDbText * pEnt = new McDbText(McGePoint3d(0, 0, 0), _T("测试1"),
			McDbObjectId::kNull, 5.0, 1.0);
		SetEnt(256, _T("ByLayer"), pEnt);//颜色随层,线型随层
	}
	{
		McDbText * pEnt = new McDbText(McGePoint3d(10, 0, 0), _T("测试2"));
		SetEnt<McDbText>(0, _T("ByBlock"), pEnt, nullptr, [](McDbText * pFuncEnt) {
			pFuncEnt->setAlignmentPoint(McGePoint3d(1, 1, 0));
			pFuncEnt->setHeight(10);
			pFuncEnt->setHorizontalMode(McDb::kTextRight);
			pFuncEnt->setOblique(0.5);
		});//颜色随层,线型随层
	}
	{
		McDbText * pEnt = new McDbText(McGePoint3d(20, 0, 0), _T("测试3"));
		SetEnt<McDbText>(2, _T("BORDER"), pEnt, [](McDbObjectId mLayerID) {
			McDbObjectPointer<McDbLayerTableRecord> spLayer(mLayerID, McDb::kForWrite);
			spLayer->setIsLocked(true);
			spLayer->setBright(100);
//			spLayer->setIsFrozen(true);
			spLayer->setIsLocked(true);
		}, [](McDbText * pFuncEnt) {
			pFuncEnt->setWidthFactor(2);
			pFuncEnt->setColorIndex(4);
			pFuncEnt->setHeight(10);
			pFuncEnt->setRotation(1);
		});//颜色随层,线型随层
	}

这里我们在第三个文字的SetEnt函数中添加了设置图层并打开层表记录,调用调用代码如下:

			McDbObjectPointer<McDbLayerTableRecord> spLayer(mLayerID, McDb::kForWrite);
			spLayer->setIsLocked(true);
			spLayer->setBright(100);
//			spLayer->setIsFrozen(true);
			spLayer->setIsLocked(true);

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

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

发布评论

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