CAD制作简易动画

1、在上一篇文章中讲解了利用闪烁实体TwinkeEnt方法制作动画,现在介绍另一种实现动画的方法。

2、实现思路:首先我们先定义一个RotateEnt方法,得到动画临时对象,利用Rotate方法旋转一个对象,然后绘制动画对象。然后我们需要在控件启动时打开文件,然后把对象初始化为动画状态,再启动一个用于实现动画的时钟事件,最后调用我们之前定义的RotateEnt方法就可以啦。

3、主要用到函数说明:

(1)IMxDrawEntity::Rotate

旋转一个对象。详细说明如下:

参数

说明

[in] IMxDrawPoint* basePoint

旋转基点

[in] DOUBLE dRotationAngle

旋转角度

(2)IMxDrawAnimation::GetAnimationEntity2

得到动画临时对象.如果对象没有被初始成动画状态,返回为 NULL。详细说明如下:

参数

说明

[in] BSTR pszHandle

动画对象句柄

js中实现代码说明:

     function InitDraw() {
        draw = document.getElementById("MxDrawXCtrl");
  draw.ImplementCommandEventFun = function DoCommandEventFunc(iCmd) {
        if (iCmd == 1) {
             // 启动时打开文件
             draw.OpenDwgFile(draw.GetOcxAppPath() + "\\Blk\\animation.dwg");
             var animation = draw.NewComObject("IMxDrawAnimation");
                 //把对象初始化成动画状态
                 animation.InitAnimationEntity2("211");
      animation.InitAnimationEntity2("212");
      animation.InitAnimationEntity2("213");
                 // 启动一个控件时钟事件,用于实现动画。
      draw.CallLongParam1("Mx_StartUserTimer", 30);
             }
         };
         draw.ImplementCustomEvent = function CustomEvent(sEventName) {
if (sEventName == "Mx_UserTimer")
    {
       var animation = draw.NewComObject("IMxDrawAnimation");
       //开始一个动画绘制过程
                 animation.StartDraw();
                 // 211 212  213是需要旋转实体的句柄.
                 RotateEnt("211", animation);
                 RotateEnt("212", animation);
                 RotateEnt("213", animation);
                 //结束动画绘制过程
                 animation.EndDraw();
                 // 注意需要显示释放递代器.,不然会引起错误
       animation = null;
       CollectGarbage();
   }
         };  
     }
function  RotateEnt( handls,  animation)
      {
          //得到动画临时对象.如果对象没有被初始成动画状态,返回为 NULL
          var ent = animation.GetAnimationEntity2(handls);
          if (ent != null && (ent.ObjectName == "McDbBlockReference"))
          {
              var blkRef = ent;
              //旋转一个对象,参数一为旋转基点,参数二为旋转角度
              blkRef.Rotate(blkRef.Position, -30 * 3.14159265 / 180.0);
              //绘制动画对象.该函数只能在StartDraw,EndDraw之前调用
              animation.Draw2(handls);
          }
      }

4、效果展示:

JFVZQ}89C_7}Z37X[_0H@{L.png

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值