Esempio n. 1
0
        public static bool doHardwareSelect(Point screen_start, Point screen_end, View view)
        {
            Domain domain = DomainManager.Instance().getDomain(view);
            if (domain != null)
            {
                EntityManager mng = domain.getCurrentDoc().EntityMng;
                Dictionary<uint, Dictionary<EntityLayer, Entity>> selectid_cache = new Dictionary<uint, Dictionary<EntityLayer, Entity>>();

                uint id = 1;
                foreach (EntityLayer layer in mng.getEntityLayers())
                {
                    foreach (Entity entity in layer.OriginBuffer)
                    {
                        if (entity.pushToSelect(id, view.RenderSystem))
                        {
                            Dictionary<EntityLayer, Entity> pair = new Dictionary<EntityLayer, Entity>();
                            pair[layer] = entity;
                            selectid_cache[id] = pair;
                            id++;
                        }
                    }
                }

                Rectangle sel_rect = Tool.MakeScreenRect(screen_start, screen_end);
                view.RenderSystem.beginHardwareSelect(sel_rect.X, sel_rect.Y, sel_rect.Width, sel_rect.Height);
                view.RenderSystem.drawSceneActors();
                int count = view.RenderSystem.endHardwareSelect();
                uint[] res = view.RenderSystem.getSelectResult(count);

                foreach (Dictionary<EntityLayer, Entity> pair in selectid_cache.Values)
                {
                    foreach (EntityLayer layer in pair.Keys)
                        layer.SelectBuffer.clear();
                }

                foreach (uint _id in res)
                {
                    if (selectid_cache.ContainsKey(_id))
                    {
                        Dictionary<EntityLayer, Entity> pair = selectid_cache[_id];
                        foreach (KeyValuePair<EntityLayer, Entity> kvp in pair)
                        {
                            kvp.Key.SelectBuffer.insert(kvp.Value);
                        }
                    }
                }

                EditorGraph.broadCast(domain, domain, new MessageBase(MessageType.Editor, CommonEntityNode.SelectedEntityChanged));

                return res.Length > 0;
            }
            else
                return false;
        }
Esempio n. 2
0
 public virtual void addView(View v)
 {
     if (!m_views.Contains(v))
     {
         m_views.Add(v);
         v.setViewMng(this);
     }
 }
Esempio n. 3
0
        private bool computeCameraRect(Point p1,Point p2,View view)
        {
            Rectangle r = Tool.MakeScreenRect(p1, p2);

            if (r.Right - r.Left <= 0 || r.Bottom - r.Top <= 0)
            {
                mRectPT[0] = mRectPT[1] = mRectPT[2] = mRectPT[3] = Vector3F.Zero;
                return false;
            }

            mRectPT[0] = view.getCamera().getScreenWorldLocation(r.Left, r.Top, view);
            mRectPT[1] = view.getCamera().getScreenWorldLocation(r.Right, r.Top, view);
            mRectPT[2] = view.getCamera().getScreenWorldLocation(r.Right, r.Bottom, view);
            mRectPT[3] = view.getCamera().getScreenWorldLocation(r.Left, r.Bottom, view);

            for (int i = 0; i < 4; i++ )
            {
                Vector3F dir = mRectPT[i] - view.getCamera().Position;
                dir.Normalize();
                dir = dir * 0.01f;
                mRectPT[i] += dir;
            }

            return true;
        }
Esempio n. 4
0
        public static IntersectionPair Intersect(Point screenpt, Plane plane, View view)
        {
            Vector3F pos = view.getCamera().getScreenWorldLocation(screenpt.X, screenpt.Y, view);
            Vector3F dir = pos - view.getCamera().Position; dir.Normalize();

            Ray ray = new Ray(pos, dir);
            IntersectionPair res = Sharp3D.Math.Geometry3D.IntersectionMethods.Intersects(ray, plane);
            return res;
        }
Esempio n. 5
0
 public static Point FormPointToScreen(Point formpt, View view)
 {
     return FormPointToScreen(formpt, view.RenderWindow.getWidth(), view.RenderWindow.getHeight());
 }
Esempio n. 6
0
 public virtual void setCurrentView(View v)
 {
     m_view = v;
     m_view.Active = true;
     m_view.resizeWindow(this.Width, this.Height, this.Handle);
 }
Esempio n. 7
0
 public static bool doDragSelect(Point screen_start,Point screen_end,View view)
 {
     return doHardwareSelect(screen_start,screen_end,view);
 }
Esempio n. 8
0
 public static bool doDownSelect(Point screenpt,View view)
 {
     return doHardwareSelect(screenpt, new Point(screenpt.X - DownSelectWidth, screenpt.Y + DownSelectHeight), view);
 }
Esempio n. 9
0
        public static SelectedTransType selectTransformer(Point screenpt, List<EntityTransform3D> trans, View view)
        {
            Point point_start = screenpt;
            Point point_end = new Point(screenpt.X - TransSelectWidth, screenpt.Y + TransSelectHeight);

            return SelectedTransType.SELECT_NONE;
        }
Esempio n. 10
0
        public virtual Vector3F getScreenWorldLocation(int x,int y,View view)
        {
            this.doUpdate(view.RenderSystem);

            int w = view.RenderWindow.getWidth();
            int h = view.RenderWindow.getHeight();

            Vector4F vec = new Vector4F();
            vec.X = m_view_param.NearDist * (((2.0f * x) / w) - 1.0f);
            vec.Y = m_view_param.NearDist * (((2.0f * (h - y)) / h) - 1.0f);
            vec.Z = 0.0f;
            vec.W = m_view_param.NearDist;

            Matrix4F vpInverse = (m_projmat * m_viewmat).Inverse();

            vec = vpInverse * vec;
            vec /= vec.W;

            return new Vector3F(vec.X, vec.Y, vec.Z);
        }