Exemple #1
0
 private void deleteSelection()
 {
     if (selection.Count > 0)
     {
         WorldAction action = new WorldAction(ActionType.Delete, selection, selectionIndices);
         add(action);
         for (int i = 0; i < World.Lines.Count; i++)
         {
             LineGraph line = World.Lines[i];
             for (int j = 0; j < selection.Count; j++)
             {
                 WorldPoint point = selection[j];
                 if (line.Remove(point))
                 {
                     selection.RemoveAt(j--);
                 }
             }
             if (line.Count <= 1)
             {
                 World.Lines.RemoveAt(i--);
             }
             Invalidate();
         }
     }
 }
Exemple #2
0
 /// <summary>
 ///
 /// draw signer
 /// </summary>
 /// <param name="split"></param>
 /// <param name="min"></param>
 /// <param name="max"></param>
 public void DrawSigner(int split, double min, double max)
 {
     if (lastSigner != null)
     {
         lastSigner.Remove();
     }
     lastSigner = AddSplitLine(split, 1, min, max, SegmentType.NotSegment, Colors.Black);
 }
Exemple #3
0
        private void run()
        {
            var lens = new LensCompiler();

            var currX = getDouble(StartPos, -10);
            var endX  = getDouble(EndPos, 10);
            var currY = 0.0;
            var step  = getDouble(Step, 0.1);

            var obs = new ObservableDataSource <Point>();

            obs.SetXYMapping(p => p);

            if (m_PreviousGraph != null)
            {
                m_PreviousGraph.Remove();
            }

            m_PreviousGraph = Chart.AddLineGraph(obs, Colors.Green, 2, "Graph");

            lens.RegisterProperty("x", () => currX);
            lens.RegisterProperty("y", () => currY, y => currY = y);

            try
            {
                var fx = lens.Compile(Func.Text);

                while (currX < endX)
                {
                    fx();
                    obs.AppendAsync(Chart.Dispatcher, new Point(currX, currY));
                    currX += step;
                }
            }
            catch (LensCompilerException ex)
            {
                MessageBox.Show(
                    ex.FullMessage,
                    "Compilation Error",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error
                    );
            }
        }
        private bool InitTimeTraceMeasurements()
        {
            #region SMU, rendering and save data configurations

            if (sourceDeviceConfiguration != null)
            {
                #region Chart rendering settings

                if (_TimeTraceLineGraph != null)
                {
                    _experimentalTimeTraceDataSource.DetachPointReceiveEvent();
                    _TimeTraceLineGraph.Remove();
                    _CurrentTimeTrace.Clear();
                }

                _CurrentTimeTrace = new List <PointD>();
                _experimentalTimeTraceDataSource = new ExperimentalTimetraceDataSource(_CurrentTimeTrace);
                _experimentalTimeTraceDataSource.AttachPointReceiveEvent();
                _TimeTraceLineGraph = new LineGraph(_experimentalTimeTraceDataSource);
                _TimeTraceLineGraph.AddToPlotter(chartTimeTrace);

                #endregion

                //Getting SMU device
                Device = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.Device;

                #region Time trace measurement configuration

                var pAddress = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.PrimaryAddress;
                var sAddress = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.SecondaryAddress;
                var bNumber  = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.DeviceSettings.BoardNumber;

                var motor = new ORDINARY_MOTOR(pAddress, sAddress, bNumber);
                motor.FinalDestination = 0.0;

                Motor = motor;

                if (TimeTraceCurve != null)
                {
                    TimeTraceCurve.Dispose();
                }

                var ExperimentSettings = IV_And_TimeTraceViewModel.Instance;

                var valueThroughTheStructure      = ExperimentSettings.TimeTraceMeasurementValueThrougtTheStructure;
                var isTimeTraceVoltageModeChecked = ExperimentSettings.IsTimeTraceMeasurementVoltageModeChecked;
                var isTimeTraceCurrentModeChecked = ExperimentSettings.IsTimeTraceMeasurementCurrentModeChecked;

                var selectedTimeTraceModeItem = (tabControlTimeTraceMeasurementParameters.SelectedItem as TabItem).Header.ToString();

                switch (selectedTimeTraceModeItem)
                {
                case "Distance":
                {
                    var motionStartPosition    = ExperimentSettings.TimeTraceMeasurementMotionCurrentDestination;
                    var motionFinalDestination = ExperimentSettings.TimeTraceMeasurementMotionFinalDestination;

                    if (isTimeTraceVoltageModeChecked == true)
                    {
                        TimeTraceCurve = new MeasureTimeTrace(Motor, motionStartPosition, motionFinalDestination, Device, KEITHLEY_2601A_SourceMode.Voltage, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure);
                    }
                    else if (isTimeTraceCurrentModeChecked == true)
                    {
                        TimeTraceCurve = new MeasureTimeTrace(Motor, motionStartPosition, motionFinalDestination, Device, KEITHLEY_2601A_SourceMode.Current, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure);
                    }
                } break;

                case "Distance (Repetitive)":
                {
                    var motionRepetitiveStartPosition = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveStartPosition;
                    var motionRepetitiveEndPosition   = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveEndPosition;
                    var numerCycles = ExperimentSettings.TimeTraceMeasurementDistanceRepetitiveNumberCycles;

                    if (isTimeTraceVoltageModeChecked == true)
                    {
                        TimeTraceCurve = new MeasureTimeTrace(Motor, motionRepetitiveStartPosition, motionRepetitiveEndPosition, Device, KEITHLEY_2601A_SourceMode.Voltage, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure);
                    }
                    else if (isTimeTraceCurrentModeChecked == true)
                    {
                        TimeTraceCurve = new MeasureTimeTrace(Motor, motionRepetitiveStartPosition, motionRepetitiveEndPosition, Device, KEITHLEY_2601A_SourceMode.Current, KEITHLEY_2601A_MeasureMode.Resistance, valueThroughTheStructure);
                    }
                } break;

                case "Time":
                {
                } break;

                case "Fixed R":
                {
                } break;

                default:
                    break;
                }

                #endregion

                #region Saving Time Trace data into files

                var    _TimeTraceFileNumber = String.Format("_{0}{1}{2}", (_TimeTraceFilesCounter / 100) % 10, (_TimeTraceFilesCounter / 10) % 10, _TimeTraceFilesCounter % 10);
                string newFileName          = string.Empty;

                if (!string.IsNullOrEmpty(_SaveTimeTraceMeasuremrentFileName))
                {
                    _TimeTraceMeasurementLog = new TimeTraceMeasurementLog((new FileInfo(_SaveTimeTraceMeasuremrentFileName)).DirectoryName + "\\TimeTraceMeasurementLog.dat");

                    newFileName = _SaveTimeTraceMeasuremrentFileName.Insert(_SaveTimeTraceMeasuremrentFileName.LastIndexOf('.'), _TimeTraceFileNumber);
                    ++_TimeTraceFilesCounter;
                }

                string sourceMode = string.Empty;

                if (!string.IsNullOrEmpty(_SaveTimeTraceMeasuremrentFileName))
                {
                    string fileName = (new FileInfo(newFileName)).Name;

                    if (this.radioTimeTraceSourceVoltage.IsChecked == true)
                    {
                        sourceMode = "Source mode: Voltage";
                    }
                    else if (this.radioTimeTraceSourceCurrent.IsChecked == true)
                    {
                        sourceMode = "SourceMode: Current";
                    }

                    double micrometricBoltPosition = double.NaN;
                    double.TryParse(this.textBoxTimeTraceMicrometricBoltPosition.Text, numberStyle, culture, out micrometricBoltPosition);

                    string comment = this.textBoxTimeTraceComment.Text;

                    _TimeTraceMeasurementLog.AddNewTimeTraceMeasurementLog(fileName, sourceMode, valueThroughTheStructure, comment);
                }

                SourceMode _sourceMode = SourceMode.Voltage; //Source mode is voltage by default

                if (sourceMode == "Source mode: Voltage")
                {
                    _sourceMode = SourceMode.Voltage;
                }
                else if (sourceMode == "SourceMode: Current")
                {
                    _sourceMode = SourceMode.Current;
                }

                if (_TimeTraceSingleMeasurement != null)
                {
                    _TimeTraceSingleMeasurement.Dispose();
                }

                _TimeTraceSingleMeasurement = new TimeTraceSingleMeasurement(newFileName, _sourceMode);

                #endregion

                return(true);
            }
            else
            {
                return(false);
            }

            #endregion
        }
        /// <summary>
        /// Initializes the new I-V curve measurements
        /// </summary>
        /// <returns>true, if initialization succeed and false otherwise</returns>
        private bool InitIV_Measurements()
        {
            #region SMU, rendering and save data configurations

            //Checking the SMU settings
            if (sourceDeviceConfiguration != null)
            {
                #region Chart rendering settings

                //Initializing a new plot on I-V chart
                if (_IV_LineGraph != null)
                {
                    //Detaching receive event from "old" data source
                    _experimentalIV_DataSource.DetachPointReceiveEvent();
                    _IV_LineGraph.Remove();
                }
                //Creating new plot and attaching it to the chart
                _CurrentIV_Curve           = new List <PointD>();
                _experimentalIV_DataSource = new ExperimentalIV_DataSource(_CurrentIV_Curve);
                _experimentalIV_DataSource.AttachPointReceiveEvent();
                _IV_LineGraph = new LineGraph(_experimentalIV_DataSource);
                _IV_LineGraph.AddToPlotter(chartIV_Curves);

                #endregion

                //Getting SMU device
                Device = sourceDeviceConfiguration.Keithley2602A_DeviceSettings.Device;

                #region I-V measurement configuration

                var ExperimentSettings = IV_And_TimeTraceViewModel.Instance;

                var StartValue       = ExperimentSettings.IV_MeasurementStartValue;
                var EndValue         = ExperimentSettings.IV_MeasurementEndValue;
                var Step             = ExperimentSettings.IV_MeasurementStep;
                var NumberOfAverages = ExperimentSettings.IV_MeasurementNumberOfAverages;
                var TimeDelay        = ExperimentSettings.IV_MeasurementTimeDelay;

                SourceMode DeviceSourceMode = SourceMode.Voltage;

                if (this.radioIVSourceVoltage.IsChecked == true)
                {
                    DeviceSourceMode = SourceMode.Voltage;
                }
                else if (this.radioIVSourceCurrent.IsChecked == true)
                {
                    DeviceSourceMode = SourceMode.Current;
                }

                IV_Curve = new MeasureIV(StartValue, EndValue, Step, NumberOfAverages, TimeDelay, DeviceSourceMode, Device);

                #endregion

                #region Saving I-V data into files

                var    _IV_FileNumber = String.Format("_{0}{1}{2}", (_IV_FilesCounter / 100) % 10, (_IV_FilesCounter / 10) % 10, _IV_FilesCounter % 10);
                string newFileName    = string.Empty;

                if (!string.IsNullOrEmpty(_SaveIV_MeasuremrentFileName))
                {
                    _IV_MeasurementLog = new IV_MeasurementLog((new FileInfo(_SaveIV_MeasuremrentFileName)).DirectoryName + "\\IV_MeasurementLog.dat");

                    newFileName = _SaveIV_MeasuremrentFileName.Insert(_SaveIV_MeasuremrentFileName.LastIndexOf('.'), _IV_FileNumber);
                    ++_IV_FilesCounter;
                }

                if (!string.IsNullOrEmpty(_SaveIV_MeasuremrentFileName))
                {
                    string fileName = (new FileInfo(newFileName)).Name;

                    string sourceMode = string.Empty;

                    if (this.radioIVSourceVoltage.IsChecked == true)
                    {
                        sourceMode = "Source mode: Voltage";
                    }
                    else if (this.radioIVSourceCurrent.IsChecked == true)
                    {
                        sourceMode = "SourceMode: Current";
                    }

                    double micrometricBoltPosition = double.NaN;
                    double.TryParse(this.textBoxIV_MicrometricBoltPosition.Text, numberStyle, culture, out micrometricBoltPosition);

                    string comment = this.textBoxIV_Comment.Text;

                    _IV_MeasurementLog.AddNewIV_MeasurementLog(fileName, sourceMode, micrometricBoltPosition, comment);
                }

                if (_IV_SingleMeasurement != null)
                {
                    _IV_SingleMeasurement.Dispose();
                }


                _IV_SingleMeasurement = new IV_SingleMeasurement(newFileName);

                #endregion

                return(true);
            }
            else
            {
                MessageBox.Show("The device is not initialized.", "Error!", MessageBoxButton.OK, MessageBoxImage.Error);
                return(false);
            }

            #endregion
        }