(skyline)TerraExplorer Pro开发:线路流水效果代码方法2

function Init()
      {
          var flyPath = "d:\\1.fly";

            SGWorld.Project.Open(flyPath);

      }

      var linesNodeNumArray;
        var linesRouteCoordsArray;
        var  PLinesArray;
        var Modelfilename = "D:\\roundabout.xpc";
        function btnRouteWaterEffect_Click()
        {
           linesNodeNumArray = new Array();
             linesRouteCoordsArray = new Array();
              PLinesArray = new Array();
            var groupid = SGWorld.ProjectTree.FindItem("LineGroup");
            if (groupid != "")
            {
                var itemid = SGWorld.ProjectTree.GetNextItem(groupid, 11);
                if (itemid != "")
                {
                    var itobj = SGWorld.ProjectTree.GetObject(itemid);
                    if (itobj != null)
                    {
                         PLinesArray.push(itobj);

                    }

                }

                 itemid = SGWorld.ProjectTree.GetNextItem(itemid, 13);
                if (itemid != "")
                {
                    var itobj = SGWorld.ProjectTree.GetObject(itemid);
                    if (itobj != null)
                    {
                         PLinesArray.push(itobj);

                    }

                }

                itemid = SGWorld.ProjectTree.GetNextItem(itemid, 13);
                if (itemid != "")
                {
                    var itobj = SGWorld.ProjectTree.GetObject(itemid);
                    if (itobj != null)
                    {
                         PLinesArray.push(itobj);

                    }

                }

                itemid = SGWorld.ProjectTree.GetNextItem(itemid, 13);
                if (itemid != "")
                {
                    var itobj = SGWorld.ProjectTree.GetObject(itemid);
                    if (itobj != null)
                    {
                         PLinesArray.push(itobj);
                    }

                }


                for (var i = 0; i < PLinesArray.length; i++)
                {
                    linesNodeNumArray.push(0);
                }

                for (var i = 0; i < PLinesArray.length; i++)
                {
                    var linestring = PLinesArray[i].Geometry;

                    var point = linestring.Points.Item(0);
                    linesRouteCoordsArray.push(point.X);
                    linesRouteCoordsArray.push(point.Y);
                }
                //初始化好几个数组后,开始调用time控件
                window.setInterval("SetRouteModelByLines(0,10)",100);
            }
        }

        //line1组 line2组  line3组下模型名称和序号相同0  1  2
        function SetRouteModelByLines(routeangel, offsetValue)
        {

for (var i = 0; i < PLinesArray.length; i++)
            {
                var linestring = PLinesArray[i].Geometry;
                var groupname = PLinesArray[i].TreeItem.Name;
                if (linestring != null)
                {
                    if (linesNodeNumArray[i] >= linestring.NumPoints-1)
                    {
                        linesNodeNumArray[i] = 0;
                        var point = linestring.Points.Item(0);
                        linesRouteCoordsArray[2 * i] = point.X;
                        linesRouteCoordsArray[2 * i + 1] = point.Y;

                        //用于循环,需要将这个线上的模型删除后再次重新创建
                        var groupid = SGWorld.ProjectTree.FindItem(groupname + "组");
                        if (groupid != "")
                        {
                            SGWorld.ProjectTree.DeleteItem(groupid);
                        }

                    }

                    var curPointCoord = linestring.Points.Item(linesNodeNumArray[i]);

                    var nextPointCoord = linestring.Points.Item(linesNodeNumArray[i] + 1);
                    var positionfrom = SGWorld.Creator.CreatePosition(curPointCoord.X, curPointCoord.Y, curPointCoord.Z, 3, 0, 0, 0, -1);
                    var positionto = SGWorld.Creator.CreatePosition(nextPointCoord.X, nextPointCoord.Y, nextPointCoord.Z, 3, 0, 0, 0, -1);
                    var positionAngles = SGWorld.CoordServices.GetAimingAngles(positionfrom, positionto);
                    if (nextPointCoord.X == linesRouteCoordsArray[2 * i] && nextPointCoord.Y == linesRouteCoordsArray[2 * i + 1])
                    {
                        //说明此线段已经走完,修改linesNodeNumArray[i]为i+1;
                        linesNodeNumArray[i] = linesNodeNumArray[i] + 1;
                    }
                    else
                    {
                        //开始判断模型是否存在,如果存在,则修改,不存在则创建
                        var groupid = SGWorld.ProjectTree.FindItem(groupname + "组");
                        if (groupid == "")
                        {
                            groupid = SGWorld.ProjectTree.CreateGroup(groupname + "组", "");
                        }

                        var modelid = SGWorld.ProjectTree.FindItem(groupname + "组\\" + linesNodeNumArray[i]);
                        if (modelid == "")
                        {

                            var position = SGWorld.Creator.CreatePosition(curPointCoord.X, curPointCoord.Y, curPointCoord.Z, 3, positionAngles.Yaw, positionAngles.Pitch, positionAngles.Roll, -1);
                            var model65 = SGWorld.Creator.CreateModel(position, Modelfilename, 1, 0, groupid, linesNodeNumArray[i]);

                        }
                        else
                        {
                            //修改模型的比例  linesNodeNumArray[i]当前point的序号     
                            //linesRouteCoordsArray[2 * i]  linesRouteCoordsArray[2 * i + 1] 记录旧的节点
                            //linestring
                            var positionCurrent = SGWorld.Creator.CreatePosition(linesRouteCoordsArray[2 * i], linesRouteCoordsArray[2 * i + 1], curPointCoord.Z, 3, 0, 0, 0, -1);
                            var sydis = SGWorld.CoordServices.GetDistance(linesRouteCoordsArray[2 * i], linesRouteCoordsArray[2 * i + 1], nextPointCoord.X, nextPointCoord.Y);
                            var model65 = SGWorld.Creator.GetObject(modelid);
                            if (model65 != null)
                            {
                                if (sydis > offsetValue)
                                {
                                    var position = SGWorld.Creator.CreatePosition(curPointCoord.X, curPointCoord.Y, curPointCoord.Z, 3, positionAngles.Yaw, positionAngles.Pitch, positionAngles.Roll, -1);
                                    var angel = positionAngles.Yaw * Math.PI / 180;
                                    var newcoord = SGWorld.CoordServices.MoveCoord(linesRouteCoordsArray[2 * i], linesRouteCoordsArray[2 * i + 1], offsetValue * Math.sin(angel), offsetValue * Math.cos(angel));
                                    linesRouteCoordsArray[2 * i] = newcoord.X;
                                    linesRouteCoordsArray[2 * i + 1] = newcoord.Y;
                                    var dis = SGWorld.CoordServices.GetDistance(curPointCoord.X, curPointCoord.Y, newcoord.X, newcoord.Y);
                                    model65.ScaleY = dis;
                                }
                                else
                                {
                                    linesRouteCoordsArray[2 * i] = nextPointCoord.X;
                                    linesRouteCoordsArray[2 * i + 1] = nextPointCoord.Y;
                                    //序号linesNodeNumArray[i]是否加1待定
                                    var maxdis = SGWorld.CoordServices.GetDistance(positionfrom.X,positionfrom.Y, positionto.X,positionto.Y);
                                    model65.ScaleY = maxdis;//需要知道模型比例为1的时候的延长方向是多少米,最好是1
                                }
                            }
                        }
                    }
                }


            }
            //timer1.Enabled = false;
        }

猜你喜欢

转载自blog.csdn.net/smallwind1984/article/details/81510688
今日推荐