技术论坛

 WINCC中制作管道流体流动动画的一种方法

返回主题列表
作者 主题
szy868
侠客

经验值:619
发帖数:101
精华帖:6
楼主    2009-07-19 18:45:23
主题:WINCC中制作管道流体流动动画的一种方法 精华帖 
采用自定义对象的方法制作,不需要使用全局变量及外部量。
以制作横向向右流动流动块为例:
1、画两个高度相等的矩形,分为是rec1和rec2,rec1的宽度小于rec2,rec2属性中的“显示”为否,将rec1和rec2放在一起,左对齐,rec1居前。rec1为实际要显示的流动块,rec2在实际运行中不显示,但需要其属性参数作为定值,以供程序使用,rec2-rec1的值即为流动块每次向右移的距离。
2、将rec1和rec2组合成自定义对象,需要加入属性rec1.Left、rec1.Width、rec1.Visible、rec2.Width这几个属性到自定义对象中去,其它属性可以根据需要添加。
3、在自定义块中的属性“位置X1”加入C脚本,触发器选“250ms”标准周期,代码如下:
long Left,Left1,Width1,Width2;
BOOL Visible1;
long i,k;

Visible1 = GetPropBOOL(lpszPictureName,lpszObjectName,"Visible1"); //Return-Type: BOOL
Left1 = GetPropWord(lpszPictureName,lpszObjectName,lpszPropertyName); //Return-Type: long int

if (Visible1)
{
Left = GetLeft(lpszPictureName,lpszObjectName);
Width1 = GetPropWord(lpszPictureName,lpszObjectName,"Width1");
Width2 = GetPropWord(lpszPictureName,lpszObjectName,"Width2");

k = Width2 - Width1;
i = Left + Width1;
Left1 = Left1 + k;

if (Left1 >= i)
Left1 = Left;
}

return Left1;

4、将此自定义对象加入全局库中,以后可以在其它项目中直接使用。
5、在画面中使用直接拷贝,一个接一个连起来,可以形成管道流体动画效果。
其它方向的流动块按此方法一样可以,还可以制作起始流动块和结束流动块,实际使用中这两个块不要也行,用其它的东西把头尾盖起来就可以了。

自己测试了一下,在一个画面中放入200个左右的流体块,基本没有影响,但太多了,效果不好,应该够用了,使用外挂的OCX控制,也差不多是这样,控件多了也不行。

各位兄弟还有没有什么更好的建议,希望能够多交流。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。