コード例 #1
0
    public override void Construct()
    {
        ConstructBase();

        var ska = qmm.triDiag * 0.5f;
        var qkm = qmm.qkm;

        //var pos1 = GetPosFromLatLng(qkm.ll1, yval0);
        var pos1  = qmm.GetPosFromLatLng(qkm.ll1);
        var name1 = "ll1";

        SphInfo.DoInfoSphere(decoroot, name1, pos1, ska, "red", qkm.ll1);

        //var pos2 = GetPosFromLatLng(qkm.ll2, yval1);
        var pos2  = qmm.GetPosFromLatLng(qkm.ll2);
        var name2 = "ll2";

        SphInfo.DoInfoSphere(decoroot, name2, pos2, ska, "red", qkm.ll2);

        //var pos3 = GetPosFromLatLng(qkm.tileul.llul, yval0);
        var pos3  = qmm.GetPosFromLatLng(qkm.tileul.llul);
        var name3 = "qkt_ll_ul";

        SphInfo.DoInfoSphere(decoroot, name3, pos3, ska, "blue", qkm.tileul.llul);
        //var pos4 = GetPosFromLatLng(qkm.tilebr.llbr, yval1);
        var pos4  = qmm.GetPosFromLatLng(qkm.tilebr.llbr);
        var name4 = "qkt_ll_br";

        SphInfo.DoInfoSphere(decoroot, name4, pos4, ska, "blue", qkm.tilebr.llbr);
    }
コード例 #2
0
ファイル: SphInfo.cs プロジェクト: jmarymee/CampSim
    public static SphInfo DoInfoCubeSlim(GameObject parent, string sname, Vector3 pos, float ska, string color, LatLng ll = null, bool addSphInfo = true)
    {
        var sphtran = GpuInst.CreateCubeGpu(sname, pos, ska, color);

        sphtran.transform.parent = parent.transform;
        SphInfo spi = null;

        if (addSphInfo)
        {
            spi          = sphtran.gameObject.AddComponent <SphInfo>();
            spi.latLng   = ll;
            spi.nodeInfo = null;
        }
        return(spi);
    }
コード例 #3
0
    public override void Construct()
    {
        ConstructBase();

        var ska = qmm.triDiag * 0.5f;
        int i   = 0;

        foreach (var md in qmm.llmap.mapcoord.mapdata)
        {
            var sname = "mc:" + i;
            //var v = llmap.mapcoord.glbmap(md.x, 0, md.z);
            var ll    = new LatLng(md.lat, md.lng);
            var posll = qmm.GetPosFromLatLng(ll);
            var pos   = new Vector3((float)md.x, posll.y, (float)md.z);
            var spi   = SphInfo.DoInfoSphere(decoroot, sname, pos, ska, "orange", ll);
            spi.mapPoint = md;
            i++;
        }
    }
コード例 #4
0
ファイル: SphInfo.cs プロジェクト: jmarymee/CampSim
    public static SphInfo DoInfoSphere(GameObject parent, string sname, Vector3 pos, float ska, string color, LatLng ll = null, bool addSphInfo = true)
    {
        var sphgo = GameObject.CreatePrimitive(PrimitiveType.Sphere);

        //var sph = Instantiate(sphgo);
        sphgo.name                 = sname;
        sphgo.transform.parent     = parent.transform;
        sphgo.transform.position   = pos;
        sphgo.transform.localScale = new Vector3(ska, ska, ska);
        qut.SetColorOfGo(sphgo, color);
        SphInfo spi = null;

        if (addSphInfo)
        {
            spi          = sphgo.AddComponent <SphInfo>();
            spi.latLng   = ll;
            spi.nodeInfo = null;
        }
        return(spi);
    }
コード例 #5
0
    IEnumerator YieldingConstruct()
    {
        var sw = new StopWatch();

        sw.Start();
        ConstructBase();
        var nHorzSecs = qmm.nHorzSecs;
        var nVertSecs = qmm.nVertSecs;
        var ska       = qmm.triDiag * 0.1f;


        int imn = 0;

        for (int i = 0; i <= nHorzSecs; i++)
        {
            for (int j = 0; j <= nVertSecs; j++)
            {
                var pos   = qmm.GetMeshNodePos(i, j);
                var sname = "sph:" + i + "-" + j;
                //Debug.Log("making " + sname);
                var ll = qmm.GetMeshNodeLatLng(i, j);
                SphInfo.DoInfoCubeSlim(decoroot, sname, pos, ska, "green", ll);
                imn++;
            }
            if (sw.ElapfOverYieldTime())
            {
                Debug.Log($"Yielding on node {imn}");
                yield return(null);

                if (earlyTerminate)
                {
                    break;
                }
            }
        }
        sw.Stop();
        Debug.Log($"Generated {imn} meshnodes in {sw.ElapSecs(3)} secs");
        earlyTerminate = false;
        yield return(null);
    }
コード例 #6
0
    public IEnumerator PlotStaticTrack()
    {
        var sw = new StopWatch();

        ResolveFullCsvName();
        Debug.Log("Plot  " + vehicleTrackName);
        //if (dozgo != null)
        //{
        //    DeleteTrack();
        //}
        vehgo = new GameObject(vehicleTrackName + "_tracks");
        vehgo.transform.parent = trackParent.transform;
        var lngcol  = sdf.GetDoubleCol("x");
        var latcol  = sdf.GetDoubleCol("y");
        var skalink = vtm.trackScale * 0.5f;  // meters
        var skawid  = vtm.trackWidthScale;
        var skanode = vtm.trackScale * 0.57f; // meters

        nnodes = 0;
        nlinks = 0;
        var nrow = sdf.Nrow();

        if (nrow == 0)
        {
            Debug.LogError("Plot Static Track - no rows in track df " + fullcsvname);
            yield break;
        }
        Debug.Log("Plotting " + vehicleTrackName + " consolidationDistance:" + vtm.consolidationDistance + "  trackscale:" + vtm.trackScale);
        var ll0 = new LatLng(latcol[0], lngcol[0]);

        (var pos0, _, _) = qmesh.GetWcMeshPosFromLatLng(ll0);
        var dolinks = vtm.vehicleTrackForm == VehicleTrackForm.Links || vtm.vehicleTrackForm == VehicleTrackForm.NodesAndLinks;
        var donodes = vtm.vehicleTrackForm == VehicleTrackForm.Nodes || vtm.vehicleTrackForm == VehicleTrackForm.NodesAndLinks;

        for (var i = 0; i < nrow; i++)
        {
            var ptname = "pt" + i;
            var ppname = "pp" + i;
            if (ptname == "pt21632")
            {
                Debug.Log("pt:" + ptname);
            }
            var ll = new LatLng(latcol[i], lngcol[i]);
            (var pos, _, _) = qmesh.GetWcMeshPosFromLatLng(ll);
            if (Vector3.Distance(pos0, pos) > vtm.consolidationDistance)
            {
                if (donodes)
                {
                    SphInfo.DoInfoSphereSlim(vehgo, ptname, pos, skanode, clr, ll);
                    nnodes++;
                }
                if (dolinks)
                {
                    var cclr = qut.GetColorByName(clr);
                    var frac = i * 1.0f / nrow;
                    var nclr = Color.Lerp(cclr, Color.white, frac);
                    //var pipe = qut.CreatePipe(ppname, pos0, pos, nclr, skalink);
                    //var pipe = GpuInst.CreateCylinderGpu(ppname, pos0, pos, skalink, clr);
                    var pipe = vtm.qmm.qtt.AddFragLine(ppname, pos0, pos, skalink, lclr: clr, widratio: skawid);
                    pipe.transform.parent = vehgo.transform;
                    nlinks++;
                }
                pos0 = pos;
            }
            if (sw.ElapfOverYieldTime())
            {
                Debug.Log($"Plot Static Track yielding on {i} of {nrow} after {sw.ElapSecs()} secs");
                yield return(null);
            }
        }
        sw.Stop();
        Debug.Log($"Plot static track plotted {nnodes} nodes and {nlinks} links in {sw.ElapSecs()} secs");
        yield return(null);
    }
コード例 #7
0
    public override void Construct()
    {
        ConstructBase();

        var qkm = qmm.qkm;

        var  ska = 4 * mfw.skamult * qmm.qkm.llbox.diagonalInMeters / 650;
        var  cylsphthickratio = 10f;
        var  normlength       = 2 * ska;
        int  imn       = 0;
        bool drawnorm  = true;
        var  nVertSecs = mfw.nVertSecs;
        var  nHorzSecs = mfw.nHorzSecs;
        var  irowstart = mfw.irowstart;

        for (int iz = 0; iz <= nVertSecs; iz++)
        {
            var isOnEdgeZmn = (iz == 0);
            var isOnEdgeZmx = (iz == nVertSecs);
            var iz1         = irowstart + iz;
            for (int ix = 0; ix <= nHorzSecs; ix++)
            {
                var isOnEdgeXmn = (ix == 0);
                var isOnEdgeXmx = (ix == nHorzSecs);
                var isOnEdge    = isOnEdgeZmn || isOnEdgeZmx || isOnEdgeXmn || isOnEdgeXmx;
                if (showJustEdges && !isOnEdge)
                {
                    continue;
                }
                var pos   = qmm.GetMeshNodePos(ix, iz1);
                var sname = "node:" + ix + "-" + iz1 + "/" + iz;
                //Debug.Log("making " + sname);
                var ll = qmm.GetMeshNodeLatLng(ix, iz1);

                var clr = GetColor(ix, iz);
                var spi = SphInfo.DoInfoSphereSlim(decoroot, sname, pos, ska, clr, ll);

                var spni = new SphNodeInfo();
                //meshnodespis[ix, iz] = spni;
                spni.globalMeshCoord = new MeshCoord(ix, iz1);
                spni.localMeshCoord  = new MeshCoord(ix, iz);
                var spos = mfw.GetPosLocal(ix, iz);
                var snrm = mfw.GetNormalLocal(ix, iz);
                spni.vertCoord = spos;
                spni.normal1   = snrm;
                if (drawnorm)
                {
                    var nname = "vorm:" + ix + "-" + iz1 + "/" + iz;
                    var epos  = spos + snrm * normlength;
                    //var nrmgo = qut.CreatePipe(nname, spos, epos, ska / cylsphthickratio, "yellow");
                    var nrmgo = GpuInst.CreateCylinderGpu(nname, spos, epos, size: ska / cylsphthickratio, "yellow");
                    nrmgo.transform.parent = decoroot.transform;
                }

                var uv = qmm.GetUv(ix, iz1);
                spni.textureCoord = new TextureCoord(uv.x, uv.y);
                spi.nodeInfo      = spni;
                imn++;
            }
        }
        Debug.Log("Generated " + imn + " meshwrapnodes");
    }
コード例 #8
0
    IEnumerator YieldingConstruct()
    {
        var sw = new StopWatch();

        sw.Start();
        ConstructBase();

        var qkm = qmm.qkm;

//        var ska = qmm.nodefak * qkm.llbox.diagonalInMeters / 450;
        var ska = qmm.triDiag * 0.075f;

        var        qtt = qmm.qtt;
        int        i = 0;
        GameObject pipeu, piper, pipeb, pipel;

        foreach (var qktile in qkm.qktiles)
        {
            var llul   = qktile.llul;
            var llbr   = qktile.llbr;
            var llur   = new LatLng(llul.lat, llbr.lng);
            var llbl   = new LatLng(llbr.lat, llul.lng);
            var pul    = qmm.GetPosFromLatLng(llul);
            var pur    = qmm.GetPosFromLatLng(llur);
            var pbl    = qmm.GetPosFromLatLng(llbl);
            var pbr    = qmm.GetPosFromLatLng(llbr);
            var qkname = qktile.name;
            if (oldway)
            {
                SphInfo.DoInfoSphere(decoroot, "pur" + i, pur, ska, "navyblue", llur);
                pipeu = GpuInst.CreateCylinderGpu(qkname + "-u", pul, pur, ska, "cyan");
                pipeu.transform.parent = decoroot.transform;
                piper = GpuInst.CreateCylinderGpu(qkname + "-r", pur, pbr, ska, "cyan");
                piper.transform.parent = decoroot.transform;
                pipeb = GpuInst.CreateCylinderGpu(qkname + "-b", pbr, pbl, ska, "cyan");
                pipeb.transform.parent = decoroot.transform;
                pipel = GpuInst.CreateCylinderGpu(qkname + "-l", pbl, pul, ska, "cyan");
                pipel.transform.parent = decoroot.transform;
            }
            else
            {
                SphInfo.DoInfoSphereSlim(decoroot, "pur" + i, pur, ska, "navyblue", llur);
                pipeu = qtt.AddFragLine(qkname + "-u", pul, pur, ska, lclr: "blue");
                pipeu.transform.parent = decoroot.transform;
                piper = qtt.AddFragLine(qkname + "-r", pur, pbr, ska, lclr: "blue");
                piper.transform.parent = decoroot.transform;
                pipeb = qtt.AddFragLine(qkname + "-b", pbr, pbl, ska, lclr: "blue");
                pipeb.transform.parent = decoroot.transform;
                pipel = qtt.AddFragLine(qkname + "-l", pbl, pul, ska, lclr: "blue");
                pipel.transform.parent = decoroot.transform;
            }
            if (showQuadkeyLabels)
            {
                qut.MakeTextGo(pipeu, qkname, yoff: 100, backoff: 0.01f, sfak: 20);
            }
            if (sw.ElapfOverYieldTime())
            {
                Debug.Log($"Yielding on qktile frame {i} of {qkm.qktiles.Count}");
                yield return(null);

                if (earlyTerminate)
                {
                    break;
                }
            }
            i++;
        }
        sw.Stop();
        Debug.Log($"Framed {i} tiles in {sw.ElapSecs(3)} secs");
        earlyTerminate = false;
        yield return(null);
    }