public ViewerPage()
 {
     this.InitializeComponent();
     DataContext            = AppState.Current;
     SampleFrame.Navigated += SampleFrame_Navigated;
     SampleFrame.Navigate(typeof(SamplesPage));
 }
예제 #2
0
        private async void GetById()
        {
            SampleFrameM actual;
            var          expectedFields    = new[] { FieldEnum.StatId, FieldEnum.Name };
            var          expectedPredicate = CreateExpressionGroup();
            var          expected          = new SampleFrame
            {
                Fields      = JsonConvert.SerializeObject(expectedFields),
                Name        = "test",
                Description = "SF test",
                Predicate   = JsonConvert.SerializeObject(expectedPredicate),
                User        = new User {
                    UserName = "******"
                }
            };

            using (var context = InMemoryDb.CreateDbContext())
            {
                context.SampleFrames.Add(expected);
                await context.SaveChangesAsync();

                actual = await new SampleFramesService(context, null).GetById(expected.Id, (await context.Users.FirstOrDefaultAsync()).Id);
            }

            Assert.Equal(expected.Name, actual.Name);
            Assert.Equal(expected.Description, actual.Description);
            Assert.Equal(expectedFields[0], actual.Fields.First());
            Assert.Equal(expectedFields[1], actual.Fields.Last());
            Assert.Equal(expectedPredicate.Groups.Count(), actual.Predicate.Groups.Count());
        }
예제 #3
0
        private void cmbASCDL_TextChanged(object sender, EventArgs e)
        {
            string   filePath = cmbASCDL.Text.TrimEnd();
            FileInfo file     = new FileInfo(filePath);
            string   fileHdr  = filePath.Replace(file.Extension, ".hdr");

            try
            {
                if (File.Exists(fileHdr))
                {
                    SampleData.classNames = SampleFrame.GetClassFromHdr(fileHdr);
                    this.cmbDestination.Properties.Items.Clear();
                    this.cmbDestination.Properties.Items.AddRange(SampleData.classNames);
                }
                else
                {
                    SampleData.classNames = SampleFrame.GetClassFromRaster(filePath);
                    this.cmbDestination.Properties.Items.Clear();
                    this.cmbDestination.Properties.Items.AddRange(SampleData.classNames);
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Log.WriteLog(typeof(frmSampleFrame), ex);
            }
        }
예제 #4
0
    void updateCosts(SampleFrame frame, ComputeShader cs)
    {
        int  kernel = cs.FindKernel("CSMain");
        uint threadX, threadY, threadZ;

        cs.GetKernelThreadGroupSizes(kernel, out threadX, out threadY, out threadZ);
        cs.SetInt("_width", Image.width);
        cs.SetInt("_height", Image.height);
        cs.SetInt("_depth", depth);
        cs.SetInt("_texWidth", CostVolume.width);
        cs.SetInt("_texHeight", CostVolume.height);
        cs.SetFloat("_invDepthMax", invDepthMax);
        cs.SetFloat("_invDepthMin", invDepthMin);

        Matrix4x4 keyframeToSample = frame.CameraToWorld.inverse * CameraToWorld;
        Matrix4x4 invIntrinsics    = Intrinsics.inverse;

        cs.SetVector("_intrinsics", new Vector4(Intrinsics.m00, Intrinsics.m11, Intrinsics.m02, Intrinsics.m12));
        cs.SetVector("_invIntrinsics", new Vector4(invIntrinsics.m00, invIntrinsics.m11, invIntrinsics.m02, invIntrinsics.m12));
        cs.SetVector("_keyframeToSampleR0", keyframeToSample.GetRow(0));
        cs.SetVector("_keyframeToSampleR1", keyframeToSample.GetRow(1));
        cs.SetVector("_keyframeToSampleR2", keyframeToSample.GetRow(2));
        cs.SetTexture(kernel, "KeyframeImg", Image);
        cs.SetTexture(kernel, "SampleImg", frame.Image);
        cs.SetTexture(kernel, "Result", CostVolume);
        cs.Dispatch(kernel, Mathf.CeilToInt((float)CostVolume.width / (float)threadX), Mathf.CeilToInt((float)CostVolume.height / (float)threadY), (int)threadZ);
    }
 private void AppBarButton_Click(object sender, RoutedEventArgs e)
 {
     if (SampleFrame.CanGoBack)
     {
         SampleFrame.GoBack();
         AppState.Current.SetDefaultTitle();
     }
 }
 public MainPage()
 {
     ArcGISRuntimeEnvironment.SymbolsPath = @"Resources";
     this.InitializeComponent();
     DataContext            = AppState.Current;
     SampleFrame.Navigated += SampleFrame_Navigated;
     SampleFrame.Navigate(typeof(SampleListPage));
 }
예제 #7
0
            public ParsingFrame(ReadOnlySpan <char> line)
            {
                Split(line, out var prefix, out var frameContent);

                LastSymbolIndex = prefix.LastIndexOfAny(knownSymbols);
                NumberIndex     = prefix.Length;

                Frame = ParseSampleFrame(frameContent);
            }
예제 #8
0
    void Start()
    {
        Camera camera           = this.GetComponent <Camera>();
        float  length           = clip.length;
        float  fps              = 5.0f;
        float  sampleTimeOffset = 1.0f / fps;

        clip.SampleAnimation(this.gameObject, 0);

        float     aspectRatio = (float)width / (float)height;
        Matrix4x4 intrinsics  = Matrix4x4.identity;

        intrinsics.m00 = (width * 0.5f) / Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);
        intrinsics.m02 = width * 0.5f;
        intrinsics.m11 = (height * 0.5f) / Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);
        intrinsics.m12 = height * 0.5f;

        Matrix4x4 ndcIntrinsics = toNDC(intrinsics, width, height, camera.nearClipPlane, camera.farClipPlane);

        camera.projectionMatrix = ndcIntrinsics;

        SampleFrame frame = new SampleFrame();

        frame.CameraToWorld  = camera.transform.localToWorldMatrix;
        frame.Intrinsics     = intrinsics;
        frame.Image          = createRT(width, height, RenderTextureFormat.ARGBFloat);
        camera.targetTexture = frame.Image;
        camera.Render();
        keyframe = new Keyframe();
        keyframe.Initialize(frame, depth, initCostShader, regularizeShader);

        int numExecuted = 0;

        for (float t = sampleTimeOffset; t < length; t += sampleTimeOffset)
        {
            numExecuted++;
            clip.SampleAnimation(this.gameObject, t);
            SampleFrame newFrame = new SampleFrame();
            newFrame.CameraToWorld = camera.transform.localToWorldMatrix;
            newFrame.Intrinsics    = intrinsics;
            newFrame.Image         = createRT(width, height, RenderTextureFormat.ARGBFloat);
            camera.targetTexture   = newFrame.Image;
            camera.Render();
            keyframe.UpdateCostVolume(newFrame, updateCostShader, updateCostMinMaxShader);
        }

        keyframe.ComputeNaiveDepth(naiveDepthShader);

        clip.SampleAnimation(this.gameObject, 0);
        inverseDepthGT       = createRT(width, height, RenderTextureFormat.ARGBFloat);
        camera.targetTexture = inverseDepthGT;
        camera.RenderWithShader(Shader.Find("Custom/InverseDepth"), string.Empty);
        camera.targetTexture = null;

        keyframe.SolveDepthMap(initSolverShader, updateQShader, updateDShader, updateAShader, regularizeShader, projectQShader, settings);
    }
예제 #9
0
 public void UpdateSampleFrame(SampleFrame item, string userId)
 {
     item.Name              = Name;
     item.Description       = Description;
     item.EditingDate       = DateTime.Now;
     item.CreationDate      = item.CreationDate == DateTime.MinValue ? DateTime.Now : item.CreationDate;
     item.Predicate         = JsonConvert.SerializeObject(Predicate);
     item.Fields            = JsonConvert.SerializeObject(Fields);
     item.Status            = SampleFrameGenerationStatuses.Pending;
     item.GeneratedDateTime = null;
     item.FilePath          = null;
     item.UserId            = userId;
 }
예제 #10
0
        private void InitialData()
        {
            cmbFirstUnit.Text = SampleData.firstSample;
            if (!string.IsNullOrEmpty(cmbFirstUnit.Text))
            {
                getFields();
                cmbVillage.Text = SampleData.villageField;
                cmbLayer.Text   = SampleData.layerField;
            }

            cmbCultivation.Text = SampleData.farmLand;
            cmbASCDL.Text       = SampleData.ASCDL;
            if (!string.IsNullOrEmpty(cmbASCDL.Text))
            {
                cmbCrop.Properties.Items.Clear();
                if (SampleData.classNames.Count > 0)
                {
                    cmbCrop.Properties.Items.AddRange(SampleData.classNames);
                }
                else
                {
                    try
                    {
                        string   filePath = cmbASCDL.Text.TrimEnd();
                        FileInfo file     = new FileInfo(filePath);
                        string   fileHdr  = filePath.Replace(file.Extension, ".hdr");
                        if (File.Exists(fileHdr))
                        {
                            SampleData.classNames = SampleFrame.GetClassFromHdr(fileHdr);
                            this.cmbCrop.Properties.Items.AddRange(SampleData.classNames);
                        }
                        else
                        {
                            SampleData.classNames = SampleFrame.GetClassFromRaster(filePath);
                            this.cmbCrop.Properties.Items.AddRange(SampleData.classNames);
                        }
                    }
                    catch (Exception ex)
                    {
                        XtraMessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        Log.WriteLog(typeof(frmSampleFrame), ex);
                    }
                }

                if (SampleData.targetCrop >= 0)
                {
                    cmbCrop.Text = SampleData.classNames[SampleData.targetCrop];
                }
            }
        }
예제 #11
0
 public static SampleFrameM Create(SampleFrame entity)
 {
     return(new SampleFrameM
     {
         Id = entity.Id,
         EditingDate = entity.EditingDate,
         Name = entity.Name,
         Description = entity.Description,
         Predicate = JsonConvert.DeserializeObject <ExpressionGroup>(entity.Predicate),
         Fields = JsonConvert.DeserializeObject <IEnumerable <FieldEnum> >(entity.Fields),
         Status = entity.Status,
         GeneratedDateTime = entity.GeneratedDateTime,
         FilePath = entity.FilePath
     });
 }
예제 #12
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            sampleMetadata = (SampleMetadata)e.Parameter;
            switch (sampleMetadata.Tag)
            {
            case "ImageClassifier":
                SampleFrame.Navigate(typeof(Samples.ImageClassifier));
                break;

            case "Batching":
                SampleFrame.Navigate(typeof(Samples.Batching));
                break;

            case "ImageEffects":
                SampleFrame.Navigate(typeof(Samples.ImageEffects));
                break;

            case "OpenCVInterop":
                SampleFrame.Navigate(typeof(Samples.OpenCVInterop));
                break;

            case "ImageSharpInterop":
                SampleFrame.Navigate(typeof(Samples.ImageSharpInterop));
                break;

            case "EncryptedModel":
                SampleFrame.Navigate(typeof(Samples.EncryptedModel));
                break;

            case "AdapterSelection":
                SampleFrame.Navigate(typeof(Samples.AdapterSelection));
                break;
            }
            if (sampleMetadata.Docs.Count > 0)
            {
                DocsHeader.Visibility = Visibility.Visible;
            }
            else
            {
                DocsHeader.Visibility = Visibility.Collapsed;
            }
        }
예제 #13
0
    public void Initialize(SampleFrame frame, int numDepthValues,
                           ComputeShader initCostShader, ComputeShader regularizerShader)
    {
        Reset();

        int width  = frame.Image.width;
        int height = frame.Image.height;

        this.Intrinsics      = frame.Intrinsics;
        this.CameraToWorld   = frame.CameraToWorld;
        this.depth           = numDepthValues;
        this.Image           = frame.Image;
        this.DepthImage      = createRT(width, height, RenderTextureFormat.ARGBFloat);
        this.NaiveDepthImage = createRT(width, height, RenderTextureFormat.ARGBFloat);
        this.Regularizer     = createRT(width, height, RenderTextureFormat.ARGBFloat);

        this.QBuffer = new Texture2D(width, height, TextureFormat.RGBAFloat, false, true);
        this.QBuffer.Apply();
        this.QImage = createRT(width, height, RenderTextureFormat.ARGBFloat);
        this.DImage = createRT(width, height, RenderTextureFormat.ARGBFloat);
        this.AImage = createRT(width, height, RenderTextureFormat.ARGBFloat);

        float maxDepthInMeters = 3;
        float minDepthInMeters = 0.5f;

        this.invDepthMax = Mathf.Max(1.0f / maxDepthInMeters, 1.0f / minDepthInMeters);
        this.invDepthMin = Mathf.Min(1.0f / maxDepthInMeters, 1.0f / minDepthInMeters);

        int numElems      = (width * height * depth);
        int ideal2DPixels = Mathf.CeilToInt(Mathf.Sqrt((float)numElems));
        int texWidth      = ideal2DPixels;
        int texHeight     = ideal2DPixels;

        this.CostVolume       = createRT(texWidth, texHeight, RenderTextureFormat.ARGBFloat);
        this.CostVolumeMinMax = createRT(width, height, RenderTextureFormat.ARGBFloat);
        frame.Image           = null;

        resetCostVolume(initCostShader);
        initRegularizer(regularizerShader, 1, 2);
    }
예제 #14
0
 public SampleFrameTick(SampleFrame parent)
 {
     this.parent = parent;
 }
예제 #15
0
 private void btnOK_Click(object sender, EventArgs e)
 {
     if (this.xtraTabControl1.SelectedTabPageIndex == 0)
     {
         SampleFrame   sampleFrame = new SampleFrame();
         frmWaitDialog frmWait     = new frmWaitDialog("正在处理...", "提示信息");
         try
         {
             frmWait.Owner   = this;
             frmWait.TopMost = false;
             string msg = string.Empty;
             if (chkArea.Checked)
             {
                 SampleData.hasArea    = true;
                 SampleData.areaField  = cmbAreaField.Text;
                 SampleData.firstUnit  = this.cmbUnit.Text.TrimEnd();
                 SampleData.farmLand   = this.cmbCrop.Text.TrimEnd();
                 SampleData.ASCDL      = cmbASCDL.Text;
                 SampleData.targetCrop = this.cmbDestination.SelectedIndex;
                 frmWait.Caption       = "参数检查...";
                 if (!sampleFrame.ChkData(out msg))
                 {
                     XtraMessageBox.Show(msg);
                     return;
                 }
                 frmWait.Caption = "计算分类面积...";
                 if (!sampleFrame.CalClassArea(SampleData.firstUnit, SampleData.ASCDL, SampleData.targetCrop, out msg))
                 {
                     XtraMessageBox.Show(msg);
                     return;
                 }
             }
             else
             {
                 SampleData.hasArea    = false;
                 SampleData.areaField  = string.Empty;
                 SampleData.firstUnit  = this.cmbUnit.Text.TrimEnd();
                 SampleData.farmLand   = this.cmbCrop.Text.TrimEnd();
                 SampleData.ASCDL      = cmbASCDL.Text;
                 SampleData.targetCrop = this.cmbDestination.SelectedIndex;
                 frmWait.Caption       = "参数检查...";
                 if (!sampleFrame.ChkData(out msg))
                 {
                     XtraMessageBox.Show(msg);
                     return;
                 }
                 frmWait.Caption = "计算耕地面积...";
                 if (!sampleFrame.CalLandArea(SampleData.firstUnit, SampleData.farmLand, out msg))
                 {
                     XtraMessageBox.Show(msg);
                     return;
                 }
                 frmWait.Caption = "计算分类面积...";
                 if (!sampleFrame.CalClassArea(SampleData.firstUnit, SampleData.ASCDL, SampleData.targetCrop, out msg))
                 {
                     XtraMessageBox.Show(msg);
                     return;
                 }
             }
             if (DialogResult.OK == XtraMessageBox.Show("处理完毕.", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information))
             {
                 MapAPI.AddShpFileToMap(SampleData.firstUnit);
                 MapAPI.AddShpFileToMap(SampleData.farmLand);
                 MapAPI.AddRasterFileToMap(SampleData.ASCDL);
             }
         }
         catch (Exception ex)
         {
             XtraMessageBox.Show(ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
         finally
         {
             frmWait.Close();
         }
     }
 }
예제 #16
0
 public void UpdateCostVolume(SampleFrame frame, ComputeShader updateCostShader, ComputeShader updateCostMinMaxShader)
 {
     updateCosts(frame, updateCostShader);
     updateCostsMinMax(updateCostMinMaxShader);
 }
예제 #17
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            string        msg     = string.Empty;
            frmWaitDialog frmWait = new frmWaitDialog("正在执行...", "提示信息");

            try
            {
                frmWait.Owner   = this;
                frmWait.TopMost = false;
                string fishNet   = string.Empty;
                string firstUnit = this.cmbFirstUnit.Text;
                if (chkNewNet.Checked)
                {
                    SampleData.firstSample  = cmbFirstUnit.Text;
                    SampleData.villageField = cmbVillage.Text;
                    SampleData.layerField   = cmbLayer.Text;
                    SampleData.farmLand     = cmbCultivation.Text;
                    SampleData.ASCDL        = cmbASCDL.Text;
                    SampleData.targetCrop   = cmbCrop.SelectedIndex;

                    if (!SampleSelection.ChkData(out msg))
                    {
                        XtraMessageBox.Show(msg);
                        return;
                    }
                    //一级单元范围内创建渔网
                    frmWait.Caption = "创建二级抽样单元...";
                    fishNet         = System.IO.Path.Combine(ConstDef.PATH_TEMP, DateTime.Now.ToFileTime().ToString() + ".shp");
                    int width  = int.Parse(spinLength.EditValue.ToString());
                    int height = int.Parse(this.spinWidth.EditValue.ToString());
                    if (!EnviVars.instance.GpExecutor.CreateFishNet(firstUnit, width, height, fishNet, out msg))
                    {
                        XtraMessageBox.Show(msg);
                        return;
                    }
                }
                else
                {
                    SampleData.firstSample  = cmbFirstUnit.Text;
                    SampleData.villageField = cmbVillage.Text;
                    SampleData.layerField   = cmbLayer.Text;
                    SampleData.farmLand     = cmbCultivation.Text;
                    SampleData.ASCDL        = cmbASCDL.Text;
                    SampleData.targetCrop   = cmbCrop.SelectedIndex;

                    if (!SampleSelection.ChkData(out msg))
                    {
                        XtraMessageBox.Show(msg);
                        return;
                    }

                    if (string.IsNullOrEmpty(cmbSecondUint.Text))
                    {
                        XtraMessageBox.Show("二级抽样单元为空!");
                        return;
                    }
                    fishNet = cmbSecondUint.Text;
                }

                //抽选样本
                frmWait.Caption = "抽选样本...";
                SamplePara para = new SamplePara();
                para.isNum      = chkSampleNum.Checked;
                para.sampleNum  = int.Parse(this.spinSampleNum.EditValue.ToString());
                para.sampleRate = double.Parse(this.spinPercent.EditValue.ToString()) / 100;
                SampleSelection.Sampling(firstUnit, cmbVillage.Text, cmbLayer.Text, fishNet, cmbCultivation.Text, para, txtOut.Text);

                SampleFrame sampleFrame = new SampleFrame();
                frmWait.Caption = "计算耕地面积...";
                if (!SampleSelection.CalLandArea(txtOut.Text, SampleData.farmLand, out msg))
                {
                    XtraMessageBox.Show(msg);
                    return;
                }
                frmWait.Caption = "计算分类面积...";
                if (!sampleFrame.CalClassArea(txtOut.Text, SampleData.ASCDL, SampleData.targetCrop, out msg))
                {
                    XtraMessageBox.Show(msg);
                    return;
                }
                BLL.ProductMeta meta = new ProductMeta(txtOut.Text.TrimEnd(), "", "", "二级样方", "抽样和面积推算结果");
                meta.WriteShpMeta();
                BLL.ProductQuickView view = new BLL.ProductQuickView(txtOut.Text.TrimEnd());
                view.Create();

                System.Windows.Forms.DialogResult dialogResult = XtraMessageBox.Show("抽样完成,是否加载结果?", "提示信息", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Asterisk);
                if (dialogResult == System.Windows.Forms.DialogResult.Yes)
                {
                    MapAPI.AddShpFileToMap(txtOut.Text);
                    this.Close();
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message);
                Log.WriteLog(typeof(frmSymbolSelector), ex);
            }
            finally
            {
                frmWait.Close();
            }
        }