/// <summary> /// Executes the command. /// Opens the AnalysisOptionsDialog, creates the export file, sends it to the Server and waits for it to have results. /// </summary> /// <param name="services">CommandServices object to interact with the system</param> public override void Run(Canguro.Controller.CommandServices services) { gettingResults = false; System.Windows.Forms.DialogResult result = services.ShowDialog(new Canguro.Commands.Model.AnalysisOptionsDialog(services)); string message = ""; if (result == System.Windows.Forms.DialogResult.Cancel) { services.Model.Undo.Rollback(); } else if (result == System.Windows.Forms.DialogResult.OK) { try { System.Windows.Forms.Cursor cursor = System.Windows.Forms.Cursor.Current; bool isConnected; bool canAnalyze = false; JoinCmd.RepairJoints(services.Model); new Canguro.Commands.Model.UnselectCmd().Run(services); if (!(canAnalyze = AnalysisUtils.CanAnalyze(services.Model, ref message, out isConnected))) { if (!isConnected) { if (System.Windows.Forms.MessageBox.Show(message, Culture.Get("error"), System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Error) == System.Windows.Forms.DialogResult.Yes) { System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor; new JoinCmd().Run(services); canAnalyze = AnalysisUtils.CanAnalyze(services.Model, ref message, out isConnected); System.Windows.Forms.Cursor.Current = cursor; } else return; } } if (canAnalyze) { System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor; string modelPath = System.IO.Path.GetTempFileName(); System.Diagnostics.Debug.WriteLine(modelPath); FixPDelta(services.Model.AbstractCases); Stream stream = File.Create(modelPath); new Canguro.Model.Serializer.Serializer(services.Model).Serialize(stream, false); stream.Close(); System.Windows.Forms.Cursor.Current = cursor; System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor; // TODO: ANALYZE STRUCTURE!!! //analysisID = ws.Analyze(userNameURL, passwordURL, host, serial, file, analysisOptions, modelSize, quotation); System.Windows.Forms.Cursor.Current = cursor; services.Model.Results = new Canguro.Model.Results.Results(0); // TODO: GET RESULTS services.ReportProgress(5); } else // Can't analyze { if (!isConnected) message = Culture.Get("structureIsDisconnectedWrn"); System.Windows.Forms.MessageBox.Show(message, Culture.Get("error"), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } } catch (Exception) { System.Windows.Forms.MessageBox.Show(Culture.Get("ErrorAnalyzing"), Culture.Get("error"), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } } }
/// <summary> /// Executes the command. /// Asks for selected Items repetitions and a Vector, and makes the copies. /// </summary> /// <param name="services">CommandServices object to interact with the system</param> public override void Run(Canguro.Controller.CommandServices services) { Dictionary<Joint, Joint> joints = new Dictionary<Joint, Joint>(); Dictionary<Joint, Joint> jSelection = new Dictionary<Joint, Joint>(); List<LineElement> lines = new List<LineElement>(); List<LineElement> lSelection = new List<LineElement>(); List<AreaElement> areas = new List<AreaElement>(); List<AreaElement> aSelection = new List<AreaElement>(); ItemList<Joint> jList = services.Model.JointList; ItemList<LineElement> lList = services.Model.LineList; ItemList<AreaElement> aList = services.Model.AreaList; Joint nJoint; LineElement nLine; AreaElement nArea; List<Item> selection = services.GetSelection(); if (selection.Count == 0) return; foreach (Item item in selection) { if (item is Joint) { jSelection.Add((Joint)item, null); joints.Add((Joint)item, null); } else if (item is LineElement) { LineElement l = (LineElement)item; lSelection.Add(l); lines.Add(l); if (!jSelection.ContainsKey(l.I)) { jSelection.Add(l.I, null); joints.Add(l.I, null); } if (!jSelection.ContainsKey(l.J)) { jSelection.Add(l.J, null); joints.Add(l.J, null); } } else if (item is AreaElement) { AreaElement a = (AreaElement)item; aSelection.Add(a); areas.Add(a); for (int i = 0; i < ((a.J4 != null) ? 4 : 3); i++) { if (!jSelection.ContainsKey(a[i])) { jSelection.Add(a[i], null); joints.Add(a[i], null); } } } } Microsoft.DirectX.Vector3 v; services.GetVector(out v); uint n; string str = services.GetString(Culture.Get("getArrayRepetition")); n = Convert.ToUInt32(str); List<Joint> newJoints = new List<Joint>(); List<LineElement> newLines = new List<LineElement>(); List<AreaElement> newAreas = new List<AreaElement>(); for (int i = 1; i <= n; i++) { foreach (Joint j in joints.Keys) { jList.Add(nJoint = new Joint(j.X + i * v.X, j.Y + i * v.Y, j.Z + i * v.Z)); nJoint.Masses = j.Masses; nJoint.DoF = j.DoF; jSelection[j] = nJoint; newJoints.Add(nJoint); } foreach (LineElement l in lines) { lList.Add(nLine = new LineElement(l, jSelection[l.I], jSelection[l.J])); newLines.Add(nLine); } foreach (AreaElement a in areas) { aList.Add(nArea = new AreaElement(a, jSelection[a.J1], jSelection[a.J2], jSelection[a.J3], jSelection[a.J4])); newAreas.Add(nArea); } services.ReportProgress((uint)(100 * i / n)); System.Windows.Forms.Application.DoEvents(); } JoinCmd.Join(services.Model, newJoints, newLines, newAreas); }