예제 #1
0
        public static GameObject MakeNewLinkGo(RouteMan rman, LcLink link, float linkRadius, string cname)
        {
            var go     = new GameObject();
            var linkgo = go.AddComponent <LinkGo>();

            linkgo.rman      = rman;
            linkgo.link      = link;
            linkgo.name      = link.name;
            linkgo.linkName  = link.name;
            linkgo.nodeName1 = link.node1.name;
            linkgo.nodeName2 = link.node2.name;



            go.name = link.name; //  + "-go";
            var p1    = link.node1.pt;
            var p2    = link.node2.pt;
            var midpt = (p1 + p2) / 2;

            go.transform.localPosition = midpt;
            var pcyl = GraphUtil.CreatePipe(link.name, p1, p2, linkRadius, cname);

            if (rman != null && rman.garnish != RouterGarnishE.none)
            {
                var text   = link.name;
                var anglat = GraphUtil.GetAngLatDegrees(p1, p2);
                GraphUtil.addFloatingTextStatic(go, midpt, text + "  ang:" + anglat, cname, anglat + 90);
            }
            pcyl.transform.parent = go.transform;
            return(go);
        }
예제 #2
0
        public static GameObject MakeNewNodeGo(RouteMan rman, LcNode node, float nodesize, string cname)
        {
            var go     = new GameObject();
            var nodego = go.AddComponent <NodeGo>();

            nodego.rman                  = rman;
            nodego.node                  = node;
            nodego.name                  = node.name;
            nodego.nodeName              = node.name;
            nodego.nodePt                = node.pt;
            nodego.nodeTransform         = node.transform;
            nodego.nodeTransformSetCount = node.transformSetCount;
            nodego.lastmsg               = "";
            if (node.transform != null)
            {
                nodego.nodePtWc = node.transform.TransformPoint(node.pt);
            }
            go.name = node.name;
            go.transform.localPosition = node.pt;

            var sph = GraphUtil.CreateMarkerSphere(node.name + "-sph", node.pt, nodesize, cname);

            node.go = sph;
            if (rman != null && rman.garnish != RouterGarnishE.none)
            {
                var text = node.name + "\n" + node.pt;
                GraphUtil.addFloatingTextStatic(go, node.pt, text, cname, 90);
            }

            sph.transform.parent    = go.transform;
            node.transform          = sph.transform;
            node.transformSetCount += 1;
            return(go);
        }
예제 #3
0
        // Use this for initialization
        void Start()
        {
            // Create ground
            //ground = GameObject.CreatePrimitive(PrimitiveType.Plane);
            //ground.name = "Ground-Plane";
            //ground.Transforms.localScale = new Vector3(50, 50, 25);
            //ground.GetComponent<Renderer>().material.SetColor("_Color", Color.cyan);

            // Create routeman
            //rmango = new GameObject("RouteMan");
            //rman = rmango.AddComponent<RouteMan>();
            //rman.rmango = rmango;

            gt = GetComponent <GUIText>();

            // Find routeman
            rman = FindObjectsOfType <RouteMan>()[0];
            RouteMan.Log("Assigned rman");
            rman.unitySim        = true;
            rman.logfilenameroot = "c:\\transfer\\" + rman.logfilenameroot;

            var fsh = FindObjectsOfType <FollowShere>()[0];

            fsh.setRouteMan(rman);

            // Move light back a bit
            var dlight = GameObject.Find("Directional Light");

            dlight.transform.localPosition = new Vector3(-1, 0, -1);
        }
예제 #4
0
        public bool CalculateOptimalTransformation()
        {
            var opo = new oapOptimizer(optTypeSelectorE.rotYtransXYZ);

            opo.verbosity = oapOptimizer.verbosityE.info;
            opo.addOapList(emlist);
            opo.init();
            opo.optimize();
            rotvek_deg = opo.rotvek * 180 / Mathf.PI;
            trnvek_met = opo.trnvek;

            var plausible = true;

            if (Mathf.Abs(rotvek_deg.y) > 10)
            {
                plausible = false;
            }
            if (Vector3.Magnitude(trnvek_met) > 1.0)
            {
                plausible = false;
            }

            RouteMan.Log("Opo status:" + opo.status + "  bstval:" + opo.bstval + "  bstidx:" + opo.bstiter + " Plausible:" + plausible);
            RouteMan.Log("Optimized rotvek:" + rotvek_deg.ToString("f3"));
            RouteMan.Log("Optimized trnvek:" + trnvek_met.ToString("f3"));
            Debug.Log("Opo status:" + opo.status + "  bstval:" + opo.bstval + "  bstidx:" + opo.bstiter + " Plausible:" + plausible);
            Debug.Log("Optimized rotvek:" + rotvek_deg.ToString("f3"));
            Debug.Log("Optimized trnvek:" + trnvek_met.ToString("f3"));
            return(plausible);
        }
예제 #5
0
        public void RefreshRouteManGos()
        {
            // Cleanse the transform :)
            saveHighobs();
            rgo.transform.SetPositionAndRotation(Vector3.zero, Quaternion.identity);
            rgo.transform.localScale = Vector3.one;

// This is Unity wierdness - it should work doing things before
//            rgo.transform.localScale = new Vector3(rgoScale, rgoScale, rgoScale);
//            rgo.transform.Rotate(0, rgoRotate, 0);
//            rgo.transform.Translate(rgoTranslate);

            linkcloudctrl.RefreshGos();
            pathctrl.RefreshGos();
            birdctrl.RefreshGos();
            errmarkctrl.RefreshGos();
            floorplanctrl.RefreshGos();

            // We have to do it afterwards - that is the trick :)
            rgo.transform.localScale = new Vector3(rgoScale, rgoScale, rgoScale);
            rgo.transform.Rotate(0, rgoRotate, 0);
            rgo.transform.Translate(rgoTranslate);

            rgoTransformSetCount += 1;
            RouteMan.Log("Refresh rgo - Scale:" + rgoScale + "  Rotate:" + rgoRotate + " Translate:" + rgoTranslate);
            keycount = keyman.totalKeywordCount();
            //restoreHighobs();
        }
예제 #6
0
        public void initKeywordsWithRooms()
        {
            keywords2 = new Dictionary <string, System.Action>();
            var keylist = rman.linkcloudctrl.GetKeywordKeys();
            int nadded  = 0;

            foreach (var key in keylist)
            {
                var val = rman.linkcloudctrl.GetKeywordValue(key);
                keywords2.Add(key, () => { rman.NodeAction(val); });
                nadded += 1;
                RouteMan.Log("Adding key:" + key + "  Val:" + val);
            }
            if (kR2 != null)
            {
                kR2.Stop();
                kR2.Dispose();
                kR2 = null;
            }
            if (keywords2.Count > 0)
            {
                kR2 = new KeywordRecognizer(keywords2.Keys.ToArray());
                kR2.OnPhraseRecognized += kROnPhraseRecognized2;
                kR2.Start();
            }
            RouteMan.Log("keywords rooms num keys:" + keywords2.Count);
        }
예제 #7
0
 // Use this for initialization
 void initKeywords()
 {
     keywords1 = new Dictionary <string, System.Action>();
     addStandardKeywords(keywords1);
     kR1 = new KeywordRecognizer(keywords1.Keys.ToArray());
     kR1.OnPhraseRecognized += kROnPhraseRecognized;
     kR1.Start();
     RouteMan.Log("keywords1 started num keys:" + keywords1.Count);
 }
예제 #8
0
        public void writeLogToFile()
        {
            var fname = this.logfilenameroot;

            fname += System.DateTime.Now.ToString("yyyyMMddTHHmmss") + ".log";
            GraphUtil.writeLinkedListToFile(loglist, fname);
            RouteMan.Log("Wrote " + loglist.Count + " lines to file " + fname);
            Debug.Log("Wrote " + loglist.Count + " lines to file " + fname);
        }
예제 #9
0
 public void DecInc()
 {
     scaleIncFak         = scaleIncFak / 1.1f;
     rotationIncDeg      = rotationIncDeg / 2f;
     tranlsationIncMeter = tranlsationIncMeter / 2f;
     keywordLoadInc     /= 2;
     RouteMan.Log("ScaInfFak " + scaleIncFak + "  rotIncDeg:" + rotationIncDeg +
                  "transIncM " + tranlsationIncMeter + "  keyInc:" + keywordLoadInc);
 }
예제 #10
0
 public void SetErrorCorrect(bool onoff)
 {
     autoerrorcorrect = onoff;
     RouteMan.Log("autoerrorcorrect now:" + autoerrorcorrect);
     if (autoerrorcorrect && errmarkctrl.markingState != ErrorMarkerCtrl.markingStateE.marking)
     {
         errmarkctrl.startMarking();
     }
 }
예제 #11
0
 public void RealizeFloorPlanStatus()
 {
     if (floorplanctrl.visible)
     {
         var lcld = linkcloudctrl.getLinkCloud();
         floorplanctrl.setGraphtex(lcld.floorMan);
     }
     RouteMan.Log("Show floor plan:" + floorplanctrl.visible);
 }
예제 #12
0
        public void CorrectPositionAndAngle()
        {
            var pdist = CorrectAngle();
            var pp    = pathctrl.path.MovePositionAlongPath(pdist);
            // var ppwc = pathctrl.pathgo.transform.TransformPoint(pp.pt); // why do we have to do this? Should be wc already?
            var ptwc = rgo.transform.TransformPoint(pp.pt);

            RouteMan.Log("Both pdist:" + pdist + "  pp.pt:" + pp.pt + "  ptwc:" + ptwc);
            CorrectPosition(ptwc);
        }
예제 #13
0
 public void StartBird()
 {
     BirdVel = initBirdVel;
     if (BirdVel == 0)
     {
         BirdVel = 1; // this should not happen
     }
     sbsRunning();
     RouteMan.Log("StartBird called");
 }
예제 #14
0
        public void CreateLinkCloud()
        {
            pathctrl.path = null;
            //DeleteLinkCloud();
            RefreshRouteManGos();
            RouteMan.Log("Calling astar");
            Astar();
//            SetEndNode(pathctrl.endnodename);
            keyman.initKeywordsWithRooms();
        }
예제 #15
0
 public void DisableSpatialMapping()
 {
     if (smm != null)
     {
         smm.SetSpatialMapping(false);
     }
     else
     {
         RouteMan.Log("smm is null");
     }
 }
예제 #16
0
        public void setRouteMan(RouteMan rman)
        {
            // this is attached as a component, thus we cannot set it in a contructor
            this.rman = rman;
            var gt  = new graphtex();
            var sca = new Vector3(7, 1, 9.76f);
            var rot = new Vector3(0, -90, 0);
            var trn = new Vector3(38.55f, 0, -27.79f);

            gt.SetMaterialPlane("RedwestBfloor3", 676, 938, sca, rot, trn);
            this.gt = gt;
        }
예제 #17
0
        public void writeLogToAzureBlob()
        {
#if NETFX_CORE
            var fname = "hlbirdlog";
#else
            var fname = "unbirdlog";
#endif

            GraphUtil.writeLinkedListToAzureBlob(loglist, fname);
            RouteMan.Log("Wrote " + loglist.Count + " lines to blob " + fname);
            Debug.Log("Wrote " + loglist.Count + " lines to blob " + fname);
        }
예제 #18
0
        public void ChangeSpatialExtent(float val)
        {
            var smgo = GetSpatialMapper();
            var smr  = smgo.GetComponent <SpatialMappingRenderer>();

            var hbe    = smr.halfBoxExtents;
            var newhbe = hbe + new Vector3(val, val, val);

            smr.halfBoxExtents = newhbe;
            RouteMan.Log("Spatial Mapping halfBoxExtents set to :" + newhbe);
            Debug.Log("Spatial Mapping halfBoxExtents set to :" + newhbe);
        }
예제 #19
0
        public void ChangeSpatialDetail(int val)
        {
            var smgo = GetSpatialMapper();
            var smr  = smgo.GetComponent <UnityEngine.VR.WSA.SpatialMappingRenderer>();

            var lod    = smr.lodType;
            var newlod = NextLodVal(lod, val);

            smr.lodType = newlod;
            RouteMan.Log("Spatial Mapping Lod Changed old:" + lod + "  new:" + newlod);
            Debug.Log("Spatial Mapping Lod Changed old:" + lod + "  new:" + newlod);
        }
예제 #20
0
        public void CorrectPosition()
        {
            var maincam = Camera.main; // only works with one camera
            var campt   = maincam.transform.position;
            //campt.y = 0;
            var pathcampt = pathctrl.FindClosestPointOnPath(campt);
            //pathcampt.y = 0;
            //var ppwc = pathctrl.pathgo.transform.TransformPoint(pathcampt);
            var ppwc = pathcampt;

            RouteMan.Log("CP pathcampt:" + pathcampt + "  ppwc:" + ppwc);
            CorrectPosition(ppwc);
        }
예제 #21
0
 void kROnPhraseRecognized2(PhraseRecognizedEventArgs args)
 {
     System.Action kwAction;
     if (keywords2.TryGetValue(args.text, out kwAction))
     {
         RouteMan.Log("You just said " + args.text);
         kwhistory.AddLast(args.text);
         kwAction.Invoke();
     }
     else
     {
         RouteMan.Log("Could not find " + args.text);
     }
 }
예제 #22
0
 public void TranslateEverything(Vector3 tinc)
 {
     if (movecamera)
     {
         Camera.main.transform.position += tinc;
         RouteMan.Log("TranslateEverything tinc:" + tinc + "  Moved Camera");
     }
     else
     {
         rgoTranslate = rgoTranslate + tinc;
         RouteMan.Log("TranslateEverything tinc:" + tinc + "  rgoTranslate:" + rgoTranslate);
         RefreshRouteManGos();
     }
 }
예제 #23
0
 // Update is called once per frame
 void Update()
 {
     foreach (char c in Input.inputString)
     {
         RouteMan.Log("hit " + c);
         switch (c)
         {
         case 's': {
             SplitlSelLink();
             break;
         }
         }
     }
 }
예제 #24
0
        public void SetSpatialMapping(bool onoff)
        {
            var smgo = GetSpatialMapper();

            if (smgo == null)
            {
                return;
            }
            var smm = smgo.GetComponent <HoloToolkit.Unity.SpatialMapping.SpatialMappingManager>();

            RouteMan.Log("Found Spatial Mapping Component");
            Debug.Log("Found Spatial Mapping Component");
            smm.DrawVisualMeshes = onoff;
            RouteMan.Log("Spatial Mapping " + onoff);
            Debug.Log("Spatial Mapping " + onoff);
        }
예제 #25
0
        private void CorrectPosition(Vector3 ptwc)
        {
            var maincam = Camera.main; // only works with one camera
            var campt   = maincam.transform.position;
            //campt.y = 0;
            var diff = ptwc - campt;

            diff.y += home_height;
            var adiff = adjustDiff(diff);

            //var adiff = diff;
            RouteMan.Log("Campt:" + campt + "  ptwc:" + ptwc + " hh:" + home_height + "  diff:" + diff + "  adiff:" + adiff);
            rgoTranslate = rgoTranslate - adiff;
            //StopBird();
            RefreshRouteManGos();
        }
예제 #26
0
 GameObject GetSpatialMapper()
 {
     if (smgo != null)
     {
         return(smgo);
     }
     smgo = GameObject.Find("SpatialMapping");
     if (smgo == null)
     {
         RouteMan.Log("Could not find SpatialMapper GameObject");
         return(null);
     }
     RouteMan.Log("Found SpatialMapper GameObject");
     Debug.Log("Found SpatialMapper GameObject");
     return(smgo);
 }
예제 #27
0
        public void CorrectAngleOnVectors(Vector3 vk1, Vector3 vk2, bool refresh = true)
        {
            vk1 = Vector3.Normalize(vk1);
            vk2 = Vector3.Normalize(vk2);
            var ang1 = 180 * Mathf.Atan2(vk1.z, vk1.x) / Mathf.PI;
            var ang2 = 180 * Mathf.Atan2(vk2.z, vk2.x) / Mathf.PI;

            RouteMan.Log("vk2:" + vk2 + "  ang2:" + ang2 + "  vk1:" + vk1 + " ang1:" + ang1);
            var dang = ang2 - ang1;

            rgoRotate = rgoRotate - dang;
            if (refresh)
            {
                //StopBird();
                RefreshRouteManGos();
            }
        }
예제 #28
0
        public void ChangeName()
        {
            var lcld = node.lc;
            var stat = lcld.ChangeNodeName(node.name, nodeName);

            lastmsg = stat.fullstatus();
            if (stat.ok)
            {
                RouteMan.Log(lastmsg);
                rman.RequestRefresh(nodeName);
            }
            else
            {
                RouteMan.Log(lastmsg);
                nodeName = node.name; // change the go name back to avoid confusion
            }
        }
예제 #29
0
        public void OrientToEndNode(string newenodename)
        {
            RouteMan.Log("OrientToEndNode:" + newenodename);
            home_rgoRotate    = rgoRotate;
            home_rgoScale     = rgoScale;
            home_rgoTranslate = rgoTranslate;
            home_height       = Camera.main.transform.position.y;

            var lpt = linkcloudctrl.GetNode(newenodename);

            if (lpt.wegtos.Count == 0)
            {
                return;
            }
            var wa  = lpt.wegtos.First(); // get the first one, it should suffice
            var lnk = wa.link;
            //var p1wc = lnk.lp1.transform.TransformPoint(lnk.lp1.pt);
            //var p2wc = lnk.lp2.transform.TransformPoint(lnk.lp2.pt);
            //var p1wc = lnk.lp1.ptwc;
            //var p2wc = lnk.lp2.ptwc;
            //var lnkdir = p2wc - p1wc;
            var wfr    = wa.frNode.pt;
            var wto    = wa.toNode.pt;
            var wfrwc  = rgo.transform.TransformPoint(wfr);
            var wtowc  = rgo.transform.TransformPoint(wto);
            var lnkdir = wfr - wto;

            lnkdir = rgo.transform.TransformVector(lnkdir);
            RouteMan.Log("CorrectAngle");
            RouteMan.Log("lpt.name:" + lpt.name + "  wfr:" + wfr + " wto:" + wto);
            RouteMan.Log("      wc:" + lpt.name + "  wfrwc:" + wfrwc + " wtowc:" + wtowc);
            var camfor = Camera.main.transform.forward;

            CorrectAngleOnVectors(lnkdir, camfor);

            // Position
            lpt = linkcloudctrl.GetNode(newenodename);
            wa  = lpt.wegtos.First();
            var wto1   = wa.toNode.pt;
            var wto1wc = rgo.transform.TransformPoint(wto1);

            CorrectPosition(wto1wc);
            RouteMan.Log("CorrectPosition");
            RouteMan.Log("Node:" + lpt.name + "  wto1:" + wto1 + " wto1wc:" + wto1wc);
        }
예제 #30
0
 public void GenAstarPath()
 {
     if (startnodename == "")
     {
         LcNode snode     = null;
         var    prefstart = rman.linkcloudctrl.GetKeywordValue("DefStartNode");
         snode = rman.linkcloudctrl.GetNodeOrNull(prefstart);
         if (snode == null)
         {
             snode = rman.linkcloudctrl.GetNode(0);
         }
         if (snode == null)
         {
             RouteMan.Log("Could not find start node in GenAstarPath");
             return;
         }
         startnodename = snode.name;
     }
     if (endnodename == "")
     {
         LcNode enode     = null;
         var    prefstart = rman.linkcloudctrl.GetKeywordValue("DefEndNode");
         enode = rman.linkcloudctrl.GetNodeOrNull(prefstart);
         if (enode == null)
         {
             enode = rman.linkcloudctrl.GetNode(-1);                // lastpoint
         }
         if (enode == null)
         {
             RouteMan.Log("Could not find end node in GenAstarPath");
             return;
         }
         endnodename = enode.name;
     }
     path = rman.linkcloudctrl.GenAstar(startnodename, endnodename);
     if (path == null)
     {
         RouteMan.Log("A * path was not found");
     }
     else
     {
         RouteMan.Log("A * path length:" + _path.waypts.Count + " len:" + _path.pathLength);
     }
 }