Beispiel #1
0
 public Mesher2DDrawPart(Mesher2DDrawPart src)
 {
     IsSelected    = src.IsSelected;
     IsShown       = src.IsShown;
     SelectedElems = new List <uint>(src.SelectedElems);
     MeshId        = src.MeshId;
     CadId         = src.CadId;
     for (int i = 0; i < 3; i++)
     {
         Color[i] = src.Color[i];
     }
     LineWidth  = src.LineWidth;
     ElemCount  = src.ElemCount;
     ElemIndexs = null;
     if (src.ElemIndexs != null)
     {
         ElemIndexs = new int[src.EdgeIndexs.Length];
         src.ElemIndexs.CopyTo(ElemIndexs, 0);
     }
     EdgeCount  = src.EdgeCount;
     EdgeIndexs = null;
     if (src.EdgeIndexs != null)
     {
         EdgeIndexs = new int[src.EdgeIndexs.Length];
         src.EdgeIndexs.CopyTo(EdgeIndexs, 0);
     }
     Height = src.Height;
     Type   = src.Type;
 }
Beispiel #2
0
        public void DrawSelection(uint iDraw)
        {
            uint nDim = VertexArray.Dimension;

            // モデルの描画
            GL.EnableClientState(ArrayCap.VertexArray);

            GL.VertexPointer((int)nDim, VertexPointerType.Double, 0, VertexArray.VertexCoordArray);

            GL.PushName(iDraw);
            for (int idp = 0; idp < DrawParts.Count; idp++)
            {
                Mesher2DDrawPart dp     = DrawParts[idp];
                double           height = dp.Height;

                GL.PushName(idp);
                GL.Translate(0, 0, +height);
                dp.DrawElementsSelection();
                GL.Translate(0, 0, -height);
                GL.PopName();
            }
            GL.PopName();

            GL.DisableClientState(ArrayCap.VertexArray);
        }
Beispiel #3
0
 public void ClearSelected()
 {
     for (int idp = 0; idp < DrawParts.Count; idp++)
     {
         Mesher2DDrawPart dp = DrawParts[idp];
         dp.IsSelected = false;
         dp.SelectedElems.Clear();
     }
 }
Beispiel #4
0
        public void Draw()
        {
            // ライティングの指定
            GL.Disable(EnableCap.Lighting);
            // 色の指定
            GL.Color3(0.8, 0.8, 0.8);

            // 片面かどうかの指定
            GL.Enable(EnableCap.CullFace);

            GL.CullFace(CullFaceMode.Back);
            //GL.Disable(EnableCap.CullFace);
            GL.Enable(EnableCap.DepthTest);
            //GL.Disable(EnableCap.DepthTest);

            uint nDim = VertexArray.Dimension;

            // 頂点配列の設定
            GL.EnableClientState(ArrayCap.VertexArray);
            GL.VertexPointer((int)nDim, VertexPointerType.Double, 0, VertexArray.VertexCoordArray);

            for (int idp = 0; idp < DrawParts.Count; idp++)
            {
                Mesher2DDrawPart dp = DrawParts[idp];
                if (!IsDrawFace && (dp.GetElemDim() == 2))
                {
                    continue;
                }
                double height = dp.Height;

                GL.Translate(0, 0, +height);
                dp.DrawElements();
                GL.Translate(0, 0, -height);
            }

            GL.DisableClientState(ArrayCap.VertexArray);
        }
Beispiel #5
0
        private bool Set(Mesher2D mesher)
        {
            SutableRotMode = RotMode.RotMode2D; // DrawMode 1 : 2D

            int layerMin = 0;
            int layerMax = 0;
            {
                bool isInited = false;
                IList <MeshTriArray2D> triArrays = mesher.GetTriArrays();
                for (int itri = 0; itri < triArrays.Count; itri++)
                {
                    int layer = triArrays[itri].Layer;
                    if (isInited)
                    {
                        layerMin = (layer < layerMin) ? layer : layerMin;
                        layerMax = (layer > layerMax) ? layer : layerMax;
                    }
                    else
                    {
                        layerMin = layer;
                        layerMax = layer;
                        isInited = true;
                    }
                }
                IList <MeshQuadArray2D> quadArrays = mesher.GetQuadArrays();
                for (int iquad = 0; iquad < quadArrays.Count; iquad++)
                {
                    int layer = quadArrays[iquad].Layer;
                    if (isInited)
                    {
                        layerMin = (layer < layerMin) ? layer : layerMin;
                        layerMax = (layer > layerMax) ? layer : layerMax;
                    }
                    else
                    {
                        layerMin = layer;
                        layerMax = layer;
                        isInited = true;
                    }
                }
            }
            double layerHeight = 1.0 / (layerMax - layerMin + 1);

            {
                // 三角形要素をセット
                IList <MeshTriArray2D> triArrays = mesher.GetTriArrays();
                for (int itri = 0; itri < triArrays.Count; itri++)
                {
                    Mesher2DDrawPart dp = new Mesher2DDrawPart(triArrays[itri]);
                    int layer           = triArrays[itri].Layer;
                    dp.Height = (layer - layerMin) * layerHeight;

                    DrawParts.Add(dp);
                }
            }

            {
                // 四角形要素をセット
                IList <MeshQuadArray2D> quadArrays = mesher.GetQuadArrays();
                for (int iquad = 0; iquad < quadArrays.Count; iquad++)
                {
                    Mesher2DDrawPart dp = new Mesher2DDrawPart(quadArrays[iquad]);
                    int layer           = quadArrays[iquad].Layer;
                    dp.Height = (layer - layerMin) * layerHeight;

                    DrawParts.Add(dp);
                }
            }

            {
                // 線要素をセット
                IList <MeshBarArray> barArrays = mesher.GetBarArrays();
                for (int ibar = 0; ibar < barArrays.Count; ibar++)
                {
                    double height = 0;
                    {
                        int layer = barArrays[ibar].Layer;
                        height += (layer - layerMin + 0.01) * layerHeight;
                    }
                    Mesher2DDrawPart dp = new Mesher2DDrawPart(barArrays[ibar]);
                    dp.Height = height;

                    DrawParts.Add(dp);
                }
            }

            {
                // 頂点をセット
                IList <MeshVertex> vertexs = mesher.GetVertexs();
                for (int iver = 0; iver < vertexs.Count; iver++)
                {
                    double height = 0;

                    /*
                     * {
                     *  int layer = vertexs[iver].Layer;
                     *  height += (layer - layerMin + 0.1) * layerHeight;
                     * }
                     */
                    height = 0.2;
                    Mesher2DDrawPart dp = new Mesher2DDrawPart(vertexs[iver]);
                    dp.Height = height;

                    DrawParts.Add(dp);
                }
            }

            {
                // 座標をセット
                IList <OpenTK.Vector2d> vec2Ds = mesher.GetVectors();
                uint nDim = 2;
                uint nVec = (uint)vec2Ds.Count;
                VertexArray.SetSize(nVec, nDim);
                for (int ivec = 0; ivec < nVec; ivec++)
                {
                    VertexArray.VertexCoordArray[ivec * nDim]     = vec2Ds[ivec].X;
                    VertexArray.VertexCoordArray[ivec * nDim + 1] = vec2Ds[ivec].Y;
                }
            }
            return(true);
        }