精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
下文只是开发文档中的摘抄,如果需要OpenGL技术支持请联系孙老师,QQ396806883,微信ryysoft,手机13803810136.本文原创,禁止任何形式的侵权使用。
本软件结合OpenGL三维绘图技术,实现了石油行业里钻井的轨迹生成和轨迹设计。
生成使用的算法为圆柱螺线法内插,把算法进行了合理的流程设计,从输入数据形成原始点,再生成内插点,原始点和内插点在三维环境里生成了曲线图形。
轨迹设计使用了三段式和五段式算法,结合原始数据,计算了各个结果点的坐标,用直线或圆弧连接了结果点,形成了优化后的线段。
使用C++技术,经过合理的分析,建立了如下的架构:
钻井算法依赖于视图和文档进行工作,把算法生成的结果转化为数据形式,交由文档来保存,文档的数据由视图来显示,同时显示结果的控制也要通过视图的人机交互机制来实现。
MFC视图依赖于封装视图工作,封装视图把OpenGL的三维显示细节封装起来,提供了数据成员和功能成员函数,让OpenGL的使用更简单。
显示用的数据是在文档里保存,文档里以图元组的形式来保存数据,图元的定义和功能由图元库来实现。图元的数据成员也是依赖于OpenGL的数据形态来生成。
业务、文档和视图的关系如下:
工具栏按钮里有常用功能,界面如下:
按钮分别为:顶视图、底视图、前视图、后视图、左视图、右视图、Z轴向上正常视图、钻井视图、映射类型、多视图窗口、窗口自适应显示、选中区域放大、放大、缩小、映射模式、移除HLRE、抗锯齿和生成图片。
平移功能并没有在工具栏按钮里提供,是通过鼠标和按键结合来提供,在焦点为显示窗口上时,同时按下Ctrl键和鼠标中键,再移动鼠标,就可以平移窗口内所有显示对象。
这个函数是通过下面函数来实现:
void CDrillchartView::PanView(int x,int y)
这个函数又调用了OpenGL封装视图的如下函数。
void CGLView::PanView(int x,int y)
在这个函数里,CGLCamera类对象myCamera是处理核心。
我们看下CGLCamera的Render函数。
void CGLCamera::Render( void )
{
::glRotated(-RotatedX , 1.0, 0.0, 0.0);
::glRotated(-RotatedY , 0.0, 1.0, 0.0);
::glRotated(-RotatedZ , 0.0, 0.0, 1.0);
::glTranslated( -Position.x, -Position.y, -Position.z );
}