private void RenderGUI() { //============================================================================ // Render a visual marker to highlight the node that is being manipulated //============================================================================ if (solver.HandleNodeIndex != -1 || solver.NearestNodeIndex != -1) { CameraData camera = DynaShapeViewExtension.CameraData; Triple camOrigin = new Triple(camera.EyePosition.X, -camera.EyePosition.Z, camera.EyePosition.Y); Triple camZ = new Triple(camera.LookDirection.X, -camera.LookDirection.Z, camera.LookDirection.Y).Normalise(); Triple camY = new Triple(camera.UpDirection.X, -camera.UpDirection.Z, camera.UpDirection.Y).Normalise(); Triple camX = camZ.Cross(camY); int nodeIndex = solver.HandleNodeIndex != -1 ? solver.HandleNodeIndex : solver.NearestNodeIndex; Triple v = solver.Nodes[nodeIndex].Position - camOrigin; float screenDistance = (float)camera.NearPlaneDistance + 0.1f; v = camOrigin + v * screenDistance / v.Dot(camZ); float markerSize = 0.025f * screenDistance; Triple v1 = v + camX * markerSize; Triple v2 = v - camY * markerSize; Triple v3 = v - camX * markerSize; Triple v4 = v + camY * markerSize; lineGeometry.Positions.Add(v1.ToVector3()); lineGeometry.Positions.Add(v3.ToVector3()); lineGeometry.Positions.Add(v2.ToVector3()); lineGeometry.Positions.Add(v4.ToVector3()); markerSize *= 0.5f; v1 = v + camX * markerSize; v2 = v - camY * markerSize; v3 = v - camX * markerSize; v4 = v + camY * markerSize; lineGeometry.Positions.Add(v1.ToVector3()); lineGeometry.Positions.Add(v2.ToVector3()); lineGeometry.Positions.Add(v2.ToVector3()); lineGeometry.Positions.Add(v3.ToVector3()); lineGeometry.Positions.Add(v3.ToVector3()); lineGeometry.Positions.Add(v4.ToVector3()); lineGeometry.Positions.Add(v4.ToVector3()); lineGeometry.Positions.Add(v1.ToVector3()); int temp = lineGeometry.Indices.Count; for (int i = 0; i < 12; i++) { lineGeometry.Indices.Add(temp + i); lineGeometry.Colors.Add(Color.OrangeRed); } } }
public void DrawText(string text, Triple position) { billboardText.TextInfo.Add(new TextInfo(text, position.ToVector3())); }