Example #1
0
 public void Update(FEWorld world)
 {
     for (int idp = 0; idp < DrawParts.Count; idp++)
     {
         VectorFieldDrawPart dp = DrawParts[idp];
         dp.Update(ValueId, ValueDt, Type, world);
     }
 }
Example #2
0
        public void Draw()
        {
            bool isTexture = GL.IsEnabled(EnableCap.Texture2D);

            //GL.Enable(EnableCap.DepthTest);
            GL.Disable(EnableCap.Texture2D);

            int minLayer;
            int maxLayer;
            {
                if (DrawParts.Count > 0)
                {
                    minLayer = DrawParts[0].Layer;
                    maxLayer = minLayer;
                }
                else
                {
                    minLayer = 0; maxLayer = 0;
                }
                for (int idp = 1; idp < DrawParts.Count; idp++)
                {
                    int layer = DrawParts[idp].Layer;
                    minLayer = (layer < minLayer) ? layer : minLayer;
                    maxLayer = (layer > maxLayer) ? layer : maxLayer;
                }
            }
            double layerHeight = 1.0 / (maxLayer - minLayer + 1);

            GL.LineWidth(1);
            GL.Begin(PrimitiveType.Lines);
            for (int idp = 0; idp < DrawParts.Count; idp++)
            {
                VectorFieldDrawPart dp = DrawParts[idp];
                int    layer           = dp.Layer;
                double height          = (layer - minLayer) * layerHeight;
                GL.Translate(0, 0, +height);
                dp.DrawElements();
                GL.Translate(0, 0, -height);
            }
            GL.End();

            if (isTexture)
            {
                GL.Enable(EnableCap.Texture2D);
            }
        }
Example #3
0
 public VectorFieldDrawPart(VectorFieldDrawPart src)
 {
     MeshId    = src.MeshId;
     Type      = src.Type;
     Layer     = src.Layer;
     ElemCount = src.ElemCount;
     ValueDof  = src.ValueDof;
     Coords    = null;
     if (src.Coords != null)
     {
         Coords = new double[src.Coords.Length];
         src.Coords.CopyTo(Coords, 0);
     }
     Values = null;
     if (src.Values != null)
     {
         Values = new double[src.Values.Length];
         src.Values.CopyTo(Values, 0);
     }
     DrawerType = src.DrawerType;
 }
Example #4
0
        private void Set(uint valueId, FieldDerivativeType valueDt, FEWorld world)
        {
            System.Diagnostics.Debug.Assert(world.IsFieldValueId(valueId));
            ValueId = valueId;
            var mesh = world.Mesh;

            uint dim = world.Dimension;
            {
                if (dim == 2)
                {
                    SutableRotMode = RotMode.RotMode2D;
                }
                else if (dim == 3)
                {
                    SutableRotMode = RotMode.RotMode3D;
                }
            }
            FieldValue fv = world.GetFieldValue(valueId);

            if (fv.Type == FieldValueType.Vector2 || fv.Type == FieldValueType.Vector3)
            {
                Type = VectorFieldDrawerType.Vector;
            }
            else if (fv.Type == FieldValueType.SymmetricTensor2)
            {
                Type = VectorFieldDrawerType.SymmetricTensor2;
            }

            {
                DrawParts.Clear();
                IList <uint> meshIds = mesh.GetIds();
                foreach (uint meshId in meshIds)
                {
                    VectorFieldDrawPart dp = new VectorFieldDrawPart(meshId, world);
                    DrawParts.Add(dp);
                }
            }

            Update(world);
        }