#include "stt_class.h"

int SttGenerator::GetControlTopography(char* filename)
{
    double one_topo;
	stringstream temp_ss;
	string temp_str, cnst_str;
	Vertex temp_vert;
	ifstream infile;

	if (!strcmp(filename,"NULL")) return 0;

	if (OpenInfile(infile,filename)) return -1;
	else{
        while (getline(infile,temp_str)){
            if (*(temp_str.begin()) == '#' || temp_str == "") continue;
            else{
                temp_ss = Str2Ss(temp_str);

                temp_ss >> cnst_str;
                if (cnst_str == "STD")
                {
                    control_topo_.cnst_type = STD;
                    temp_ss >> control_topo_.max_depth >> control_topo_.minimal_resolution >> control_topo_.physic_group >> topo_thres_;
                }
                else if (cnst_str == "MAX")
                {
                    control_topo_.cnst_type = MAX;
                    temp_ss >> control_topo_.max_depth >> control_topo_.minimal_resolution >> control_topo_.physic_group;
                }
                else throw std::runtime_error("[stt::get_control_topography] Invalid topography constrain type.");
				
				if (control_topo_.max_depth <= 0) control_topo_.max_depth = 1e+3; //这里直接给一个很大的深度值 节点深度一定小于这个值
				if (control_topo_.minimal_resolution <= 0) control_topo_.minimal_resolution = -1.0; //这里直接给成-1
                break;
            }
        }

		while (getline(infile,temp_str)){
			if (*(temp_str.begin()) == '#' || temp_str == "") continue;
			else{
                getline(infile,temp_str);
                temp_ss = Str2Ss(temp_str);
                if (temp_ss >> temp_vert.posis.lon >> temp_vert.posis.lat >> one_topo){
                    temp_vert.posis.rad = DefaultR;
                    temp_vert.id = control_topo_.vert.size();
                    temp_vert.posic = Sphere2Cartesian(temp_vert.posis);
                    control_topo_.vert.push_back(temp_vert);
                    control_topo_.topo.push_back(one_topo);
                }
			}
		}

        control_topo_.id = 0;
		infile.close();
	}
	return 0;
}