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; }
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); }
public void ClearSelected() { for (int idp = 0; idp < DrawParts.Count; idp++) { Mesher2DDrawPart dp = DrawParts[idp]; dp.IsSelected = false; dp.SelectedElems.Clear(); } }
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); }
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); }