/// <summary> /// Event fired when the graph selection is changed /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void view_SelectionChangedEvt(vtkObject sender, vtkObjectEventArgs e) { //Get the selection vtkDataRepresentation dr = view.GetRepresentation(0); vtkAnnotationLink al = dr.GetAnnotationLink(); vtkSelection sel = al.GetCurrentSelection(); vtkAbstractArray arr = null; vtkSelectionNode node = sel.GetNode(0); if (null != node) { arr = node.GetSelectionList(); } vtkIdTypeArray arr1 = (vtkIdTypeArray)arr; // Short circuit if nothing is selected... int numSelected = (int)arr1.GetNumberOfTuples(); if (0 == numSelected) { return; } vtkStringArray arr2 = ((vtkStringArray)g.GetVertexData().GetAbstractArray("label")); //get a pseudo random name if more than one are selected string name = arr2.GetValue( (int)arr1.GetValue(System.DateTime.Now.Millisecond % numSelected)); //reset the small arrayList arrListSmall = new System.Collections.ArrayList(); int hops; try { hops = System.Convert.ToInt32(toolStripTextBox3.Text); } catch (Exception) { hops = 1; } toolStripTextBox1.Text = name; toolStripTextBox1.Invalidate(); this.Update(); //Start the loading graphic and add another renderer on top for the spinning logo vtkRenderWindow win = this.renderWindowControl1.RenderWindow; win.AddRenderer(logoRenderer); win.Render(); this.webBrowser1.Url = new Uri("http://en.wikipedia.org/wiki/" + name.Replace(" ", "_")); //Start the work addLinks(g, name, hops); //Remove the spinning logo after the work is done win.RemoveRenderer(logoRenderer); win.Render(); }
/// <summary> /// Open the explorer window of the selected file /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void view_SelectionChangedEvt(vtkObject sender, vtkObjectEventArgs e) { // Get the selection // vtkDataRepresentation dr = view.GetRepresentation(0); vtkAnnotationLink al = dr.GetAnnotationLink(); vtkSelection sel = al.GetCurrentSelection(); vtkStringArray arr1 = null; vtkSelectionNode node = sel.GetNode(0); if (null != node) { arr1 = (vtkStringArray)node.GetSelectionList(); } string path = ""; if (null != arr1) { // If it is a directory open it, if not cut off the end // and open the directory // if (Directory.Exists(arr1.GetValue(0))) { path = arr1.GetValue(0); } else { path = Regex.Replace(arr1.GetValue(0), "\\\\[^\\\\]+\\.[^\\\\]*$", ""); } } if (path != SelectedPath) { SelectedPath = path; System.Diagnostics.Debug.WriteLine(SelectedPath); if ("" != SelectedPath) { //Create the process System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/C explorer " + SelectedPath); psi.CreateNoWindow = true; psi.UseShellExecute = false; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); } } }
void GenerateData(ref vtkPolyData input) { // Create a sphere vtkSphereSource sphereSource = vtkSphereSource.New(); sphereSource.Update(); // Remove some cells vtkIdTypeArray ids = vtkIdTypeArray.New(); ids.SetNumberOfComponents(1); // Set values ids.InsertNextValue(2); ids.InsertNextValue(10); vtkSelectionNode selectionNode = vtkSelectionNode.New(); selectionNode.SetFieldType((int)vtkSelectionNode.SelectionField.CELL); selectionNode.SetContentType((int)vtkSelectionNode.SelectionContent.INDICES); selectionNode.SetSelectionList(ids); selectionNode.GetProperties().Set(vtkSelectionNode.INVERSE(), 1); //invert the selection vtkSelection selection = vtkSelection.New(); selection.AddNode(selectionNode); vtkExtractSelection extractSelection = vtkExtractSelection.New(); extractSelection.SetInputConnection(0, sphereSource.GetOutputPort()); #if VTK_MAJOR_VERSION_5 extractSelection.SetInput(1, selection); #else extractSelection.SetInputData(1, selection); #endif extractSelection.Update(); // In selection vtkDataSetSurfaceFilter surfaceFilter = vtkDataSetSurfaceFilter.New(); surfaceFilter.SetInputConnection(extractSelection.GetOutputPort()); surfaceFilter.Update(); input.ShallowCopy(surfaceFilter.GetOutput()); }
/// <summary> /// 左键释放时获取选择的对象 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void m_interactor_LeftButtonReleaseEvt(vtkObject sender, vtkObjectEventArgs e) { if (m_pickTarget == ePickTarget.None) { return; } //if (m_iren.GetControlKey() != 0) // m_pickBoolean = ePickBollean.Add; //else if (m_iren.GetShiftKey() != 0) // m_pickBoolean = ePickBollean.Sub; m_iren.GetEventPosition(ref endx, ref endy); #region 点选对象 if (m_pickMode == ePickMode.DotPickMode) //如果是点选模式 { vtkCellPicker cellPicker = new vtkCellPicker(); cellPicker.SetTolerance(0.005); if (0 == cellPicker.Pick(endx, endy, 0, m_renderer)) { return; //什么都没有选到就返回 } FEMActor actor = cellPicker.GetActor() as FEMActor; if (actor == null) { return; } if (m_pickTarget == ePickTarget.Actor) { //如果选择对象为 actor.IsSelected = true; m_RWCtrl.Invalidate(); //貌似必须要用这个函数,update 不行 OnObjectsSelected(sender, e); } else if (m_pickTarget == ePickTarget.Cell) { int cellId = cellPicker.GetCellId(); actor.AddCellId(cellId, m_pickBoolean); OnObjectsSelected(sender, e); //if (cellId > 0) // Console.WriteLine("dotselect cellid:{0}", cellId); } else if (m_pickTarget == ePickTarget.Point) { int pointId = cellPicker.GetPointId(); if (pointId != -1) { actor.AddPointId(pointId, m_pickBoolean); OnObjectsSelected(sender, e); // Console.WriteLine("dotselect pointid:{0}", pointId); } } } #endregion else if (m_pickMode == ePickMode.RectPickMode) //如果是框选 { vtkAreaPicker areaPicker = new vtkAreaPicker(); if (0 == areaPicker.AreaPick(startx, starty, endx, endy, m_renderer)) { //如果什么也没选到就返回 //this.impactViewForm.ClearAllSelectCells(); return; } vtkProp3DCollection selectedActors = areaPicker.GetProp3Ds(); selectedActors.InitTraversal(); FEMActor selectedActor; while ((selectedActor = selectedActors.GetNextProp3D() as FEMActor) != null) { vtkSelection selection = new vtkSelection(); vtkSelectionNode selectionNode = new vtkSelectionNode(); selection.AddNode(selectionNode); vtkIdFilter idFilter = new vtkIdFilter(); idFilter.FieldDataOn(); idFilter.SetInput(selectedActor.GetMapper().GetInput()); idFilter.Update(); vtkExtractSelection frustum = new vtkExtractSelection(); frustum.SetInput(0, idFilter.GetOutput()); frustum.SetInput(1, selection); selectionNode.Initialize(); selectionNode.SetContentType((int)vtkSelectionNode.SelectionContent.FRUSTUM); if (m_pickTarget == ePickTarget.Cell)//如果选择的目标是cell { selectionNode.SetFieldType((int)vtkSelectionNode.SelectionField.CELL); } else if (m_pickTarget == ePickTarget.Point) //如果选择的目标是point { selectionNode.SetFieldType((int)vtkSelectionNode.SelectionField.POINT); } vtkPoints points = areaPicker.GetClipPoints(); vtkDoubleArray frustumcorners = new vtkDoubleArray(); frustumcorners.SetNumberOfComponents(4); frustumcorners.SetNumberOfTuples(8); for (int i = 0; i < 8; ++i) { double[] point = points.GetPoint(i); frustumcorners.SetTuple4(i, point[0], point[1], point[2], 0.0); } selectionNode.SetSelectionList(frustumcorners); frustum.Update(); vtkUnstructuredGrid grid = new vtkUnstructuredGrid(); grid = vtkUnstructuredGrid.SafeDownCast(frustum.GetOutput()); vtkIdTypeArray ids = null; if (m_pickTarget == ePickTarget.Cell) { ids = vtkIdTypeArray.SafeDownCast(grid.GetCellData().GetArray("vtkOriginalCellIds")); if (ids == null) { continue; } selectedActor.AddCellId(ids, m_pickBoolean); OnObjectsSelected(sender, e); } else if (m_pickTarget == ePickTarget.Point) { ids = vtkIdTypeArray.SafeDownCast(grid.GetPointData().GetArray("vtkOriginalPointIds")); if (ids == null) { continue; } selectedActor.AddPointId(ids, m_pickBoolean); OnObjectsSelected(sender, e); } } } }