public virtual void Copy(CubicBezier acopy) { base.Copy(acopy); m_p1 = acopy.m_p1; m_p2 = acopy.m_p2; m_useEndArrow = acopy.m_useEndArrow; m_useStartArrow = acopy.m_useStartArrow; m_crv = acopy.m_crv; m_guid = acopy.Guid; UpdateCtrlPts(); Selected = acopy.Selected; }
void UpdateCtrlPts() { double xDelta = m_p2.X - m_p1.X; double scale = 0.6; m_p1Ctrl.X = m_p1.X + xDelta * scale; m_p1Ctrl.Y = m_p1.Y; m_p2Ctrl.X = m_p2.X - xDelta * scale; m_p2Ctrl.Y = m_p2.Y; if (m_crv == null) { m_crv = new CubicBezierCurveCurve(new float[2] { (float)m_p1.X, (float)m_p1.Y }, new float[2] { (float)m_p1Ctrl.X, (float)m_p1Ctrl.Y }, new float[2] { (float)m_p2Ctrl.X, (float)m_p2Ctrl.Y }, new float[2] { (float)m_p2.X, (float)m_p2.Y }); } else { m_crv.SetPos(0, (float)m_p1.X, (float)m_p1.Y); m_crv.SetPos(1, (float)m_p1Ctrl.X, (float)m_p1Ctrl.Y); m_crv.SetPos(2, (float)m_p2Ctrl.X, (float)m_p2Ctrl.Y); m_crv.SetPos(3, (float)m_p2.X, (float)m_p2.Y); } float[] midPt = { 0.0f, 0.0f }; m_crv.Eval(0.5f, ref midPt[0], ref midPt[1]); m_center.X = midPt[0]; m_center.Y = midPt[1]; }