g_form_fill(initialize):-
	curr_zone(_Zone_number),!,
	doors_focus(off), 
	load_z_name(_Zone_number),
	load_file_name(_Zone_number),
	load_zone_or_x(_Zone_number),
	load_zone_or_y(_Zone_number),
	load_zone_or_z(_Zone_number),
	load_geometry_type(_Zone_number),
	load_orientation(_Zone_number).
	
geometry_type(rec):-
	curr_zone(_Zone_number),
	asserta(geom_type(_Zone_number,rec)),			
	uset(geom_type,_Zone_number,rec),			
	unask_usr(number_vertex),
	unask_usr(number_surfaces),
	unask_usr(vertex_reg_focus),
	unask_usr(vertex_gen_focus),
	unask_usr(surface_focus),
	unask_usr(ceiling_height),
	unask_usr(number_walls),
	load_zone_length(_Zone_number),
	load_zone_width(_Zone_number),
	load_zone_height(_Zone_number).

geometry_type(reg):-			
	curr_zone(_Zone_number),
	asserta(geom_type(_Zone_number,reg)),			
	uset(geom_type,_Zone_number,reg),			
	unask_usr(zone_length),
	unask_usr(zone_width),
	unask_usr(zone_height),
	unask_usr(number_vertex),
	unask_usr(number_surfaces),
	unask_usr(vertex_gen_focus),
	ask_usr(vertex_reg_focus, off),
	ask_usr(surface_focus, off),
	load_ceiling_ht(_Zone_number),
	load_nu_walls(_Zone_number).


geometry_type(gen):-			
	curr_zone(_Zone_number),
	asserta(geom_type(_Zone_number,gen)),			
	uset(geom_type,_Zone_number,gen),			
	unask_usr(zone_length),
	unask_usr(zone_width),
	unask_usr(zone_height),
	unask_usr(ceiling_height),
	unask_usr(number_walls),
	unask_usr(vertex_reg_focus),
	ask_usr(vertex_gen_focus, off),
	ask_usr(surface_focus, off),
	load_nu_vertex(_Zone_number),
	load_nu_surfaces(_Zone_number).

load_geometry_type(_Zone_number):-
	geom_type(_Zone_number,_Gtype),!,
	tell_usr(geometry_type, _Gtype),
	geometry_type(_Gtype);
	tell_usr(geometry_type, rec),
	geometry_type(rec).

vertex_gen_focus(on) :-
	tell_usr(windows_focus,off),
	tell_usr(doors_focus,off),
	tell_usr(surface_focus,off),
	focus_concept(g_form_fill, vertex_list_3d),
	ask_usr(vertex_hlp),
	vertex_list_3d(initialize).


vertex_reg_focus(on) :-
	tell_usr(windows_focus,off),
	tell_usr(doors_focus,off),
	tell_usr(surface_focus,off),
	focus_concept(g_form_fill, vertex_list_2d),
	ask_usr(vertex_hlp),
	vertex_list_2d(initialize).


surface_focus(on) :-
	tell_usr(windows_focus,off),
	tell_usr(doors_focus,off),
	tell_usr(vertex_reg_focus,off),
	tell_usr(vertex_gen_focus,off),
	focus_concept(g_form_fill, surfaces),!,
	surfaces(initialize).

surface_focus(off) :-
	defocus_concept(g_form_fill).

vertex_reg_focus(off) :-
	unask_usr(vertex_hlp),
	defocus_concept(g_form_fill).

vertex_gen_focus(off) :-
	unask_usr(vertex_hlp),
	defocus_concept(g_form_fill).

windows_focus(on) :-
	curr_zone(_Zone_number),!,
	tell_usr(doors_focus,off),
	tell_usr(vertex_gen_focus,off),
	tell_usr(vertex_reg_focus,off),
	tell_usr(surface_focus,off),
	vertex_gen_focus(off),
	vertex_reg_focus(off),
	focus_concept(g_form_fill, windows),
	windows(initialize).

windows_focus(off) :-
	defocus_concept(g_form_fill).


doors_focus(on) :-
	tell_usr(windows_focus,off),
	tell_usr(vertex_gen_focus,off),
	tell_usr(vertex_reg_focus,off),
	tell_usr(surface_focus,off),
	vertex_gen_focus(off),
	vertex_reg_focus(off),
	curr_zone(_Zone_number),
	focus_concept(g_form_fill, doors),
	doors(initialize).

doors_focus(off) :-
	defocus_concept(g_form_fill).

zone_name(_Zone_name) :-
	curr_zone(_Zone_number),
	asserta(z_name(_Zone_number,_Zone_name)),
	uset(z_name,_Zone_number,_Zone_name).

load_z_name(_Zone_number):-
	z_name(_Zone_number,_Zname),!,
	tell_usr(zone_name, _Zname);
	tell_usr(zone_name, ' ').

geom_file_name(_Geom_file_name) :-
	curr_zone(_Zone_number),
	asserta(geometry_file(_Zone_number,_Geom_file_name)),
	uset(geometry_file,_Zone_number,_Geom_file_name).

load_file_name(_Zone_number) :-
	geometry_file(_Zone_number,_Geom_file_name),
	tell_usr(geom_file_name, _Geom_file_name);
	tell_usr(geom_file_name, ' ').

zone_origin_x(_X_orig) :-
	curr_zone(_Zone_number),
	asserta(x_origin(_Zone_number,_X_orig)),
	uset(x_origin,_Zone_number,_X_orig).

load_zone_or_x(_Zone_number) :-
	x_origin(_Zone_number,_X_orig),
	tell_usr(zone_origin_x,_X_orig);
	tell_usr(zone_origin_x,0),
	uset(x_origin,_Zone_number,0).


zone_origin_y(_Y_orig) :-
	curr_zone(_Zone_number),
	asserta(y_origin(_Zone_number,_Y_orig)),
	uset(y_origin,_Zone_number,_Y_orig).

load_zone_or_y(_Zone_number) :-
	y_origin(_Zone_number,_Y_orig),
	tell_usr(zone_origin_y,_Y_orig);
	tell_usr(zone_origin_y,0),
	uset(y_origin,_Zone_number,0).


zone_origin_z(_Z_orig) :-
	curr_zone(_Zone_number),
	asserta(z_origin(_Zone_number,_Z_orig)),
	uset(z_origin,_Zone_number,_Z_orig).

load_zone_or_z(_Zone_number) :-
	z_origin(_Zone_number,_Z_orig),
	tell_usr(zone_origin_z,_Z_orig);
	tell_usr(zone_origin_z, 0),
	uset(z_origin,_Zone_number,0).


zone_orientation(_Zone_orient) :-
	curr_zone(_Zone_number),
	asserta(z_orientation(_Zone_number,_Zone_orient)),
	uset(z_orientation,_Zone_number,_Zone_orient).

load_orientation(_Zone_number) :-
	z_orientation(_Zone_number,_Zone_orient),
	tell_usr(zone_orientation,_Zone_orient);
	tell_usr(zone_orientation, 0),
	uset(z_orientation,_Zone_number,0).


%%%%%%%%%%%%%%%%  REC  %%%%%%%%%%%%%%%%
zone_length(_Zone_length) :-
	curr_zone(_Zone_number),
	asserta(z_length(_Zone_number,_Zone_length)),
	uset(z_length,_Zone_number,_Zone_length).

load_zone_length(_Zone_number) :-
	z_length(_Zone_number,_Zone_length),
	ask_usr(zone_length,_Zone_length);
	ask_usr(zone_length, 0).

zone_height(_Zone_height) :-
	curr_zone(_Zone_number),
	asserta(z_height(_Zone_number,_Zone_height)),
	uset(z_height,_Zone_number,_Zone_height).

load_zone_height(_Zone_number) :-
	z_height(_Zone_number,_Zone_height),
	ask_usr(zone_height,_Zone_height);
	ask_usr(zone_height, 0).

zone_width(_Zone_width) :-
	curr_zone(_Zone_number),
	asserta(z_width(_Zone_number,_Zone_width)),
	uset(z_width,_Zone_number,_Zone_width).

load_zone_width(_Zone_number) :-
	z_width(_Zone_number,_Zone_width),
	ask_usr(zone_width,_Zone_width);
	ask_usr(zone_width, 0).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%  REG  %%%%%%%%%%%%%%%%

ceiling_height(_Ceiling_height) :-
	curr_zone(_Zone_number),
	asserta(z_ceiling_ht(_Zone_number,_Ceiling_height)),
	uset(z_ceiling_ht,_Zone_number,_Ceiling_height).

load_ceiling_ht(_Zone_number) :-
	z_ceiling_ht(_Zone_number,_Ceiling_height),
	ask_usr(ceiling_height,_Ceiling_height);
	ask_usr(ceiling_height, 0).


number_walls(_Number_walls) :-
	curr_zone(_Zone_number),
	asserta(z_number_walls(_Zone_number,_Number_walls)),
	uset(z_number_walls,_Zone_number,_Number_walls).

load_nu_walls(_Zone_number) :-
	z_number_walls(_Zone_number,_Number_walls),
	ask_usr(number_walls,_Number_walls);
	ask_usr(number_walls, 0).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%  GEN  %%%%%%%%%%%%%%%%

number_vertex(_Number_vertex) :-
	curr_zone(_Zone_number),
	asserta(z_number_vertex(_Zone_number,_Number_vertex)),
	uset(z_number_vertex,_Zone_number,_Number_vertex).

load_nu_vertex(_Zone_number) :-
	z_number_vertex(_Zone_number,_Number_vertex),
	ask_usr(number_vertex,_Number_vertex);
	ask_usr(number_vertex, 0).


number_surfaces(_Number_surfaces) :-
	curr_zone(_Zone_number),
	asserta(z_number_surfaces(_Zone_number,_Number_surfaces)),
	uset(z_number_surfaces,_Zone_number,_Number_surfaces).

load_nu_surfaces(_Zone_number) :-
	z_number_surfaces(_Zone_number,_Number_surfaces),
	ask_usr(number_surfaces,_Number_surfaces);
	ask_usr(number_surfaces, 0).


view_geom(on) :-		
	to_bb(new_client, bm, ife_bh, geometry_esp),
	tell_usr(view_geom,off).

