OpenCasCade(OCC)7.2版本_实现ColorScale功能

问题描述
采用OCC计算点到曲面的误差,希望采用云图的方式更加直观的显示误差的范围,在参考网络上有关云图的资料发现,之前版本中,V3d_Viewer中自带云图的功能,然而7.2版本中这个功能集成在了AIS_ColorScale中,具体实现过程中参数设置是问题所在,摸索过后,实现了云图的显示功能。

解决方案

//用户输入云图的最大值和最小值
void XXX::makeColorScale(double &maxN, double &minN)//制作显示误差的云图
{
    
    
	//AIS_ColorScale系统自带的制作云图的方式
	Handle(AIS_InteractiveContext) myAISContext = GetDocument()->GetIC();//获取上下文的Context
	Handle(AIS_ColorScale) aColorScale = new AIS_ColorScale();//云图制作集成在这个方法中
	//获取界面的长和宽
	CRect cr;
	GetClientRect(&cr);
	ClientToScreen(&cr);
	int cx = GetSystemMetrics(SM_CXFULLSCREEN);
	int cy = GetSystemMetrics(SM_CXFULLSCREEN);
	//设置云图参数,具体参数的含义可以参看OCC自带的用户手册
	aColorScale->SetBreadth((int)(cx*0.06));
	aColorScale->SetHeight((int)(cy*0.3));
	aColorScale->SetMax(maxN);
	aColorScale->SetMin(minN);
	aColorScale->SetNumberOfIntervals(8);
	aColorScale->SetSmoothTransition(Standard_True);
	aColorScale->SetLabelPosition(Aspect_TOCSP_RIGHT);
	//这一步是将云图从X-Y空间 进行转换,很重要
	aColorScale->SetZLayer (Graphic3d_ZLayerId_TopOSD);
	double z = 0.1*cy;
	gp_Pnt thePoint(0.0,0.0,z);
	Graphic3d_Vec2i anoffset(0,Standard_Integer(thePoint.Z()));
	myAISContext->SetTransformPersistence (aColorScale, new Graphic3d_TransformPers (Graphic3d_TMF_2d, Aspect_TOTP_LEFT_LOWER,anoffset));
	//云图显示
	myAISContext->SetDisplayMode(aColorScale,1,Standard_False);
	myAISContext->Display(aColorScale,Standard_False);
}

功能实现
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40247982/article/details/106619947
今日推荐