void InsertEntityNotificationHandler(simengine.InsertSimulationEntity ins) { _entity = (simengine.CameraEntity)ins.Body; _entity.ServiceContract = Contract.Identifier; CreateDefaultState(); }
void InsertEntityNotificationHandler(simengine.InsertSimulationEntity ins) { _entity = (simengine.CameraEntity)ins.Body; _entity.ServiceContract = Contract.Identifier; _state.CameraDeviceName = _entity.State.Name; _state.Pose = _entity.State.Pose; _state.ViewAngle = _entity.ViewAngle; _state.ImageSize = new Vector2(_entity.ViewSizeX, _entity.ViewSizeY); // send an initial update to self so we get image data filled in PostUpdateFrameIfNeeded(); if (_entity.IsRealTimeCamera) { if (_entity.UpdateInterval != 0) { Activate(Arbiter.Receive(false, TimeoutPort(_entity.UpdateInterval), CheckForUpdate)); } else { Activate(Arbiter.Receive(false, TimeoutPort(1000), CheckForUpdate)); } } }
void DeleteEntityNotificationHandler(simengine.DeleteSimulationEntity del) { _entity = null; }
void RenderResults(RenderMode renderMode, simengine.MatrixTransforms transforms, simengine.CameraEntity currentCamera) { _timeAttenuationHandle.SetValue(new xna.Vector4(100 * (float)Math.Cos(_appTime * (1.0f / SCAN_INTERVAL)), 0, 0, 1)); // render impact points as a quad xna.Matrix inverseViewRotation = currentCamera.ViewMatrix; inverseViewRotation.M41 = inverseViewRotation.M42 = inverseViewRotation.M43 = 0; xna.Matrix.Invert(ref inverseViewRotation, out inverseViewRotation); xna.Matrix localTransform = xna.Matrix.CreateFromAxisAngle(new xna.Vector3(1, 0, 0), (float)-Math.PI / 2) * inverseViewRotation; simengine.SimulationEngine.GlobalInstance.Device.DepthStencilState = xnagrfx.DepthStencilState.DepthRead; for (int i = 0; i < _lastResults.ImpactPoints.Count; i++) { xna.Vector3 pos = new xna.Vector3(_lastResults.ImpactPoints[i].Position.X, _lastResults.ImpactPoints[i].Position.Y, _lastResults.ImpactPoints[i].Position.Z); xna.Vector3 resultDir = pos - Position; resultDir.Normalize(); localTransform.Translation = pos - .02f * resultDir; transforms.World = localTransform; base.Render(renderMode, transforms, Meshes[0]); } simengine.SimulationEngine.GlobalInstance.Device.DepthStencilState = xnagrfx.DepthStencilState.Default; }
/// <summary> /// Frame render /// </summary> public override void Render(RenderMode renderMode, simengine.MatrixTransforms transforms, simengine.CameraEntity currentCamera) { if ((int)(Flags & simengine.VisualEntityProperties.DisableRendering) > 0) { return; } if (_lastResults != null) { RenderResults(renderMode, transforms, currentCamera); } }