| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005 | using OTSModelSharp;using OTSDataType;using NSOTSController;using System;using System.Collections.Generic;using System.Drawing;using System.Linq;using System.IO;using OTSIncAMeasureApp.OTSMeasureThread;namespace OTSIncAMeasureApp{    public enum OTS_SOFT_PACKAGE_ID    {        OTSIncA = 0,             //夹杂物分析        OTSPartA = 1,            //颗粒度分析    };    //文件保存返回的结果,DataMgr返回    public enum OTS_SAVE_FILE_REV    {        SaveFile_Success = 0,        SaveFile_Cancel = 1,        SaveFile_Failed = 2,        SaveFile_NoNedd = 3      //文件不需要保存    }    //设置线程状态    public enum MSR_THREAD_STATUS    {        INPROCESS = 1,         //开始测量        STOPPED = 2,            //测量停止        StartImageCollect = 3,  //开始图像采集        STOPPEDImageCollect = 4 //停止图像采集    };    //设置线程状态    public enum MSR_THREAD_RunSTATUS    {        RUNMEASURE = 1,         //开始测量        RUNSampleHoleImage = 2  //运行获取样品孔照片    };    public class OTSDataMgrFun     {        OTSIncAMeasureAppForm m_MeasureAppFrom = null;        // 工作文件。c++ 接口,主要用来操作数据管理类的样品测量数据交换, 工作文件类,所有样品信息都从此类中获得                 // public CProjMgrClr m_ProjDataMgr = new CProjMgrClr();        public COTSProjMgrFile m_ProjDataMgr = new COTSProjMgrFile();                //参数文件管理。选择OTSIncA和OTSPartA, 读取样品参数。        public COTSProgMgr m_ProgMgr = new COTSProgMgr();        //参数文件        public COTSProgMgrParamFile m_ProgParamFile = null;        //样品台文件(读取样品台数据等)                                    CStageFile m_StageFile = null;                  // 用于绘制样品台的数据        public OTSSampleStageData m_SStageData = null;        //样品测量参数        //测量线程类        CMsrThread m_MsrThread = null;        //测量样品链表        List<COTSSample> m_MeasureSampleList = new List<COTSSample>();        NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();        public OTSDataMgrFun(OTSIncAMeasureAppForm MeasureApp)        {            m_MeasureAppFrom = MeasureApp;            m_SStageData = new OTSSampleStageData();                                }                              //判断系统文件是否存在        public bool SystemFileExit()        {            return m_ProjDataMgr.IsValid();        }                             //检查参数文件是否存在        public bool LoadParamFile()        {            //加载样品参数文件:   \Config\SysData\OTSProgMgrParam.pmf            m_ProgParamFile = new COTSProgMgrParamFile();            m_ProgParamFile.LoadInfoFromProgMgrFile((int)OTS_SOFT_PACKAGE_ID.OTSIncA);            if (null == m_ProgParamFile)            {                              return false;            }            return true;        }        //检查参数样品台文件是否存在        public bool LoadStageParamFile()        {            m_StageFile = new CStageFile();            // 加载样品台文件;  \Config\SysData\OTSStage.stg            if (!m_StageFile.Load((int)OTS_SOFT_PACKAGE_ID.OTSIncA, true, false))            {                                return false;            }            if (!SetStageData())            {                return false;            }            return true;        }        /// <summary>        /// 将配置文件中样品台信息 设置给样品台对象中        /// </summary>        /// <returns></returns>        public bool SetStageData()        {            CSEMStageData SEMStageData;            if (m_ProgParamFile == null)            {                return false;            }            SEMStageData = m_ProgParamFile.GetStageDataParam();            if (m_StageFile == null)            {                return false;            }            m_StageFile.SetStageData(SEMStageData);            return true;        }        //获取系统文件是否存在和有效        //bool bNewFileFlag = true:  New 文件        public bool InitProjMgr(bool bNewFileFlag = true)        {            //打开文件,则文件中保存有样品台信息,不需要使用系统样品名信息            if (bNewFileFlag)            {            //设置样品台参数            CStage Stage = m_StageFile.GetWorkingStage();            if (null == Stage)            {                                  return false;            }            m_ProjDataMgr.SetStage(Stage);            // 设置 SEM stage data            CSEMStageData SEMData = m_StageFile.GetStageData();            if (null == SEMData)            {                return false;            }                m_ProjDataMgr.SetSEMStageData(SEMData);            }            //设置 general parameter            COTSGeneralParameters GenParam = m_ProgParamFile.GetGenParam();            if (null == GenParam)            {                              return false;            }            m_ProjDataMgr.SetGenParam(GenParam);            //设置 general parameter            COTSImgScanPrm ImageScan = m_ProgParamFile.GetImageScanParam();            if (null == ImageScan)            {                              return false;            }            m_ProjDataMgr.SetImageScanParam(ImageScan);            //设置 image process parameter            COTSImgProcPrm ImageProc = m_ProgParamFile.GetImageProcParam();            if (null == ImageProc)            {                                return false;            }            m_ProjDataMgr.SetImageProcParam(ImageProc);            //设置 XRay parameter            COTSXRayParam XRayParam = m_ProgParamFile.GetXRayParam();            if (null == XRayParam)            {                               return false;            }            m_ProjDataMgr.SetXRayParam(XRayParam);            //判断以上6类参数设置是否成功            if (!m_ProjDataMgr.IsValid())            {                return false;            }            if (bNewFileFlag)            {                //产生样品新文件                if (!m_ProjDataMgr.NewFile())                {                    return false;                }            }            //获取样品台信息  CStageClr              if (!this.GetSampleStageData())            {                return false;            }              return true;        }              //获取绘制样品台的数据        public bool GetSampleStageData()        {            //获取样品台信息            CStage SStage = m_ProjDataMgr.GetStage();            if (null == SStage)            {                               return false;            }            //获得样品台数据            m_SStageData.sStageName = SStage.GetName();            m_SStageData.bStageShape = (int)SStage.GetBoundary().GetShape();            m_SStageData.StageDomain = (Rectangle)SStage.GetBoundary().GetRectDomain();            m_SStageData.bSampleShape = (int)SStage.GetSTD().GetShape();            m_SStageData.SampleRect = (Rectangle)SStage.GetSTD().GetRectDomain();            int iSHoleCount = SStage.GetHoleList().Count();    //样品孔个数                       if (m_SStageData.sSHoleInfoList.Count() > 0)            {                m_SStageData.sSHoleInfoList.Clear();            }            var holeLst = SStage.GetHoleList();            for (int i = 0; i < iSHoleCount; i++)            {                CHole d = holeLst[i];                OTSSampleHoleInfo SHoleInfo = new OTSSampleHoleInfo();            //获取样品口的名称,形状,坐标            SHoleInfo.sSHoleName = d.GetName();            SHoleInfo.iSHoleShape =(int)d.GetShape();                                Rectangle r =(Rectangle)d.GetRectDomain();            SHoleInfo.HoleRect =r;            m_SStageData.sSHoleInfoList.Add(SHoleInfo);            }            //获取SEMData 绘制样品            m_SStageData.iScanFieldSize100 = m_ProjDataMgr.GetSEMStageData().GetScanFieldSize100();  //放大倍数为100倍时的屏幕尺寸            m_SStageData.iXAxisDir =(int) m_ProjDataMgr.GetSEMStageData().GetXAxisDir();            m_SStageData.iYAxisDir = (int)m_ProjDataMgr.GetSEMStageData().GetYAxisDir();            m_SStageData.iXAxisStartVal = m_ProjDataMgr.GetSEMStageData().GetXAxis().GetStart();            m_SStageData.iXAxisEndVal = m_ProjDataMgr.GetSEMStageData().GetXAxis().GetEnd();            m_SStageData.iYAxisStartVal = m_ProjDataMgr.GetSEMStageData().GetYAxis().GetStart();            m_SStageData.iYAxisEndVal = m_ProjDataMgr.GetSEMStageData().GetYAxis().GetEnd();            return true;        }        //新建样品工作文件        public bool CreateNewFile()        {            if (m_ProjDataMgr.IsModified())    // 文件被修改            {                int iRev = m_MeasureAppFrom.ShowSaveInfoMsgBox();                if ((int)MessageBoxRev.DIALOG_YES == iRev)                {                    if (!m_ProjDataMgr.Save())                    {                                                return false;                    }                }            }            //新建新的工作文件            //重新生成一个工作文件对象            COTSProjMgrFile ProjDataMgr = new COTSProjMgrFile();            if (!m_ProjDataMgr.NewFile())            {                               return false;            }            m_ProjDataMgr = ProjDataMgr;            this.LoadStageParamFile();            //m_ProgMgr.SetPackId((int)OTS_SOFT_PACKAGE_ID.OTSIncA);            if (!this.InitProjMgr())            {                               return false;            }                           return true;        }        //打开已存在的样品台工作文件, 返回True,打开新文件成功; 返回False,打开新文件失败;        public bool OpenExistSampleFile()        {            //打开新文件            //产生新的文件            //重新生成一个工作文件对象            COTSProjMgrFile ProjDataMgr = new COTSProjMgrFile();            if (ProjDataMgr.Load())            {                m_ProjDataMgr = ProjDataMgr;                if (!this.InitProjMgr(false))                {                                        return false;                }                                return true;            }                                           return false;        }        //保存样品文件        public bool SaveProjFile()        {            string SampleName = GetWorkSampleName();            if (SampleName == "") {                return false;            }            return m_ProjDataMgr.Save();        }        //另存文件        public bool SaveAsProjFile()        {           return m_ProjDataMgr.SaveAs();        }        //检查测量区域是否超过样品台区域        //RMeasureArea: 样品台的当前测量区域;  RStageArea: 样品台区域;  RMeasureArea《RStageArea        public bool CheckMeasureAreaIsByondStageArea(Rectangle RMeasureArea, Rectangle RStageArea, int iShape)        {                  Rectangle pMeasureArea = RMeasureArea;        Rectangle pStageArea = RStageArea;        CDomain a_DomainMeasureArea = new CDomain((otsdataconst.DOMAIN_SHAPE)iShape, pMeasureArea);        CDomain a_DomainStageArea = new CDomain((otsdataconst.DOMAIN_SHAPE)iShape, pStageArea);        return a_DomainStageArea.DomainInDomain(a_DomainMeasureArea);        }        //将样品台坐标转换为Sem 坐标        public Point ChangeOTSToSemCoord(Point POTSCoord)        {            System.Drawing.Point VSemCoord = new System.Drawing.Point();        m_StageFile.ConverOTSToSEMPoint(POTSCoord, ref VSemCoord);        return (Point)VSemCoord;        }        //将Sem 坐标转换为样品台坐标        public Point ConverSEMToOTSPoint(Point PSEMCoord)        {            System.Drawing.Point VOTSCoord = new System.Drawing.Point();            m_StageFile.ConverSEMToOTSPoint(PSEMCoord, ref VOTSCoord);            return (Point)VOTSCoord;        }        //添加样品        //string sSHoleName:  样品孔名,当在样品孔上点击右键添加样品时,sSHoleName=样品孔名。当MEASUREAPP和TREEVIEW添加样品时,sSHoleName=""        //返回新的工作样品名称        public OTSSampleMeaInfo AddNewSampleMeasure(string sSHoleName = "")        {            //添加样品            COTSSample NewSample = m_ProjDataMgr.AddSample(sSHoleName);            if (null == NewSample)            {                               return null;            }            // 获取样品的属性值            OTSSampleMeaInfo MeasureInfo = new OTSSampleMeaInfo();            if (!GetWorkSamplePropertyVal(NewSample, ref MeasureInfo))            {                return null;            }            ///初始化STD            //SetSTDFileName(0);            return MeasureInfo;        }        //设置工作样品的属性值        public bool SetSampleParamVal(OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS ItemId, OTS_ITEM_TYPES ValType, object objVal)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            bool bSetFalg = false;            switch (ValType)            {                case OTS_ITEM_TYPES.BOOL:                    {                        //设置工作样品值失败                        if (!WSample.SetPropboolData(ItemId, (bool)objVal))                           {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.INT:                    {                        //设置工作样品值失败                        if (!WSample.SetPropIntData(ItemId, (int)objVal))                          {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.DOUBLE:                    {                        //设置工作样品值失败                        if (!WSample.SetPropdoubleData(ItemId, Convert.ToDouble(objVal)))                           {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.STRING:                    {                        //判断样品名是否有效                        if (ItemId == OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME)                        {                        if (!m_ProjDataMgr.IsValidSampleName((string)objVal))                        {                                                           bSetFalg = false;                            break;                        }                        }                        //设置工作样品值失败                        if (!WSample.SetPropStringData(ItemId, (string)objVal))                          {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.COMBO:                    {                        //设置工作样品值失败                        if (!WSample.SetPropComboData(ItemId, (int)objVal))                           {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.TIME:                    {                        //设置工作样品值失败                        if (!WSample.SetPropTimeData(ItemId, (DateTime)objVal))                          {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.TIME_SPAN:                    {                        //设置工作样品值失败                        if (!WSample.SetPropTimeSpanData(ItemId, (TimeSpan)objVal))                           {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                case OTS_ITEM_TYPES.FILE_LIST:                    {                        //设置工作样品值失败                        if (!WSample.SetPropFileListData(ItemId, (string)objVal))                           {                            bSetFalg = false;                        }                        else                        {                            bSetFalg = true;                        }                    }                    break;                default:                    bSetFalg = false;                    break;            }            if (bSetFalg)            {                m_ProjDataMgr.SetModify(true);            }            return bSetFalg;        }        //获取工作样品名称        public string GetWorkSampleName()        {                       COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                                return "";            }            string sWorkSampleName = WSample.GetName();            if ("" == sWorkSampleName)            {                               return "";            }            return sWorkSampleName;        }        //设置工作样品        //string sNewWorkSampleName:  新工作样品        public bool SetWorkSample(string sNewWorkSampleName)        {            if ("" == sNewWorkSampleName)            {                return false;            }            if (!m_ProjDataMgr.SetWorkingSampleByName(sNewWorkSampleName))            {                return false;            }            return true;        }        //获取工作样品        // 返回工作样品对象        public COTSSample GetWorkSample()        {                       COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           }            return WSample;        }        //删除工作样品        //string sWorkSampleName : 删除工作样品名称        public bool DeleteWorkSample(string sWorkSampleName)        {            return m_ProjDataMgr.DeleteSampleByName(sWorkSampleName);        }        // 获取样品总数        //返回样品总数        public int GetSampleCount()        {            return m_ProjDataMgr.GetSampleList().Count();        }        //改变工作样品名称        //String sWSampleNewName        public bool ChangeWorkSampleName(String sWSampleNewName)        {            if (!m_ProjDataMgr.IsValidSampleName(sWSampleNewName))            {                                return false;            }            COTSSample WorkSample = m_ProjDataMgr.GetWorkingSample();            if (null == WorkSample)            {                               return false;            }            WorkSample.SetName(sWSampleNewName);            m_ProjDataMgr.SetModify(true);            return true;        }        //移动工作样品到其他样品孔,样品孔名称和测量区域都要改变,重新设置工作样品参数        //SampleMeasurePara SMeasurePara:        public SampleMeasurePara SetWorkSampleHoleNameAndMeasureArea(SampleMeasurePara SMeasurePara)        {            SampleMeasurePara SMPara = new SampleMeasurePara();            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                                return SMPara;            }            CDomain Domain = new CDomain();            Domain.SetShape((otsdataconst.DOMAIN_SHAPE)SMeasurePara.iShape);            Domain.SetRectDomain(SMeasurePara.MeasureRect);            if (SMeasurePara.DrawPolygonPointRegionF != null)            {                List<Point> PolygonPoint = new List<Point>();                foreach (var item in SMeasurePara.DrawPolygonPointRegionF)                {                    PolygonPoint.Add(new Point((int)item.X, (int)item.Y));                }                Domain.SetPolygonPoint(PolygonPoint);            }            WSample.SetSampleHoleName(SMeasurePara.sHoleName);            WSample.SetMsrArea(Domain);            //获取样品的测量区域信息             SMPara.sSampleName = WSample.GetName();    //获取样品名称            SMPara.iShape = (int)WSample.GetMsrArea().GetShape();  // 获取测量区域形状            SMPara.sHoleName = WSample.GetSampleHoleName(); //获取样品孔名称            SMPara.MeasureRect = (Rectangle)WSample.GetMsrArea().GetRectDomain();  //样品测量区域            //改变测量区域后重新设置样品修改状态            m_ProjDataMgr.SetModify(true);            //string pathName = m_ProjDataMgr.GetPathName();            //if (pathName != "" && pathName != "Untitled")            //{            //    m_ProjDataMgr.Save();            //}            return SMPara;        }        //获取图像尺寸参数        //double iMag :   放大倍数        //ref int iSFieldSize :  返回的Field图片尺寸        public void GetScanFieldSize(double iMag, ref int iSFieldSize)        {            CSEMDataMsr SemDataMsrClr = new CSEMDataMsr();            SemDataMsrClr.SetScanFieldSize100(m_ProjDataMgr.GetSEMStageData().GetScanFieldSize100());            SemDataMsrClr.SetMagnification(iMag);            iSFieldSize = SemDataMsrClr.GetScanFieldSize();        }        //设置测量区域的形状 (通过RIBBON 上的画圆,画矩形 设置)        //int iShape:  测量区域形状 0: 圆形; 1 :矩形        public void SetMeasureAreaShape(int iShape)        {            //  SampleMeasurePara SMPara = new SampleMeasurePara();            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                               return;            }            CDomain Domain = new CDomain();            Domain.SetShape((otsdataconst.DOMAIN_SHAPE)iShape);        }        //修改了ITEMID后,重新更新GROUPID和ITEMID        public void UpdateGroupValAndItemVal(OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS ItemID)        {            OTSDataType.OTS_SAMPLE_PROP_GRID_ITEM_GROUPS GroupID = OTSDataType.OTS_SAMPLE_PROP_GRID_ITEM_GROUPS.INVALID;            OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS iItemID = OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS.INVALID;            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                return;            }            if (!WSample.GetRelatedPropItemGrp((OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS)ItemID, ref GroupID))            {                bool bFlag = WSample.GetRelatedPropItem(ItemID, ref iItemID);            }        }        //当SampleSpaceWindow 获取电镜参数时,SampleSpaceWindow给MeasureApp发送事件通知MEASUREP更新电镜工作参数参数        public bool UpdateSEMData()        {            //COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            //if (null == WSample)            //{                            //return false;            //}            //if (!WSample.SetPropItemGrps())            //{                          //return false;            //}            return true;        }        //设置样品参数锁        //bool ParaLockFlag : 样品参数锁        public bool SetSampleParaLock(bool ParaLockFlag)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                            return false;            }            WSample.SetParamLock(ParaLockFlag);            m_ProjDataMgr.SetModify(true);            return true;        }        //获取工作样品锁        //ref bool ParamLockFlag : 获取的工作样品参数锁        public bool GetWSampleParaLock(ref bool ParamLockFlag)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           return false;            }            ParamLockFlag = WSample.GetParamLock();            return true;        }        //获取工作样品测量锁        public bool GetWSampleParaLock(ref OTSSampleMeaInfo SMInfo)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                            return false;            }                       if (!GetWorkSamplePropertyVal(WSample, ref SMInfo))            {                            return false;            }            return true;        }        //重新设置样品在样品列表中的位置(当拖动TREEVIEW的样品顺序后执行 )        public bool SortSamplePosition(List<string> SNameList)        {            if (!m_ProjDataMgr.ResetSamplesListOrder(SNameList))            {                             return false;            }            List<COTSSample> SampleList = new List<COTSSample>();            SampleList = m_ProjDataMgr.GetSampleList();                        return true;        }        //打开保存的样品文件        //List<CWorkSampleParam> SampleFileList  样品文件中的样品列表        //成功返回 True;        public bool OpenExistSampleFile(ref List<CTreeSampleParam> SampleMeasureInfoList)        {            int iSampleCount = m_ProjDataMgr.GetSampleList().Count();            if (0 == iSampleCount)            {                           return false;            }            for (int i = 0; i < iSampleCount; i++)            {                CTreeSampleParam TSampleParam = new CTreeSampleParam();                COTSSample SampleClr = (m_ProjDataMgr.GetSampleList())[i];                GetExistSampleInfo(SampleClr, ref TSampleParam);                SampleMeasureInfoList.Add(TSampleParam);            }            return true;        }        //获取样品的属性值        //ref List<CTreeSampleParam> CTSampleParam :  打开已保存样品文件中的样品信息,用于TREEVIEW显示        public void GetExistSampleInfo(COTSSample SampleClr, ref CTreeSampleParam CTSampleParam)        {            CTSampleParam.sSampleTitleName = m_ProjDataMgr.GetFileName();            CTSampleParam.sWorkSampleName = SampleClr.GetName();            CTSampleParam.bSwitch = SampleClr.GetSwitch();            CTSampleParam.bParamLock = SampleClr.GetParamLock();        }        //打开保存的样品文件        //List<SampleMeasurePara> SampleMeasureAreaList  样品文件中的样品列表,返回样品的测量区域给SampleSpaceWindow        //成功返回 True;        public bool OpenExistSampleMeasureArea(ref List<SampleMeasurePara> SampleMeasureAreaList)        {            int iSListCount = m_ProjDataMgr.GetSampleList().Count();            if (0 == iSListCount)            {                return false;            }            for (int i = 0; i < iSListCount; i++)            {                SampleMeasurePara SampleMeasureArea = new SampleMeasurePara();                //获取样品的测量区域信息                 //获取样品名称                SampleMeasureArea.sSampleName = (m_ProjDataMgr.GetSampleList())[i].GetName();                // 获取测量区域形状                SampleMeasureArea.iShape = (int)(m_ProjDataMgr.GetSampleList())[i].GetMsrArea().GetShape();                //获取样品孔名称                SampleMeasureArea.sHoleName = (m_ProjDataMgr.GetSampleList())[i].GetSampleHoleName();                //样品测量区域                SampleMeasureArea.MeasureRect = (Rectangle)(m_ProjDataMgr.GetSampleList())[i].GetMsrArea().GetRectDomain();                //多边形点集合                SampleMeasureArea.PolygonPointRegion = (m_ProjDataMgr.GetSampleList())[i].GetMsrArea().GetPolygonPoint();                List<PointF> PointRegionF = new List<PointF>();                List<Point> PolygonPoint = m_ProjDataMgr.GetSampleList()[i].GetMsrArea().GetPolygonPoint();                if (PolygonPoint != null)                {                    foreach (var item in m_ProjDataMgr.GetSampleList()[i].GetMsrArea().GetPolygonPoint())                    {                        PointRegionF.Add(new PointF(item.X, item.Y));                    }                }                SampleMeasureArea.PolygonPointRegionF = PointRegionF;                SampleMeasureArea.DrawPolygonPointRegionF = PointRegionF;                SampleMeasureAreaList.Add(SampleMeasureArea);            }            return true;        }            //检查样品测量参数        //ref List<COTSSample> SampleList:  返回的检查参数的样品列表        //bool bCheckFlag:   //	True,用户点击检查参数按钮  False ,在点击运行按钮 ;        public bool CheckSampleParam(bool bCheckFlag)        {            m_MeasureSampleList.Clear();            List<COTSSample> MSampleList = new List<COTSSample>();            if (m_MsrThread == null)            {                InitMeasureThread();            }            if (!m_MsrThread.CheckMeasureParam(m_ProjDataMgr, ref MSampleList, bCheckFlag))            {                                return false;            }            if (MSampleList.Count > 0)            {                m_MeasureSampleList = MSampleList;                return true;            }            return false;        }        //获取测量参数文件名称        //int iNamePos:  文件名在链表中的位置        //List<string> MParamFileNameList:  测量参数文件链表        public bool GetMeasureParamFileName(ref int iNamePos, ref List<string> MParamFileNameList)        {            if (!m_ProjDataMgr.GetParamFileList(ref iNamePos, ref MParamFileNameList))            {                           return false;            }            return true;        }        //设置测量文件名称        //int iNamePos:  文件名在链表中的位置        public bool SetMeasrueParamFileName(int iNamePos)        {            if (!m_ProjDataMgr.ChangeParamFromList(iNamePos))            {                           return false;            }            return true;        }        //获取STD 标准库文件名称        //int iNamePos:  文件名在链表中的位置        //List<string> STDFileNameList:  STD文件链表        public bool GetSTDFileName(ref int iNamePos, ref List<string> STDFileNameList)        {            if (!m_ProjDataMgr.GetSTDFileList(ref iNamePos, ref STDFileNameList))            {                           return false;            }            return true;        }        //设置STD 标准库文件名称        public bool SetSTDFileName(int iNamePos)        {            if (!m_ProjDataMgr.ChangeSTDFromList(iNamePos))            {                           return false;            }            return true;        }        ///保存工作样品的测量参数文件             public bool SaveWorkMeasureFile()        {            CMsrParamFileMrg SMeasureParamData = new CMsrParamFileMrg();            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           return false;            }            if (!SMeasureParamData.SetMsrParamFile(WSample.GetMsrParams()))            {                           return false;            }            SMeasureParamData.Save("");            return true;        }        //打开工作样品的测量参数文件             public bool LoadWorkMeasureFile()        {            CMsrParamFileMrg SMeasureParamData = new CMsrParamFileMrg();            if (!SMeasureParamData.Load("", true))            {                           return false;            }            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           return false;            }            WSample.SetMsrParams(SMeasureParamData.GetMsrParams());            //更新样品GRID值测量文件名            OTSSampleMeaInfo SMInfo = new OTSSampleMeaInfo();            if (!this.GetWorkSamplePropertyVal(WSample, ref SMInfo))            {                            return false;            }            m_MeasureAppFrom.m_SPropertyWindows.DisplaySampleMeasureInfo(SMInfo);            return true;        }               //判断是否允许修改样品名        public bool CheckSampleNameIsValid(string sNewName)        {            return m_ProjDataMgr.IsValidSampleName(sNewName);        }        //设置电镜参数        //int iScanFieldSize: Field扫描参数        //int iWDistance: 电镜工作距离        //double dMagni: 放大倍数        public void SetSEMData(double iWDistance, double dMagni)        {            try            {                m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().SetScanFieldSize100(m_ProjDataMgr.GetSEMStageData().GetScanFieldSize100());                m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().SetWorkingDistance(iWDistance);                m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().SetMagnification(dMagni);            }            catch (Exception)            {            }        }        //获取电镜参数        //int iScanFieldSize: Field扫描参数        //int iWDistance: 电镜工作距离        //double dMagni: 放大倍数        public void GetSEMData(ref double iWDistance, ref double dMagni)        {            iWDistance = m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetWorkingDistance();            dMagni = m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetMagnification();        }        //获取工作样品的测量区域        //int iShape :测量区域形状        //Rectangle Srect: 测量区域大小        public bool GetWSampleMrsArea(ref int iShape, ref Rectangle Srect)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                            return false;            }            CDomain pMsrArea = new CDomain();            pMsrArea = WSample.GetMsrArea();            if (null == pMsrArea)            {            return false;            }            iShape =(int) pMsrArea.GetShape();            ValueType ValType = new Rectangle();            ValType = pMsrArea.GetRectDomain();            Srect = (Rectangle)ValType;            return true;        }        //获取幁图数        //ref List<Point> pField:  幁图数        public bool GetField(ref List<Point> pFields, ref Size iSzie)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                          return false;            }            CDomain pMsrArea = new CDomain();            pMsrArea = WSample.GetMsrArea();            COTSImgScanPrm pImgScanParam = new COTSImgScanPrm();            pImgScanParam = m_ProjDataMgr.GetImageScanParam();            CSEMDataMsr pSEMDataMsr = new CSEMDataMsr();            //设置参数            pSEMDataMsr.SetMagnification(m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetMagnification());            pSEMDataMsr.SetScanFieldSize(m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetScanFieldSize());            pSEMDataMsr.SetScanFieldSize100(m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetScanFieldSize100());            pSEMDataMsr.SetTotalFields(m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetTotalFields());            pSEMDataMsr.SetWorkingDistance(m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().GetWorkingDistance());            CFieldMgr pFieldMgr = new CFieldMgr();            List<Point> listPoint = new List<Point>();            listPoint.Clear();            //设置测量区域            CSEMDataMsr pSEMDataMsrTemp = pSEMDataMsr;            if (m_MeasureAppFrom.m_MessageStates == (int)MessageState.ShootBSEPicture)            {                //获取最小放大倍数与FieldSize100倍数                pSEMDataMsrTemp.SetScanFieldSize100(m_ProjDataMgr.GetSEMStageData().GetScanFieldSize100());                double dMagnification = m_MeasureAppFrom.m_DataMgrFun.m_StageFile.GetStageData().GetMinMag();                pSEMDataMsrTemp.SetMagnification(dMagnification);                //设置样品孔当前位置信息                Rectangle sampleHoleRect = (Rectangle)OTSMeasureThreadFun.c_DomainMessure.GetRectDomain();                //判断                if ((int)m_MeasureAppFrom.m_SamplepaceWindow.CMStrip.Items[9].Tag == 1)                {                    int shape = 0;                    foreach (var item in OTSSamplespaceWindow.m_SampleHoleGDIObjects)                    {                        if (item.Name == WSample.GetName())                        {                            shape = item.Shape;                        }                    }                    pMsrArea.SetShape((otsdataconst.DOMAIN_SHAPE)shape);                }                pMsrArea.SetRectDomain(sampleHoleRect);                ////初始化                if (!pFieldMgr.Init(pMsrArea, pImgScanParam, pSEMDataMsrTemp, listPoint))                {                    return false;                }            }            else if (m_MeasureAppFrom.m_MessageStates == (int)MessageState.MeasureBSEPicture)            {                //获取最小放大倍数与FieldSize100倍数                pSEMDataMsrTemp.SetScanFieldSize100(m_ProjDataMgr.GetSEMStageData().GetScanFieldSize100());                double dMagnification = m_MeasureAppFrom.m_DataMgrFun.m_StageFile.GetStageData().GetMinMag();                pSEMDataMsrTemp.SetMagnification(dMagnification);                //设置样品孔当前位置信息                Rectangle sampleHoleRect = (Rectangle)OTSMeasureThreadFun.c_DomainMessure.GetRectDomain();                pMsrArea.SetRectDomain(sampleHoleRect);                ////初始化                if (!pFieldMgr.Init(pMsrArea, pImgScanParam, pSEMDataMsrTemp, listPoint))                {                    return false;                }            }            else            {                try                {                    //设置当前工作区域                    if (OTSMeasureThreadFun.c_DomainMessure != null)                    {                        Rectangle measureRect = (Rectangle)OTSMeasureThreadFun.c_DomainMessure.GetRectDomain();                        pMsrArea.SetRectDomain(measureRect);                    }                }                catch (Exception ex)                {                   log.Error("获取幁图数问题:" + ex.ToString());                }                ////初始化                if (!pFieldMgr.Init(pMsrArea, pImgScanParam, pSEMDataMsr, listPoint))                {                    return false;                }            }            //获取幁图的中心点            pFields = pFieldMgr.GetFieldCentrePoints();            //获取幁图数            int iFieldCount = pFieldMgr.GetTotalFields();            var oValue = new Rectangle();            if (!pFieldMgr.GetFieldRectByIndex(0, ref oValue))            {                                return false;            }            iSzie = ((Rectangle)oValue).Size;            //将幁图数赋值给工作样品后            m_ProjDataMgr.GetWorkingSample().GetSEMDataMsr().SetTotalFields(iFieldCount);            return true;        }        //检查Samplelist中的sample的checkbox状态        //当Samplelist中的链表有sample 的checkbox状态是选中状态,则返回TRUE. 说明可以测量        public bool GetSampleCheckBoxStatus()        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                               return false;            }            List<COTSSample> SampleList = new List<COTSSample>();            SampleList = m_ProjDataMgr.GetSampleList();            int iCount = SampleList.Count();            if (0 == iCount)            {                return false;            }            for (int i = 0; i < iCount; i++)            {                if (SampleList[i].GetSwitch())                {                    return true;                }            }            return false;        }        //获取BSE图像数据        public bool GetBSEImageSize(ref int iHeight, ref int iWidth)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           return false;            }            if (!WSample.GetBSESize(out iHeight, out iWidth))            {                            return false;            }            return true;        }        //获取测量的BSE图        //Byte[] BSEImage: 带背景图数据        //int iHeight:  图像高度        //int iWidth:  图像宽度        //Byte[]BSEImageNoBG : 去背景图数据        public bool GetBSEImage(Byte[] BSEImage, int iHeight, int iWidth, ref Byte[] BSEImageNoBG)        {            CBSEImg pBSEImageIn = new CBSEImg();            CBSEImg pBSEImageOut = new CBSEImg();            Rectangle rect = new Rectangle();            rect.Height = iHeight;            rect.Width = iWidth;            pBSEImageIn.SetImageRect(rect);            pBSEImageIn.SetImageData(BSEImage, iHeight * iWidth);            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           return false;            }            COTSImgProcPrm ImgProcPrm = WSample.GetMsrParams().GetImageProcessParam();            if (!m_ProjDataMgr.RemoveBackGround(pBSEImageIn, ImgProcPrm, ref pBSEImageOut))            {            return false;            }            BSEImageNoBG = pBSEImageOut.GetImageDataPtr();            return true;        }                /// <summary>        /// 获取测量的BSE图        /// </summary>        /// <param name="BSEImage">BSE原数据</param>        /// <param name="iHeight">图像高度</param>        /// <param name="iWidth">图像宽度</param>        /// <param name="grayStart"></param>        /// <param name="grayEnd"></param>        /// <param name="BSEImageNoBG">去背景图数据</param>        /// <returns></returns>        public bool GetBSEImage(Byte[] BSEImage, int iHeight, int iWidth,int grayStart,int grayEnd, ref Byte[] BSEImageNoBG)        {            CBSEImg pBSEImageIn = new CBSEImg();            CBSEImg pBSEImageOut = new CBSEImg();            Rectangle rect = new Rectangle();            rect.Height = iHeight;            rect.Width = iWidth;            pBSEImageIn.SetImageRect(rect);            pBSEImageIn.SetImageData(BSEImage, iHeight * iWidth);            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                return false;            }            COTSImgProcPrm ImgProcPrm = WSample.GetMsrParams().GetImageProcessParam();            CIntRange cIntRangeClr = new CIntRange();            cIntRangeClr.SetStart(grayStart);            cIntRangeClr.SetEnd(grayEnd);            ImgProcPrm.SetBGGray(cIntRangeClr);            if (!m_ProjDataMgr.RemoveBackGround(pBSEImageIn, ImgProcPrm, ref pBSEImageOut))            {                return false;            }            BSEImageNoBG = pBSEImageOut.GetImageDataPtr();            return true;        }        //获取图像尺寸        public string GetBSEImageSize()        {            try            {                COTSSample WSample = m_ProjDataMgr.GetWorkingSample();                if (null == WSample)                {                                    return "";                }                OTSSampleMeaInfo SMInfo = new OTSSampleMeaInfo();                if (!GetWorkSamplePropertyVal(WSample, ref SMInfo))                {                                   return "";                }                int iCount = SMInfo.SampleDataList.Count();                for (int i = 0; i < iCount; i++)                {                    if (OTS_SAMPLE_PROP_GRID_ITEMS.IMAGE_RESOLUTION == SMInfo.SampleDataList[i].iSampleId)                    {                                               String val= (String)SMInfo.SampleDataList[i].SampleVal;                        return val;                    }                }                return "";            }            catch (Exception)            {                return "";            }        }        //获取放大倍数和工作距离        public bool GetMagAndDistance(ref double SemMag, ref double dDistance)        {            try            {                COTSSample WSample = m_ProjDataMgr.GetWorkingSample();                if (null == WSample)                {                                   return false;                }                OTSSampleMeaInfo SMeasureInfo = new OTSSampleMeaInfo();                if (!GetWorkSamplePropertyVal(WSample, ref SMeasureInfo))                {                return false;                }                int iCount = SMeasureInfo.SampleDataList.Count;                if (iCount == 0)                {                                    return false;                }                bool iFlag = false;                for (int i = 0; i < iCount; i++)                {                    if (SMeasureInfo.SampleDataList[i].iSampleId == OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION)                    {                        SemMag = Convert.ToDouble(SMeasureInfo.SampleDataList[i].SampleVal);                        iFlag = true;                    }                    if (SMeasureInfo.SampleDataList[i].iSampleId == OTS_SAMPLE_PROP_GRID_ITEMS.WORKING_DISTANCE)                    {                        dDistance = Convert.ToDouble(SMeasureInfo.SampleDataList[i].SampleVal);                        iFlag = true;                    }                }                if (iFlag)                {                return true;                }                return false;            }            catch (Exception)            {                return false;            }        }        public bool GetWorkSamplePropertyVal(COTSSample Sample, ref OTSSampleMeaInfo SMeasureInfo)        {            //设置工作样品属性项            Sample.SetPropItemGrps();            bool MeasurementStatus = false;            if (null == Sample)            {                return false;            }            //样品的标题名 (Treeview的根节点名)                       SMeasureInfo.sSampleSoluName = m_ProjDataMgr.GetFileName();            // Treeview 的样品信息              SMeasureInfo.TSampleParam.sSampleTitleName = m_ProjDataMgr.GetFileName();            //获得 样品属性值            //JObject jo = Sample.GetJSONProperty();            SMeasureInfo.bSwitch = Sample.GetSwitch();// (bool)jo.GetValue("bSwitch");            SMeasureInfo.TSampleParam.bParamLock = Sample.GetParamLock();// (bool)jo.GetValue("ParamLock");            //获取样品的测量区域信息             //获取样品名称            //JObject SMeasurePara = (JObject)jo.GetValue("SMeasurePara");            SMeasureInfo.SMeasurePara.sSampleName = Sample.GetName();// (String)SMeasurePara.GetValue("sNewSampleName");            // 获取测量区域形状            SMeasureInfo.SMeasurePara.iShape =(int) Sample.GetMsrArea().GetShape();// (int)SMeasurePara.GetValue("iShape");            //获取样品孔名称            SMeasureInfo.SMeasurePara.sHoleName = Sample.GetSampleHoleName();// (String)SMeasurePara.GetValue("sHoleName");                                                                             //样品测量区域                                                                             // JObject rec = (JObject)SMeasurePara.GetValue("MeasureRect");            Rectangle rec = Sample.GetMsrArea().GetDomainRect();            SMeasureInfo.SMeasurePara.MeasureRect = new Rectangle((int)rec.X, (int)rec.Y , (int)rec.Width, (int)rec.Height);            // JObject TSampleParam = (JObject)jo.GetValue("TSampleParam");            SMeasureInfo.TSampleParam.sWorkSampleName = Sample.GetName();// (String)TSampleParam.GetValue("sWorkSampleName");            SMeasureInfo.TSampleParam.bSwitch = Sample.GetSwitch();// (bool)TSampleParam.GetValue("bSwitch");           List< CPropItemGrp> ja = Sample.GetPropItemGrps();// (JArray)jo.GetValue("ItemGrp");            for (int i = 0; i < ja.Count; i++)            {                //获取GROUP ID和Grid的显示组的标题名                var grp = ja[i];                int grpId = (int)grp.GetGroupId();                String sTitle = (String)grp.GetName();                //获取样品属性ID和值                var SDataArr = grp.GetItemsList();                if (SDataArr.Count == 0)                    continue;                SampleDataGroup smlgrp = new SampleDataGroup();                smlgrp.GroupId = (OTS_SAMPLE_PROP_GRID_ITEM_GROUPS)grpId;                smlgrp.sTitle = sTitle;                for (int j = 0; j < SDataArr.Count; j++)                {                    var SDataObj = SDataArr[j];                    SampleData SData = new SampleData();                    int smplid = (int)SDataObj.GetSmplItemId();                    SData.iSampleId = (OTS_SAMPLE_PROP_GRID_ITEMS)smplid;                    if (SData.iSampleId == OTS_SAMPLE_PROP_GRID_ITEMS.WORKING_DISTANCE)                    {                        bool b = (bool)SDataObj.IsReadOnly();                    }                    SData.sSCaptionName = (String)SDataObj.GetName();                    //------------------------------修改--------------------------                    if ((String)SDataObj.GetName() == "样品名")                    {                        for (int a = 0; a < ja.Count; a++)                        {                            var grpa = ja[a];                            var SDataArra = grpa.GetItemsList();                            for (int b = 0; b < SDataArra.Count; b++)                            {                                var SDataObb = SDataArra[b];                                if ((String)SDataObb.GetName() == "测量状态")                                {                                    if ((String)Sample.GetItemValueStr((OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS)SDataObb.GetSmplItemId()) == "未测量")                                    {                                        MeasurementStatus = false;                                    }                                    else                                    {                                        MeasurementStatus = true;                                    }                                }                            }                        }                    }                    else                    {                        MeasurementStatus = false;                    }                    if (MeasurementStatus)                    {                        SData.bReadOnly = MeasurementStatus;                    }                    else                    {                        SData.bReadOnly = (bool)SDataObj.IsReadOnly();// OTS_ITEM_TYPES                    }                    //---------------------------------------------------------------                    //SData.bReadOnly = (bool)SDataObj.GetValue("IsReadOnly");// OTS_ITEM_TYPES                    int type = (int)SDataObj.GetTypeId();                    SData.iSampleValType = (OTS_ITEM_TYPES)type;                    SData.sDescriptionInfo = (String)SDataObj.GetDescription();                    //SData.SampleVal = (String)SDataObj.GetItemValueStr();                    OTSDataType.OTS_SAMPLE_PROP_GRID_ITEMS ItemId = SDataObj.GetSmplItemId();                    SData.SampleVal = (String)Sample.GetItemValueStr(ItemId);                    List<string> downStrList = new List<string>();                    if (type == (int)OTS_ITEM_TYPES.COMBO)                    {                        Sample.GetPropComboStrings( SDataObj.GetSmplItemId(),downStrList);                    }                    else if (type == (int)OTS_ITEM_TYPES.FILE_LIST)                    {                        //the sample object dosen't know anything about the fileList infomation so it has to delay this duty here.                        int iPos = -1;                        List<string> sFileNameList = new List<string>();                        if (OTS_SAMPLE_PROP_GRID_ITEMS.MEASURE_PARAM_FILE_NAME == (OTS_SAMPLE_PROP_GRID_ITEMS)smplid)                        {                            if (!this.GetMeasureParamFileName(ref iPos, ref sFileNameList))                            {                                return false;                            }                            foreach (var f in sFileNameList)                            {                                downStrList.Add(f);                            }                        }                        if (OTS_SAMPLE_PROP_GRID_ITEMS.STD_FILE_NAME == (OTS_SAMPLE_PROP_GRID_ITEMS)smplid)                        {                            if (!this.GetSTDFileName(ref iPos, ref sFileNameList))                            {                                return false;                            }                            foreach (var f in sFileNameList)                            {                                downStrList.Add(f);                            }                        }                    }                    if (downStrList.Count > 0)                    {                        for (int k = 0; k < downStrList.Count; k++)                        {                            SData.comboDownList.Add((String)downStrList[k]);                        }                    }                    smlgrp.SampleDataList.Add(SData);                }                SMeasureInfo.AddASampleDataGrp(smlgrp);            }            return true;        }        //  样品测量功能        public void InitMeasureThread()        {            if (m_MsrThread == null)            {                m_MsrThread = new CMsrThread();                m_MsrThread.Init(m_ProjDataMgr);            }                               m_MsrThread.GetMeasureAppFormName(m_MeasureAppFrom.Text  );//set appName to underlying c++ program.                             }        //初始化测量样品        public bool InitMeasureSample()        {            m_MsrThread.Init(m_ProjDataMgr);                      m_MsrThread.GetMeasureAppFormName(m_MeasureAppFrom.Name );//set appName to underlying c++ program.            return true;        }        public bool InitHolePreview()        {            if (!m_MsrThread.Init(m_ProjDataMgr, m_ProjDataMgr.GetSampleList()))            {                           return false;            }            m_MsrThread.GetMeasureAppFormName(m_MeasureAppFrom.Name );            return true;        }              // 开始获取样品孔中的照片        public void DoHolePreview(int m_HoleID, CDomain c_DomainMessure)        {            m_MsrThread.DoHolePreview(m_HoleID, c_DomainMessure);        }        // 开始样品测量        public void DoMeasure()        {            m_MsrThread.DoMeasure();        }        //停止测量        public void SetMeasureThreadStatus(MSR_THREAD_STATUS ThreadStatus)        {            //设置测量线程状态            m_MsrThread.SetMsrLoopStatus((otsdataconst.OTS_MSR_THREAD_STATUS)ThreadStatus);        }        //保存测量样品的        public bool SaveMeasureSampleInfo()        {            m_ProjDataMgr = GetNewProjMgr();            if (null == m_ProjDataMgr)            {                           return false;            }            log.Trace(" m_ProjDataMgr.GetSampleList().Count = " + m_ProjDataMgr.GetSampleList().Count.ToString());            if (!m_ProjDataMgr.Save())            {            return false;            }            return true;        }             //获取测量Sample的开始时间        public bool GetMsrSampleStartTime(ref DateTime MsrFieldStartTime)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                          return false;            }            MsrFieldStartTime = (DateTime)WSample.GetMsrStatus().GetStartTime();            return true;        }        //获取测量已用时间        public bool GetMsrSampleUsedTime(ref TimeSpan TUsedTime)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                            return false;            }            TUsedTime = (TimeSpan)WSample.GetMsrStatus().GetUsedTime();            return true;        }             //获取新的工作文件对象        public COTSProjMgrFile GetNewProjMgr()        {            if (null == m_MsrThread)            {                            return null; ;            }            return m_MsrThread.GetProjMgrFile();        }        // 获取测量结果信息        public bool GetMsrRetData(ref SMSR_COMPLETE_DATA MsrCompleteData)        {            try            {                COTSSample WSample = m_ProjDataMgr.GetWorkingSample();                if (null == WSample)                {                                    return false;                }                List<COTSSample> MeasureCompleteSampleList = new List<COTSSample>();                if (!m_ProjDataMgr.GetMsredSampleList(ref MeasureCompleteSampleList))                {                                   return false;                }                if (null == m_MsrThread)                {                                   return false;                }                DateTime DTime = new DateTime();                if (m_MsrThread.GetMsrThreadStatus() == null)                {                return false;                }                if (m_MsrThread.GetMsrThreadStatus().GetStartTime() == null)                {                 return false;                }                DTime = (DateTime)m_MsrThread.GetMsrThreadStatus().GetStartTime();                MsrCompleteData.csMsrStartTime = DTime.ToString("yyyy-MM-dd HH:mm:ss");                MsrCompleteData.MsrUsedTime = (TimeSpan)m_MsrThread.GetMsrThreadStatus().GetUsedTime();                DTime = (DateTime)m_MsrThread.GetMsrThreadStatus().GetEndTime();                MsrCompleteData.csMsrEndTime = DTime.ToString("yyyy-MM-dd HH:mm:ss");                MsrCompleteData.iMsrCompleteSampleCount = MeasureCompleteSampleList.Count();                MsrCompleteData.iMsrCompleteFieldCount = 0;                MsrCompleteData.iParticleCount = 0;                for (int i = 0; i < MsrCompleteData.iMsrCompleteSampleCount; i++)                {                    MsrCompleteData.iMsrCompleteFieldCount += MeasureCompleteSampleList[i].GetMsrStatus().GetCompletedFields();                    List<CMsrResultItem> MsrRetClr = MeasureCompleteSampleList[i].GetMsrResults().GetResultItems();                    for (int k = 0; k < MsrRetClr.Count; k++)                    {                        MsrCompleteData.iParticleCount += (int)MsrRetClr[k].GetNumber();                    }                }                return true;            }            catch (Exception ex)            {               log.Error("(OTSDataMgrFun.GetMsrRetData) Exception:"+ex.ToString());                return false;            }        }        // 获取测量样品中之前已经测量完成Field帧图,(上一次未测量完成继续测试)        public bool GetBeforeCompleteField(ref string MsrSampleName, ref List<Point> FieldList)        {            COTSSample WSample = m_ProjDataMgr.GetWorkingSample();            if (null == WSample)            {                           return false;            }            MsrSampleName = WSample.GetName();                        FieldList = WSample.GetMsrStatus().GetCpltedCenter();            return true;        }                   // 当TREEVIEW 的样品参数锁状态发生变化后,Solution 需要将样品参数锁状态发送给MeasureApp更新新的样品参数锁状态        // string sSampleName :  样品参数锁对应的样品名        //bool bParaLockFlag:  样品新的排列顺序;        public bool SetSampleLockPara(string sSampleName, bool bFlag)        {                      return true;        }                   /// <summary>        /// 通过样品孔信息 返回默认测量区域大小        /// </summary>        /// <param name="cHoleClr"></param>        /// <returns></returns>        public Rectangle CalculateMsrArea(string cHoleName)        {            CHole cHoleClr = null;            foreach (CHole item in m_ProjDataMgr.GetStage().GetHoleList())            {                if (item.GetName() == cHoleName)                {                    cHoleClr = item;                }            }            CDomain CDomain = m_ProjDataMgr.CalculateMsrArea(cHoleClr);            return (Rectangle)CDomain.GetRectDomain();        }        /// <summary>        /// 获取已完成测量的结果文件路径        /// </summary>        /// <param name="mrFilePathList">返回测量结果文件路径</param>        /// <returns></returns>        public bool GetCompletedMeasureFileName(ref List<string> mrFilePathList)        {            //测量文件路径            string proFilePath = m_ProjDataMgr.GetPathName();            //样品列表            List<COTSSample> sampleList = m_ProjDataMgr.GetSampleList();            //获取样品数量            int sampleCount = sampleList.Count;            string mrSuffix = ".rst";            int existsCount = 0;            //获取测量文件路径            if (proFilePath.Equals("Untitled"))            {                return false;            }            string mrFolderPath = string.Empty;            try            {                mrFolderPath = proFilePath.Substring(0, proFilePath.LastIndexOf("\\"));            }            catch (Exception)            {                mrFolderPath = string.Empty;            }            for (int sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++)            {                int CompleteFieldsCount=sampleList[sampleIndex].GetMsrStatus().GetCompletedFields();                //如果样品已测量成功后再加载至报告程序中                if (CompleteFieldsCount > 0)                {                    string sampleName = sampleList[sampleIndex].GetName();                    string mrFilePath = mrFolderPath + "\\" + sampleName + "\\" + sampleName + mrSuffix;                    //判断文件是否存在                    if (File.Exists(mrFilePath))                    {                        if (mrFilePathList != null)                        {                            mrFilePathList.Add(mrFilePath);                        }                        existsCount++;                    }                }            }            if (existsCount > 0)            {                return true;            }            return false;        }        internal bool ReClassify()        {            if (m_ProjDataMgr != null)            {                return m_ProjDataMgr.ReClassify();            }            return false;        }        /// <summary>        /// 获取工作样品的测量状态        /// </summary>        /// <param name="workingSampleName"></param>        /// <returns></returns>        public bool GetWorkSampleMeasureStatus()        {            bool reuslt = false;            COTSSample COTSSample = m_ProjDataMgr.GetWorkingSample();            int sampleStatus = COTSSample.GetMsrStatus().GetCompletedFields();            if (sampleStatus > 0)            {                reuslt = true;            }            return reuslt;         }    }    public class OTSBSEImageFun     {               OTSIncAMeasureAppForm m_MsrApp = null;        NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();        public OTSBSEImageFun(OTSIncAMeasureAppForm MsrApp)        {            m_MsrApp = MsrApp;                    }        public int GetScanImage(int iWidth, int iHeigh, ref byte[] bImageData)        {            //电镜设置对象            COTSControlFunExport cfun = new COTSControlFunExport();            int GetImgCount = 0;            try            {                //连接电镜                bool IsConnec = cfun.ConncetSem();                if (!IsConnec)                {                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.ConncetSem() = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                //实例电镜初始化                bool IsScan = cfun.ScanInit();                if (!IsScan)                {                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.ScanInit = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                               int a_ExternalMode = 0;                //获取终止模式                              a_ExternalMode = cfun.GetSemExternalMode();                                //保存初始模式变量                int a_oldMode = 0;                //获取初始模式                               if (!cfun.GetSemScanMode(ref a_oldMode))                {                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemScanMode = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                               //设置当前模式                               if (!cfun.SetSemScanMode(a_ExternalMode))                {                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetSemScanMode = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                                #region BeamBlank                int a_nBeamBlank = 0;                //获取参数                             if (!cfun.GetSemBeamBlank(ref a_nBeamBlank))                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemBeamBlank = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                               //设置参数                               if (!cfun.SetSemBeamBlank(0))                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetSemBeamBlank = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                               #endregion                #region 获得放大倍数                //获得放大倍数                double a_dMagnification = 0;                              //获取参数                if (!cfun.GetSemMagnification(ref a_dMagnification))                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemMagnification = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                              #endregion                #region 获取 电镜 X、Y轴 与角度                //获取 电镜 X、Y轴 与角度                double PositionX = 0;                double PositionY = 0;                double PositionR = 0;                //获取参数                                if (!cfun.GetSemPositionXY(ref PositionX, ref PositionY, ref PositionR))                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.GetSemPositionXY = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                               #endregion                #region 设置图像分辨率                //设置宽度                               if (!cfun.SetImageSize(iWidth))                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetImageSize = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                               #endregion                #region 采集时间                //采集时间                int nDwellTime = 4;                               if (!cfun.SetDwellTime(nDwellTime))                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.SetDwellTime = false  Failed";                    log.Error(strErrorInfo);                    return 0;                }                                #endregion                #region MatrixSize                //获得放大倍数                int a_MatrixSize = 0;                Size size = new Size();                //获取参数                size = cfun.GetMatrixSize(a_MatrixSize);                                size = cfun.GetMatrixSize(a_MatrixSize);                              #endregion                //获取图像数据                int resultCount = iWidth * iHeigh;                              GetImgCount = cfun.AcquireBSEImage(0, 0, 0, ref bImageData);                //记录日志                               if (resultCount == GetImgCount)                {                    //设置为原始 扫描模式                                      cfun.SetSemScanMode(a_oldMode);                                        //Scan类结束                    //初始化电镜参数                                       if (!cfun.SetAndStartScan())                    {                        return 0;                    }                                   }                else                {                    cfun.SetSemScanMode(a_oldMode);                    string strErrorInfo = "(OTSBSEImageFun.GetScanImage) cfun.AcquireBSEImage = 0  Failed";                    log.Error(strErrorInfo);                                       //初始化电镜参数                                      if (!cfun.SetAndStartScan())                    {                        return 0;                    }                                   }                          }            catch (Exception ex)            {                //记录日志                log.Error(ex.Message.ToString());                string strErrorInfo = "(OTSBSEImageFun.GetScanImage) Exception   Error Happend";                log.Error(strErrorInfo);            }            finally            {                cfun.ScanFinishedInstance();                cfun.DisConnectSem();                cfun.FreeDll();            }            return GetImgCount;        }            }}
 |