예제 #1
0
        public void JoinRoom(string roomToJoin, string userName)
        {
            Debug.Assert(!string.IsNullOrEmpty(userName), "Username cannot be null or empty");
            RoomName      = roomToJoin;
            localUserName = userName;

            if (NeuraCore.Instance.socket == null || !NeuraCore.Instance.socket.isConnected)
            {
                print("Not connected, trying to auto connect");
                OnConnected += AutoJoinRoom;
                Connect();
                return;
            }
            if (inRoom)
            {
                print("Cannot join room when already in one");
                return;
            }
            globalState                  = new RoomStateGen();
            requestedSiteDrive           = "";
            requestedPoi                 = new TargetPlacementObject();
            requestedAnnotation          = new AnnotationObject();
            requestedAnnotationDeletions = new List <AnnotationObject>();
            NeuraCore.Instance.JoinRoom(roomToJoin, userName);
        }
예제 #2
0
    public void OnSegmentationCamRender(AnnotationCamera camera, AnnotationObject annotationObject)
    {
        if (camera != Segmentation.Camera)
        {
            return;
        }

        RenderedObjects.Add(annotationObject);
    }
예제 #3
0
 private void OnWillRenderAnnotationObject(AnnotationCamera camera, AnnotationObject annotationObject)
 {
     if (!AnnotatedObjects.Contains(annotationObject))
     {
         return; //Object rendered is not part of this object manager
     }
     if (RenderedObjects.ContainsKey(camera))
     {
         RenderedObjects[camera].Add(annotationObject);
     }
     else
     {
         RenderedObjects.Add(camera, new HashSet <AnnotationObject>()
         {
             annotationObject
         });
     }
 }
예제 #4
0
        private void TestAnnotation()
        {
            var TestAnnotation = new AnnotationObject
            {
                isValid   = true,
                lineId    = "testLine",
                positions = new [] { Vector3.one },
                userId    = "testUser"
            };
            var fbb    = new FlatBufferBuilder(1024);
            var offset = TestAnnotation.ToBuffer(fbb);

            fbb.Finish(offset.Value);
            var bArray = fbb.SizedByteArray();
            var bb     = new ByteBuffer(bArray);
            var desObj = Annotation.GetRootAsAnnotation(bb);

            print("Annotation Object Test : " + (CompareAnnotations(TestAnnotation, desObj) ? "Passed" : "Failed"));
        }
예제 #5
0
        public bool RequestAddAnnotation(AnnotationObject newAnno)
        {
            if (!inRoom) // not in a room so do not handle this change
            {
                return(false);
            }

            //update local state
            if (globalState.annotationObjects != null &&
                globalState.annotationObjects.Any(ao => ao.lineId == newAnno.lineId))
            {
                globalState.annotationObjects[
                    globalState.annotationObjects.IndexOf(
                        globalState.annotationObjects.Single(ao => ao.lineId == newAnno.lineId))] = newAnno;
            }
            else
            {
                (globalState.annotationObjects ?? (globalState.annotationObjects =
                                                       new List <AnnotationObject>())).Add(newAnno);
            }

            requestedAnnotation = newAnno;
            return(true);
        }
예제 #6
0
        public void TestStateUpdate()
        {
            var sup     = new StateUpdateObject();
            var created = new RoomObjectObj
            {
                disposable    = true,
                id            = 27,
                isHidden      = false,
                lookDirection = Vector3.forward,
                owner         = "test",
                position      = Vector3.one,
                prefab        = "a test thing"
            };
            var updated = new RoomObjectObj
            {
                disposable    = false,
                id            = 23,
                isHidden      = true,
                lookDirection = Vector3.back,
                owner         = "test",
                position      = Vector3.down,
                prefab        = ""
            };
            var deleted = 0;

            var TestAnnotation = new AnnotationObject
            {
                isValid   = true,
                lineId    = "testLine",
                positions = new[] { Vector3.one },
                userId    = "testUser"
            };

            TargetPlacementObject poi = new TargetPlacementObject
            {
                id       = 0,
                isValid  = true,
                name     = "testPoi",
                position = Vector3.one
            };

            var sitedrive = "SomeSiteDrive";

            var TestSUP = new StateUpdateObject
            {
                poiPlacementObject = poi,
                annotationObjects  = new List <AnnotationObject>()
                {
                    TestAnnotation
                },
                create = new List <RoomObjectObj>()
                {
                    created
                },
                update = new List <RoomObjectObj>()
                {
                    updated
                },
                delete = new List <int>()
                {
                    deleted
                },
                siteDrive = sitedrive
            };

            var fbb    = new FlatBufferBuilder(1024);
            var offset = TestSUP.ToBuffer(fbb);

            fbb.Finish(offset.Value);
            var bArray = fbb.SizedByteArray();
            var bb     = new ByteBuffer(bArray);
            var desObj = StateUpdate.GetRootAsStateUpdate(bb);
            var passed = CompareStateUpdates(desObj, TestSUP);

            print("State Update : " + (passed ? "Passed" : "Failed"));
        }
예제 #7
0
 private bool CompareAnnotations(AnnotationObject TestAnnotation, Annotation desObj)
 {
     return(desObj.LineId == TestAnnotation.lineId && desObj.UserId == TestAnnotation.userId &&
            new Vector3(desObj.Positions(0).Value.X, desObj.Positions(0).Value.Y, desObj.Positions(0).Value.Z) ==
            Vector3.one);
 }
예제 #8
0
        private bool TestStateUpdateMessage()
        {
            var sup     = new StateUpdateObject();
            var created = new RoomObjectObj
            {
                disposable    = true,
                id            = 27,
                isHidden      = false,
                lookDirection = Vector3.forward,
                owner         = "test",
                position      = Vector3.one,
                prefab        = "a test thing"
            };
            var updated = new RoomObjectObj
            {
                disposable    = false,
                id            = 23,
                isHidden      = true,
                lookDirection = Vector3.back,
                owner         = "test",
                position      = Vector3.down,
                prefab        = ""
            };
            var deleted = 0;

            var TestAnnotation = new AnnotationObject
            {
                isValid   = true,
                lineId    = "testLine",
                positions = new[] { Vector3.one },
                userId    = "testUser"
            };

            TargetPlacementObject poi = new TargetPlacementObject
            {
                id       = 0,
                isValid  = true,
                name     = "testPoi",
                position = Vector3.one
            };

            var sitedrive = "SomeSiteDrive";

            var TestSUP = new StateUpdateObject
            {
                poiPlacementObject = poi,
                annotationObjects  = new List <AnnotationObject>()
                {
                    TestAnnotation
                },
                create = new List <RoomObjectObj>()
                {
                    created
                },
                update = new List <RoomObjectObj>()
                {
                    updated
                },
                delete = new List <int>()
                {
                    deleted
                },
                siteDrive = sitedrive
            };

            var buf    = ServerMessageFactory.BuildMessage(TestSUP);
            var bb     = new ByteBuffer(buf);
            var desMsg = ServerMessage.GetRootAsServerMessage(bb);
            var passed = true;

            passed &= desMsg.DataType == msg.StateUpdate;
            if (passed)
            {
                passed &= CompareStateUpdates(desMsg.Data <StateUpdate>().Value, TestSUP);
            }
            return(passed);
        }
예제 #9
0
 public uint GetPixelCount(AnnotationObject annotationObject) => pixelCount.ContainsKey(annotationObject) ? pixelCount[annotationObject] : 0;
예제 #10
0
 public void AddSegmentationCamRenderCallback(AnnotationObject annotationObject)
 {
     annotationObject.renderCallBacks.Add(OnSegmentationCamRender);
 }
    public override void PreAnnotate()
    {
        foreach (AnnotationObject annotationObject in Generator.EditableObjects)
        {
            Log("Creating a copy of : " + annotationObject.gameObject.name);

            AnnotationObject dupedObject = Instantiate(annotationObject, annotationObject.transform.position, annotationObject.transform.rotation);

            if (clearColorID)
            {
                dupedObject.ID = 0;
            }

            //if (randomizeColor)
            //{
            //    Color randomColor = Random.ColorHSV();

            //    int amountMaterials = dupedObject.Renderer.materials.Length;
            //    Material[] materials = new Material[amountMaterials];

            //    //Copy
            //    for (int i = 0; i < amountMaterials; i++)
            //    {
            //        materials[i] = new Material(dupedObject.Renderer.materials[i]);
            //        materials[i].color = randomColor;
            //    }

            //    Log("Randomized duplicate materials with color: " + randomColor.ToString());
            //    dupedObject.Renderer.materials = materials;
            //}

            //if (translateDuplicate)
            //{
            //    switch (translationType)
            //    {
            //        case TranslationSpace.WorldSpace:
            //            dupedObject.transform.Translate(translationVector, Space.World);
            //            break;
            //        case TranslationSpace.LocalSpace:
            //            dupedObject.transform.Translate(translationVector, Space.Self);
            //            break;
            //        case TranslationSpace.CameraSpace:
            //            dupedObject.transform.Translate(translationVector, generator.OutputCamera.transform);
            //            break;
            //        case TranslationSpace.RelativeTowardsCamera:
            //            GameObject lookAtGuy = new GameObject("LookAtGuy");
            //            lookAtGuy.transform.position = generator.OutputCamera.transform.position;
            //            lookAtGuy.transform.LookAt(dupedObject.Renderer.bounds.center);

            //            dupedObject.transform.Translate(translationVector, lookAtGuy.transform);
            //            Destroy(lookAtGuy);
            //            break;
            //        default:
            //            break;
            //    }
            //    Log("Translated duplicate object with :" + translationVector.ToString() + " in space: " + translationType.ToString());
            //}

            objects.Add(dupedObject);
        }
        if (swapModifiableObjects)
        {
            originalModifiableObjects = Generator.EditableObjects;
            Generator.EditableObjects = objects;
        }
    }