Ejemplo n.º 1
0
Archivo: dos.c Proyecto: prophile/dim3
void redraw_windows(void)
{
        // center
        
	select_clear();
	main_wind_center_position_in_map();

        // some defaults
        
	magnify_factor=magnify_factor_default;
	main_wind_set_view(vw_3_panel);
	main_wind_set_perspective(ps_perspective);
	
		// redraw
	
    main_wind_tool_default();
	
	menu_fix_enable();
	main_wind_tool_fix_enable();
	
    SelectWindow(mainwind);
    
	main_wind_draw();
	texture_palette_reset();
}
Ejemplo n.º 2
0
void piece_tesselate(bool mesh)
{
	int				n,sel_count,type,mesh_idx,poly_idx;
	
	map_undo_push();
	
	sel_count=select_count();
	
	for (n=0;n!=sel_count;n++) {
		select_get(n,&type,&mesh_idx,&poly_idx);
		if (type==item_map_mesh) {
			if (mesh) {
				map_mesh_tesselate(&map,mesh_idx);
			}
			else {
				map_mesh_poly_tesselate(&map,mesh_idx,poly_idx);
			}
			view_vbo_mesh_rebuild(mesh_idx);
		}
	}

	select_clear();
	
	main_wind_draw();
}
Ejemplo n.º 3
0
void piece_poly_hole(void)
{
	int				n,sel_count,type,mesh_idx,poly_idx;
	
	sel_count=select_count();
	
	for (n=0;n!=sel_count;n++) {
		select_get(n,&type,&mesh_idx,&poly_idx);
		if (type==item_map_mesh) {
			map_mesh_poly_punch_hole(&map,mesh_idx,poly_idx,NULL,FALSE,normal_mode_in);
			view_vbo_mesh_rebuild(mesh_idx);
		}
	}
	
	select_clear();
	
	main_wind_draw();
}
Ejemplo n.º 4
0
gboolean mouse_xy_movement(GtkWidget *widget, GdkEventMotion *event)
{
	// caught a mouse movement event
	double coordx, coordy;
	gchar *buffer;
	int excode;
	select_t *new_select = select_create();
	select_t *select_added = select_create();
	select_t *select_omitted = select_create();

	if (!fldstate.mouse_selection)
		fldstate.mouse_selection = select_create();
	coordx = event->x;
	coordy = event->y;
	pixel_to_field(&coordx, &coordy);
	if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK)
	{
		coordx = round(coordx);
		coordy = round(coordy);
	}
	if (fldstate.mouse_clicked == 0x1 && mouse_currentMode == SELECTONE)
	{
		// click drag
		// get what's currently in selection rectangle
		new_select = field_select_in_rectangle(new_select, fldstate.mouse_clickx, fldstate.mouse_clicky,
				coordx, coordy, false);
		// then find what's been added, what's gone
		select_add_multiple(select_added, new_select);
		select_add_multiple(select_omitted, fldstate.mouse_selection);
		select_remove_multiple(select_added, fldstate.mouse_selection);
		select_remove_multiple(select_omitted, new_select);

		// Store new set
		select_clear(fldstate.mouse_selection);
		select_add_multiple(fldstate.mouse_selection, new_select);
		select_update_center(fldstate.mouse_selection);

		// add new dots
		if (event->state == (GDK_BUTTON_PRESS_MASK | GDK_CONTROL_MASK))
		{
			//select_push_all(&pstate.select, &select_added, true);
			//select_add_multiple(&pstate.select, &select_omitted, true);
			select_toggle_multiple(pstate.select, select_added);
			select_toggle_multiple(pstate.select, select_omitted);
		}
		else if (event->state == GDK_BUTTON_PRESS_MASK)
		{
			// normal or shift-clicked
			//select_push_all(&pstate.select, &select_added, false);
			//pstate.select = select_drop_multiple(pstate.select, select_omitted);
			select_add_multiple(pstate.select, select_added);
			// drop ommitted dots
			select_remove_multiple(pstate.select, select_omitted);
		}
	}
	else
		fldstate.mouse_selection = NULL;
	fldstate.mousex = coordx;
	fldstate.mousey = coordy;
	// store mouse event
	excode = fieldrel_convert_xy_to_relation(&coordx, &coordy, &buffer);
	select_added = select_destroy(select_added);
	select_omitted = select_destroy(select_omitted);
	new_select = select_destroy(new_select);
	if (excode == -1)
		return FALSE;


	gtk_statusbar_pop(GTK_STATUSBAR(statusbar), GPOINTER_TO_INT(context_id));
	gtk_statusbar_push(GTK_STATUSBAR(statusbar), GPOINTER_TO_INT(context_id), buffer);
	g_free(buffer);
	dr_canvas_refresh(drill);

	return TRUE;
}
Ejemplo n.º 5
0
gboolean mouse_clicked(GtkWidget *widget, GdkEventButton *event)
{
	// Handle click event on canvas
	
	int index;
	double coordx, coordy;
	select_t *select = NULL;
	// Length from click location to nearest dot


	mouse_discarded = 0;
	if (event->button == 8)
	{
		// back button
		if (event->state == GDK_SHIFT_MASK)
			set_prev_count();
		else if (event->state == GDK_CONTROL_MASK)
			set_first();
		else
			set_prev();
		fldstate.mouse_clicked = 0x0;
	}
	else if (event->button == 9)
	{
		// forward button
		if (event->state == GDK_SHIFT_MASK)
			set_next_count();
		else if (event->state == GDK_CONTROL_MASK)
			set_last();
		else
			set_next();
		fldstate.mouse_clicked = 0x0;
	}
	else if (event->button == 1)
	{
		fldstate.mouse_clicked = 0x1;
		mouse_clickx = event->x;
		mouse_clicky = event->y;
		pixel_to_field(&mouse_clickx, &mouse_clicky);
		fldstate.mouse_clickx = mouse_clickx;
		fldstate.mouse_clicky = mouse_clicky;
		switch(mouse_currentMode)
		{
			case SELECTONE:
				// select 1 performer
				select = field_get_in_area(mouse_clickx, mouse_clicky);
				if (event->state == GDK_CONTROL_MASK)
				{
					// ctrl-click
					select_toggle_multiple(pstate.select, select);
				}
				else if ((event->state & ~GDK_SHIFT_MASK)== 0)
				{
					// regular click
					if (select_empty(select))
					{
						//select_dots_discard();
						select_clear(pstate.select);
						mouse_discarded = 1;
						break;
					}
					index = select_get_form(select);
					if (!select_form_empty(select) && !select_check_form(pstate.select, index))
					{
						// select form with ability to scale form
						select_clear(pstate.select);
						mouse_discarded = 1;
						select_add_form(pstate.select, select_get_form(select));
						select_update_center(pstate.select);
					}
					else if (select_form_empty(select) && isSelected(select_get_dot(select)) != 1) 
					{
						// dot is not selected
						select_clear(pstate.select);
						mouse_discarded = 1;
						if ((index = select_get_dot(select))!= -1)
						{
							select_add_dot(pstate.select, index);
						}
					}
					else
					{
						// hold click; dots being moved
						fldstate.mouse_clicked |= 0x2;
					}
				}
				dr_canvas_refresh(drill);
				break;
			case ADDPERF:
				// Add performers by clicking on canvas
				coordx = event->x;
				coordy = event->y;
				pixel_to_field(&coordx, &coordy);
				index = perf_add();
				//coords_set_coord(pshow, index, coordx, coordy);
				coords_set(pshow->sets->currset->coords[index], coordx, coordy);
				dr_canvas_refresh(drill);
				break;
			case ADDFORM:
				break;
		}
	}
	else
		fldstate.mouse_clicked = 0;
	return TRUE;
}
Ejemplo n.º 6
0
OSStatus tool_wind_event_callback(EventHandlerCallRef eventhandler,EventRef event,void *userdata)
{
	int				i,k;
	ControlRef		ctrl;

	GetEventParameter(event,kEventParamDirectObject,typeControlRef,NULL,sizeof(ControlRef),NULL,&ctrl);
	
		// group combo
		
	if (ctrl==group_combo) {
		k=GetControl32BitValue(ctrl);
		
			// no group
			
		if (k==1) {
			group_set(-1);
			return(noErr);
		}
		
			// set a group
			
		group_set(k-3);
		return(noErr);
	}
		
		// buttons
		
	k=-1;
	for ((i=0);(i!=maxtool);i++) {
		if (ctrl==tool_ctrl[i]) {
			k=i;
			break;
		}
	}
	
	if (k!=-1) undo_clear();
	
	switch (k) {
		case 0:
			vertex_mode=vm_none;
            SetControlValue(tool_ctrl[0],1);
            SetControlValue(tool_ctrl[1],0);
            SetControlValue(tool_ctrl[2],0);
			break;
		case 1:
			vertex_mode=vm_lock;
            SetControlValue(tool_ctrl[0],0);
            SetControlValue(tool_ctrl[1],1);
            SetControlValue(tool_ctrl[2],0);
			break;
		case 2:
			vertex_mode=vm_snap;
            SetControlValue(tool_ctrl[0],0);
            SetControlValue(tool_ctrl[1],0);
            SetControlValue(tool_ctrl[2],1);
			break;
		case 3:
			dp_primitive=!dp_primitive;
			break;
		case 4:
			dp_auto_texture=!dp_auto_texture;
			break;
		case 5:
			SetControlValue(tool_ctrl[k],0);			// pop back up
			main_wind_rotate_view();
			main_wind_draw();
			break;
		case 6:
            select_clear();
			dp_wall=!dp_wall;
			break;
		case 7:
            select_clear();
			dp_floor=!dp_floor;
			break;
		case 8:
            select_clear();
			dp_ceiling=!dp_ceiling;
			break;
		case 9:
            select_clear();
			dp_liquid=!dp_liquid;
			break;
		case 10:
            select_clear();
			dp_ambient=!dp_ambient;
			break;
		case 11:
            select_clear();
			dp_object=!dp_object;
			break;
		case 12:
            select_clear();
			dp_lightsoundparticle=!dp_lightsoundparticle;
			break;
		case 13:
            select_clear();
            dp_node=!dp_node;
			break;
		case 14:
			dp_textured=!dp_textured;
			break;
		case 15:
            dp_y_hide=!dp_y_hide;
			break;
		case 16:
			SetControlValue(tool_ctrl[k],0);			// pop back up
			segment_sub_point();
			break;
		case 17:
			SetControlValue(tool_ctrl[k],0);			// pop back up
			segment_add_point();
			break;
		case 18:
			SetControlValue(tool_ctrl[k],0);			// pop back up
			segment_tesselate();
			break;
		case 19:
			SetControlValue(tool_ctrl[k],0);			// pop back up
			launch_map_script_editor();
			break;
		case 20:
			SetControlValue(tool_ctrl[k],0);			// pop back up
			launch_engine();
			break;
			
	}
    
    menu_fix_enable();
    
    main_wind_draw();
			
	return(noErr);
}
Ejemplo n.º 7
0
void node_link_select(int node_idx)
{
	select_clear();
	
	select_add(item_map_node,node_idx,-1);
}
Ejemplo n.º 8
0
void piece_delete(void)
{
	int				n,i,k,nsel_count,
					type,main_idx,sub_idx;
	unsigned char	*mesh_mask;
	
	map_undo_push();
	
		// sort segment so higher indexes are deleted first
		
	select_sort();
	
		// selections have multiple polygons in them
		// so keep a mesh list
	
	mesh_mask=(unsigned char*)malloc(map.mesh.nmesh);
	if (mesh_mask==NULL) return;
	
	bzero(mesh_mask,map.mesh.nmesh);
	
		// delete selection
	
	nsel_count=select_count();
	
	for (n=0;n!=nsel_count;n++) {
		select_get(n,&type,&main_idx,&sub_idx);
	
		switch (type) {
			
			case item_map_mesh:
				if (state.map.select_mode==select_mode_polygon) {
					map_mesh_delete_poly(&map,main_idx,sub_idx);
					select_delete_move_index(item_map_mesh,main_idx,sub_idx);
					break;
				}
				if (state.map.select_mode==select_mode_mesh) {
					if (mesh_mask[main_idx]==0x0) map_mesh_delete(&map,main_idx);
					mesh_mask[main_idx]=0x1;
					break;
				}
				break;
				
			case item_map_liquid:
				map_liquid_delete(&map,main_idx);
				break;
				
			case item_map_spot:
				for (i=main_idx;i<map.nspot;i++) {
					map.spots[i]=map.spots[i+1];
				}
				map.nspot--;
				break;
				
			case item_map_scenery:
				for (i=main_idx;i<map.nscenery;i++) {
					map.sceneries[i]=map.sceneries[i+1];
				}
				map.nscenery--;
				break;
				
			case item_map_node:
				for (i=0;i!=map.nnode;i++) {			// clear all linkage
					if (i==main_idx) continue;

					for (k=0;k!=max_node_link;k++) {
						if (map.nodes[i].link[k]==main_idx) map.nodes[i].link[k]=-1;
						if (map.nodes[i].link[k]>main_idx) map.nodes[i].link[k]--;
					}
				}

				for (i=main_idx;i<map.nnode;i++) {
					map.nodes[i]=map.nodes[i+1];
				}
				
				map.nnode--;
				break;
				
			case item_map_light:
				for (i=main_idx;i<map.nlight;i++) {
					map.lights[i]=map.lights[i+1];
				}
				map.nlight--;
				break;
				
			case item_map_sound:
				for (i=main_idx;i<map.nsound;i++) {
					map.sounds[i]=map.sounds[i+1];
				}
				map.nsound--;
				break;
				
			case item_map_particle:
				for (i=main_idx;i<map.nparticle;i++) {
					map.particles[i]=map.particles[i+1];
				}
				map.nparticle--;
				break;
				
		}
	}
	
	free(mesh_mask);
	
	select_clear();
	
	map_palette_reset();
    
	main_wind_draw();
}