+
+
+void DoPatchThickenDlg(){
+ ModalDialog dialog;
+ GtkWidget* thicknessW;
+ GtkWidget* seamsW;
+ GtkWidget* radX;
+ GtkWidget* radY;
+ GtkWidget* radZ;
+ GtkWidget* radNormals;
+
+ ui::Window window = create_dialog_window( MainFrame_getWindow(), "Patch thicken", G_CALLBACK( dialog_delete_callback ), &dialog );
+
+ GtkAccelGroup* accel = gtk_accel_group_new();
+ gtk_window_add_accel_group( window, accel );
+
+ {
+ auto hbox = create_dialog_hbox( 4, 4 );
+ gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( hbox ) );
+ {
+ auto table = create_dialog_table( 2, 4, 4, 4 );
+ gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( table ), TRUE, TRUE, 0 );
+ {
+ GtkLabel* label = GTK_LABEL( gtk_label_new( "Thickness:" ) );
+ gtk_widget_show( GTK_WIDGET( label ) );
+ gtk_table_attach( table, GTK_WIDGET( label ), 0, 1, 0, 1,
+ (GtkAttachOptions) ( GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+ gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
+ }
+ {
+ GtkWidget* entry = gtk_entry_new();
+ gtk_entry_set_text( GTK_ENTRY( entry ), "16" );
+ gtk_widget_set_size_request( entry, 40, -1 );
+ gtk_widget_show( entry );
+ gtk_table_attach( table, entry, 1, 2, 0, 1,
+ (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+
+ thicknessW = entry;
+ }
+ {
+ // Create the "create seams" label
+ GtkWidget* _seamsCheckBox = gtk_check_button_new_with_label( "Side walls" );
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( _seamsCheckBox ), TRUE );
+ gtk_widget_show( _seamsCheckBox );
+ gtk_table_attach( table, _seamsCheckBox, 3, 4, 0, 1,
+ (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+ seamsW = _seamsCheckBox;
+
+ }
+ {
+ // Create the radio button group for choosing the extrude axis
+ GtkWidget* _radNormals = gtk_radio_button_new_with_label( NULL, "Normal" );
+ GtkWidget* _radX = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON(_radNormals), "X" );
+ GtkWidget* _radY = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON(_radNormals), "Y" );
+ GtkWidget* _radZ = gtk_radio_button_new_with_label_from_widget( GTK_RADIO_BUTTON(_radNormals), "Z" );
+ gtk_widget_show( _radNormals );
+ gtk_widget_show( _radX );
+ gtk_widget_show( _radY );
+ gtk_widget_show( _radZ );
+
+
+ // Pack the buttons into the table
+ gtk_table_attach( table, _radNormals, 0, 1, 1, 2,
+ (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+ gtk_table_attach( table, _radX, 1, 2, 1, 2,
+ (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+ gtk_table_attach( table, _radY, 2, 3, 1, 2,
+ (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+ gtk_table_attach( table, _radZ, 3, 4, 1, 2,
+ (GtkAttachOptions) ( GTK_EXPAND | GTK_FILL ),
+ (GtkAttachOptions) ( 0 ), 0, 0 );
+ radX = _radX;
+ radY = _radY;
+ radZ = _radZ;
+ radNormals = _radNormals;
+ }
+ }
+ {
+ auto vbox = create_dialog_vbox( 4 );
+ hbox.pack_start( vbox, FALSE, FALSE, 0 );
+ {
+ auto button = create_dialog_button( "OK", G_CALLBACK( dialog_button_ok ), &dialog );
+ vbox.pack_start( button, FALSE, FALSE, 0 );
+ widget_make_default( button );
+ gtk_widget_grab_focus( button );
+ gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Return, (GdkModifierType)0, (GtkAccelFlags)0 );
+ }
+ {
+ auto button = create_dialog_button( "Cancel", G_CALLBACK( dialog_button_cancel ), &dialog );
+ vbox.pack_start( button, FALSE, FALSE, 0 );
+ gtk_widget_add_accelerator( button , "clicked", accel, GDK_KEY_Escape, (GdkModifierType)0, (GtkAccelFlags)0 );
+ }
+ }
+ }
+
+ if ( modal_dialog_show( window, dialog ) == eIDOK ) {
+ int axis;
+ bool seams;
+ float thickness = static_cast<float>( atoi( gtk_entry_get_text( GTK_ENTRY( thicknessW ) ) ) );
+ seams = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( seamsW )) ? true : false;
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radX))) {
+ axis = 0;
+ }
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radY))) {
+ axis = 1;
+ }
+ else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radZ))) {
+ axis = 2;
+ }
+ else {
+ // Extrude along normals
+ axis = 3;
+ }
+ Scene_PatchThicken( GlobalSceneGraph(), thickness, seams, axis );
+ }
+
+ gtk_widget_destroy( GTK_WIDGET( window ) );
+}