예제 #1
0
 public CatenaryTable(RulingSpan rs, Vector2 clearance_pt)
 {
     this.RulingSpan = rs;
     this.style.StringFormat.Alignment = StringAlignment.Center;
     this.style.SmoothingMode          = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
     this.ClearancePoint = clearance_pt;
     this.Alignment      = HorizontalAlignment.Center;
 }
예제 #2
0
 public CatenaryGraphics(RulingSpan rs)
 {
     this.RulingSpan = rs;
     this.Style      = Style.Default;
     this.mouse_over = Vector2.Origin;
     this.mouse_dn   = Vector2.Origin;
     this.Alignment  = HorizontalAlignment.Left;
 }
예제 #3
0
        public void CloneTest()
        {
            double Wt = 0.75, H = 3200;
            var    rs = TestRulingSpan(Wt, H);

            var gs = new RulingSpan(rs);

            Assert.IsTrue(rs.Equals(gs));
        }
예제 #4
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (ReadLicense())
            {
                CheckLicense();

                if (!_isDemo)
                {
                    saveSpansButton.Enabled   = true;
                    importSpansButton.Enabled = true;
                }
            }


            string path = Properties.Settings.Default.lastSave;

            if (File.Exists(path))
            {
                try
                {
                    RulingSpan = RulingSpan.OpenFile(path);
                    fileLabelStatusBar.Text = Path.GetFileName(path);
                }
                catch (System.IO.FileLoadException ex)
                {
                    Debug.WriteLine(ex.ToString());
                }
            }

            if (rs.Spans.Count == 0)
            {
                Catenary A = new Catenary(150 * Vector2.UnitY, 400, 12, 0.75, 3000);
                Catenary B = new Catenary(A.EndPosition, 1400, -10, 0.75, 3000);
                Catenary C = new Catenary(B.EndPosition, 700, -20, 0.75, 3000);
                rs.AddSpans(A, B, C);
            }


            rs.Spans.RaiseListChangedEvents = true;
            var icon_green = Properties.Resources.flag_green;

            foreach (var item in ProjectUnits.PredefinedUnits)
            {
                var mi = item.ToMenuItem(icon_green, (tsi, pev) =>
                {
                    rs.SetProjectUnits(pev.NewProjectUnits);
                    unitsDropDown.Text = rs.Units.ToString();
                    RefreshAndPaintGrid();
                });
                unitsDropDown.DropDownItems.Add(mi);
            }

            unitsDropDown.Text = rs.Units.ToString();
        }
예제 #5
0
        public void RulingSpanTest()
        {
            var projectUnits = new ProjectUnits(ProjectUnitSystem.NewtonMeterSecond);
            var cat1         = Catenary.Default(projectUnits);
            var cat2         = Catenary.Default(projectUnits);
            var cat3         = Catenary.Default(projectUnits);

            var rs = new RulingSpan(
                projectUnits, cat1, cat2, cat3);

            Assert.IsTrue(rs.IsOk);
        }
예제 #6
0
        public void RS_SaveAndLoad()
        {
            double Wt = 0.75, H = 3200;
            var    rs = TestRulingSpan(Wt, H);

            const string file = "rs_save.spanx";

            rs.SaveFile(file);

            var gs = RulingSpan.OpenFile(file);

            File.Delete(file);
            Assert.IsTrue(gs.Equals(rs));
        }
예제 #7
0
        private void pic_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (vis != null)
            {
                RectangleF target   = vis.GetDrawArea(sender as Control);
                Canvas     canvas   = vis.GetCanvasFor(target);
                var        mouse_pt = canvas.InvMap(e.Location);
                var        cat      = rs.FindCatenaryFromX(mouse_pt.X);
                int        index    = rs.Spans.IndexOf(cat);
                if (index >= 0)
                {
                    if (e.Button == MouseButtons.Left)
                    {
                        bool sel = rulingspanDataGrid.Rows[index].Selected;
                        rulingspanDataGrid.Rows[index].Selected = true;
                        TensionForm dlg = new TensionForm
                        {
                            Units    = rs.Units,
                            Catenary = rs[index].Clone()
                        };

                        if (dlg.ShowDialog() == DialogResult.OK)
                        {
                            rs[index] = dlg.Catenary;
                        }
                        rulingspanDataGrid.Rows[index].Selected = sel;
                    }
                    else if (e.Button == MouseButtons.Right)
                    {
                        bool sel = rulingspanDataGrid.Rows[index].Selected;
                        rulingspanDataGrid.Rows[index].Selected = true;
                        Cursor cur = pic.Cursor;
                        pic.Cursor = Cursors.WaitCursor;
                        var rs_temp = RulingSpan.Clone();
                        this.Enabled = false;
                        rs_temp[index].SetClearancePoint(mouse_pt);
                        this.Enabled = true;
                        pic.Cursor   = cur;
                        vis.ClearMousePosition();
                        RulingSpan = rs_temp;
                        rulingspanDataGrid.Rows[index].Selected = sel;
                    }
                }
            }
        }
예제 #8
0
        public void Render(Graphics g, RectangleF target)
        {
            Canvas canvas = GetCanvasFor(target);

            Style.SetGraphicsQuality(g);
            Catenary catenary = RulingSpan.FindCatenaryFromX(mouse_over.X);

            foreach (var item in RulingSpan.Spans)
            {
                RenderOne(g, canvas, item, Style, catenary == item);
            }

            if (!mouse_dn.IsZero)
            {
                catenary = RulingSpan.FindCatenaryFromX(mouse_dn.X);
                if (catenary != null)
                {
                    double y    = catenary.CatenaryFunction(mouse_dn.X);
                    PointF A    = canvas.Map(mouse_dn.X, y);
                    PointF M    = canvas.Map(mouse_dn);
                    string text = Math.Abs(y - mouse_dn.Y).ToString("0.#");
                    Style.VerticalArrow(g, M.X, M.Y, A.Y, text, false);
                }
                using (Pen pen = Style.MakePen(Color.Red))
                {
                    PointF M = canvas.Map(mouse_dn);
                    g.DrawEllipse(pen,
                                  M.X - Style.PointWidth / 2,
                                  M.Y - Style.PointWidth / 2,
                                  Style.PointWidth,
                                  Style.PointWidth);

                    using (Font font = Style.MakeFont(SystemFonts.DialogFont))
                    {
                        string       text = string.Format("x:{0:0}\ny:{1:0.#}", mouse_dn.X, mouse_dn.Y);
                        StringFormat sf   = new StringFormat();
                        SizeF        sz   = g.MeasureString(text, font, M, sf);

                        g.FillRectangle(Brushes.White, M.X - sz.Width - 4, M.Y - 4, sz.Width + 2, sz.Height + 2);
                        g.DrawString(text, font, Brushes.Red, M.X - sz.Width - 2, M.Y - 2, sf);
                    }
                }
            }
        }
예제 #9
0
        private void saveSpansButton_Click(object sender, EventArgs e)
        {
            var dlg = new SaveFileDialog
            {
                Title  = "Save Spans",
                Filter = "Span Xml File (*.spanx)|*.spanx|All Files|*.*"
            };
            string path = Properties.Settings.Default.lastSave;

            if (File.Exists(path))
            {
                dlg.InitialDirectory = Path.GetDirectoryName(path);
                dlg.FileName         = Path.GetFileName(path);
            }
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                RulingSpan.SaveFile(dlg.FileName);
                Properties.Settings.Default.lastSave = dlg.FileName;
                fileLabelStatusBar.Text = Path.GetFileName(dlg.FileName);
            }
        }
예제 #10
0
        public CatenaryForm()
        {
            InitializeComponent();

            RulingSpan = new RulingSpan(DefaultProjectUnits);
        }