コード例 #1
0
 public SceneViewModel(
     CameraManipulator cameraManipulator,
     ViewerScene viewerScene,
     OpenTkControl openTkControl)
 {
     this.cameraManipulator = cameraManipulator;
     this.viewerScene       = viewerScene;
     OpenTkControl          = openTkControl;
     SubscribeOnGlControl();
 }
コード例 #2
0
    public void SendViewerScene(ViewerScene viewerScene)
    {
        var viewerSceneJson  = JsonUtility.ToJson(viewerScene);
        var viewerSceneBytes = Encoding.ASCII.GetBytes(viewerSceneJson);

        var ms = new MemoryStream();

        ms.Write(BitConverter.GetBytes(viewerSceneBytes.Length), 0, 4);
        ms.Write(viewerSceneBytes, 0, viewerSceneBytes.Length);
        tcpSocket.Send(ms.ToArray());
    }
コード例 #3
0
    void Start()
    {
        Plugin.texture_group_reset();

        var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
        {
            ReceiveBufferSize = 1024 * 1024
        };

        socket.Bind(new IPEndPoint(IPAddress.Any, 0));
        udpSocket = new UdpSocket(socket);

        viewerScene     = null;
        kinectReceivers = new List <KinectReceiver>();
        remoteSenders   = new List <RemoteSender>();
        connectingCount = 0;

        sharedSpaceAnchor.GizmoVisibility = false;

        UpdateUiWindows();
    }
コード例 #4
0
    void OnLayout()
    {
        ImGui.SetNextWindowPos(new Vector2(0.0f, 0.0f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.4f, Screen.height * 0.4f), ImGuiCond.FirstUseEver);
        ImGui.Begin("Viewer States");
        foreach (var viewerState in viewerStates.Values)
        {
            ImGui.Text($"Viewer (User ID: {viewerState.userId})");
            foreach (var receiverState in viewerState.receiverStates)
            {
                ImGui.BulletText($"Receiver (Session ID: {receiverState.sessionId})");
                ImGui.Indent();
                ImGui.Text($"  Sender End Point: {receiverState.senderAddress}:{receiverState.senderPort}");
            }
            ImGui.NewLine();
        }
        ImGui.End();

        ImGui.SetNextWindowPos(new Vector2(0.0f, Screen.height * 0.4f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.4f, Screen.height * 0.6f), ImGuiCond.FirstUseEver);
        ImGui.Begin("Scene Templates");
        ImGui.BeginTabBar("Scene Templates TabBar");
        if (ImGui.BeginTabItem("Default"))
        {
            foreach (var viewerStatePair in viewerStates)
            {
            }
            if (ImGui.Button("Set Scene"))
            {
            }
            ImGui.EndTabItem();
        }
        if (ImGui.BeginTabItem("Single Camera"))
        {
            ImGui.InputText("Address", ref singleCameraAddress, 30);
            ImGui.InputInt("Port", ref singleCameraPort);
            ImGui.InputFloat("Distance", ref singleCameraDistance);

            if (ImGui.Button("Set Scene"))
            {
                foreach (var serverSocket in serverSockets)
                {
                    var kinectSenderElement = new KinectSenderElement(singleCameraAddress,
                                                                      singleCameraPort,
                                                                      new Vector3(0.0f, 0.0f, singleCameraDistance),
                                                                      Quaternion.identity);

                    var viewerScene = new ViewerScene();
                    viewerScene.kinectSenderElements = new List <KinectSenderElement>();
                    viewerScene.kinectSenderElements.Add(kinectSenderElement);
                    viewerScenes[serverSocket] = viewerScene;
                }
            }
        }
        ImGui.EndTabBar();
        ImGui.End();

        ImGui.SetNextWindowPos(new Vector2(Screen.width * 0.4f, 0.0f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.6f, Screen.height), ImGuiCond.FirstUseEver);
        ImGui.Begin("Scene");
        ImGui.BeginTabBar("Scene TabBar");

        int kinectSenderElementIndex = 0;

        foreach (var viewerStatePair in viewerStates)
        {
            var serverSocket = viewerStatePair.Key;
            var viewerState  = viewerStatePair.Value;
            var viewerScene  = viewerScenes[serverSocket];
            if (ImGui.BeginTabItem(viewerState.userId.ToString()))
            {
                foreach (var kinectSenderElement in viewerScene.kinectSenderElements.ToList())
                {
                    ImGui.InputText("Address##" + kinectSenderElementIndex, ref kinectSenderElement.address, 30);
                    ImGui.InputInt("Port##" + kinectSenderElementIndex, ref kinectSenderElement.port);
                    ImGui.InputFloat3("Position##" + kinectSenderElementIndex, ref kinectSenderElement.position);
                    var eulerAngles = kinectSenderElement.rotation.eulerAngles;
                    if (ImGui.InputFloat3("Rotation##" + kinectSenderElementIndex, ref eulerAngles))
                    {
                        kinectSenderElement.rotation = Quaternion.Euler(eulerAngles);
                    }

                    if (ImGui.Button("Remove This Sender##" + kinectSenderElementIndex))
                    {
                        bool removeResult = viewerScene.kinectSenderElements.Remove(kinectSenderElement);
                        print($"removeResult: {removeResult}");
                    }

                    ImGui.NewLine();

                    ++kinectSenderElementIndex;
                }

                if (ImGui.Button("Add Kinect Sender"))
                {
                    viewerScene.kinectSenderElements.Add(new KinectSenderElement("127.0.0.1", SENDER_PORT, Vector3.zero, Quaternion.identity));
                }

                if (ImGui.Button("Update Scene"))
                {
                    string invalidIpAddress = null;
                    foreach (var kinectSenderElement in viewerScene.kinectSenderElements)
                    {
                        if (!IsValidIpAddress(kinectSenderElement.address))
                        {
                            invalidIpAddress = kinectSenderElement.address;
                            break;
                        }
                    }

                    if (invalidIpAddress == null)
                    {
                        serverSocket.SendViewerScene(viewerScene);
                    }
                    else
                    {
                        print($"Scene not updated since an invalid IP address was found: {invalidIpAddress}");
                    }
                }
                ImGui.EndTabItem();
            }
        }
        ImGui.EndTabBar();
        ImGui.End();
    }
コード例 #5
0
    private void UpdateControllerClient()
    {
        ViewerScene viewerScene = null;

        try
        {
            viewerScene = controllerClientSocket.ReceiveViewerScene();
        }
        catch (TcpSocketException e)
        {
            print($"TcpSocketException while receiving: {e}");
            controllerClientSocket = null;
            return;
        }

        if (viewerScene != null)
        {
            foreach (var kinectSenderElement in viewerScene.kinectSenderElements)
            {
                IPAddress ipAddress;
                if (!IPAddress.TryParse(kinectSenderElement.address, out ipAddress))
                {
                    TextToaster.Toast($"Failed to parse {ipAddress} as an IP address.");
                }

                var endPoint = new IPEndPoint(ipAddress, kinectSenderElement.port);
                if (kinectReceivers.FirstOrDefault(x => x.SenderEndPoint == endPoint) != null)
                {
                    continue;
                }

                TryConnectToKinectSender(endPoint);
            }

            foreach (var kinectReceiver in kinectReceivers)
            {
                var kinectSenderElement = viewerScene.kinectSenderElements.FirstOrDefault(x => x.address == kinectReceiver.SenderEndPoint.Address.ToString() &&
                                                                                          x.port == kinectReceiver.SenderEndPoint.Port);

                if (kinectSenderElement != null)
                {
                    var kinectOrigin = kinectReceiver.KinectOrigin;
                    if (kinectOrigin != null)
                    {
                        kinectOrigin.transform.localPosition = kinectSenderElement.position;
                        kinectOrigin.transform.localRotation = kinectSenderElement.rotation;
                    }
                }
            }

            this.viewerScene = viewerScene;
        }

        var receiverStates = new List <ReceiverState>();

        foreach (var receiver in kinectReceivers)
        {
            var receiverState = new ReceiverState(receiver.SenderEndPoint.Address.ToString(),
                                                  receiver.SenderEndPoint.Port,
                                                  receiver.ReceiverSessionId);
            receiverStates.Add(receiverState);
        }

        try
        {
            controllerClientSocket.SendViewerState(receiverStates);
        }
        catch (TcpSocketException e)
        {
            print($"TcpSocketException while connecting: {e}");
            controllerClientSocket = null;
        }
    }