public bool IsSelected(IEditorPrimitive p) { return selection.Contains(p); }
bool ISceneEditorRenderHost.IsHighlighted(IEditorPrimitive p) { return p == Highlighted; }
void SelectItem (Vector3 start, Vector3 dir, bool multiple) { IEditorPrimitive[] prims; IEnumerable<IEditorPrimitive> primitiveSet = Program.AllPrimitives; if (multiple) prims = Array.ConvertAll(RayPrimitivesIntersect(new Ray(start, dir), camera.Position, primitiveSet), i => i.primitive); else prims = new IEditorPrimitive[] { GetPrimitiveOnRay(new Ray(start, dir), camera.Position, primitiveSet).primitive }; foreach (IEditorPrimitive o in prims) { if (o != null) { if (selection.Contains(o)) selection.Remove(o); else { if ((ModifierKeys & Keys.Shift) == 0) selection.Clear(); selection.Add(o); } } else { if ((ModifierKeys & Keys.Shift) == 0) selection.Clear(); } } UpdateMoveAnchors(); }
private void openGLControl_MouseMove(object sender, MouseEventArgs e) { Vector3 rayDir = camera.ScreenPosToRay(e.X, e.Y); var isect = GetPrimitiveOnRay(new Ray (camera.Position, rayDir), camera.Position, GetRenderPrimitives()); Highlighted = isect.primitive; if (Highlighted != null) { renderPoint = isect.point; dbgDist = renderPoint.DistanceToRay(camera.Position, rayDir); } //selection = new HashSet<IEditorPrimitive>(Array.ConvertAll(Scene.RayPrimitivesIntersect(camera.Position, rayDir, camera.Position, GetScene().Primitives).ToArray(), i=>{ renderPoint=i.point; return i.obj;})); glControl.Refresh(); if (e.Button == MouseButtons.None) return; Point move = (Point)((Size)e.Location - (Size)lastMousePos); if (movingAnchor != null) { movingAnchor.MovePrimitives(selection.Concat(moveAnchors), new Vector2( move.X, move.Y), camera, activeMode); } else { const float angSpeed = 0.005f; if ( (e.Button & MouseButtons.Left) != 0) { camera.Yaw -= move.X * angSpeed; camera.Pitch += move.Y * angSpeed; } else if ( (e.Button & MouseButtons.Middle) != 0) { float speed = 0.001f * camDistance; camOffset += camera.Right * (-move.X * speed ); camOffset += camera.Up * (move.Y * speed ); } else if ( (e.Button & MouseButtons.Right) != 0) { camDistance *= (float) Math.Pow(1.003, move.Y); } } lastMousePos = e.Location; }
bool IsHighlighted (IEditorPrimitive o) { return Highlighted==o; }