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);
                                // #################################################################
            }
            private void delete_from_local_list(edge_store e, int t1_id, int t2_id)
            {
                Form1.planar_object_store.edge2d temp_edge, temp_edge_sym;
                int rem_index;

                // edge e
                // !! removal on main list here
                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);
                temp_edge_sym = new Form1.planar_object_store.edge2d(e.edge_id, e.end_pt.get_parent_data_type, e.start_pt.get_parent_data_type);

                rem_index = local_output_edges.FindIndex(obj => obj.Equals(temp_edge) || obj.Equals(temp_edge_sym));

                if (rem_index != -1)
                {
                    local_output_edges.RemoveAt(rem_index); // !! Deletion on main list here

                    if (t1_id != -1 || t2_id != -1)         // Check whether triangle need to be removed
                    {
                        if (t1_id < t2_id)                  // swap to remove in order
                        {
                            int temp = t1_id;
                            t1_id = t2_id;
                            t2_id = temp;
                        }

                        if (t1_id != -1)
                        {
                            int t1_index = local_output_triangle.FindIndex(obj => obj.face_id == triangle_list[t1_id].tri_id);
                            local_output_triangle.RemoveAt(t1_index);
                        }

                        if (t2_id != -1)
                        {
                            int t2_index = local_output_triangle.FindIndex(obj => obj.face_id == triangle_list[t2_id].tri_id);
                            local_output_triangle.RemoveAt(t2_index);
                        }
                    }


                    // #################################################################
                    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 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);
                                // #################################################################
            }