public ChemEntity TrySelectAtPoint(int x, int y)
        {
            Vector3 pickRay, pickRayDir, pickRayOrigin;

            // Compute the vector of the pick ray in screen space
            pickRay.X = (((2.0f * x) / width) - 1) / view3D.Projection.M11;
            pickRay.Y = -(((2.0f * y) / height) - 1) / view3D.Projection.M22;
            pickRay.Z = 1.0f;

            Matrix matInverseView = Matrix.Invert(view3D.ViewMatrix);

            // Transform the screen space pick ray into 3D space
            pickRayDir.X = pickRay.X * matInverseView.M11 + pickRay.Y * matInverseView.M21 + pickRay.Z * matInverseView.M31;
            pickRayDir.Y = pickRay.X * matInverseView.M12 + pickRay.Y * matInverseView.M22 + pickRay.Z * matInverseView.M32;
            pickRayDir.Z = pickRay.X * matInverseView.M13 + pickRay.Y * matInverseView.M23 + pickRay.Z * matInverseView.M33;
            pickRayDir.Normalize();

            pickRayOrigin.X = matInverseView.M41;
            pickRayOrigin.Y = matInverseView.M42;
            pickRayOrigin.Z = matInverseView.M43;

            pickRayOrigin.Add(Vector3.Multiply(pickRayDir, 1.0f));      //	near plane

            // transform trough world space
            Matrix inverseWorld = Matrix.Invert(view3D.WorldMatrix * rotation); // scene-world == object-world

            Vector3 localOrigin = Vector3.TransformCoordinate(pickRayOrigin, inverseWorld);
            Vector3 localDir    = Vector3.TransformNormal(pickRayDir, inverseWorld);

            // trace through scene via manager
            ChemEntity entity = sceneManager.TraceRayInScene(localOrigin, localDir);

            return(entity);
        }
Exemple #2
0
        public ChemEntity TraceRayInScene(Vector3 rayOrigin, Vector3 rayDir)
        {
            ChemEntity entity = (ChemEntity)sceneGraph.RayIntersectFirst(rayOrigin, rayDir);

            /*if (entity != null)
             * {
             *  AtomSelectionEntity selEntity = new AtomSelectionEntity((AtomEntity)entity);
             *  selEntity.Init(device);
             *  postSceneViewEntities.Add(selEntity);
             * }*/
            /*Ray3D ray = new Ray3D(rayOrigin, rayDir, 20f);
             * postSceneWorldEntities.Add(ray);
             * ray.Init(device);*/
            return(entity);
        }
Exemple #3
0
        void control_OnEntitySelected(ChemEntity entity)
        {
            object obj = null;

            if (entity.CdkObject is IAtom)
            {
                AtomWrapper atom = new AtomWrapper((IAtom)entity.CdkObject);
                obj = atom;
                ListViewItem[] connectedItems = atom.GetConnectedItemsForListView(currentSelected.ChemControl, uiConnectedList.Groups[0], uiConnectedList.Groups[1]);
                uiConnectedList.Items.Clear();
                if (connectedItems != null)
                {
                    uiConnectedList.Items.AddRange(connectedItems);
                }
            }
            propertyGrid1.SelectedObject = obj;
        }
Exemple #4
0
        public ChemEntity TrySelectAtPoint(int x, int y)
        {
            selected.Clear();
            if (renderContext != null)
            {
                ChemEntity entity = renderContext.TrySelectAtPoint(x, y);
                if (entity != null)
                {
                    selected.Add(entity);
                }
                // update view
                renderContext.UpdateSelectedItems(selected);
                Render();

                return(entity);
            }
            return(null);
        }
Exemple #5
0
 protected override void OnMouseDown(MouseEventArgs e)
 {
     base.OnMouseDown(e);
     if (renderContext != null && renderSource != null)
     {
         // pass to layers first
         if (renderContext.OnLayerMouseDown(e))
         {
             Render();
             return;
         }
         if (controlMode == ControlMode.ViewMovement)
         {
             if (e.Button == MouseButtons.Left && e.Clicks == 2)
             {
                 ChemEntity obj = TrySelectAtPoint(e.X, e.Y);
                 if (obj != null && OnEntitySelected != null)
                 {
                     OnEntitySelected(obj);
                 }
             }
             else if (controlHandler != null && controlHandler.OnMouseDown(e))
             {
                 Render();
             }
         }
         else if (controlMode == ControlMode.Selection)
         {
             // Start selection area
             renderContext.StartSelectionArea(e.X, e.Y);
         }
         else if (controlMode == ControlMode.SelectionMovement)
         {
             // start movement of the selected items
         }
     }
 }
Exemple #6
0
 public ChemEntity[] QueryConnectedEntities(ChemEntity entity)
 {
     throw new Exception("The method or operation is not implemented.");
 }
Exemple #7
0
 public ChemEntity GetNearestTo(ChemEntity entity)
 {
     throw new Exception("The method or operation is not implemented.");
 }
Exemple #8
0
 public ChemEntity[] GetAllNearby(ChemEntity entity, float radius)
 {
     throw new Exception("The method or operation is not implemented.");
 }