示例#1
0
        private void parseResults(String fullname, AbstractFEMResults femresults)
        {
            ProjectManager pm = ProjectManager.GetInstance();

            if (femresults == null)
            {
                return;
            }

            IDictionary <String, object> dicts = femresults.BuildResultsForDisplay();

            foreach (String name in dicts.Keys)
            {
                object     value = dicts[name];
                ResultItem item  = new ResultItem();
                item.femName = name;
                item.group   = fullname;

                if (value is ListPointD)
                {
                    item.femValue = ((ListPointD)value).ToZedGraphPointPairList();
                }
                else
                {
                    item.femValue = value;
                }

                results.Add(item);
            }
        }
示例#2
0
        public void refreshUI()
        {
            treeView1.Nodes.Clear();

            ProjectManager pm = ProjectManager.GetInstance();

            foreach (String path in pm.Components.Keys)
            {
                String[]           ss    = path.Split('.', '\\');
                TreeNodeCollection nodes = treeView1.Nodes;//first lv collection nodes
                for (int i = 0; i < ss.Length; i++)
                {
                    if (nodes.ContainsKey(ss[i]))
                    {
                        nodes = treeView1.Nodes[ss[i]].Nodes;//get next level nodes collections
                    }
                    else
                    {
                        nodes = nodes.Add(ss[i], ss[i]).Nodes;//add ss[i] to itself and get its collection (of couse empty)
                    }
                }
            }

            treeView1.ExpandAll();
            if (treeView1.Nodes.Count > 0)
            {
                treeView1.SelectedNode = treeView1.Nodes[0];//select the first
            }
        }
示例#3
0
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Filter           = "*.prm|*.prm";
            dialog.FilterIndex      = 0;
            dialog.RestoreDirectory = true;
            DialogResult result = dialog.ShowDialog();

            if (result != DialogResult.OK)
            {
                return;
            }

            String fn = dialog.FileName;

            bool b = ProjectManager.GetInstance().openProject(dialog.FileName);

            if (!b)
            {
                MessageBox.Show("Error when open " + dialog.FileName);
            }

            //refresh params (need to be done here because nowhere it is called)
            if (form_motorParams != null && form_motorParams.Visible)
            {
                form_motorParams.refreshUI();
            }
        }
示例#4
0
        private void contextMenu_ChangeMotorType_ChildItemClicked(object sender, EventArgs e)
        {
            var clickedItem = sender as ToolStripItem;
            var pm          = ProjectManager.GetInstance();
            var motorType   = clickedItem.Tag as Type;

            pm.changeMotorType(motorType);
            refreshUI();
        }
示例#5
0
        private void PreviewWindow_Paint(object sender, PaintEventArgs e)
        {
            if (IsProjectMotor)
            {
                Motor = ProjectManager.GetInstance().Motor;
            }

            label1.Text = String.Format("{0:F1} : {1:F1} @ {2:F1}", Ox, Oy, scale);
            Motor.DrawPreview(e.Graphics, Ox, Oy, scale);
        }
 private void setThisAsCurrentSetOfParamsToolStripMenuItem_Click(object sender, EventArgs e)
 {
     //if (MessageBox.Show("Set this as current motor?", "Ask", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
     {
         ProjectManager pm  = ProjectManager.GetInstance();
         var            row = dgv_params.SelectedRows[0];
         String         md5 = row.Cells[ParamSweeper.COL_MD5].Value.ToString();
         sweeper.applyParametersCollectionVariant(md5, pm.MotorParams);
         pm.InvalidateParams();
     }
 }
示例#7
0
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeView       tv = (TreeView)sender;
            ProjectManager pm = ProjectManager.GetInstance();

            currentPath = e.Node.FullPath;

            showResultsInDGV(currentPath);

            this.Text = currentPath;
        }
        private void initialize()
        {
            ProjectManager pm = ProjectManager.GetInstance();

            sweeper = pm.pSweeper;//sweeper get from project manager
            comboBox_paramsName.Items.AddRange(sweeper.getParameterNames());

            showParamsInDGV(sweeper.ParamsTable);
            showResultsInDGV(sweeper.ResultsTable);

            checkBox_enableFem.Checked = sweeper.EnableFEMAnalysis;
        }
示例#9
0
        public void refreshUI()
        {
            ProjectManager pm = ProjectManager.GetInstance();

            treeView1.Nodes.Clear();
            results = new List <ResultItem>();

            treeView1.Nodes.Add("Motor");
            parseMotorDerivedParams("Motor");

            treeView1.Nodes.Add("Static");
            AbstractAnalyticalAnalyser aa = pm.analyticalAnalyser;
            AbstractStaticAnalyser     sa = pm.staticAnalyser;

            parseComparisonResults("Static", aa == null ? null : aa.getResults(), sa == null ? null : sa.getResults());

            foreach (String name in pm.GetAnalysisResultsNames())
            {
                // add nodes to treeview of results
                String[]           ss    = name.Split('.', '\\');
                TreeNodeCollection nodes = treeView1.Nodes;//first lv collection nodes
                for (int i = 0; i < ss.Length; i++)
                {
                    if (nodes.ContainsKey(ss[i]))
                    {
                        nodes = treeView1.Nodes[ss[i]].Nodes;//get next level nodes collections
                    }
                    else
                    {
                        nodes = nodes.Add(ss[i], ss[i]).Nodes;//add ss[i] to itself and get its collection (of couse empty)
                    }
                }

                // now parse the results data
                object result = pm.GetAnalysisResults(name);

                if (result == null)
                {
                    continue;
                }

                if (result is AbstractFEMResults)
                {
                    parseResults(name, (AbstractFEMResults)result);
                }
            }

            treeView1.ExpandAll();

            showResultsInDGV(currentPath);
        }
        private void comboBox_paramsName_SelectedIndexChanged(object sender, EventArgs e)
        {
            String         item = (String)comboBox_paramsName.SelectedItem;
            ProjectManager pm   = ProjectManager.GetInstance();

            foreach (Parameter p in pm.MotorParams)
            {
                if (p.fullname == item)
                {
                    tb_value.Text = p.value.ToString();
                    break;
                }
            }
        }
示例#11
0
        private void parseMotorDerivedParams(string group)
        {
            ProjectManager pm   = ProjectManager.GetInstance();
            var            dict = pm.Motor.GetDerivedParameters();

            foreach (String name in dict.Keys)
            {
                object     value = dict[name];
                ResultItem item  = new ResultItem();
                item.aName  = name;
                item.aValue = value;
                item.group  = group;

                results.Add(item);
            }
        }
示例#12
0
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeView       tv   = (TreeView)sender;
            ProjectManager pm   = ProjectManager.GetInstance();
            String         item = e.Node.FullPath;

            ParametersCollection pc = new ParametersCollection();

            pc.AddRange(pm.MotorParams.Where(pi => pi.group == item));
            showInputParamsInDGV(dgv_motorParams, pc);

            currentPath = e.Node.FullPath;
            currentNode = e.Node;

            this.Text = currentPath;
        }
示例#13
0
        private void initMenu()
        {
            var pm = ProjectManager.GetInstance();

            Type[] listmotorTypes = pm.ListMotorType;
            newToolStripMenuItem.DropDownItems.Clear();
            foreach (Type motortype in listmotorTypes)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();
                item.Name   = motortype.Name;
                item.Text   = motortype.Name;
                item.Tag    = motortype;
                item.Click += newToolStripMenuItem_ChildItem_Click;
                newToolStripMenuItem.DropDownItems.Add(item);
            }
        }
        /// <summary>
        /// Init GA, and start new thread to run optimization
        /// </summary>
        private void startOptimization()
        {
            if (optimizationIsRunning)
            {
                return;
            }

            // reset results window
            if (optResultsWindow != null && !optResultsWindow.IsDisposed)
            {
                optResultsWindow.clearHistory();
            }

            optimizationIsRunning = true;

            originParams = ProjectManager.GetInstance().MotorToParams(CurrentMotor);

            // restart Lua (like clean-up)
            closeLua();
            initLua();

            // init datalog
            init_datalog();

            try
            {
                // init script
                lua_initGA(currentConfig.luascript_init);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Init script failed: " + ex.Message);
                return;
            }

            ga = new GA(currentConfig.cross_rate, currentConfig.mutation_rate, currentConfig.population_size, currentConfig.generation_size, currentConfig.genome_size, currentConfig.fitness_size);

            ga.FitnessFunction = new GAFunction(fitnessFunction);
            ga.FitnessFile     = OutputFolder + "\\fitness_" + CurrentConfigName + ".csv";
            ga.Elitism         = true;
            ga.StepFinish     += Ga_StepFinish;

            thread = new Thread(actualRunOptimization);
            thread.IsBackground = true;
            thread.Start();
        }
示例#15
0
        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            treeView1.SelectedNode = e.Node;
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                if (e.Node.FullPath.StartsWith("Transient"))
                {
                    if (e.Node.Level == 0)//parent
                    {
                        runToolStripMenuItem.Visible    = false;
                        removeToolStripMenuItem.Visible = false;
                        contextMenu_transient.Show(this, e.Location, ToolStripDropDownDirection.Default);
                    }
                    else if (e.Node.Level == 1)//child
                    {
                        runToolStripMenuItem.Visible    = true;
                        removeToolStripMenuItem.Visible = true;
                        contextMenu_transient.Show(this, e.Location, ToolStripDropDownDirection.Default);
                    }
                }

                else if (e.Node.FullPath.StartsWith("Motor")) //motor
                {
                    if (e.Node.Level == 0)                    //parent
                    {
                        var    pm             = ProjectManager.GetInstance();
                        Type[] listmotorTypes = pm.ListMotorType;
                        changeMotorTypeToolStripMenuItem.DropDownItems.Clear();
                        foreach (Type motortype in listmotorTypes)
                        {
                            ToolStripMenuItem item = new ToolStripMenuItem();
                            item.Name = motortype.Name;
                            item.Text = motortype.Name;
                            item.Tag  = motortype;
                            if (motortype.Equals(pm.CurrentMotorType))
                            {
                                item.Checked = true;
                            }
                            item.Click += contextMenu_ChangeMotorType_ChildItemClicked;
                            changeMotorTypeToolStripMenuItem.DropDownItems.Add(item);
                        }
                        contextMenu_Motor.Show(this, e.Location, ToolStripDropDownDirection.Default);
                    }
                }
            }
        }
示例#16
0
        private AbstractMotor ParamsToMotor(ParametersCollection pc)
        {
            ProjectManager pm                = ProjectManager.GetInstance();
            AbstractMotor  motor             = pm.GetSampleMotor();//new default
            Dictionary <String, object> objs = new Dictionary <string, object>();

            objs.Add("Motor\\General", motor.GeneralParams);
            objs.Add("Motor\\Rotor", motor.Rotor);
            objs.Add("Motor\\Stator", motor.Stator);
            //objs.Add("Motor\\Materials", motor.MaterialParams);
            objs.Add("Motor\\Airgap", motor.Airgap);
            foreach (String objname in objs.Keys)
            {
                pc.putValuesToObject(objname, objs[objname]);
            }

            return(motor);
        }
        /// <summary>
        /// Execute lua_script that should modify a motor using given gens
        /// </summary>
        /// <param name="gens">Genomes</param>
        /// <param name="lua_script">lua_script</param>
        /// <returns></returns>
        private void lua_constructMotorfromGens(double[] gens, string lua_script, out AbstractMotor motor, out AbstractMMAnalyser mma)
        {
            // deep copy a motor from project manager
            var pm = ProjectManager.GetInstance();
            var pc = originParams;

            motor = pm.ParamsToMotor(pc);
            mma   = motor.GetMMAnalyser();

            lock (lock_dostring)
            {
                lua["gens"]  = gens;
                lua["motor"] = motor;
                lua["mma"]   = mma;

                lua.DoString(lua_script);
            }
        }
        private void showResultsInDGV(DataTable resultsTbl)
        {
            if (resultsTbl == null)
            {
                return;
            }

            if (columnsToHide == null)
            {
                columnsToHide = new List <string>();
            }

            // set data
            dgv_results.DataSource = null;
            dgv_results.DataSource = resultsTbl;

            // setup column width and header text
            foreach (DataGridViewColumn column in dgv_results.Columns)
            {
                int pp = column.HeaderText.LastIndexOf('\\');
                if (pp >= 0)
                {
                    column.HeaderText = column.HeaderText.Substring(pp + 1);
                }

                column.Width = column.GetPreferredWidth(DataGridViewAutoSizeColumnMode.ColumnHeader, false);
            }

            // hightlight the current set of params row
            ProjectManager pm         = ProjectManager.GetInstance();
            String         md5current = pm.Motor.GetMD5String();

            foreach (DataGridViewRow row in dgv_results.Rows)
            {
                if (row.Cells[ParamSweeper.COL_MD5].Value.ToString() == md5current)
                {
                    row.DefaultCellStyle.BackColor = Color.Aqua;
                }
                if (row.Cells[ParamSweeper.COL_STATUS].Value.ToString() != "OK")
                {
                    row.DefaultCellStyle.ForeColor = Color.Red;
                }
            }
        }
示例#19
0
        private void dgv_motorParams_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView     dgv   = (DataGridView)sender;
            List <Parameter> list  = (List <Parameter>)dgv.DataSource;
            Parameter        param = list[e.RowIndex];

            // try evaluate value
            param.EvaluateValue();

            // redraw (because maybe param changed)
            dgv.Invalidate();

            // inform project manager that params have changed
            ProjectManager pm = ProjectManager.GetInstance();

            // begin invoke to make it run in next UI loop
            // to avoid infinity loop (celleditend-refresh dgv)
            pm.InvalidateParams();
        }
        private void applyOptimalResult(AbstractMotor optimalMotor)
        {
            ProjectManager pm = ProjectManager.GetInstance();

            var pc = pm.MotorToParams(optimalMotor);

            foreach (var p_dest in pm.MotorParams)
            {
                foreach (var p_src in pc)
                {
                    if (p_src.fullname == p_dest.fullname && p_src.valueType == p_dest.valueType)
                    {
                        p_dest.text  = p_src.text;
                        p_dest.value = p_src.value;
                    }
                }
            }

            // update motor
            pm.InvalidateParams();
        }
示例#21
0
        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            if (e.Label == null)
            {
                return;
            }

            String newname = e.Node.Parent.FullPath + "\\" + e.Label;

            bool b = ProjectManager.GetInstance().renameTransientAnalysis(currentPath, newname);

            if (!b)
            {
                e.CancelEdit = true;
            }
            else
            {
                //update UI after rename
                //refreshUI();
            }
        }
        private void showParamsInDGV(DataTable paramsTbl)
        {
            dgv_params.DataSource = null;
            dgv_params.DataSource = paramsTbl;

            // sort the columns
            dgv_params.Columns[ParamSweeper.COL_ID].DisplayIndex     = 0;
            dgv_params.Columns[ParamSweeper.COL_MD5].DisplayIndex    = 1;
            dgv_params.Columns[ParamSweeper.COL_STATUS].DisplayIndex = 2;

            // setup columns width and header text
            foreach (DataGridViewColumn column in dgv_params.Columns)
            {
                int pp = column.HeaderText.LastIndexOf('\\');
                if (pp >= 0)
                {
                    column.HeaderText = column.HeaderText.Substring(pp + 1);
                }

                column.Width = column.GetPreferredWidth(DataGridViewAutoSizeColumnMode.ColumnHeader, false);
            }

            // hightlight the current set of params row
            // hightlight set of params that are not valid
            ProjectManager pm         = ProjectManager.GetInstance();
            String         md5current = pm.Motor.GetMD5String();

            foreach (DataGridViewRow row in dgv_params.Rows)
            {
                if (row.Cells[ParamSweeper.COL_MD5].Value.ToString() == md5current)
                {
                    row.DefaultCellStyle.BackColor = Color.Aqua;
                }
                if (row.Cells[ParamSweeper.COL_STATUS].Value.ToString() != "OK")
                {
                    row.DefaultCellStyle.ForeColor = Color.Red;
                }
            }
        }
示例#23
0
        public MainWindow()
        {
            InitializeComponent();

            lua_state = LuaHelper.GetLuaState();

            projectManager = ProjectManager.GetInstance();
            projectManager.OnMotorAnalysisResultsUpdate += new EventHandler(projectManager_RequestRefreshUI);
            projectManager.loadStartupProject();

            form_motorParams           = new Form_MotorParams();
            form_motorParams.MdiParent = this;

            resultsWindow           = new ResultsWindow();
            resultsWindow.MdiParent = this;

            logwindow           = new LogWindow();
            logwindow.MdiParent = this;

            previewWindow           = new PreviewWindow();
            previewWindow.MdiParent = this;

            initMenu();
        }
示例#24
0
        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ProjectManager.GetInstance().addTransientAnalysis();

            refreshUI();
        }
示例#25
0
 private void runToolStripMenuItem_Click(object sender, EventArgs e)
 {
     ProjectManager.GetInstance().runTransientAnalysis(currentPath);
 }
示例#26
0
 private void removeToolStripMenuItem_Click(object sender, EventArgs e)
 {
     ProjectManager.GetInstance().removeTransientAnalysis(currentPath);
     currentPath = "";
     refreshUI();
 }
示例#27
0
        private void parseComparisonResults(String groupname, AbstractAnalyticalResults ar, AbstractFEMResults fr)
        {
            ProjectManager pm = ProjectManager.GetInstance();

            var aResults   = ar == null ? null : ar.BuildResultsForDisplay();
            var femResults = fr == null ? null : fr.BuildResultsForDisplay();

            // show all analytical results (gmc)
            if (aResults != null)
            {
                foreach (String aName in aResults.Keys)
                {
                    ResultItem item = new ResultItem();
                    item.aName  = aName;
                    item.aValue = aResults[aName];

                    //compare if has femresults
                    if (femResults != null)
                    {
                        bool hasfemvalue = false;
                        foreach (String fName in femResults.Keys)
                        {
                            if (item.aName == fName)
                            {
                                item.femName  = fName;
                                item.femValue = femResults[fName];
                                if (item.aValue is double && item.femValue is double)
                                {
                                    double v1 = (double)item.aValue;
                                    double v2 = (double)item.femValue;
                                    item.difference = String.Format("{0:F3}%", (v2 - v1) / v2 * 100);
                                }
                                hasfemvalue = true;
                                break;
                            }
                        }

                        if (hasfemvalue)
                        {
                            femResults.Remove(item.femName);
                        }
                    }
                    //add item to list results
                    item.group = groupname;
                    results.Add(item);
                }
            }

            // add remaining item of femresults to list
            if (femResults != null)
            {
                foreach (String fName in femResults.Keys)
                {
                    ResultItem item = new ResultItem();
                    item.femName = fName;

                    if (femResults[fName] is ListPointD)
                    {
                        var ps = femResults[fName] as ListPointD;
                        item.femValue = ps.ToZedGraphPointPairList();
                    }
                    else
                    {
                        item.femValue = femResults[fName];
                    }

                    item.group = groupname;
                    results.Add(item);
                }
            }
        }