예제 #1
0
        private static void NullPoint()
        {
            vtkPoints points = vtkPoints.New();

            points.InsertNextPoint(1, 1, 1);
            points.InsertNextPoint(2, 2, 2);
            points.InsertNextPoint(3, 3, 3);

            vtkPolyData polydata = vtkPolyData.New();

            polydata.SetPoints(points);

            vtkFloatArray floatArray = vtkFloatArray.New();

            floatArray.SetNumberOfValues(3);
            floatArray.SetNumberOfComponents(1);
            floatArray.SetName("FloatArray");
            for (int i = 0; i < 3; i++)
            {
                floatArray.SetValue(i, 2);
            }
            polydata.GetPointData().AddArray(floatArray);

            vtkIntArray intArray = vtkIntArray.New();

            intArray.SetNumberOfValues(3);
            intArray.SetNumberOfComponents(1);
            intArray.SetName("IntArray");
            for (int i = 0; i < 3; i++)
            {
                intArray.SetValue(i, 2);
            }

            polydata.GetPointData().AddArray(intArray);

            Console.WriteLine("PointIdx   x y z " + "floatArray" + " " + "intArray");
            Console.WriteLine("----------------------------------------");
            for (int i = 0; i < 3; i++)
            {
                double[]      p = polydata.GetPoint(i);
                vtkFloatArray pointsFloatArray = vtkFloatArray.SafeDownCast(polydata.GetPointData().GetArray("FloatArray"));
                vtkIntArray   pointsIntArray   = vtkIntArray.SafeDownCast(polydata.GetPointData().GetArray("IntArray"));
                Console.WriteLine("   " + i + "       " + p[0] + " " + p[1] + " " + p[2] + "    "
                                  + pointsFloatArray.GetValue(i) + "          " + pointsIntArray.GetValue(i));
            }

            polydata.GetPointData().NullPoint(1);
            polydata.Modified();
            Console.WriteLine("");

            for (int i = 0; i < 3; i++)
            {
                double[]      p = polydata.GetPoint(i);
                vtkFloatArray pointsFloatArray = vtkFloatArray.SafeDownCast(polydata.GetPointData().GetArray("FloatArray"));
                vtkIntArray   pointsIntArray   = vtkIntArray.SafeDownCast(polydata.GetPointData().GetArray("IntArray"));
                Console.WriteLine("   " + i + "       " + p[0] + " " + p[1] + " " + p[2] + "    "
                                  + pointsFloatArray.GetValue(i) + "          " + pointsIntArray.GetValue(i));
            }
        }
예제 #2
0
        public static void SetHSectionPoints()
        {
            HZArray = vtkFloatArray.New();
            HZArray.SetName("HZArray");
            HZArray.SetNumberOfComponents(1);

            HArray = vtkFloatArray.New();
            HArray.SetName("HArray");
            HArray.SetNumberOfComponents(1);

            for (var i = 0; i < ImageWidth; ++i)
            {
                HArray.InsertNextTuple1(i);
                HZArray.InsertNextTuple1(PolyData.GetPoint(HSectionNum * ImageWidth + i)[2]);
            }
        }
예제 #3
0
        public static void SetVSectionPoints()
        {
            VArray = vtkFloatArray.New();
            VArray.SetName("VArray");
            VArray.SetNumberOfComponents(1);

            VZArray = vtkFloatArray.New();
            VZArray.SetName("VZArray");
            VZArray.SetNumberOfComponents(1);


            for (var i = 0; i < ImageHeight; i++)
            {
                VArray.InsertNextTuple1(i);
                VZArray.InsertNextTuple1(PolyData.GetPoint(VSectionNum + i * ImageWidth)[2]);
            }
        }
예제 #4
0
        public static void SetVSectionPoints(Rectangle rect)
        {
            VArray = vtkFloatArray.New();
            VArray.SetName("VArray");
            VArray.SetNumberOfComponents(1);

            VZArray = vtkFloatArray.New();
            VZArray.SetName("VZArray");
            VZArray.SetNumberOfComponents(1);

            VSectionNum = rect.Width / 2;

            for (var i = 0; i < rect.Height; i++)
            {
                VArray.InsertNextTuple1(i);
                VZArray.InsertNextTuple1(RectPolyData.GetPoint(VSectionNum + i * rect.Width)[2]);
            }
        }
예제 #5
0
        public static void SetHSectionPoints(Rectangle rect)
        {
            HZArray = vtkFloatArray.New();
            HZArray.SetName("HZArray");
            HZArray.SetNumberOfComponents(1);

            HArray = vtkFloatArray.New();
            HArray.SetName("HArray");
            HArray.SetNumberOfComponents(1);

            HSectionNum = rect.Height / 2;

            for (var i = 0; i < rect.Width; ++i)
            {
                HArray.InsertNextTuple1(i);
                HZArray.InsertNextTuple1(RectPolyData.GetPoint(HSectionNum * rect.Width + i)[2]);
            }
        }
예제 #6
0
        private void WeightedTransformFilter()
        {
            // Use a sphere as a basis of the shape
            vtkSphereSource sphere = vtkSphereSource.New();

            sphere.SetPhiResolution(40);
            sphere.SetThetaResolution(40);
            sphere.Update();

            vtkPolyData sphereData = sphere.GetOutput();

            // Create a data array to hold the weighting coefficients
            vtkFloatArray tfarray = vtkFloatArray.New();
            int           npoints = sphereData.GetNumberOfPoints();

            tfarray.SetNumberOfComponents(2);
            tfarray.SetNumberOfTuples(npoints);

            // Parameterize the sphere along the z axis, and fill the weights
            // with (1.0-a, a) to linearly interpolate across the shape
            IntPtr pPoint = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3);

            double[] point = new double[3];
            for (int i = 0; i < npoints; i++)
            {
                sphereData.GetPoint(i, pPoint);
                Marshal.Copy(pPoint, point, 0, 3);
                double x = point[0];
                double y = point[1];
                double z = point[2];

                double zn  = z + 0.5;
                double zn1 = 1.0 - zn;
                if (zn > 1.0)
                {
                    zn = 1.0;
                }
                if (zn1 < 0.0)
                {
                    zn1 = 0.0;
                }

                tfarray.SetComponent(i, 0, zn1);
                tfarray.SetComponent(i, 1, zn);
            }
            Marshal.FreeHGlobal(pPoint);

            // Create field data to hold the array, and bind it to the sphere
            vtkFieldData fd = vtkFieldData.New();

            tfarray.SetName("weights");
            sphereData.GetPointData().AddArray(tfarray);

            // Use an ordinary transform to stretch the shape
            vtkTransform stretch = vtkTransform.New();

            stretch.Scale(1, 1, 3.2);

            vtkTransformFilter stretchFilter = vtkTransformFilter.New();

            stretchFilter.SetInputConnection(sphereData.GetProducerPort());
            stretchFilter.SetTransform(stretch);

            // Now, for the weighted transform stuff
            vtkWeightedTransformFilter weightedTrans = vtkWeightedTransformFilter.New();

            // Create two transforms to interpolate between
            vtkTransform identity = vtkTransform.New();

            identity.Identity();

            vtkTransform rotated      = vtkTransform.New();
            double       rotatedAngle = 45;

            rotated.RotateX(rotatedAngle);

            weightedTrans.SetNumberOfTransforms(2);
            weightedTrans.SetTransform(identity, 0);
            weightedTrans.SetTransform(rotated, 1);
            // which data array should the filter use ?
            weightedTrans.SetWeightArray("weights");

            weightedTrans.SetInputConnection(stretchFilter.GetOutputPort());

            vtkPolyDataMapper weightedTransMapper = vtkPolyDataMapper.New();

            weightedTransMapper.SetInputConnection(weightedTrans.GetOutputPort());
            vtkActor weightedTransActor = vtkActor.New();

            weightedTransActor.SetMapper(weightedTransMapper);
            weightedTransActor.GetProperty().SetDiffuseColor(0.8, 0.8, 0.1);
            weightedTransActor.GetProperty().SetRepresentationToSurface();

            // get a reference to the renderwindow of our renderWindowControl1
            vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow;
            // renderer
            vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();

            // set background color
            renderer.SetBackground(0.2, 0.3, 0.4);
            // add our actor to the renderer
            renderer.AddActor(weightedTransActor);

            renderer.ResetCamera();
            renderer.GetActiveCamera().Azimuth(90);
            renderer.GetActiveCamera().Dolly(1);
        }
예제 #7
0
파일: Part.cs 프로젝트: ovevans/STAN
        // ============================= DATA COMPRESSION ===================================

        public vtkUnstructuredGrid ExportGrid(Database DB, List <string> Result, int step)
        {
            vtkUnstructuredGrid Output = vtkUnstructuredGrid.New();

            // Update Node Coordinates
            UpdateNode(DB, step);

            // Create Deep Copy of Gird
            Output.SetPoints(Points);

            // Recreate Mesh for Output Grid
            foreach (Element E in DB.ElemLib.Values)
            {
                // ============= HEXA =================
                if (E.Type.Contains("HEX") && E.PID == ID)
                {
                    // Create Hexahedron
                    vtkHexahedron Hex = vtkHexahedron.New();
                    Hex.GetPointIds().SetNumberOfIds(8);

                    // Set Hexa nodes
                    for (int i = 0; i < 8; i++)
                    {
                        Hex.GetPointIds().SetId(i, Nodes[E.NList[i]]);
                    }

                    // Save Element index
                    Output.InsertNextCell(Hex.GetCellType(), Hex.GetPointIds());
                }

                // ============= PENTA =================
                if (E.Type.Contains("PENTA") && E.PID == ID)
                {
                    // Create Wedge
                    vtkWedge Penta = vtkWedge.New();
                    Penta.GetPointIds().SetNumberOfIds(6);

                    // Set Penta nodes
                    for (int i = 0; i < 6; i++)
                    {
                        Penta.GetPointIds().SetId(i, Nodes[E.NList[i]]);
                    }

                    // Save Element index
                    Output.InsertNextCell(Penta.GetCellType(), Penta.GetPointIds());
                }

                // ============= TETRA =================
                if (E.Type.Contains("TET") && E.PID == ID)
                {
                    // Create Tetra
                    vtkTetra Tetra = vtkTetra.New();
                    Tetra.GetPointIds().SetNumberOfIds(4);

                    // Set Tetra nodes
                    for (int i = 0; i < 4; i++)
                    {
                        Tetra.GetPointIds().SetId(i, Nodes[E.NList[i]]);
                    }

                    // Save Element index
                    Output.InsertNextCell(Tetra.GetCellType(), Tetra.GetPointIds());
                }
            }

            foreach (string res in Result)
            {
                foreach (vtkFloatArray array in PointScalar)
                {
                    if (array.GetName() == res + " INC " + step.ToString())
                    {
                        vtkFloatArray ArrayCopy = vtkFloatArray.New();
                        ArrayCopy.DeepCopy(array);
                        ArrayCopy.SetName(res);
                        Output.GetPointData().AddArray(ArrayCopy);
                    }
                }
            }
            Output.Update();

            return(Output);
        }