public ClipGumballBoxGetPoint(ClipGumballBox Box, RhinoDoc doc, DrawClippingPlanesConduit m_draw_clipping_plane, GumballDisplayConduit X_plus, GumballDisplayConduit X_minus, GumballDisplayConduit Y_plus, GumballDisplayConduit Y_minus, GumballDisplayConduit Z_plus, GumballDisplayConduit Z_minus) { m_Box = Box; x_height_plus_dc = X_plus; x_height_minus_dc = X_minus; y_height_plus_dc = Y_plus; y_height_minus_dc = Y_minus; z_height_plus_dc = Z_plus; z_height_minus_dc = Z_minus; m_clipping_plane = m_draw_clipping_plane; m_base_origin = Point3d.Unset; m_base_point = Point3d.Unset; m_doc = doc; }
protected override void OnMouseMove(GetPointMouseEventArgs e) { if (m_base_origin.IsValid && m_base_point.IsValid) { Line world_line; if (e.Viewport.GetFrustumLine(e.WindowPoint.X, e.WindowPoint.Y, out world_line)) { var dir = e.Point - m_base_point; var len = dir.Length; if (m_base_origin.DistanceTo(e.Point) < m_base_origin.DistanceTo(m_base_point)) { len = -len; } if (x_height_plus_dc.PickResult.Mode != GumballMode.None) { // update height_plus gumball x_height_plus_dc.UpdateGumball(e.Point, world_line); // update Box Point3d[] NewCornerPoints = new Point3d[8]; var xvec = m_Box.Xvector; xvec.Unitize(); xvec *= len; NewCornerPoints[0] = m_Box.BaseCornerPoints[0]; NewCornerPoints[1] = m_Box.BaseCornerPoints[1] + xvec; NewCornerPoints[2] = m_Box.BaseCornerPoints[2] + xvec; NewCornerPoints[3] = m_Box.BaseCornerPoints[3]; NewCornerPoints[4] = m_Box.BaseCornerPoints[4]; NewCornerPoints[5] = m_Box.BaseCornerPoints[5] + xvec; NewCornerPoints[6] = m_Box.BaseCornerPoints[6] + xvec; NewCornerPoints[7] = m_Box.BaseCornerPoints[7]; m_Box.CornerPoints = NewCornerPoints; m_clipping_plane.Enabled = false; m_clipping_plane = new DrawClippingPlanesConduit(m_Box); m_clipping_plane.Enabled = true; m_doc.Views.Redraw(); } else if (x_height_minus_dc.PickResult.Mode != GumballMode.None) { // update height_plus gumball x_height_minus_dc.UpdateGumball(e.Point, world_line); // update Box Point3d[] NewCornerPoints = new Point3d[8]; var reverseXvec = m_Box.Xvector * (-1); reverseXvec.Unitize(); reverseXvec *= len; NewCornerPoints[0] = m_Box.BaseCornerPoints[0] + reverseXvec; NewCornerPoints[1] = m_Box.BaseCornerPoints[1]; NewCornerPoints[2] = m_Box.BaseCornerPoints[2]; NewCornerPoints[3] = m_Box.BaseCornerPoints[3] + reverseXvec; NewCornerPoints[4] = m_Box.BaseCornerPoints[4] + reverseXvec; NewCornerPoints[5] = m_Box.BaseCornerPoints[5]; NewCornerPoints[6] = m_Box.BaseCornerPoints[6]; NewCornerPoints[7] = m_Box.BaseCornerPoints[7] + reverseXvec; m_Box.CornerPoints = NewCornerPoints; m_clipping_plane.Enabled = false; m_clipping_plane = new DrawClippingPlanesConduit(m_Box); m_clipping_plane.Enabled = true; m_doc.Views.Redraw(); } else if (y_height_plus_dc.PickResult.Mode != GumballMode.None) { // update height_plus gumball y_height_plus_dc.UpdateGumball(e.Point, world_line); // update Box Point3d[] NewCornerPoints = new Point3d[8]; var yvec = m_Box.Yvector; yvec.Unitize(); yvec *= len; NewCornerPoints[0] = m_Box.BaseCornerPoints[0]; NewCornerPoints[1] = m_Box.BaseCornerPoints[1]; NewCornerPoints[2] = m_Box.BaseCornerPoints[2] + yvec; NewCornerPoints[3] = m_Box.BaseCornerPoints[3] + yvec; NewCornerPoints[4] = m_Box.BaseCornerPoints[4]; NewCornerPoints[5] = m_Box.BaseCornerPoints[5]; NewCornerPoints[6] = m_Box.BaseCornerPoints[6] + yvec; NewCornerPoints[7] = m_Box.BaseCornerPoints[7] + yvec; m_Box.CornerPoints = NewCornerPoints; m_clipping_plane.Enabled = false; m_clipping_plane = new DrawClippingPlanesConduit(m_Box); m_clipping_plane.Enabled = true; m_doc.Views.Redraw(); } else if (y_height_minus_dc.PickResult.Mode != GumballMode.None) { // update height_plus gumball y_height_minus_dc.UpdateGumball(e.Point, world_line); // update Box Point3d[] NewCornerPoints = new Point3d[8]; var reverseYvec = m_Box.Yvector * (-1); reverseYvec.Unitize(); reverseYvec *= len; NewCornerPoints[0] = m_Box.BaseCornerPoints[0] + reverseYvec; NewCornerPoints[1] = m_Box.BaseCornerPoints[1] + reverseYvec; NewCornerPoints[2] = m_Box.BaseCornerPoints[2]; NewCornerPoints[3] = m_Box.BaseCornerPoints[3]; NewCornerPoints[4] = m_Box.BaseCornerPoints[4] + reverseYvec; NewCornerPoints[5] = m_Box.BaseCornerPoints[5] + reverseYvec; NewCornerPoints[6] = m_Box.BaseCornerPoints[6]; NewCornerPoints[7] = m_Box.BaseCornerPoints[7]; m_Box.CornerPoints = NewCornerPoints; m_clipping_plane.Enabled = false; m_clipping_plane = new DrawClippingPlanesConduit(m_Box); m_clipping_plane.Enabled = true; m_doc.Views.Redraw(); } else if (z_height_plus_dc.PickResult.Mode != GumballMode.None) { // update height_plus gumball z_height_plus_dc.UpdateGumball(e.Point, world_line); // update Box Point3d[] NewCornerPoints = new Point3d[8]; var zvec = m_Box.Zvector; zvec.Unitize(); zvec *= len; NewCornerPoints[0] = m_Box.BaseCornerPoints[0]; NewCornerPoints[1] = m_Box.BaseCornerPoints[1]; NewCornerPoints[2] = m_Box.BaseCornerPoints[2]; NewCornerPoints[3] = m_Box.BaseCornerPoints[3]; NewCornerPoints[4] = m_Box.BaseCornerPoints[4] + zvec; NewCornerPoints[5] = m_Box.BaseCornerPoints[5] + zvec; NewCornerPoints[6] = m_Box.BaseCornerPoints[6] + zvec; NewCornerPoints[7] = m_Box.BaseCornerPoints[7] + zvec; m_Box.CornerPoints = NewCornerPoints; m_clipping_plane.Enabled = false; m_clipping_plane = new DrawClippingPlanesConduit(m_Box); m_clipping_plane.Enabled = true; m_doc.Views.Redraw(); } else if (z_height_minus_dc.PickResult.Mode != GumballMode.None) { // update height_plus gumball z_height_minus_dc.UpdateGumball(e.Point, world_line); // update Box Point3d[] NewCornerPoints = new Point3d[8]; var reverseZvec = m_Box.Zvector * (-1); reverseZvec.Unitize(); reverseZvec *= len; NewCornerPoints[0] = m_Box.BaseCornerPoints[0] + reverseZvec; NewCornerPoints[1] = m_Box.BaseCornerPoints[1] + reverseZvec; NewCornerPoints[2] = m_Box.BaseCornerPoints[2] + reverseZvec; NewCornerPoints[3] = m_Box.BaseCornerPoints[3] + reverseZvec; NewCornerPoints[4] = m_Box.BaseCornerPoints[4]; NewCornerPoints[5] = m_Box.BaseCornerPoints[5]; NewCornerPoints[6] = m_Box.BaseCornerPoints[6]; NewCornerPoints[7] = m_Box.BaseCornerPoints[7]; m_Box.CornerPoints = NewCornerPoints; m_clipping_plane.Enabled = false; m_clipping_plane = new DrawClippingPlanesConduit(m_Box); m_clipping_plane.Enabled = true; m_doc.Views.Redraw(); } } } base.OnMouseMove(e); }