ResForm高级应用宏编辑.docx
- 文档编号:523088
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:22
- 大小:991.66KB
ResForm高级应用宏编辑.docx
《ResForm高级应用宏编辑.docx》由会员分享,可在线阅读,更多相关《ResForm高级应用宏编辑.docx(22页珍藏版)》请在冰豆网上搜索。
ResForm高级应用宏编辑
ResForm-高级应用-宏编辑
ResForm高级应用——宏编辑
ResForm脚本语言是专门为基于ResForm构架下的地质研究、油藏工程、油藏描述等系列软件产品配置的编程语言。
利用该脚本语言,可以轻松实现现有功能的特定扩展,提高工作的质量和效率。
本文以一些常用的例子为主线介绍如何使用ResForm脚本语言。
旨在通过短小精炼的内容编排以及浅显的实例,抛砖引玉,将复杂难懂的计算机语言变成用一门可以快速掌握的工具。
用一个下午,或者临睡前时间,甚至在飞机上、上下班途中,您就有可能一口气把它读完。
是不是有点兴趣了呢?
下面就让我们一起来开始吧!
1三个术语
在这里,我们先简单介绍一下这样3个术语:
1.ResForm脚本语言:
一种计算机语言;
2.宏:
用于实现特定功能的代码段;
3.宏脚本语言编辑器:
编写或编辑宏的工具(或工作界面)。
“.”等即可。
main()表示程序执行的主入口函数,你可以将其简单理解为程序的开始标记。
代码段需要用一对大括号括起。
ShowMsg表示显示一个消息框,内容文本两侧需要用引号括起,语句结束时输入分号。
宏脚本语言中的符号一律使用英文符号。
单击【执行】按钮,可以看到运行结果(图4)。
到这里,我们的第一个宏就完成了,接下来的内容里,我们将通过实际工作中的例子来进行介绍,期间也会穿插一些编程中涉及的知识点。
4实例Ⅰ计算孔隙度
4.1算法描述
如果某口井岩心分析孔隙度与补偿密度相关性较好,存在下述关系式:
——计算孔隙度,代码中用POR表示;
DEN——补偿密度;
——岩石骨架密度,隐含值取2.65,代码中用DG表示;
——流体密度,隐含值取1,代码中用DF表示。
4.2代码实现
在这里,我们需要编写一段代码,它完成的工作是:
根据已有公式计算得到计算孔隙度数值,并将其加载至对应的图道里。
首先,单击按钮打开宏脚本编辑器,粘贴或键入下述语句(双斜杠//后面的文字为代码注释,可以不加),见图5:
//----------------------计算孔隙度----------------------
voidmain()
{
floatDG=2.65;//定义岩石骨架密度值
floatDF=1;//定义流体密度值
//新建曲线道,命名为POR
SCurveTracepor=this.Channels.AddTrace(WellTraceTypes.Curve,"POR");
por.Title="计算孔隙度";//定义道头显示内容
this.SetLoopRange(900,960);//设置循环的起止深度范围
//循环,根据公式计算并将值赋给图道
do{
por.Value=(this.DEN.Value-DG)/(DF-DG);
}while(this.NextRow());
}
//--------------------------------
图5
在详细讲解这段代码之前,我们先看看它的执行效果:
单击宏脚本语言编辑器对话框下方的【执行】按钮,可以看到单井图上新建了一条“计算孔隙度”图道。
我们手动将数值范围设置为0~1之间,见图6:
图6
4.3代码详解
第4.2小结所示的代码中:
1.float:
是一种数据类型,用于浮点型数据。
2.SCurveTrace:
曲线类图道的公共类。
其它同类型的类还有:
SDiscreteTrace离散型数据道、SLayerTraceBase层对象型数据道等。
por为SCurveTrace实例化后的一个对象。
在这里,我们简单介绍一些编程的基本概念:
类是一个抽象的概念。
以现实生活为例,我们可以把小轿车、越野车、卡车等具有的共同特性抽象出来,构成“汽车”类。
类包含属性和方法。
属性相当于特征描述,如汽车具有颜色、箱型等。
方法相当于具有的行为,如汽车可以进行启动、前进、后退等活动。
对象是类这个抽象概念对应的实体。
如,有一辆车牌照号码为陕A55522的红色福特小轿车,那么这辆车就是将“汽车”类实例化的对象。
我们通过将类实例化成对象来使用这个类的属性和方法。
读到这里你是否有疑问?
为什么用这种类与对象的方式设计程序呢?
这样设计的好处,一是将编写的代码更加贴近真实生活,增加它的易读性;二是通过抽象把大程序分解成更易于管理的小单元,类似于“黑盒”。
就想您在使用宏脚本的某个类或方法时,不需要知道它们内部是怎样实现的。
3.this:
this是一个关键字。
关键字是计算机语言里事先定义的,有特别意义的标识符。
在ResForm脚本语言中,this相当于单文档类的实例。
在this之后输入点号“.”可以查看到单文档类下所有的图道类以及方法、属性等。
4.实心点号:
“.”表示“……的”。
5.Channels:
图道或图道组合的集合,可以理解为一个容器,能够放置一个或者多个图道。
6.AddTrace:
为Channels类所具有的一个方法,意为“添加图道”。
小括号内传递两个参数,分别代表图道类型为曲线道、图道名称为POR。
7.对象定义之后就可以使用了,por.Title="计算孔隙度"意为将por对象(por曲线道)定义道头显示内容设置为“计算孔隙度”。
8.SetLoopRange:
为单文档类下的一个方法,表示设置循环的起止深度范围,小括号内传递两个参数,分别是顶深和底深。
9.do-while循环:
do-while循环语义为:
“当满足某个条件时,一直做某件事情,直到判断条件不满足为止”。
在我们讨论的例子里:
do{
por.Value=(this.DEN.Value-DG)/(DF-DG);
}while(this.NextRow());
可以解释为在指定的深度范围内,根据DEN值以及公式,计算第一个采样点对应的por值,并把该值赋值给por。
接着计算第二个采样点的值,以此类推,直到深度大于给定的底深为止。
4.4深入了解
利用第4.2小结所示的代码中,我们虽然自动生成了一个计算孔隙度图道,但还未对其进行任何修饰。
如,设置曲线的数值范围、颜色、充填样式等,从而达到更好的显示效果。
为此,我们增加下述几行代码(图7):
//---------------------------------------------------
por.Left=0;//设置左刻度值
por.Right=1;//设置右刻度值
por.CurveColor=Color.Red;//设置曲线颜色为红色
por.FillMode=FillLogCurveMode.Left;//设置曲线充填样式为左充填
//设置充填画刷样式,参数分别有前景色、背景色、充填符号
por.FillBrush=newXBrush(COLORREF.Black,COLORREF.RGB(205,133,23),
HatchStyle.DashedHorizontal);
//--------------------------------------------
图7
其中:
1.Left、Right、CurveColor、FillMode、FillBrush均属于曲线道的属性,在这里我们完成了给por这条特定的曲线道赋值的任务;
2.除上述5个属性外,曲线道还具有其它属性。
我们可以通过输入por加实心点看到(图8):
属性前均有作为标记。
紫红色小方框标记则代表方法,如。
3.Color:
表示颜色,在Color后输入实心点即可选择想要的颜色。
4.FillMode:
表示充填样式。
在FillMode后输入等号,可选择FillLogCurveMode充填类型,包含左充填、右充填两种。
5.FillBrush:
表示充填画刷,这里需要通过关键词new创建一个画刷对象。
传递3个参数,分别是:
(1)前景色:
设置为黑色,用COLORREF.Black表示。
其中,COLORREF的用法与Color类似;
(2)背景色:
设置橙黄色,可以用RGB值表示为COLORREF.RGB(205,133,23);
(3)充填符号:
设置为水平虚线,用HatchStyle.DashedHorizontal表示。
单击【执行】按钮,代码执行效果如图9:
图8
图9
同样,本实例实现的计算孔隙度工作还可以通过裸体宏代码来实现。
具体方法如下:
1.在单井图中创建“计算孔隙度”曲线道;
2.选中孔隙度道后,点右键,选择【编辑/执行宏】命令;
3.在弹出的对话框中设置循环顶、底深度范围,选中“自动循环”,输入如下孔隙度计算公式代码(图10):
//-----------------------------------------
//根据公式计算并将结果赋值给POR图道
this.POR.Value=((this.DEN.Value-2.65)/(1-2.65));
//-----------------------------------------
4.单击执行宏后,点【确定】按钮;
5.设置图道刻度范围为“0-1”,可以看到得到的计算孔隙度杆状图(图11),此时只需要再设置图道显示样式即可。
图11
5实例Ⅱ计算泥质含量
5.1算法描述
如果泥质含量与测井曲线存在下述经验公式:
()
式中——解释层段内第条曲线测井值;
——第条曲线在纯砂岩处的测井值;
——第条曲线在纯泥岩处的测井值;
——第条曲线测井相对值;
GCUR——地区经验系数,对第三纪地层为3.7;对老地层为2;也可以由本地区的实际资料统计获得。
——由第条曲线求出泥质含量;
——表示任一条测井曲线,如GR、SP、RT、CNL、NLL,本节我们选用自然伽马GR曲线进行计算。
5.2代码实现
单击按钮打开宏脚本编辑器,粘贴或键入下述语句:
//----------------------计算泥质含量----------------------
voidmain()
{
floatGCUR=3.7;//定义地层经验系数
floatGMAX=this.GR.GetMaxValue(900,945);//获得GR曲线最大值
floatGMIN=this.GR.GetMinValue(900,945);//获得GR曲线最小值
floatSH_value;//定义GR曲线测井相对值
//创建一个名为VSH的曲线道
SCurveTracevsh=this.Channels.AddTrace(WellTraceTypes.curve,"VSH");
vsh.Title="泥质含量";//设置道头标题
vsh.CurveColor=Color.Blue;//设置曲线颜色
vsh.CurveStyle=PenDashStyle.Dash;//设置曲线线型为虚线
vsh.CurveWidth=1.5;//设置曲线宽度
vsh.FillMode=FillLogCurveMode.Left;//设置曲线充填样式为左充填
//设置充填画刷,前景色为黑色、背景色为深灰色、充填符号为水平虚线
vsh.FillBrush=newXBrush(COLORREF.Black,COLORREF.DarkGray,
HatchStyle.DashedHorizontal);
vsh.Left=0;//设置曲线左刻度值
vsh.Right=100;//设置曲线右刻度值
//设置循环的起止深度范围为900~945
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ResForm 高级 应用 编辑