Esempio n. 1
0
        object ICommonPlugin.Run( params object[] args )
        {
            // DataManager および IPluto の取得に失敗している.または,画像が選択されていない.
            if( _dataManager == null || _iPluto == null || _dataManager.Active == null )
            {
                return ( null );
            }

            // 選択された画像を入力画像とする.
            var ct = _dataManager.Active;
            // 出力画像を入力画像と同じサイズで作成する.
            var mk = new Mist.MistArray( ct.Size1, ct.Size2, ct.Size3, ct.Reso1, ct.Reso2, ct.Reso3 );

            // 処理を行う.
            if (extract_alveolus(ct.ImagePointer, mk.ImagePointer, ct.Size1, ct.Size2, ct.Size3,
                ct.Reso1, ct.Reso2, ct.Reso3) == false)
            {
                return ( null );
            }

            // 出力画像を DataManager へ追加する.
            if( _dataManager.Add( mk, false, true ) < 0 )
            {
                // 追加に失敗したら,出力画像のリソースを開放する.
                mk.Dispose( );
                return ( null );
            }
            else
            {
                return ( mk );
            }
        }
Esempio n. 2
0
        object ICommonPlugin.Run(params object[] args)
        {
            // DataManager および IPluto の取得に失敗している.または,画像が選択されていない.
            if (dataManager == null || iPluto == null || dataManager.Active == null)
            {
                return(null);
            }

            Mist.MistArray renalData = dataManager.Active;
            int            index     = dataManager.IndexOf(dataManager.Active);

            if (dataManager.Count <= index + 1)
            {
                return(null);
            }

            Mist.MistArray vesselData = dataManager[index + 1];
            if (vesselData == null)
            {
                return(null);
            }

            Mist.MistArray voronoiData = new Mist.MistArray(renalData.Size1, renalData.Size2, renalData.Size3,
                                                            renalData.Reso1, renalData.Reso2, renalData.Reso3);
            Mist.MistArray labeledVesselData = new Mist.MistArray(renalData.Size1, renalData.Size2, renalData.Size3,
                                                                  renalData.Reso1, renalData.Reso2, renalData.Reso3);
            voronoiData.Fill(0);
            labeledVesselData.Fill(0);

            // Form を表示する.
            if (this.ShowDialog( ) == DialogResult.OK)
            {
                int  depth       = ( int )this.numericDepth.Value;
                int  kidneyValue = (int)this.numericKidneyLabel.Value;
                int  vesselValue = (int)this.numericVesselLabel.Value;
                bool manualRoot  = (bool)this.checkBoxRoot.Checked;
                int  upperLevel  = (int)this.numericUpper.Value;

                Vector3 clickPoint = new Vector3(0, 0, 0);
                if (manualRoot == true)
                {
                    //Get the click point.
                    iPluto.GetClickPosition(ref clickPoint);
                    //Console.Write("Click point:  {0:G}" + " {1:G}" + " {2:G}", clickPoint.X, clickPoint.Y, clickPoint.Z);
                }
                Vector3 clickPointIJK = new Vector3(clickPoint.X / voronoiData.Reso1, clickPoint.Y / voronoiData.Reso2, clickPoint.Z / voronoiData.Reso3);
                if (CppRun(renalData.Image, vesselData.Image, labeledVesselData.Image, voronoiData.Image, clickPointIJK.X, clickPointIJK.Y, clickPointIJK.Z, kidneyValue, vesselValue, depth, manualRoot, upperLevel) == false)
                {
                    return(null);
                }

                // 出力画像を DataManager へ追加する.
                if (dataManager.Add(voronoiData, true, true) < 0)
                {
                    voronoiData.Dispose();
                    return(null);
                }

                if (dataManager.Add(labeledVesselData, false, true) < 0)
                {
                    labeledVesselData.Dispose();
                    return(null);
                }
            }

            return(null);
        }