Пример #1
0
    public void AddRandomPoints()
    {
        string[] clrs = { "black", "lilac", "yellow", "orange", "red" };
        if (ranpoints == null)
        {
            ranpoints = new GameObject("ranpoints");
            ranpoints.transform.position = Vector3.zero;
            ranpoints.transform.parent   = preferedParent.transform;
        }
        var ska = qmm.triDiag * 0.025f;
        //var lmn = 0.1f;
        //var lmx = 0.9f;
        var lmn = -0.1f;
        var lmx = 1.1f;

        for (int i = 0; i < 10000; i++)
        {
            var lambLat = qut.GetRanFloat(lmn, lmx, "ranpoints");
            var lambLng = qut.GetRanFloat(lmn, lmx, "ranpoints");
            (var vv, var nrm, var istat) = qmm.GetWcMeshPosFromLambda(lambLng, lambLat);
            var pos  = vv;
            var name = "ranpt:" + nranpts;
            //SphInfo.DoInfoSphere(ranpoints, name, pos, ska, clrs[istat], addSphInfo: false);
            var sphgo = GpuInst.CreateSphereGpu(name, pos, ska, clrs[istat]);
            sphgo.transform.parent = ranpoints.transform;
            nranpts++;
        }
    }
Пример #2
0
    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 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");
    }
Пример #4
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);
    }
Пример #5
0
    public IEnumerator YieldingConstruct()
    {
        var sw = new StopWatch();

        ConstructBase();
        var qkm = qmm.qkm;
        var qtt = qmm.qtt;
        //var ska = qmm.nodefak * qkm.llbox.diagonalInMeters / 450;

        //var pp1 = qmm.GetMeshNodePos(0, 0);
        //var pp2 = qmm.GetMeshNodePos(1, 1);
        //var triDiag = Vector3.Distance(pp1, pp2);
        var ska = qmm.triDiag * 0.05f;

        Debug.Log($"Construct Trilinesdeco - ska:{ska}  triDiag:{qmm.triDiag}");


        var     nHorzSecs = qmm.nHorzSecs;
        var     nVertSecs = qmm.nVertSecs;
        var     nDiagSecs = nHorzSecs + nVertSecs - 1;
        Vector3 p1, p2;
        string  pname;
        int     nlines  = 0;
        int     nhlines = 0;
        int     nvlines = 0;
        int     ndlines = 0;
        int     nsegs   = 0;

        for (int i = 0; i <= nHorzSecs; i++)
        {
            nlines++;
            p1 = qmm.GetMeshNodePos(i, 0);
            for (int j = 1; j <= nVertSecs; j++)
            {
                p2    = qmm.GetMeshNodePos(i, j);
                pname = $"horzseg_{i}_{j}";
                var cgo = GpuInst.CreateCylinderGpu(pname, p1, p2, ska, "cyan");
                cgo.transform.parent = decoroot.transform;
                p1 = p2;
                nsegs++;
            }
            nhlines++;
            if (sw.ElapfOverYieldTime())
            {
                Debug.Log($"Yielding at horzlines step:{i}");
                yield return(null);

                if (earlyTerminate)
                {
                    break;
                }
            }
        }
        if (!earlyTerminate)
        {
            for (int i = 0; i <= nVertSecs; i++)
            {
                nlines++;
                p1 = qmm.GetMeshNodePos(0, i);
                for (int j = 1; j <= nHorzSecs; j++)
                {
                    p2    = qmm.GetMeshNodePos(j, i);
                    pname = $"vertseg_{j}_{i}";
                    var cgo = GpuInst.CreateCylinderGpu(pname, p1, p2, ska, "yellow");
                    cgo.transform.parent = decoroot.transform;
                    p1 = p2;
                    nsegs++;
                }
                nvlines++;
                if (sw.ElapfOverYieldTime())
                {
                    Debug.Log($"Yielding at vertlines step:{i}");
                    yield return(null);

                    if (earlyTerminate)
                    {
                        break;
                    }
                }
            }
        }

        if (!earlyTerminate)
        {
            for (int i = 0; i < nHorzSecs; i++)
            {
                nlines++;
                for (int j = 0; j < nVertSecs; j++)
                {
                    p1    = qmm.GetMeshNodePos(i, j);
                    p2    = qmm.GetMeshNodePos(i + 1, j + 1);
                    pname = $"crosseg_{i}_{j}";
                    var cgo = GpuInst.CreateCylinderGpu(pname, p1, p2, ska, "purple");
                    cgo.transform.parent = decoroot.transform;
                    nsegs++;
                }
                ndlines++;
                if (sw.ElapfOverYieldTime())
                {
                    Debug.Log($"Yielding at diaglines step:{i}");
                    yield return(null);

                    if (earlyTerminate)
                    {
                        break;
                    }
                }
            }
        }

        //for (int i = 1; i <= nDiagSecs; i++)
        //{
        //    var clr = "purple";
        //    if (i <= nHorzSecs)
        //    {
        //        p1 = qmm.GetMeshNodePos(nHorzSecs - i, 0);
        //    }
        //    else
        //    {
        //        clr = "orange";
        //        p1 = qmm.GetMeshNodePos(0, i - nHorzSecs);
        //    }
        //    if (i <= nVertSecs)
        //    {
        //        p2 = qmm.GetMeshNodePos(nHorzSecs, i);
        //    }
        //    else
        //    {
        //        p2 = qmm.GetMeshNodePos(nHorzSecs - i + nVertSecs, nVertSecs);
        //    }
        //    pname = "crosseg_" + i;
        //    qtt.AddFragLine(pname, p1, p2, ska, lclr:clr);
        //}

        this.nDiagLines     = ndlines;
        this.nHorzLines     = nhlines;
        this.nVertLines     = nvlines;
        this.nTotalTriLines = nHorzLines + nVertLines + nDiagLines;
        this.nTriangles     = (qtt.nHorzLines - 1) * (qtt.nVertLines - 1) * 2;
        this.nTotalElements = (nDiagLines - 1) * nVertLines + (nVertLines - 1) * nHorzLines + nTriangles;
        sw.Stop();
        Debug.Log($"Generating {nTotalTriLines} trilines with {nTotalElements} elements took {sw.ElapSecs(3)} secs");
        earlyTerminate = false;
        //yield return null;
    }