Exemplo n.º 1
0
void Application::delete_data()
{
    int i;

    if (data != NULL)
    {
        for (i = 0; i < nused; i++)
            delete_chain(data[i].next);
        delete[] data;
        data = NULL;
    }
    if (zone != NULL)
    {
        delete_chain(zone);
        zone = NULL;
    }
    if (isused != NULL)
    {
        delete[] isused;
        isused = NULL;
    }
    for (i = 0; i <= nVars; i++)
        delete[] VarNames[i];
    init_Vars();
}
Exemplo n.º 2
0
void AVIIndex::clear() {
	delete_chain();
	delete[] index;
	delete[] index2;
	delete[] index3;
	index = NULL;
	index2 = NULL;
	index3 = NULL;
	total_ents = 0;
}
Exemplo n.º 3
0
void AVIIndexChain::put(AVIIndexEntry3 *avie3tbl, __int64 offset) {
	AVIIndexChainNode *aicn = head;

	while(aicn) {
		aicn->put(avie3tbl, offset);
		aicn=aicn->next;
	}

	delete_chain();
}
Exemplo n.º 4
0
void AVIIndexChain::put(AVIIndexEntry2 *avie2tbl) {
	AVIIndexChainNode *aicn = head;

	while(aicn) {
		aicn->put(avie2tbl);
		aicn=aicn->next;
	}

	delete_chain();
}
Exemplo n.º 5
0
void AVIIndexChain::put(AVIINDEXENTRY *avietbl) {
	AVIIndexChainNode *aicn = head;

	while(aicn) {
		aicn->put(avietbl);
		aicn=aicn->next;
	}

	delete_chain();
}
Exemplo n.º 6
0
AVIIndexChain::~AVIIndexChain() {
	delete_chain();
}
Exemplo n.º 7
0
//merging of 2 convex hulls
std::vector<Point2D> merge(std::vector<Point2D> set1, std::vector<Point2D> set2)
{

    Point2Df p;
    std::vector<Point2D> sum;
    int is_line1 = is_line(set1);
    int is_line2 = is_line(set2);

    if(!is_line1)
    {
        for(int i = 0; i < set1.size() - 2; i++)
        {
            if(is_left(set1[i], set1[i + 1], set1[i + 2]) != 0)
            {
                p = centroid(set1[i], set1[i + 1], set1[i + 2]);
                break;
            }
        }
    }
    else if(!is_line2)
    {
        for(int i = 0; i < set2.size() - 2; i++)
        {
            if(is_left(set2[i], set2[i + 1], set2[i + 2]) != 0)
            {
                p = centroid(set2[i], set2[i + 1], set2[i + 2]);
                break;
            }
        }
    }

    if(!is_line1 && !is_line2)// 2 polygons
    {
        if(in_polygon(set2, p) != 0)
        {
            sum = merge_polygons(set1, set2, p);
            return graham_scan(sum);

        }
        else
        {
            std::vector<Point2D> clean_set2;

            clean_set2 = delete_chain(set2, p);
            sum = merge_polygons(set1, clean_set2, p);

            return graham_scan(sum);
        }
    }
    else if (!is_line1 && is_line2)//polygon with centroid p and line
    {

        std::vector<Point2D> clean_set2;
       /*
        clean_set2 = delete_chain(set2, p);
        sum = merge_polygons(set1, clean_set2, p);
        */


        if(angle_compare(p, (Point2Df)set2[0], (Point2Df)set2[set2.size() - 1]))
        {
            clean_set2.push_back(set2[0]);
            clean_set2.push_back(set2[set2.size() - 1]);
        }
        else
        {
            clean_set2.push_back(set2[set2.size() - 1]);
            clean_set2.push_back(set2[0]);
        }

        sum = merge_polygons(set1, clean_set2, p);

        return graham_scan(sum);
    }
    else if(is_line1 && !is_line2)
    {
        std::vector<Point2D> clean_set1;
    /*
        clean_set1 = delete_chain(set1, p);
        sum = merge_polygons(clean_set1, set2, p);
    */
        if(angle_compare(p, (Point2Df)set1[0], (Point2Df)set1[set1.size() - 1]))
        {
            clean_set1.push_back(set1[0]);
            clean_set1.push_back(set1[set1.size() - 1]);
        }
        else
        {
            clean_set1.push_back(set1[set1.size() - 1]);
            clean_set1.push_back(set1[0]);
        }

        sum = merge_polygons(clean_set1, set2, p);
        return graham_scan(sum);

    }
    else // if(is_line1 && is_line2)
    {
        std::vector<Point2D> clean_set1;
        clean_set1.push_back(set1[0]);
        clean_set1.push_back(set1[set1.size() - 1]);
        clean_set1.push_back(set2[0]);
        clean_set1.push_back(set2[set2.size() - 1]);
        return get_hull(clean_set1);
    }
}