public SceneViewModel( CameraManipulator cameraManipulator, ViewerScene viewerScene, OpenTkControl openTkControl) { this.cameraManipulator = cameraManipulator; this.viewerScene = viewerScene; OpenTkControl = openTkControl; SubscribeOnGlControl(); }
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()); }
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(); }
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(); }
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; } }