public void AddCylinderEdgeToActors(byte[] bgColor, ref vtkActorCollection actors) { vtkProperty pp = vtkProperty.New(); pp.SetOpacity(0.7); pp.SetColor(bgColor[0], bgColor[1], bgColor[2]); pp.SetLineWidth(5); pp.SetLighting(false); vtkRegularPolygonSource circle = vtkRegularPolygonSource.New(); circle.GeneratePolygonOn(); circle.SetNumberOfSides(50); circle.SetRadius(radius); circle.SetCenter(0, 0, 0); vtkPolyDataMapper mappper = vtkPolyDataMapper.New(); mappper.SetInputConnection(circle.GetOutputPort()); vtkActor actor = vtkActor.New(); actor.SetProperty(pp); actor.SetMapper(mappper); actors.AddItem(actor); actor.SetProperty(pp); actors.AddItem(actor); vtkLineSource ls = vtkLineSource.New(); ls.SetPoint1(0, 0, 0); ls.SetPoint2(0, 0, height); vtkTubeFilter tf = vtkTubeFilter.New(); tf.SetInputConnection(ls.GetOutputPort()); tf.SetRadius(radius); tf.SetNumberOfSides(100); tf.CappingOff(); vtkPolyDataMapper dm = vtkPolyDataMapper.New(); dm.SetInputConnection(tf.GetOutputPort()); vtkActor a2 = vtkActor.New(); a2.SetMapper(dm); a2.SetProperty(pp); pp.SetOpacity(0.5); actor.SetProperty(pp); actors.AddItem(a2); }
static public vtkProp3D genActorByRestriction(CompontData data, vtkProperty pro) { vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); mapper.SetInputConnection(calcRestriction(data)); mapper.ScalarVisibilityOff(); // The actor links the data pipeline to the rendering subsystem vtkActor actor = vtkActor.New(); actor.SetProperty(pro); actor.SetMapper(mapper); return(actor); }
private vtkActor DiskSector(double innerRadius, double radius, double clip1X, double clip1Y, double clip2X, double clip2Y, Color color) { vtkProperty arcColor = vtkProperty.New(); arcColor.SetColor(color.r, color.g, color.b); vtkDiskSource outerDisk = vtkDiskSource.New(); outerDisk.SetCircumferentialResolution(50); outerDisk.SetRadialResolution(50); outerDisk.SetInnerRadius(innerRadius); outerDisk.SetOuterRadius(innerRadius + radius); // Define a clipping plane vtkPlane clipPlane = vtkPlane.New(); clipPlane.SetNormal(clip1X, clip1Y, 0); clipPlane.SetOrigin(0.0, 0.0, 0.0); // Define a clipping plane vtkPlane clipPlane2 = vtkPlane.New(); clipPlane2.SetNormal(clip2X, clip2Y, 0); clipPlane2.SetOrigin(0, 0, 0); vtkClipPolyData clipper = vtkClipPolyData.New(); clipper.SetInputConnection(outerDisk.GetOutputPort()); clipper.SetClipFunction(clipPlane); vtkClipPolyData clipper2 = vtkClipPolyData.New(); clipper2.SetInputConnection(clipper.GetOutputPort()); clipper2.SetClipFunction(clipPlane2); // Visualize vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); mapper.SetInputConnection(clipper2.GetOutputPort()); vtkActor actor = vtkActor.New(); actor.SetMapper(mapper); actor.SetProperty(arcColor); return(actor); }
static public vtkProp3D genActor(List <GaussianCluster> data) { vtkProperty pro = new vtkProperty(); // 默认颜色 pro.SetColor(config.cone_color[0], config.cone_color[1], config.cone_color[2]); pro.SetOpacity(0.4); vtkAppendPolyData polydata = vtkAppendPolyData.New(); for (int i = 1; i < data.Count; i++) { var cluster = data[i]; System.Windows.Forms.MessageBox.Show("cluster.start_radius:" + cluster.start_radius.ToString() + "cluster.distance:" + cluster.distance.ToString() + "cluster.is_foucs:" + cluster.is_foucs.ToString() + "cluster.foucs_radius:" + cluster.foucs_radius.ToString()); vtkTransform transform = vtkTransform.New(); transform.Translate(cluster.coordinate.pos.x, cluster.coordinate.pos.y, cluster.coordinate.pos.z); transform.RotateWXYZ(cluster.coordinate.rotate_theta, cluster.coordinate.rotate_axis.x, cluster.coordinate.rotate_axis.y, cluster.coordinate.rotate_axis.z); vtkTransformPolyDataFilter transFilter = vtkTransformPolyDataFilter.New(); transFilter.SetInputConnection(combiFrustumCone(cluster.start_radius, 1, cluster.angle, true, 0.01)); transFilter.SetTransform(transform); transFilter.Update(); polydata.AddInputConnection(transFilter.GetOutputPort()); } vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); mapper.SetInputConnection(polydata.GetOutputPort()); mapper.ScalarVisibilityOff(); // The actor links the data pipeline to the rendering subsystem vtkActor actor = vtkActor.New(); actor.SetProperty(pro); actor.SetMapper(mapper); return(actor); }
static public vtkProp3D genUserActor(CompontData data, vtkAlgorithmOutput vtkAlgorithmOutput, vtkProperty pro) { vtkTransform transform = vtkTransform.New(); // 用户自定义平移旋转 (先移动后旋转) transform.Translate(data.coor.pos.x, data.coor.pos.y, data.coor.pos.z); transform.RotateWXYZ(data.coor.rotate_theta, data.coor.rotate_axis.x, data.coor.rotate_axis.y, data.coor.rotate_axis.z); vtkTransformPolyDataFilter transFilter = vtkTransformPolyDataFilter.New(); transFilter.SetInputConnection(vtkAlgorithmOutput); transFilter.SetTransform(transform); //use vtkTransform (or maybe vtkLinearTransform) transFilter.Update(); //vtkShrinkPolyData shrink = vtkShrinkPolyData.New(); //shrink.SetInputConnection(transFilter.GetOutputPort()); //shrink.SetShrinkFactor(1); // 改 //vtkSTLWriter writer = vtkSTLWriter.New(); //calPolyData(polyData, 0.01); //writer.SetInputConnection(transFilter.GetOutputPort()); //writer.SetFileName("test.stl"); //writer.Update(); vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); mapper.SetInputConnection(transFilter.GetOutputPort()); mapper.ScalarVisibilityOff(); // The actor links the data pipeline to the rendering subsystem vtkActor actor = vtkActor.New(); actor.SetProperty(pro); actor.SetMapper(mapper); return(actor); }
/// <summary> /// 绘制立长方体的边缘 /// </summary> /// <param name="bgColor">边缘的颜色</param> /// <param name="actors">添加至该对象</param> public void AddContainerEdgeToActorCollection(byte[] bgColor, ref vtkActorCollection actors) { vtkProperty pp = vtkProperty.New(); pp.SetOpacity(0.5); pp.SetColor(bgColor[0], bgColor[1], bgColor[2]); pp.SetLineWidth(5); pp.SetLighting(false); vtkCubeSource cs = vtkCubeSource.New(); cs.SetCenter(sideLen / 2, sideLen / 2, height / 2); cs.SetXLength(sideLen); cs.SetYLength(sideLen); cs.SetZLength(height); #region 采用描点的方式绘制长方体 只需要添加到mapper.SetInput(pd);即可 //vtkPoints points = vtkPoints.New(); //points.InsertNextPoint(0 + offset[0], 0 + offset[1], 0 + offset[2]); //points.InsertNextPoint(sideLen + offset[0], 0 + offset[1], 0 + offset[2]); //points.InsertNextPoint(sideLen + offset[0], sideLen + offset[1], 0 + offset[2]); //points.InsertNextPoint(0 + offset[0], sideLen + offset[1], 0 + offset[2]); //points.InsertNextPoint(0 + offset[0], sideLen + offset[1], height + offset[2]); //points.InsertNextPoint(sideLen + offset[0], sideLen + offset[1], height + offset[2]); //points.InsertNextPoint(sideLen + offset[0], 0 + offset[1], height + offset[2]); //points.InsertNextPoint(0 + offset[0], 0 + offset[1], height + offset[2]); //vtkPolyData pd = vtkPolyData.New(); //vtkLine line = vtkLine.New(); //vtkCellArray cellArr = vtkCellArray.New(); ////描出边框 //for (int i = 0; i < 4; i++) //{ // line.GetPointIds().SetId(0, i); // line.GetPointIds().SetId(1, (i + 1) % 4); // cellArr.InsertNextCell(line); // line.GetPointIds().SetId(0, i + 4); // line.GetPointIds().SetId(1, (i + 1) % 4 + 4); // cellArr.InsertNextCell(line); // line.GetPointIds().SetId(0, i); // line.GetPointIds().SetId(1, 7 - i); // cellArr.InsertNextCell(line); //} //IntPtr iColor = Marshal.AllocHGlobal(bgColor.Length); //Marshal.Copy(bgColor, 0, iColor, bgColor.Length); //vtkUnsignedCharArray colors = vtkUnsignedCharArray.New(); //colors.SetNumberOfComponents(3); //for (int i = 0; i < cellArr.GetNumberOfCells(); i++) //{ // colors.InsertNextTupleValue(iColor); //} //pd.SetPoints(points); //pd.SetLines(cellArr); //pd.GetCellData().SetScalars(colors); //Marshal.FreeHGlobal(iColor); #endregion vtkPolyDataMapper mapper = vtkPolyDataMapper.New(); //mapper.SetInput(pd); mapper.SetInputConnection(cs.GetOutputPort()); vtkActor actor = vtkActor.New(); actor.SetMapper(mapper); actor.SetProperty(pp); actors.AddItem(actor); }