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 ); } }
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); }