public static IObject3D Pick(int X, int Y, Midget.Cameras.MidgetCamera camera, IRenderSurface renderSurface) { Vector3 pickRayDirection = new Vector3(); Vector3 pickRayOrigin = new Vector3(); camera.UnProjectCoordinates(X,Y, renderSurface.ClientWidth, renderSurface.ClientHeight, ref pickRayOrigin, ref pickRayDirection); // // compute the vector of the pick ray in screen space // Vector3 v = new Vector3(); // v.X = ( ( ( 2.0f * X ) / renderSurface.ClientWidth ) - 1 ) / camera.ProjectionMatrix.M11; // v.Y = -( ( ( 2.0f * Y ) / renderSurface.ClientHeight ) - 1 ) / camera.ProjectionMatrix.M22; // v.Z = 1.0f; // // // Get the inverse view matrix // Matrix m = Matrix.Invert(camera.ViewMatrix); // // // Transform the screen space pick ray into 3D space // pickRayDirection.X = v.X*m.M11 + v.Y*m.M21 + v.Z*m.M31; // pickRayDirection.Y = v.X*m.M12 + v.Y*m.M22 + v.Z*m.M32; // pickRayDirection.Z = v.X*m.M13 + v.Y*m.M23 + v.Z*m.M33; // // pickRayDirection.Normalize(); // // pickRayOrigin.X = m.M41; // pickRayOrigin.Y = m.M42; // pickRayOrigin.Z = m.M43; // // // calc origin as intersection with near frustum // // pickRayOrigin += pickRayDirection * 1.0f; // int zDistance = -1; // IObject3D closestObj = null; // foreach (IObject3D obj in DeviceManager.Instance.ObjectList) // { // // // transform world space to object space // Vector3 pickRayOriginTemp = new Vector3(pickRayOrigin.X, pickRayOrigin.Y, pickRayOrigin.Z); // Vector3 pickRayDirectionTemp = new Vector3(pickRayDirection.X,pickRayDirection.Y,pickRayDirection.Z); // // // convert ray from 3d space to model space // pickRayOriginTemp.TransformCoordinate(Matrix.Invert(obj.WorldSpace)); //Matrix.Invert(Matrix.Identity)); // pickRayDirectionTemp.TransformNormal(Matrix.Invert(obj.WorldSpace)); //inverse); // // // if (obj.Intersect(pickRayOriginTemp, pickRayDirectionTemp) > zDistance) // { // closestObj = obj; // } // } return SceneManager.Instance.Scene.Intersect(pickRayOrigin, pickRayDirection, camera.WorldMatrix); //return closestObj; }
private void EventFactory_DeleteObject(object sender, Midget.Events.Object.MultiObjectEventArgs e) { DeviceManager.Instance.UpdateViews(); }
private void EventFactory_SelectAdditionalObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Add(e.Object); MidgetTreeNode node = FindNode(e.Object); if(node != null) { treeView.SelectedNode = node; } }
private void EventFactory_CreateObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { // add all objects to the scene (treeview) treeView.AddNode(new MidgetTreeNode(e.Object), (MidgetTreeNode)treeView.Nodes[0]); }
private void EventFactory_Transformation(object sender, Midget.Events.Object.MultiObjectEventArgs e) { FillObjectValues((IObject3D)selectedObjects[selectedObjects.Count - 1]); }
private void EventFactory_Group(object sender, Midget.Events.Object.Relation.GroupEventArgs e) { // add the group MidgetTreeNode groupNode = new MidgetTreeNode(e.Group); treeView.AddNode(groupNode,FindParentNode(groupNode)); // add all objects to the scene foreach(IObject3D obj in e.Objects) { treeView.MoveNode(FindNode(obj),groupNode); } }
private void EventFactory_SelectAdditionalObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Add(e.Object); // refresh the visible keyframes on the timeline pnlTimeline.Invalidate(); }
private void EventFactory_RemoveDynamic(object sender, Midget.Events.Object.Transformation.DynamicEventArgs e) { propertyGrid.SelectedObject = null; FillObjectValues(e.Object); }
private void EventFactory_DeselectObjects(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Remove(e.Object); // refresh the visible keyframes on the timeline pnlTimeline.Invalidate(); }
private void EventFactory_RemoveKeyFrame(object sender, Midget.Events.Object.Animation.KeyFrameEventArgs e) { pnlTimeline.Invalidate(); }
private void EventFactory_Transformation(object sender, Midget.Events.Object.MultiObjectEventArgs e) { DeviceManager.Instance.UpdateViews(); }
private void EventFactory_SelectAdditionalObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Add(e.Object); DeviceManager.Instance.UpdateViews(); }
private void EventFactory_DeselectObjects(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Remove(e.Object); DeviceManager.Instance.UpdateViews(); }
////////// /// TODO: add event handler for any added dynamics /// ////// private void EventFactory_AddDynamic(object sender, Midget.Events.Object.Transformation.DynamicEventArgs e) { FillObjectValues(e.Object); }
private void EventFactory_DeselectObjects(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Remove(e.Object); // if there are objects still selected if(selectedObjects.Count != 0) { LoadMaterial(((IObject3D)selectedObjects[selectedObjects.Count - 1]).Material); } else { this.Clear(); } }
private void EventFactory_DeselectObjects(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Remove(e.Object); if(selectedObjects.Count != 0) { FillObjectValues((IObject3D)selectedObjects[selectedObjects.Count - 1]); } else { this.Clear(); } }
private void EventFactory_SelectAdditionalObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Add(e.Object); LoadMaterial(e.Object.Material); }
private void EventFactory_SelectAdditionalObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Add(e.Object); FillObjectValues(e.Object); }
private void LoadMaterial(Midget.Materials.MidgetMaterial material) { currentMaterial = material; picAmbient.BackColor = (Color)currentMaterial.Ambient; picDiffuse.BackColor = (Color)currentMaterial.Diffuse; picEmissive.BackColor = (Color)currentMaterial.Emissive; picSpecular.BackColor = (Color)currentMaterial.Specular; if(currentMaterial.TexturePath.Length != 0) { picTexture.Image = Image.FromFile(currentMaterial.TexturePath); } }
private void EventFactory_DeselectObjects(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Remove(e.Object); if(selectedObjects.Count != 0) { MidgetTreeNode node = FindNode((IObject3D)selectedObjects[selectedObjects.Count - 1]); if(node != null) { treeView.SelectedNode = node; } } }
private void EventFactory_AdjustCameraEvent(object sender, Midget.Events.User.AdjustCameraEventArgs e) { // if the cameras are equal redraw the view if ( camera != null && camera.Equals(e.Camera) ) { this.Render(); } }
private void EventFactory_ParentChange(object sender, Midget.Events.Object.Relation.ParentChangeEventArgs e) { // find the parent node MidgetTreeNode newParent = FindNode(e.NewParent); // add all objects to the scene foreach(IObject3D obj in e.Objects) { treeView.MoveNode(FindNode(obj),newParent); } }
private void EventFactory_DeselectObjects(object sender, Midget.Events.Object.SingleObjectEventArgs e) { selectedObjects.Remove(e.Object); }
private void EventFactory_Ungroup(object sender, Midget.Events.Object.SingleObjectEventArgs e) { // move each node to new parent MidgetTreeNode groupNode = FindNode(e.Object); while (groupNode.Nodes.Count != 0) { MidgetTreeNode obj = (MidgetTreeNode)groupNode.Nodes[0]; treeView.MoveNode(FindNode(obj.Object3d),(MidgetTreeNode)groupNode.Parent); } }
private void EventFactory_SwitchEditModeEvent(object sender, Midget.Events.User.SwitchEditModeEventArgs e) { _editMode = e.EditMode; }
private void EventFactory_DeleteObject(object sender, Midget.Events.Object.MultiObjectEventArgs e) { foreach(IObject3D obj in e.Objects) { MidgetTreeNode node = FindNode(obj); // if the node hasn't already been deleted if(node != null) { node.Remove(); } } }
private void EventFactory_CreateObject(object sender, Midget.Events.Object.SingleObjectEventArgs e) { DeviceManager.Instance.UpdateViews(); }