Ejemplo n.º 1
0
        private void Close(Param param)
        {
            GICO.WriteLine("OriginConnect: Closing Origin..");
            if (pOrigin != null)
            {
                pOrigin.Visible = MAINWND_VISIBLE.MAINWND_HIDE;
                pOrigin.Exit();


                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(pOrigin);

                pWorksheet  = null;
                pGraphLayer = null;
                pDataPlot   = null;
                pOrigin     = null;

                //int hWnd = pOrigin.Application.Hwnd;

                //Force KILL
                //uint processID;
                //GetWindowThreadProcessId((IntPtr)hWnd, out processID);
                System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName("Origin~1");
                foreach (System.Diagnostics.Process p in procs)
                {
                    //if (p.Id == processID)
                    p.Kill();
                }
            }
        }
Ejemplo n.º 2
0
        private void OpenSheet(Param param)
        {
            try
            {
                String strWkName = "ScatterData";
                pWorksheet = pOrigin.FindWorksheet(strWkName);
                if (pWorksheet == null) //if check don't exist, create workbook
                {
                    strWkName = (String)pOrigin.CreatePage((int)Origin.PAGETYPES.OPT_WORKSHEET, strWkName, "Origin", 2);
                }
                pWorksheet = (Worksheet)pOrigin.WorksheetPages[strWkName].Layers[0];

                //prepare XYZ column for putting data
                pWorksheet.Cols = 3;

                Column colA = pWorksheet.Columns[0];
                colA.Type = COLTYPES.COLTYPE_X;

                Column colB = pWorksheet.Columns[1];
                colB.Type = COLTYPES.COLTYPE_Y;

                Column colC = pWorksheet.Columns[2];
                colC.Type = COLTYPES.COLTYPE_Z;

                //prepare graph layer for plotting
                String strGrName = "3DScatterPlot"; //if check don't exist, create it.
                pGraphLayer = pOrigin.FindGraphLayer(strGrName);
                if (pGraphLayer == null)
                {
                    strGrName = (String)pOrigin.CreatePage((int)Origin.PAGETYPES.OPT_GRAPH, strGrName, "3D", 2); //3D scatter need "3D" template
                }
                pGraphLayer = (GraphLayer)pOrigin.GraphPages[strGrName].Layers[0];

                //parepare XYZDataRange
                DataRange drXYZ = pWorksheet.NewDataRange(0, 0, -1, -1);

                //plot 3D scatter on GraphLayer
                String strPlotName = "ScatterData_C"; //if exists, don't add new plot, plot name is related to workbook name and column name.

                pDataPlot = pGraphLayer.DataPlots[strPlotName];
                if (pDataPlot == null)
                {
                    pDataPlot = pGraphLayer.DataPlots.Add(drXYZ, PLOTTYPES.IDM_PLOT_3D_SCATTER);
                }

                //force axis rescale as auto to make plot visible
                pGraphLayer.Execute("layer.x.rescale=3");
                pGraphLayer.Execute("layer.y.rescale=3");
                pGraphLayer.Execute("layer.z.rescale=3");

                SentData(param);
            }
            catch (System.Exception ex)
            {
                String strMsg = ResourceException.Origin_FailedPlotting;
                GICO.WriteLine(strMsg);
                GICO.WriteLine(ex);
                throw;
            }
        }
Ejemplo n.º 3
0
        public static DataColumnCollection GetPropertyColumns(this Origin.Worksheet wks)
        {
            if (null == wks)
            {
                throw new ArgumentNullException("wks");
            }

            var result = new DataColumnCollection();

            // I found no way to ask, if a label column is used or not
            // therefore, we have to try all cells inside the longname, the units and the comments label column

            var labelCols = new Dictionary <string, Altaxo.Data.TextColumn>();

            DataColumn destLongNameCol = null, destUnitCol = null, destCommentCol = null;
            var        paraCol = new DataColumn[20];

            var srcDataCols = wks.Cols;

            for (int i = 0; i < srcDataCols; ++i)
            {
                var srcCol = wks.Columns[i];

                if (!string.IsNullOrEmpty(srcCol.LongName))
                {
                    if (null == destLongNameCol)
                    {
                        destLongNameCol = result.EnsureExistence("LongName", typeof(TextColumn), ColumnKind.V, 0);
                    }
                    destLongNameCol[i] = srcCol.LongName;
                }

                if (!string.IsNullOrEmpty(srcCol.Units))
                {
                    if (null == destUnitCol)
                    {
                        destUnitCol = result.EnsureExistence("Unit", typeof(TextColumn), ColumnKind.V, 0);
                    }
                    destUnitCol[i] = srcCol.Units;
                }

                if (!string.IsNullOrEmpty(srcCol.Comments))
                {
                    if (null == destCommentCol)
                    {
                        destCommentCol = result.EnsureExistence("Comments", typeof(TextColumn), ColumnKind.V, 0);
                    }
                    destCommentCol[i] = srcCol.Comments;
                }

                for (int nPara = 0; nPara <= 11; ++nPara)
                {
                    if (!string.IsNullOrEmpty(srcCol.Parameter[nPara]))
                    {
                        if (null == paraCol[nPara])
                        {
                            paraCol[nPara] = result.EnsureExistence("Parameter" + nPara.ToString(), typeof(TextColumn), ColumnKind.V, 0);
                        }
                        paraCol[nPara][i] = srcCol.Parameter[nPara];
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Retrieves the data columns from an Origin table.
        /// </summary>
        /// <param name="wks">The Origin worksheet to retrieve the data from.</param>
        /// <returns>The data columns with the data from the Origin worksheet.</returns>
        public static Altaxo.Data.DataColumnCollection GetDataColumns(this Origin.Worksheet wks)
        {
            var culture = Current.PropertyService.GetValue(Altaxo.Settings.CultureSettings.PropertyKeyDocumentCulture, Altaxo.Main.Services.RuntimePropertyKind.UserAndApplicationAndBuiltin).Culture;

            int nCols = wks.Cols;

            var result = new Altaxo.Data.DataColumnCollection();

            for (int c = 0; c < nCols; c++)
            {
                var srcCol = wks.Columns[c];

                Altaxo.Data.DataColumn destCol = GetAltaxoColumnFromOriginDataFormat(srcCol.DataFormat);

                int groupNumber = -1;

                var altaxoColumnKind = OriginToAltaxoColumnKind(srcCol.Type);

                if (altaxoColumnKind == Altaxo.Data.ColumnKind.X)
                {
                    groupNumber++;
                }

                if (destCol is DoubleColumn)
                {
                    var data = srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_NUMERIC, 0, -1, 0);
                    (destCol as DoubleColumn).Array = (double[])data;
                }
                else if (destCol is DateTimeColumn)
                {
                    var          data            = (double[])srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_NUMERIC, 0, -1, 0);
                    const double refDateAsDouble = 2451910; // this is the number of days in julian calendar belonging to the date below...
                    var          refDate         = DateTime.Parse("2001-01-01", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal);
                    for (int i = data.Length - 1; i >= 0; --i)
                    {
                        destCol[i] = refDate.AddDays(data[i] - refDateAsDouble);
                    }
                }
                else if (destCol is TextColumn && srcCol.DataFormat == COLDATAFORMAT.DF_TEXT_NUMERIC)
                {
                    var data = srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_VARIANT, 0, -1, 0);

                    var destColNum = new Altaxo.Data.DoubleColumn();

                    object[] oarr;
                    if (null != (oarr = data as object[]))
                    {
                        int numberOfNums    = 0;
                        int numberOfObjects = 0;
                        for (int i = 0; i < oarr.Length; ++i)
                        {
                            if (oarr[i] is double)
                            {
                                destColNum[i] = (double)oarr[i];
                                ++numberOfNums;
                            }
                            if (oarr[i] != null)
                            {
                                destCol[i] = string.Format(culture, "{0}", oarr[i]);
                                ++numberOfObjects;
                            }
                        }
                        // if the column consist mostly of numerics, then exchange it with destcol
                        if (numberOfNums >= 0.99 * numberOfObjects || numberOfNums >= numberOfObjects - 2)
                        {
                            destCol = destColNum;
                        }
                    }
                }
                else if (destCol is TextColumn)
                {
                    var      data = srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_TEXT, 0, -1, 0);
                    string[] sarr;
                    object[] oarr;

                    if (null != (sarr = data as string[]))
                    {
                        (destCol as TextColumn).Array = sarr;
                    }
                    else if (null != (oarr = data as object[]))
                    {
                        for (int i = 0; i < oarr.Length; ++i)
                        {
                            if (null != oarr[i])
                            {
                                destCol[i] = string.Format(culture, "{0}", oarr[i]);
                            }
                            else
                            {
                                destCol[i] = null;
                            }
                        }
                    }
                }

                result.Add(destCol, (!string.IsNullOrEmpty(srcCol.LongName) ? srcCol.LongName : srcCol.Name), altaxoColumnKind, Math.Max(0, groupNumber));
            }

            return(result);
        }