public int other_triangle_id(triangle_store the_triangle)
                {
                    // Function to return the other triangle associated with this edge
                    if (this._left_triangle != null)
                    {
                        if (the_triangle.Equals(this._left_triangle) == true)
                        {
                            if (this._right_triangle == null)
                            {
                                return(-1);
                            }
                            return(this._right_triangle.tri_id);
                        }
                    }

                    if (this._right_triangle != null)
                    {
                        if (the_triangle.Equals(this._right_triangle) == true)
                        {
                            if (this._left_triangle == null)
                            {
                                return(-1);
                            }
                            return(this._left_triangle.tri_id);
                        }
                    }

                    return(-1);
                }
            private void add_to_local_list(edge_store e, triangle_store t)
            {
                //____________________________________________________________________________________________________________________________________________________________________
                // !! Addition on main list here
                //Form1.planar_object_store.point2d spt = local_input_points.Find(obj => obj.Equals(new Form1.planar_object_store.point2d(e.start_pt.pt_id, e.start_pt.x, e.start_pt.y)));
                //Form1.planar_object_store.point2d ept = local_input_points.Find(obj => obj.Equals(new Form1.planar_object_store.point2d(-1, e.end_pt.x, e.end_pt.y)));
                Form1.planar_object_store.edge2d temp_edge = new Form1.planar_object_store.edge2d(e.edge_id, e.start_pt.get_parent_data_type, e.end_pt.get_parent_data_type);
                local_output_edges.Add(temp_edge);

                if (t != null)
                {
                    Form1.planar_object_store.face2d temp_face = new Form1.planar_object_store.face2d(t.tri_id, t.p1.get_parent_data_type, t.p2.get_parent_data_type, t.p3.get_parent_data_type);
                    local_output_triangle.Add(temp_face);
                }

                                // #################################################################
                                Form1.planar_object_store.instance_tracker temp_edge_tracker = new Form1.planar_object_store.instance_tracker();

                temp_edge_tracker.edge_list = new List <Form1.planar_object_store.edge2d>();
                temp_edge_tracker.edge_list.AddRange(local_output_edges);
                temp_edge_tracker.face_list = new List <Form1.planar_object_store.face2d>();
                temp_edge_tracker.face_list.AddRange(local_output_triangle);
                local_history_tracker.Add(temp_edge_tracker);
                                // #################################################################
            }
 public bool Equals(triangle_store the_triangle)
 {
     // find the triangle equals
     if (this.contains_edge(the_triangle.e1) == true &&
         this.contains_edge(the_triangle.e2) == true &&
         this.contains_edge(the_triangle.e3) == true)
     {
         return(true);
     }
     return(false);
 }
                public edge_store(int i_edge_id, point_store i_start_pt, point_store i_end_pt)
                {
                    // Constructor
                    // set id
                    this._edge_id = i_edge_id;
                    // set start and end pt
                    this._start_pt = i_start_pt;
                    this._end_pt   = i_end_pt;

                    // set triangles to null
                    this._left_triangle  = null;
                    this._right_triangle = null;
                }
 public void remove_triangle(triangle_store the_triangle)
 {
     // check whether the input triangle has this edge
     if (the_triangle.contains_edge(this) == true)
     {
         if (rightof(the_triangle.mid_pt, this) == true)
         {
             // Remove the right triangle
             this._right_triangle = null;
         }
         else
         {
             // Remove the left triangle
             this._left_triangle = null;
         }
     }
 }
            private void add_to_local_trianlge_list(triangle_store t)
            {
                //____________________________________________________________________________________________________________________________________________________________________
                // !! Addition on main list here
                Form1.planar_object_store.face2d temp_face = new Form1.planar_object_store.face2d(t.tri_id, t.pt1.get_parent_data_type, t.pt2.get_parent_data_type, t.pt3.get_parent_data_type);
                local_output_triangle.Add(temp_face);


                // #################################################################
                Form1.planar_object_store.instance_tracker temp_edge_tracker = new Form1.planar_object_store.instance_tracker();
                temp_edge_tracker.edge_list = new List <Form1.planar_object_store.edge2d>();
                temp_edge_tracker.edge_list.AddRange(local_output_edges);
                temp_edge_tracker.face_list = new List <Form1.planar_object_store.face2d>();
                temp_edge_tracker.face_list.AddRange(local_output_triangle);
                local_history_tracker.Add(temp_edge_tracker);
                                // #################################################################
            }
            private void remove_from_local_trianlge_list(triangle_store t)
            {
                //____________________________________________________________________________________________________________________________________________________________________
                // !! Addition on main list here
                Form1.planar_object_store.face2d temp_face = new Form1.planar_object_store.face2d(t.tri_id, t.pt1.get_parent_data_type, t.pt2.get_parent_data_type, t.pt3.get_parent_data_type);
                int temp_id = local_output_triangle.FindLastIndex(obj => obj.face_id == t.tri_id);

                local_output_triangle.RemoveAt(temp_id);
                //local_output_triangle.Remove(temp_face);


                // #################################################################
                Form1.planar_object_store.instance_tracker temp_edge_tracker = new Form1.planar_object_store.instance_tracker();
                temp_edge_tracker.edge_list = new List <Form1.planar_object_store.edge2d>();
                temp_edge_tracker.edge_list.AddRange(local_output_edges);
                temp_edge_tracker.face_list = new List <Form1.planar_object_store.face2d>();
                temp_edge_tracker.face_list.AddRange(local_output_triangle);
                local_history_tracker.Add(temp_edge_tracker);
                                // #################################################################
            }