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; }
public virtual void addView(View v) { if (!m_views.Contains(v)) { m_views.Add(v); v.setViewMng(this); } }
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; }
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; }
public static Point FormPointToScreen(Point formpt, View view) { return FormPointToScreen(formpt, view.RenderWindow.getWidth(), view.RenderWindow.getHeight()); }
public virtual void setCurrentView(View v) { m_view = v; m_view.Active = true; m_view.resizeWindow(this.Width, this.Height, this.Handle); }
public static bool doDragSelect(Point screen_start,Point screen_end,View view) { return doHardwareSelect(screen_start,screen_end,view); }
public static bool doDownSelect(Point screenpt,View view) { return doHardwareSelect(screenpt, new Point(screenpt.X - DownSelectWidth, screenpt.Y + DownSelectHeight), view); }
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; }
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); }