Beispiel #1
0
 /// <summary>
 /// Delaunay3dクラスの新規インスタンスを初期化し,givenな節点座標と新たに振り直した節点番号をセットする.
 /// </summary>
 /// <param name="p">節点リスト</param>
 public Delaunay3d(List<Node> p)
 {
     given_node = new List<Node>();
     for (int i = 0; i < p.Count; i++)
     {
         given_node.Add(new Node(i, false, p[i].X, p[i].Y, p[i].Z));
     }
     bracket_node = new List<Node>();
     delaunay_elements = new List<Element3D>();
     delaunay_edges = new List<Edge>();
     SetBracketTriangle();
     SerializeContainer = new XmlSerializerContainer4Mesh();
 }
Beispiel #2
0
        /// <summary>
        /// Delaunay2dクラスの新規インスタンスを初期化し,givenな節点座標と新たに振り直した節点番号をセットする.
        /// </summary>
        /// <param name="p">節点リスト</param>
        public Delaunay2d(List<Node> p)
        {
            Complete = false;
            given_node = new List<Node>();
            for (int i = 0; i < p.Count; i++)
            {
                given_node.Add(new Node(i, p[i].OnBoundary, p[i].X, p[i].Y));
            }
            bracket_node = new List<Node>();
            delaunay_elements = new List<DelaunayElement2D>();
            delaunay_edges = new List<Edge>();
            SetBracketTriangle();

            SerializeContainer = new XmlSerializerContainer4Mesh();
        }
Beispiel #3
0
        /// <summary>
        /// Delaunay分割されたメッシュの座標をXMLファイルに出力する.
        /// </summary>
        public void PrintXML()
        {
            SerializeContainer = new XmlSerializerContainer4Mesh(delaunay_elements.Count, 4, delaunay_edges.Count, given_node.Count, 0);
            for (int i = 0; i < delaunay_elements.Count; i++)
            {
                SerializeContainer.ElemPart.Elements[i].ID = i;
                SerializeContainer.ElemPart.Elements[i].ElementCode = "Tria03";
                for (int j = 0; j < 4; j++)
                {
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].InternalID = j;
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].ID = delaunay_elements[i].GetPoint(j).ID;

                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[0].Sou = "mm";
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[0].CoordinateAxis = "x";
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[0].Value = delaunay_elements[i].GetPoint(j).X;
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[1].Sou = "mm";
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[1].CoordinateAxis = "y";
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[1].Value = delaunay_elements[i].GetPoint(j).Y;
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[2].Sou = "mm";
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[2].CoordinateAxis = "z";
                    SerializeContainer.ElemPart.Elements[i].Nodes[j].Coordinates[2].Value = delaunay_elements[i].GetPoint(j).Z;
                }
                SerializeContainer.ElemPart.Elements[i].MaterialName = "Alminum";
                SerializeContainer.ElemPart.Elements[i].Density = 2700;
                SerializeContainer.ElemPart.Elements[i].Young = 200000;
                SerializeContainer.ElemPart.Elements[i].Poisson = 0.5;
            }
            for (int i = 0; i < given_node.Count; i++)
            {
                SerializeContainer.NodePart.Nodes[i].ID = given_node[i].ID;

                SerializeContainer.NodePart.Nodes[i].Coordinates[0].Sou = "mm";
                SerializeContainer.NodePart.Nodes[i].Coordinates[0].CoordinateAxis = "x";
                SerializeContainer.NodePart.Nodes[i].Coordinates[0].Value = given_node[i].X;
                SerializeContainer.NodePart.Nodes[i].Coordinates[1].Sou = "mm";
                SerializeContainer.NodePart.Nodes[i].Coordinates[1].CoordinateAxis = "y";
                SerializeContainer.NodePart.Nodes[i].Coordinates[1].Value = given_node[i].Y;
                SerializeContainer.NodePart.Nodes[i].Coordinates[2].Sou = "mm";
                SerializeContainer.NodePart.Nodes[i].Coordinates[2].CoordinateAxis = "z";
                SerializeContainer.NodePart.Nodes[i].Coordinates[2].Value = given_node[i].Z;
            }
            for (int i = 0; i < delaunay_edges.Count; i++)
            {
                SerializeContainer.EdgePart.Edges[i].ID = delaunay_edges[i].ID;
                SerializeContainer.EdgePart.Edges[i].NodeID[0] = delaunay_edges[i].StartNodeId;
                SerializeContainer.EdgePart.Edges[i].NodeID[1] = delaunay_edges[i].EndNodeId;
            }

            var serializer = new XmlSerializer(typeof(MeshContainer.XmlSerializerContainer4Mesh));

            var fs = new FileStream("mesh_"+DateTime.Now.ToString("yyyyMMddHHmmssfff")+".xml", FileMode.Create);
            var setting = new XmlWriterSettings();
            setting.Indent = true;
            setting.IndentChars = "  ";
            setting.OmitXmlDeclaration = false;

            serializer.Serialize(fs, SerializeContainer);
            fs.Close();
        }
Beispiel #4
0
        public void LaplacianSmoothing()
        {
            List<Node> NewNode = new List<Node>();

            for (int i = 0; i < given_node.Count; ++i)
            {
                if (!given_node[i].OnBoundary)
                {
                    double x_sum=0;
                    double y_sum=0;
                    List<DelaunayElement2D> around_ele = new List<DelaunayElement2D>();
                    around_ele = delaunay_elements.FindAll(ls => ls.Nodes.Exists(ls2 => ls2.ID == given_node[i].ID));
                    for (int j = 0; j < around_ele.Count; ++j)
                    {
                        for(int k=0;k<3;++k)
                        {
                            if (around_ele[j].Nodes[k].ID != given_node[i].ID)
                            {
                                x_sum += around_ele[j].Nodes[k].X;
                                y_sum += around_ele[j].Nodes[k].Y;
                            }
                        }
                    }
                    NewNode.Add(new Node(given_node[i].ID,false,x_sum/2.0/around_ele.Count,y_sum/2.0/around_ele.Count));
                }
                else
                {
                    NewNode.Add(given_node[i]);
                }
            }

            Complete = false;
            given_node.Clear();
            for (int i = 0; i < NewNode.Count; i++)
            {
                given_node.Add(NewNode[i]);
            }
            bracket_node = new List<Node>();
            delaunay_elements = new List<DelaunayElement2D>();
            delaunay_edges = new List<Edge>();
            SetBracketTriangle();

            SerializeContainer = new XmlSerializerContainer4Mesh();
        }