Beispiel #1
0
		public bool IsSelected(IEditorPrimitive p)
		{
			return selection.Contains(p);
		}
Beispiel #2
0
		bool ISceneEditorRenderHost.IsHighlighted(IEditorPrimitive p)
		{
			return p == Highlighted;
		}
Beispiel #3
0
		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();
		}
Beispiel #4
0
		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;
		}
Beispiel #5
0
		bool IsHighlighted (IEditorPrimitive o) { return Highlighted==o; }